@hailin-zheng/editor-core 1.0.51 → 1.0.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js CHANGED
@@ -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
  }
@@ -1068,7 +1068,8 @@ class Element {
1068
1068
  beginMeasure() {
1069
1069
  this.paintRenders.length = 0;
1070
1070
  }
1071
- endMeasure() { }
1071
+ endMeasure() {
1072
+ }
1072
1073
  getIndex() {
1073
1074
  if (this.parent) {
1074
1075
  return this.parent.getChildIndex(this);
@@ -1522,6 +1523,8 @@ class ViewOptions {
1522
1523
  //留痕区域的生效时间段,同一用户的留痕块在此时间外需要生成新的留痕块
1523
1524
  trackChangePeriod = 10;
1524
1525
  onChange = new Subject();
1526
+ //打印模式,普通模式,续打模式
1527
+ printMode = 'normal';
1525
1528
  constructor() {
1526
1529
  }
1527
1530
  }
@@ -2896,13 +2899,25 @@ class DocumentRenderObject extends BlockContainerRenderObject {
2896
2899
  render.overlaysContext.fillRect(position.x, position.y, docWidth, this.rect.height, 'white', 5, 'black');
2897
2900
  e.render.tran(() => {
2898
2901
  e.render.contentContext.ctx.fillStyle = e.docCtx.viewOptions.defaultColor;
2902
+ this.checkPrintMode(e);
2899
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);
2900
2909
  });
2901
- this.drawCopyRight(viewOptions, render, position);
2902
- this.drawDocPageNum(render, viewOptions, position);
2903
- //绘制文档边距线
2904
- this.drawMarginLine(position, render, docWidth, docHeight);
2905
- 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
+ }
2906
2921
  }
2907
2922
  /**
2908
2923
  * 绘制版权信息
@@ -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;
@@ -16849,4 +16868,4 @@ function removeDuplicatesEvent(events) {
16849
16868
  }
16850
16869
 
16851
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 };
16852
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1ldmVudC1kZWZpbmUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL25vdGlmeS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvcmVuZGVyLWRlZmluZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvY29tbW9uLXV0aWwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtdHJhY2UtdHJhY2tpbmcudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2V2ZW50LXN1YmplY3QudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtZGVmaW5lLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXByb3BzLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2NvbW1lbnRzL2NvbW1lbnRzLWNvbnRhaW5lci1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWRlY29yYXRlLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1iYXNlLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZG9jdW1lbnQvZG9jLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kb2N1bWVudC9kb2MtZm9vdGVyLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZG9jdW1lbnQvZG9jLWhlYWRlci1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3BhcmFncmFwaC9wLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvc3ltYm9sL3Atc3ltYm9sLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvdGFibGUvdGFibGUtY2VsbC1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLXJvdy1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLXV0aWwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvdGFibGUvdGFibGUtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC90ZXh0L3RleHQtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1zZXJpYWxpemUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvdGV4dC90cmFjay1ydW4taW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC11dGlsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RvY3VtZW50L2RvYy1jb250YWluZXItaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtc2VsZWN0aW9uLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2NoZWNrYm94L2NoZWNrYm94LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvY29tbWVudHMvY29tbWVudC1jb250ZW50LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvY29tbWVudHMvY29tbWVudHMtdXRpbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9jb21tZW50cy9jb21tZW50LWVsZW1lbnQtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9jb21tZW50cy92YWxpZGF0ZS1tc2ctaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWJhcmNvZGUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1jaGVjay1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtZGF0ZS1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RhdGEtZWxlbWVudC9kYXRhLWVsZW1lbnQtZ3JvdXAtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWltYWdlLWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1saXN0LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC10ZXh0LWltcGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvZGVjb3JhdGUvZmlsbC1udWxsLXNwYWNlLWltcGxlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LXBhcnQtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9tZWRpYS1mb3JtdWxhL21lbnN0cnVhbC1oaXN0b3J5LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3BpY3R1cmUvaW1hZ2UtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC9yYWRpby9yYWRpby1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3N5bWJvbC9ici1zeW1ib2wtaW1wbC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvaW1wbC90YWJsZS90YWJsZS1zcGxpdC1jZWxsLXBhdGNoLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9pbXBsL3RhYmxlL3RhYmxlLXNwbGl0LWNlbGwudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZG9jLXJ1bGVyLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9yZW5kZXItY29udGV4dC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtdGV4dGxpbmUtbW9kZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZWxlbWVudC1tZWFzdXJlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9yYW5nZS11dGlsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXBhaW50LnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXJlbmRlci1jdXQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL3NlbGVjdGlvbi1vdmVybGF5cy50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtcGFpbnQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2ltcGwvcGFyYWdyYXBoL3AtbGluZS1pbXBsLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXJlYWRlci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtZXZlbnQudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWlucHV0LWN1cnNvci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtY2hhbmdlLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1wcmludC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtdGVtcGxhdGUudHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2RvY3VtZW50LWV2YWwtZnVuYy50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtaW1hZ2VzLWxvYWRlci50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtY29udGV4dC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtY29tbWVudC50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci9mcmFtZXdvcmsvZG9jdW1lbnQtc2VnbWVudGVyLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9lbGVtZW50LXRyYWNlLW1hbmFnZS50cyIsIi4uL3NyYy9zcmMvbWVkX2VkaXRvci90ZXh0ZWRpdG9yLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1jb21iaW5lLnRzIiwiLi4vc3JjL3NyYy9tZWRfZWRpdG9yL2ZyYW1ld29yay9kb2N1bWVudC1wcmludC1vZmZzY3JlZW4udHMiLCIuLi9zcmMvc3JjL21lZF9lZGl0b3IvZnJhbWV3b3JrL2VsZW1lbnQtdHlwZS1oYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnQsIExlYWZFbGVtZW50LCBSZWN0IH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gXCJuYW5vaWRcIjtcbmltcG9ydCB7IExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBUcmFja1J1blR5cGVFbnVtIH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RyYWNrLXJ1bi1pbXBsXCI7XG5cbmV4cG9ydCB0eXBlIEV2ZW50U3RhZ2UgPSAnQWxsJyB8ICdDYXB0dXJlJyB8ICdCdWJibGluZyc7XG5leHBvcnQgdHlwZSBFdmVudFR5cGVzID0gJ0VsZW1lbnRNb3VzZWRvd24nIHwgJ0VsZW1lbnRNb3VzZW1vdmUnIHwgJ0VsZW1lbnRDbGljaycgfCAnRWxlbWVudERibENsaWNrJyB8ICdFbGVtZW50TW91c2VFbnRlcidcbiAgICB8ICdFbGVtZW50TW91c2VMZWF2ZScgfCAnQmFja3NwYWNlS2V5JyB8ICdEZWxldGVLZXknIHwgJ0VsZW1lbnRTaG93bicgfCAnRWxlbWVudENvbnRleHRNZW51JyB8ICdHb3RDdXJzb3InIHwgJ0xvc3RDdXJzb3InIHwgJ0VsZW1lbnRLZXlEb3duJyB8ICdFbGVtZW50RHJvcCcgfFxuICAgICdFbGVtZW50VGFiS2V5JyB8ICdHZXRUcmFja1RpcHMnO1xuXG5leHBvcnQgdHlwZSBIaXRSZWdpb24gPSAnaGVhZGVyJyB8ICdib2R5JyB8ICdmb290ZXInIHwgJ3Jldmlldyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGl0RXZlbnRJbmZvIHtcbiAgICByZWxhdGl2ZVJlY3Q6IFJlY3QsXG4gICAgYWJzb2x1dGVSZWN0OiBSZWN0LFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCxcbiAgICBlbGVtZW50OiBMZWFmRWxlbWVudCxcbiAgICBzaGFkb3dSZW5kZXJJbmRleDogbnVtYmVyLFxuICAgIGhpdERvY0luZGV4OiBudW1iZXIsXG4gICAgc3RhcnRSZWdpb24/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+f5qGG5L2TXG4gICAgKiBAcGFyYW0gcmVuZGVyIFxuICAgICogQHJldHVybnMgXG4gICAgKi9cbiAgICBnZXRJbm5lclJlY3QoKTogUmVjdCB7XG4gICAgICAgIGNvbnN0IHsgcGFkZGluZyB9ID0gdGhpcztcbiAgICAgICAgY29uc3QgcmVjdCA9IG5ldyBSZWN0KCk7XG4gICAgICAgIHJlY3QueCA9IHBhZGRpbmcubGVmdDtcbiAgICAgICAgcmVjdC55ID0gcGFkZGluZy50b3A7XG4gICAgICAgIHJlY3QubWF4V2lkdGggPSB0aGlzLnJlY3QubWF4V2lkdGggLSBwYWRkaW5nLmxlZnQgLSBwYWRkaW5nLnJpZ2h0O1xuICAgICAgICBpZiAodGhpcy5yZWN0Lm1heEhlaWdodCkge1xuICAgICAgICAgICAgcmVjdC5tYXhIZWlnaHQgPSB0aGlzLnJlY3QubWF4SGVpZ2h0IC0gcGFkZGluZy50b3AgLSBwYWRkaW5nLmJvdHRvbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVjdDtcbiAgICB9XG5cbiAgICBnZXRJbm5lck1heFdpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy5yZWN0Lm1heFdpZHRoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMucmVjdC5tYXhXaWR0aCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHBhZGRpbmcsIG1hcmdpbiB9ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHRoaXMucmVjdC5tYXhXaWR0aCAtIHBhZGRpbmcubGVmdCAtIHBhZGRpbmcucmlnaHQgLSBtYXJnaW4ubGVmdCAtIG1hcmdpbi5yaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7lhoXmoYblhoXlrrnpq5jluqbvvIzmm7TmlrDlpJbmoYbmoYbkvZPpq5jluqZcbiAgICAgKiBAcGFyYW0gaW5uZXJSZWN0XG4gICAgICovXG4gICAgdXBkYXRlUmVuZGVySGVpZ2h0KGlubmVyUmVjdDogUmVjdCB8IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBpbm5lckhlaWdodCA9IHR5cGVvZiBpbm5lclJlY3QgPT09ICdudW1iZXInID8gaW5uZXJSZWN0IDogKDxSZWN0PmlubmVyUmVjdCkuaGVpZ2h0O1xuICAgICAgICBjb25zdCB7IHBhZGRpbmcsIG1hcmdpbiB9ID0gdGhpcztcbiAgICAgICAgLy/lpJblsYLlrrnlmajpq5jluqbnrYnkuo7lhoXlrrnpq5jluqYr5aSW6L656LedK+WGhei+uei3nVxuICAgICAgICB0aGlzLnJlY3QuaGVpZ2h0ID0gaW5uZXJIZWlnaHQgKyBwYWRkaW5nLnRvcCArIHBhZGRpbmcuYm90dG9tO1xuICAgIH1cblxuICAgIGdldEluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldENoaWxkSW5kZXgodGhpcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhYnN0cmFjdCByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkO1xufVxuXG4vKipcbiAqIOWPtuWtkOiKgueCuea4suafk+WFg+e0oFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGVhZlJlbmRlck9iamVjdDxUIGV4dGVuZHMgRWxlbWVudCA9IEVsZW1lbnQ+IGV4dGVuZHMgUmVuZGVyT2JqZWN0PFQ+IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBUIHwgbnVsbCkge1xuICAgICAgICBzdXBlcihlbGVtZW50IGFzIFQpO1xuICAgIH1cbn1cblxuLyoqXG4gKiDmnp3lubLoioLngrnmuLLmn5PlhYPntKBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJyYW5jaFJlbmRlck9iamVjdDxUIGV4dGVuZHMgRWxlbWVudCA9IEVsZW1lbnQ+IGV4dGVuZHMgUmVuZGVyT2JqZWN0PFQ+IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBUIHwgbnVsbCkge1xuICAgICAgICBzdXBlcihlbGVtZW50IGFzIFQpO1xuICAgIH1cbiAgICBwcml2YXRlIGNoaWxyZW46IEFycmF5PFJlbmRlck9iamVjdD4gPSBbXTtcbiAgICBnZXRJdGVtcygpOiBBcnJheTxSZW5kZXJPYmplY3Q+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbHJlbjtcbiAgICB9XG5cbiAgICBhZGRDaGlsZCguLi5pdGVtczogQXJyYXk8UmVuZGVyT2JqZWN0Pik6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICBpdGVtLnBhcmVudCA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmNoaWxyZW4ucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluc2VydENoaWxkKGl0ZW06IFJlbmRlck9iamVjdCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmNoaWxyZW4uc3BsaWNlKGluZGV4LCAwLCBpdGVtKTtcbiAgICAgICAgaXRlbS5wYXJlbnQgPSB0aGlzO1xuICAgIH1cblxuICAgIHJlbW92ZUNoaWxkKGNoaWxkOiBSZW5kZXJPYmplY3QpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoaWxyZW4uaW5kZXhPZihjaGlsZCk7XG4gICAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5Li65p+l5om+5Yiw5b2T5YmN5YWD57SgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkLnBhcmVudCA9PT0gdGhpcykge1xuICAgICAgICAgICAgLy9jaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hpbHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHJlbW92ZUNoaWxkQnlJbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5jaGlscmVuW2luZGV4XTtcbiAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIC8vY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5Li65p+l5om+5Yiw5b2T5YmN5YWD57SgJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbLi4udGhpcy5jaGlscmVuXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkQnlJbmRleChpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuLmxlbmd0aDtcbiAgICB9XG5cblxuICAgIGdldENoaWxkPFQgZXh0ZW5kcyBSZW5kZXJPYmplY3QgPSBSZW5kZXJPYmplY3Q+KGluZGV4OiBudW1iZXIpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbHJlbltpbmRleF0gYXMgVDtcbiAgICB9XG5cbiAgICBnZXRDaGlsZEluZGV4KGNoaWxkOiBSZW5kZXJPYmplY3QpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlscmVuLmluZGV4T2YoY2hpbGQpO1xuICAgIH1cblxuXG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGhpcy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGNoaWxkLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIC8vdGhpcy5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlscmVuLmxlbmd0aCA9IDA7XG4gICAgICAgIC8vdGhpcy5jaGlscmVuID0gbnVsbDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlbmRlckRhdGEge1xuICAgIHJlbmRlcjogUmVuZGVyQ29udGV4dFR5cGUsXG4gICAgcG9zaXRpb246IFBvc2l0aW9uLFxuICAgIGRvY0N0eDogRWRpdG9yQ29udGV4dCxcbiAgICBuZXh0UmVuZGVyOiAoKSA9PiB2b2lkXG59XG4vKipcbiAqIOWdl+e6p+a4suafk+WFg+e0oFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0PFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4gZXh0ZW5kcyBCcmFuY2hSZW5kZXJPYmplY3Q8VD4ge1xuICAgIHNldFJlbmRlcldpZHRoKG1heFdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWN0Lm1heFdpZHRoID0gbWF4V2lkdGg7XG4gICAgICAgIHRoaXMucmVjdC53aWR0aCA9IG1heFdpZHRoO1xuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElubGluZUdyb3VwUmVuZGVyT2JqZWN0PFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4gZXh0ZW5kcyBCcmFuY2hSZW5kZXJPYmplY3Q8VD4ge1xufVxuXG4vKipcbiAqIOWMheWQq+Wdl+e6p+a4suafk+WFg+e0oOeahOWuueWZqOWFg+e0oCzkvovlpoJib2R544CBdGFibGUtY2VsbOetiVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3Q8VCBleHRlbmRzIEVsZW1lbnQgPSBFbGVtZW50PiBleHRlbmRzIEJyYW5jaFJlbmRlck9iamVjdDxUPiB7XG4gICAgc2V0UmVuZGVyV2lkdGgobWF4V2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlY3QubWF4V2lkdGggPSBtYXhXaWR0aDtcbiAgICAgICAgdGhpcy5yZWN0LndpZHRoID0gbWF4V2lkdGg7XG4gICAgfVxufVxuXG4vKipcbiAqIOWkmue6pyDigJhCbG9ja0xpbmVSZWN0UmVuZGVyT2JqZWN04oCZIOWMheijueWFg+e0oO+8jOS+i+WmgiBw44CBdGFibGVcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0PFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4gZXh0ZW5kcyBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3Q8VD4geyB9XG5cbi8qKlxuICog5a655ZmoLeWtkOWGheWuueS4uuWkmuS4quihjOWGheWdl+e6p+WFg+e0oO+8jOS+i+WmgnRhYmxlLXJvd1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW5saW5lQmxvY2tDb250YWluZXIgZXh0ZW5kcyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCB7IH1cblxuLyoqXG4gKiDmnI3liqHkuo50YWJsZS1jZWxsXG4gKiDlj6/ooqvlpJrnuqfmi4bliIbnmoTlhYPntKBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElubGluZU11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0IGV4dGVuZHMgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QgeyB9XG5cbi8qKlxuICog5pyA5bCP5LiN5Y+v5YiG5Ymy5Y2V5L2N55qE5Z2X57qn6KGM5qGG77yM5L6L5aaCIHAtbGluZVxuICog5LiA6KGM5LiN5Y+v5a2Y5Zyo5LqO5Lik5Liq6aG16Z2i5LitLOWdl+e6p+ihjOahhuS4jeiDveWIhuW4g+WcqOS4pOS4qumhtemdouS4rVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmxvY2tMaW5lUmVjdFJlbmRlck9iamVjdCBleHRlbmRzIEJsb2NrQ29udGVudFJlbmRlck9iamVjdCB7IH1cblxuXG5leHBvcnQgdHlwZSBCb3JkZXJUeXBlID0gJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdC1taWRkbGUnIHwgJ3JpZ2h0LW1pZGRsZScgfCAndG9wLW1pZGRsZScgfCAnYm90dG9tLW1pZGRsZScgfCAnbm9uZScgfCAnbGVmdC10b3AnIHwgJ2xlZnQtYm90dG9tJyB8ICdyaWdodC10b3AnIHwgJ3JpZ2h0LWJvdHRvbSc7XG5leHBvcnQgdHlwZSBDdXJzb3JUeXBlID0gJ3RleHQnIHwgJ3Jvdy1yZXNpemUnIHwgJ2NvbC1yZXNpemUnIHwgJ25vbmUnIHwgJ2RlZmF1bHQnIHwgJ21vdmUnIHwgJ3BvaW50ZXInIHwgJ3ctcmVzaXplJyB8ICdzLXJlc2l6ZScgfCAnc2UtcmVzaXplJyB8ICduZS1yZXNpemUnO1xuZXhwb3J0IGVudW0gUmVuZGVyT2JqZWN0VHlwZSB7XG4gICAgQnJhbmNoID0gMCxcbiAgICBMZWFmID0gMVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNZWFzdXJlUmVuZGVyU3RydWN0PFQ+IHtcbiAgICByZWN0OiBSZWN0LFxuICAgIHJlbmRlcjogVFxufVxuIiwiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBSZWN0IH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEJvcmRlclR5cGUgfSBmcm9tIFwiLi9yZW5kZXItZGVmaW5lXCI7XG5pbnRlcmZhY2UgUG9zaXRpb24ge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tb25VdGlsIHtcblxuICAgIC8qKlxuICAgICAqIOWIpOaWreWdkOagh+aYr+WQpuWcqOefqeW9ouahhuWGhVxuICAgICAqIEBwYXJhbSByZWN0IFxuICAgICAqIEBwYXJhbSBwb3NpdGlvbiBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBzdGF0aWMgaXNJbnNpZGVSZWN0QnlQb3NpdGlvbihyZWN0OiBPbWl0PFJlY3QsICdtYXhXaWR0aCd8J21heEhlaWdodCc+LCBwb3NpdGlvbjogUG9zaXRpb24pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uLnggPj0gcmVjdC54XG4gICAgICAgICAgICAmJlxuICAgICAgICAgICAgcG9zaXRpb24ueCA8PSByZWN0LnggKyByZWN0LndpZHRoXG4gICAgICAgICAgICAmJlxuICAgICAgICAgICAgcG9zaXRpb24ueSA+PSByZWN0LnlcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi55IDw9IHJlY3QueSArIHJlY3QuaGVpZ2h0O1xuICAgIH1cblxuICAgIHN0YXRpYyBpc0luc2lkZVJlY3RCeVJlY3QocmVjdDogUmVjdCwgcG9zaXRpb246IFJlY3QpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uLnggPj0gcmVjdC54XG4gICAgICAgICAgICAmJlxuICAgICAgICAgICAgcG9zaXRpb24ueCA8PSByZWN0LnggKyByZWN0LndpZHRoXG4gICAgICAgICAgICAmJlxuICAgICAgICAgICAgcG9zaXRpb24ueSA+PSByZWN0LnlcbiAgICAgICAgICAgICYmXG4gICAgICAgICAgICBwb3NpdGlvbi55IDw9IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gICAgICAgICAgICAmJlxuICAgICAgICAgICAgcG9zaXRpb24ueSArIHBvc2l0aW9uLmhlaWdodCA8PSByZWN0LnkgKyByZWN0LmhlaWdodFxuICAgICAgICAgICAgJiZcbiAgICAgICAgICAgIHBvc2l0aW9uLnggKyBwb3NpdGlvbi53aWR0aCA8PSByZWN0LnggKyByZWN0LndpZHRoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreWdkOagh+aYr+WQpuWcqOefqeW9oueahOi+ueahhuS4ilxuICAgICAqIEBwYXJhbSByZWN0IFxuICAgICAqIEBwYXJhbSBib3JkZXJXaWR0aCBcbiAgICAgKiBAcGFyYW0gcG9zaXRpb24gXG4gICAgICovXG4gICAgc3RhdGljIGlzSW5SZWN0Qm9yZGVyKHJlY3Q6IFJlY3QsIGJvcmRlcldpZHRoOiBudW1iZXIsIHBvc2l0aW9uOiBQb3NpdGlvbik6IHsgYm9yZGVyVHlwZTogQm9yZGVyVHlwZSB9IHtcbiAgICAgICAgY29uc3QgbGVmdEJvcmRlclJlY3Q6IFJlY3QgPSB7IHg6IDAsIHk6IDAsIHdpZHRoOiBib3JkZXJXaWR0aCwgaGVpZ2h0OiByZWN0LmhlaWdodCwgbWF4V2lkdGg6IDAsIG1heEhlaWdodDogMCB9O1xuICAgICAgICBjb25zdCByaWdodEJvcmRlclJlY3Q6IFJlY3QgPSB7IHg6IHJlY3Qud2lkdGggLSBib3JkZXJXaWR0aCwgeTogMCwgd2lkdGg6IGJvcmRlcldpZHRoLCBoZWlnaHQ6IHJlY3QuaGVpZ2h0LCBtYXhXaWR0aDogMCwgbWF4SGVpZ2h0OiAwIH07XG4gICAgICAgIGNvbnN0IHRvcEJvcmRlclJlY3Q6IFJlY3QgPSB7IHg6IDAsIHk6IDAsIHdpZHRoOiByZWN0LndpZHRoLCBoZWlnaHQ6IGJvcmRlcldpZHRoLCBtYXhXaWR0aDogMCwgbWF4SGVpZ2h0OiAwIH07XG4gICAgICAgIGNvbnN0IGJvdHRvbUJvcmRlclJlY3Q6IFJlY3QgPSB7IHg6IDAsIHk6IHJlY3QuaGVpZ2h0IC0gYm9yZGVyV2lkdGgsIHdpZHRoOiByZWN0LndpZHRoLCBoZWlnaHQ6IGJvcmRlcldpZHRoLCBtYXhXaWR0aDogMCwgbWF4SGVpZ2h0OiAwIH07XG4gICAgICAgIGxldCBib3JkZXJUeXBlOiBCb3JkZXJUeXBlID0gJ25vbmUnO1xuICAgICAgICBpZiAodGhpcy5pc0luc2lkZVJlY3RCeVBvc2l0aW9uKGxlZnRCb3JkZXJSZWN0LCBwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGJvcmRlclR5cGUgPSAnbGVmdCc7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0luc2lkZVJlY3RCeVBvc2l0aW9uKHJpZ2h0Qm9yZGVyUmVjdCwgcG9zaXRpb24pKSB7XG4gICAgICAgICAgICBib3JkZXJUeXBlID0gJ3JpZ2h0JztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24odG9wQm9yZGVyUmVjdCwgcG9zaXRpb24pKSB7XG4gICAgICAgICAgICBib3JkZXJUeXBlID0gJ3RvcCc7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0luc2lkZVJlY3RCeVBvc2l0aW9uKGJvdHRvbUJvcmRlclJlY3QsIHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgYm9yZGVyVHlwZSA9ICdib3R0b20nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGJvcmRlclR5cGUgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliKTmlq3lnZDmoIfmmK/lkKblnKjlm77niYfnmoTnvKnmlL7mk43kvZzngrnkuIpcbiAgICAgKi9cbiAgICBzdGF0aWMgaXNJblBpY3R1cmVSZXNpemVQb2ludChyZWN0OiBSZWN0LCBwb3M6IFBvc2l0aW9uLCByOiBudW1iZXIpOiB7IGJvcmRlclR5cGU6IEJvcmRlclR5cGUgfSB8IG51bGwge1xuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHJlY3Q7XG4gICAgICAgIGNvbnN0IHggPSAwO1xuICAgICAgICBjb25zdCB5ID0gMDtcbiAgICAgICAgY29uc3QgcG9pbnRzOiBBcnJheTx7IHg6IG51bWJlciwgeTogbnVtYmVyLCB0eXBlOiBCb3JkZXJUeXBlIH0+ID0gW3sgeCwgeSwgdHlwZTogJ2xlZnQtdG9wJyB9LCB7IHg6IHggKyB3aWR0aCwgeSwgdHlwZTogJ3JpZ2h0LXRvcCcgfSwgeyB4OiB4ICsgKE1hdGguZmxvb3Iod2lkdGggLyAyKSksIHk6IHksIHR5cGU6ICd0b3AtbWlkZGxlJyB9LCB7IHgsIHk6IHkgKyBNYXRoLmZsb29yKGhlaWdodCAvIDIpLCB0eXBlOiAnbGVmdC1taWRkbGUnIH0sIHsgeCwgeTogeSArIGhlaWdodCwgdHlwZTogJ2xlZnQtYm90dG9tJyB9LCB7IHg6IHdpZHRoLCB5OiBNYXRoLmZsb29yKGhlaWdodCAvIDIpLCB0eXBlOiAncmlnaHQtbWlkZGxlJyB9LCB7IHg6IHggKyB3aWR0aCwgeTogeSArIGhlaWdodCwgdHlwZTogJ3JpZ2h0LWJvdHRvbScgfSwgeyB4OiB4ICsgKE1hdGguZmxvb3Iod2lkdGggLyAyKSksIHk6IHkgKyBoZWlnaHQsIHR5cGU6ICdib3R0b20tbWlkZGxlJyB9XTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICAgICAgY29uc3QgeyB4OiBweCwgeTogcHkgfSA9IHBvaW50O1xuICAgICAgICAgICAgaWYgKCgocHggLSBwb3MueCkgKiAocHggLSBwb3MueCkgKyAocHkgLSBwb3MueSkgKiAocHkgLSBwb3MueSkpIDwgciAqIHIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBib3JkZXJUeXBlOiBwb2ludC50eXBlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAqIOaVtOW9ouespuWQiOi/nue6v+imgeaxglxuICAgICogQHBhcmFtIHBvaW50cyBcbiAgICAqIEBwYXJhbSB3aWR0aCBcbiAgICAqIEBwYXJhbSBzdHJva2VDb2xvciBcbiAgICAqL1xuICAgIHN0YXRpYyByZXNoYXJwUG9pbnRzKHBvaW50czogQXJyYXk8UG9zaXRpb24+KTogQXJyYXk8UG9zaXRpb24+IHtcbiAgICAgICAgbGV0IHByZXZQb2ludDogUG9zaXRpb24gPSBwb2ludHNbMF07XG4gICAgICAgIGNvbnN0IGFycmF5OiBBcnJheTxQb3NpdGlvbj4gPSBbXTtcbiAgICAgICAgYXJyYXkucHVzaChwcmV2UG9pbnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY3VyclBvaW50ID0gcG9pbnRzW2ldO1xuICAgICAgICAgICAgLy/kuI3lnKjlkIzkuIDmsLTlubPnur9cbiAgICAgICAgICAgIGlmIChjdXJyUG9pbnQueSAhPT0gcHJldlBvaW50LnkgJiYgY3VyclBvaW50LnggIT09IHByZXZQb2ludC54KSB7XG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaCh7IHg6IGN1cnJQb2ludC54LCB5OiBwcmV2UG9pbnQueSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFycmF5LnB1c2goY3VyclBvaW50KTtcbiAgICAgICAgICAgIHByZXZQb2ludCA9IGN1cnJQb2ludDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldE9mZnNldFgobm9kZTogSFRNTEVsZW1lbnQpOiBudW1iZXIge1xuICAgICAgICBpZiAoIW5vZGUucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub2RlLnBhcmVudEVsZW1lbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgIGNvbnN0IGN1cnIgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgIHJldHVybiBjdXJyIC0gcGFyZW50O1xuICAgIH1cblxuICAgIHN0YXRpYyByYW5kb21Db2xvcigpIHtcbiAgICAgICAgbGV0IHN0ciA9IFwiI1wiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgICAgICAgc3RyICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDE2KS50b1N0cmluZygxNik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliKTmlq3kuIDkuKrmlbDlgLzmmK/lkKblnKjlj6bkuIDkuKrmlbDlgLznmoTlop7nm4rljLrpl7TkuK1cbiAgICAgKiBAcGFyYW0gdmFsIFxuICAgICAqIEBwYXJhbSBvZmZzZXQgXG4gICAgICogQHBhcmFtIGNvbXBhcmVWYWx1ZSBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBzdGF0aWMgQXBwcm94bWF0ZVZhbHVlSW5SYW5nZSh2YWw6IG51bWJlciwgb2Zmc2V0OiBudW1iZXIsIGNvbXBhcmVWYWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodmFsIC0gb2Zmc2V0KSA8PSBjb21wYXJlVmFsdWUgJiYgKHZhbCArIG9mZnNldCkgPj0gY29tcGFyZVZhbHVlO1xuICAgIH1cblxuXG4gICAgc3RhdGljIGdldEVtcHR5VmFsdWU8VD4odmFsOiBULCBlbXB0eVZhbDogVCk6IFQge1xuICAgICAgICBpZiAoIXZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5VmFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog56e76Zmk5bm26ZuGXG4gICAgICogQHBhcmFtIGFycmF5IFxuICAgICAqIEBwYXJhbSBkZWxldGVJdGVtcyBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtb3ZlVW5pb25TZXQ8VD4oYXJyYXk6IEFycmF5PFQ+LCBkZWxldGVJdGVtczogQXJyYXk8VD4pOiBBcnJheTxUPiB7XG4gICAgICAgIGNvbnN0IGFycmF5U2V0ID0gbmV3IFNldChhcnJheSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVsZXRlSXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBkZWxldGVJdGVtc1tpXTtcbiAgICAgICAgICAgIGlmIChhcnJheVNldC5oYXMoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICBhcnJheVNldC5kZWxldGUoaXRlbSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShhcnJheVNldCk7XG4gICAgfVxuXG4gICAgc3RhdGljIG51bGxUb1N0cmluZyh2YWw6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JtYXREYXRlKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudChkYXRlKS5mb3JtYXQoZm9ybWF0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9ybWF0Tm93KGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0RGF0ZShuZXcgRGF0ZSgpLCBmb3JtYXQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZVRleHQodGV4dDogc3RyaW5nLCBkYXRhOiBvYmplY3QpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCByZWcgPSAvXFx7KC4qPylcXH0vZztcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRleHQ7XG4gICAgICAgIGxldCBtYXRjaDtcbiAgICAgICAgd2hpbGUgKG1hdGNoID0gcmVnLmV4ZWModGV4dCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShtYXRjaFswXSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLy/ojrflj5blkozlvZPliY3ml6XmnJ/nm7jlt67nmoTnp5LmlbBcbiAgICBzdGF0aWMgZ2V0Tm93RGlmZlNlY29uZHMoZGF0ZTogRGF0ZSB8IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIGRhdGUgPSB0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycgPyBuZXcgRGF0ZShkYXRlKSA6IGRhdGU7XG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBub3cuZ2V0VGltZSgpIC0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgIHJldHVybiBkaWZmIC8gMTAwMDtcbiAgICB9XG5cbiAgICAvL+mqjOivgeW9k+WJjeWtl+espuS4suaYr+WQpuS4uuaXpeacn+agvOW8j1xuICAgIHN0YXRpYyBpc0RhdGUoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcmVnID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvO1xuICAgICAgICByZXR1cm4gcmVnLnRlc3Qoc3RyKTtcbiAgICB9XG5cblxuXG4gICAgc3RhdGljIGNsb25lVmFsdWUodmFsOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWwpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxuXG4gICAgc3RhdGljIGlzQ29uc3RydWN0b3IoZjphbnkpOmJvb2xlYW4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IGYoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyB2ZXJpZnkgZXJyIGlzIHRoZSBleHBlY3RlZCBlcnJvciBhbmQgdGhlblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHsgQ29tbW9uVXRpbCB9IGZyb20gXCIuL2NvbW1vbi11dGlsXCI7XG5pbXBvcnQgeyBCcmFuY2hFbGVtZW50LCBFbGVtZW50LCBMZWFmRWxlbWVudCwgVmlld09wdGlvbnMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcblxuLyoqXG4gKiDlhYPntKDnl5Xov7not5/ouKpcbiAqL1xudHlwZSBEZWx0YVR5cGUgPSAnaW5zZXJ0JyB8ICdkZWxldGUnIHwgJ2Zvcm1hdCcgfCAnZGVsVGV4dCcgfCAnaW5zVGV4dCc7XG5cbi8qKlxuICog5o+S5YWl5YWD57SgXG4gKi9cbmV4cG9ydCB0eXBlIEluc2VydE9wc0RlbHRhID0ge1xuICAgIGluc2VydDogRWxlbWVudFxufVxuXG5cbi8qKlxuICog5Yig6Zmk5YWD57SgXG4gKi9cbmV4cG9ydCB0eXBlIERlbGV0ZUVsZU9wc0RlbHRhID0ge1xuICAgIGRlbGV0ZTogRWxlbWVudDtcbn1cbi8qKlxuICog5paH5pys6L6T5YWlXG4gKi9cbmV4cG9ydCB0eXBlIEluc2VydFRleHRPcHNEZWx0YSA9IHtcbiAgICBpbnNUZXh0OiB7XG4gICAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIH1cbiAgICBjb250ZW50OiBzdHJpbmc7XG59XG5cbi8qKlxuICog5paH5pys5Yig6ZmkXG4gKi9cbmV4cG9ydCB0eXBlIERlbGV0ZVRleHRPcHNEZWx0YSA9IHtcbiAgICBkZWxUZXh0OiB7XG4gICAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICAgIGxlbmd0aDogbnVtYmVyO1xuICAgIH0sXG4gICAgY29udGVudDogc3RyaW5nO1xufVxuLyoqXG4gKiDlsZ7mgKflj5jmm7TorrDlvZXliY3lkI7lgLxcbiAqL1xuZXhwb3J0IHR5cGUgZGlmZlByb3BUeXBlID0ge1xuICAgIFtQcm9wTmFtZTogc3RyaW5nXToge1xuICAgICAgICBvbGRWYWx1ZTogYW55LFxuICAgICAgICBuZXdWYWx1ZTogYW55XG4gICAgfVxufTtcbi8qKlxuICog6K6+572u5bGe5oCnXG4gKi9cbmV4cG9ydCB0eXBlIEZvcm1hdE9wc0RlbHRhID0ge1xuICAgIGZvcm1hdDogZGlmZlByb3BUeXBlO1xufVxuXG5cbnR5cGUgb3BzVHlwZXMgPSBJbnNlcnRUZXh0T3BzRGVsdGEgfCBJbnNlcnRPcHNEZWx0YSB8IERlbGV0ZVRleHRPcHNEZWx0YSB8IEZvcm1hdE9wc0RlbHRhIHwgRGVsZXRlRWxlT3BzRGVsdGE7XG50eXBlIG9wc01vZGVsPFQgPSBvcHNUeXBlcz4gPSB7IGluZGV4OiBudW1iZXIsIHBhcmVudEluZGV4OiBudW1iZXI7IHByZXZJbmRleDogbnVtYmVyLCBlbGU6IEVsZW1lbnQsIG9wczogVCB9O1xuZXhwb3J0IHR5cGUgb3BzVHJhY2tNb2RlbDxUID0gb3BzVHlwZXM+ID0gT21pdDxvcHNNb2RlbDxUPiwgJ2VsZSc+O1xuZXhwb3J0IGNvbnN0IGRvY09wc01hcDogTWFwPEVsZW1lbnQsIEFycmF5PG9wc01vZGVsPj4gPSBuZXcgTWFwKCk7XG5sZXQgdHJhY2VUcmFja2luZ0ZsYWc6IGJvb2xlYW4gPSB0cnVlO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0VHJhY2VUcmFja2luZ0ZsYWcoZmxhZzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRyYWNlVHJhY2tpbmdGbGFnID0gZmxhZztcbn1cblxuLyoqXG4gKiDmipHliLblj5jmm7TnmoTov73ouKrkv67mlLlcbiAqIOWcqOafkOS6m+aDheWGteS4i+S4jemcgOimgei/m+ihjOS/ruaUueeahOi3n+i4qu+8jOS+i+Wmgu+8muWcqOWIneWni+WMluWKoOi9veaWh+aho+aXtu+8jOS4uuS6huaPkOmrmOaViOeOh++8jOWinuWKoOW6leWxguW8gOWFs1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3VwcHJlc3NUcmFja2luZzxUPihjYjogKCkgPT4gVCk6IFQge1xuICAgIGNvbnN0IHRtcCA9IHRyYWNlVHJhY2tpbmdGbGFnO1xuICAgIHRyYWNlVHJhY2tpbmdGbGFnID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNiKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyYWNlVHJhY2tpbmdGbGFnID0gdG1wO1xuICAgIH1cbn1cblxuXG5mdW5jdGlvbiBnZXREb2NDdHgoZWxlOiBFbGVtZW50KTogeyBkb2M6IEVsZW1lbnQsIG9wdGlvbnM6IFZpZXdPcHRpb25zIH0gfCBudWxsIHtcbiAgICBpZiAoIXRyYWNlVHJhY2tpbmdGbGFnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvL+W9k+WJjeWFg+e0oOeahOS4iue6p+i/mOayoeaciea3u+WKoOWIsGRvbeS4re+8jOatpOaXtuWPqumcgOimgeWkhOeQhuS4iue6p+WNs+WPr1xuICAgIGNvbnN0IGRvYyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudChlbGUsIChpdGVtKSA9PiBpdGVtLnR5cGUgPT09ICdkb2MnKSBhcyBhbnk7XG4gICAgaWYgKCFkb2MpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSBkb2NbJ3ZpZXdPcHRpb25zJ10gYXMgVmlld09wdGlvbnM7XG4gICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLmVuYWJsZVRyYWNrSGlzdG9yeSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZG9jLFxuICAgICAgICBvcHRpb25zOiBkb2NbJ3ZpZXdPcHRpb25zJ11cbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0RWxlKGVsZTogRWxlbWVudCk6IHZvaWQge1xuICAgIGlmIChlbGUudHlwZSA9PT0gJ3BzeW0nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IGdldERvY0N0eChlbGUpO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGNvbnN0IHNlcmlhbGl6ZU9iaiA9IGdldEVsZVNlcmlhbGl6ZUZ1bmMoZWxlLCBvcHRpb25zKTtcbiAgICAvLyBpZiAoIXNlcmlhbGl6ZU9iaikge1xuICAgIC8vICAgICByZXR1cm47XG4gICAgLy8gfVxuICAgIGFwcGVuZFRvT3BzKG9wdGlvbnMuZG9jLCBlbGUsIHtcbiAgICAgICAgaW5zZXJ0OiBlbGUuY2xvbmUodHJ1ZSlcbiAgICB9KVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFbGUoZWxlOiBFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKGVsZS50eXBlID09PSAncHN5bScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gZ2V0RG9jQ3R4KGVsZSk7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXBwZW5kVG9PcHMob3B0aW9ucy5kb2MsIGVsZSwge1xuICAgICAgICBkZWxldGU6IGVsZS5jbG9uZSh0cnVlKSxcbiAgICB9KVxufVxuXG5mdW5jdGlvbiBhcHBlbmRUb09wcyhkb2M6IEVsZW1lbnQsIGVsZTogRWxlbWVudCwgb3BzOiBvcHNUeXBlcyk6IHZvaWQge1xuICAgIGxldCBhcnJheSA9IGRvY09wc01hcC5nZXQoZG9jKTtcbiAgICBpZiAoIWFycmF5KSB7XG4gICAgICAgIGRvY09wc01hcC5zZXQoZG9jLCBhcnJheSA9IFtdKVxuICAgIH1cbiAgICBjb25zdCBwcmV2RWxlID0gRWxlbWVudFV0aWwuZ2V0UHJldlNpYmxpbmdFbGVtZW50KGVsZSk7XG4gICAgYXJyYXkucHVzaCh7XG4gICAgICAgIGluZGV4OiBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgoZWxlLCB0cnVlKSxcbiAgICAgICAgcGFyZW50SW5kZXg6IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChlbGUucGFyZW50LCB0cnVlKSxcbiAgICAgICAgcHJldkluZGV4OiBwcmV2RWxlID8gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KHByZXZFbGUsIHRydWUpIDogLTEsXG4gICAgICAgIGVsZSxcbiAgICAgICAgb3BzXG4gICAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlucHV0VGV4dChlbGU6IEVsZW1lbnQsIHN0YXJ0SW5kZXg6IG51bWJlciwgaW5wdXQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBnZXREb2NDdHgoZWxlKTtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXBwZW5kVG9PcHMob3B0aW9ucy5kb2MsIGVsZSwge1xuICAgICAgICBpbnNUZXh0OiB7XG4gICAgICAgICAgICBpbmRleDogc3RhcnRJbmRleCxcbiAgICAgICAgICAgIGxlbmd0aDogaW5wdXQubGVuZ3RoXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRlbnQ6IGlucHV0XG4gICAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVRleHQoZWxlOiBFbGVtZW50LCBpbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlciwgY29udGVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGdldERvY0N0eChlbGUpO1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXBwZW5kVG9PcHMob3B0aW9ucy5kb2MsIGVsZSwge1xuICAgICAgICBkZWxUZXh0OiB7XG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGxlbmd0aFxuICAgICAgICB9LFxuICAgICAgICBjb250ZW50XG4gICAgfSlcbn1cblxuLyoqXG4gKiDorrDlvZXlhYPntKDmoLzlvI/ljJZcbiAqIEBwYXJhbSBlbGUgfFxuICogQHBhcmFtIHByb3BzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RWxlKGVsZTogRWxlbWVudCwgcHJvcHM6IG9iamVjdCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBnZXREb2NDdHgoZWxlKTtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVLZXlzID0gT2JqZWN0LmtleXMocHJvcHMpO1xuICAgIGlmICghdXBkYXRlS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcHBlbmRUb09wcyhvcHRpb25zLmRvYywgZWxlLCB7XG4gICAgICAgIGZvcm1hdDogZ2V0RXhhY3REaWZmUHJvcHMoZWxlLnByb3BzLCBwcm9wcylcbiAgICB9KVxufVxuXG4vKipcbiAqIOiusOW9leabtOaWsOWFg+e0oOWxnuaAp++8jOmAmui/h+S7o+eQhuiOt+WPllxuICogQHBhcmFtIGVsZVxuICogQHBhcmFtIHBcbiAqIEBwYXJhbSBvbGRWYWx1ZVxuICogQHBhcmFtIG5ld1ZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2dVcGRhdGVFbGVQcm9wcyhlbGU6IEVsZW1lbnQsIHA6IHN0cmluZyB8IHN5bWJvbCB8IG51bWJlciwgb2xkVmFsdWU6IGFueSwgbmV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBnZXREb2NDdHgoZWxlKTtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcHBlbmRUb09wcyhvcHRpb25zLmRvYywgZWxlLCB7XG4gICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgW3BdOiB7XG4gICAgICAgICAgICAgICAgb2xkVmFsdWUsXG4gICAgICAgICAgICAgICAgbmV3VmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIGdldEV4YWN0RGlmZlByb3BzKG9sZFByb3BzOiBvYmplY3QsIG5ld1Byb3BzOiBvYmplY3QpOiBkaWZmUHJvcFR5cGUge1xuICAgIGNvbnN0IG9iajogZGlmZlByb3BUeXBlID0ge307XG4gICAgT2JqZWN0LmtleXMobmV3UHJvcHMpLmZvckVhY2goa2V5ID0+IG9ialtrZXldID0ge1xuICAgICAgICBvbGRWYWx1ZTogQ29tbW9uVXRpbC5jbG9uZVZhbHVlKG9sZFByb3BzW2tleV0pLFxuICAgICAgICBuZXdWYWx1ZTogQ29tbW9uVXRpbC5jbG9uZVZhbHVlKG5ld1Byb3BzW2tleV0pXG4gICAgfSlcbiAgICByZXR1cm4gb2JqO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBhdGNoKGRvYzogRWxlbWVudCk6IEFycmF5PG9wc1RyYWNrTW9kZWw+IHtcbiAgICBjb25zdCBpbnNlcnRPcHNNYXA6IE1hcDxFbGVtZW50LCBvcHNNb2RlbD4gPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgZm9ybWF0T3BzTWFwOiBNYXA8RWxlbWVudCwgb3BzTW9kZWw8Rm9ybWF0T3BzRGVsdGE+PiA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBwYXRjaHM6IEFycmF5PG9wc1RyYWNrTW9kZWw+ID0gW107XG4gICAgY29uc3Qgb3BzID0gZG9jT3BzTWFwLmdldChkb2MpO1xuICAgIGlmICghb3BzIHx8ICFvcHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgZGVsT3BzTWFwID0gZ2V0RGVsZXRlRWxlT3BzKG9wcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb3AgPSBvcHNbaV1cbiAgICAgICAgY29uc3QgZWxlID0gb3AuZWxlO1xuICAgICAgICAvL+S/ruaUueagt+W8j1xuICAgICAgICBpZiAoJ2Zvcm1hdCcgaW4gb3Aub3BzKSB7XG4gICAgICAgICAgICAvL+S/ruaUueaPkuWFpeaIluiAheWIoOmZpOeahOS4jeWBmuWkhOeQhlxuICAgICAgICAgICAgaWYgKGluc2VydE9wc01hcC5oYXMoZWxlKSB8fCBkZWxPcHNNYXAuaGFzKGVsZSkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5ZCI5bm25pON5L2c5bGe5oCnXG4gICAgICAgICAgICBsZXQgcHJldkZvcm1hdE9wOiBvcHNNb2RlbDxGb3JtYXRPcHNEZWx0YT4gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoKHByZXZGb3JtYXRPcCA9IGZvcm1hdE9wc01hcC5nZXQoZWxlKSkpIHtcbiAgICAgICAgICAgICAgICBtZXJnZURpZmZQcm9wcyhwcmV2Rm9ybWF0T3Aub3BzLmZvcm1hdCwgb3Aub3BzLmZvcm1hdCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3JtYXRPcHNNYXAuc2V0KGVsZSwgb3AgYXMgb3BzTW9kZWw8Rm9ybWF0T3BzRGVsdGE+KVxuICAgICAgICB9XG4gICAgICAgIHBhdGNocy5wdXNoKHsgaW5kZXg6IG9wLmluZGV4LCBwYXJlbnRJbmRleDogb3AucGFyZW50SW5kZXgsIHByZXZJbmRleDogb3AucHJldkluZGV4LCBvcHM6IG9wLm9wcyB9KTtcbiAgICB9XG4gICAgLy/muIXnqbpcbiAgICBvcHMubGVuZ3RoID0gMDtcbiAgICByZXR1cm4gcGF0Y2hzO1xufVxuXG4vKipcbiAqIOa4hemZpOWPmOabtOeahOaVsOaNrlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJUcmFjZXMoZG9jOiBFbGVtZW50KTogdm9pZCB7XG4gICAgZG9jT3BzTWFwLmRlbGV0ZShkb2MpO1xufVxuXG4vKipcbiAqIOiOt+WPluWIoOmZpOWFg+e0oOeahOaTjeS9nFxuICog5Zyo55Sf5oiQ5L+u5pS555qE5om55pON5L2c5pe277yM6ZyA6KaB5YWI6I635Y+W5Yig6Zmk55qE5YWD57Sg77yM5Zug5Li65YWD57Sg6KKr5Yig6Zmk5ZCO77yM5omA5pyJ55qE5YW25LuW5pON5L2c6YO95LiN6ZyA6KaB6KKr6K6w5b2V5LqGXG4gKi9cbmZ1bmN0aW9uIGdldERlbGV0ZUVsZU9wcyhvcHM6IEFycmF5PG9wc01vZGVsPik6IE1hcDxFbGVtZW50LCBvcHNNb2RlbD4ge1xuICAgIGNvbnN0IGRlbE9wc01hcDogTWFwPEVsZW1lbnQsIG9wc01vZGVsPiA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBvcCA9IG9wc1tpXVxuICAgICAgICBjb25zdCBpbmRleCA9IG9wLmluZGV4O1xuICAgICAgICBjb25zdCBlbGUgPSBvcC5lbGU7XG4gICAgICAgIC8v5L+u5pS555qE5YWD57Sg5ZCO6Z2i6KKr5Yig6Zmk77yM6YKj5LmI6K+l5aSE55CG5L2c5bqfXG4gICAgICAgIGlmICgnZGVsZXRlJyBpbiBvcC5vcHMpIHtcbiAgICAgICAgICAgIGRlbE9wc01hcC5zZXQoZWxlLCBvcClcbiAgICAgICAgfVxuXG4gICAgfVxuICAgIHJldHVybiBkZWxPcHNNYXA7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUFycmF5SXRlbTxUPihhcnI6IEFycmF5PFQ+LCBpdGVtOiBUKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG5cbi8qKlxuICog5ZCM5LiA5om55qyh55qE5L+u5pS577yM5L+u5pS55LqG5ZCM5LiA5bGe5oCn77yM6ZyA6KaB5ZCI5bm25aSa5Liq5ZCM5LiA5bGe5oCn55qE5aSa5Liq5L+u5pS5XG4gKiDkuL7kvovvvJp0YWJsZeeahGNvbHPlrr3luqbkv67mlLlcbiAqIEBwYXJhbSBwcmV2Rm9ybWF0XG4gKiBAcGFyYW0gY3VyckZvcm1hdFxuICovXG5mdW5jdGlvbiBtZXJnZURpZmZQcm9wcyhwcmV2Rm9ybWF0OiBkaWZmUHJvcFR5cGUsIGN1cnJGb3JtYXQ6IGRpZmZQcm9wVHlwZSk6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKGN1cnJGb3JtYXQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKGtleSBpbiBwcmV2Rm9ybWF0KSB7XG4gICAgICAgICAgICBwcmV2Rm9ybWF0W2tleV0ubmV3VmFsdWUgPSBjdXJyRm9ybWF0W2tleV0ubmV3VmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmV2Rm9ybWF0W2tleV0gPSBjdXJyRm9ybWF0W2tleV07XG4gICAgICAgIH1cbiAgICB9KVxufVxuXG5cbiIsIi8v6K6i6ZiF6ICFIFN1YnNjcmlwdGlvblxuLy/lj5HluIPogIUo5LqL5Lu25rqQKSBFdmVudFNvdXJjZVxuXG50eXBlIEV2ZW50SGFuZGxlcjxUID0gdm9pZD4gPSAoZGF0YTogVCkgPT4gdm9pZDtcblxuLyoqXG4gKiDorqLpmIXogIVcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN1YnNjcmlwdGlvbjxUPWFueT4ge1xuICAgIHByb3RlY3RlZCBjbG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGFic3RyYWN0IGludm9rZShkYXRhOiBUKTogdm9pZDtcblxuICAgIGFic3RyYWN0IHVuc3Vic2NyaWJlKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFdmVudFNvdXJjZUNvcmU8VD4ge1xuICAgIHByb3RlY3RlZCBjbG9zZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIHN1YnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICAgIG5leHQoZGF0YT86IFQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3Vicz1bLi4udGhpcy5zdWJzXTtcbiAgICAgICAgc3Vicy5mb3JFYWNoKChzdWIpID0+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+KCk7XG4gICAgbGVuZ3RoOiBudW1iZXIgPSAwO1xuXG4gICAgcmVnaXN0ZXJGb250TWFwKG5hbWU6IHN0cmluZywga2V5TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9udE1hcC5zZXQobmFtZSwga2V5TmFtZSk7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5mb250TWFwLnNpemU7XG4gICAgfVxuXG4gICAgZ2V0Rm9udE1hcChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvbnRNYXAuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gdGhpcy5mb250TWFwLmdldChuYW1lKSBhcyBzdHJpbmc7XG4gICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZvbnRNYXBGdW5jID0gbmV3IEZvbnRNYXBTdHJ1Y3QoKTtcblxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGVQcm9wcyB7XG4gICAgaWQhOiBzdHJpbmc7XG4gICAgdGl0bGUhOiBzdHJpbmc7XG4gICAgbXNnITogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRHcm91cFByb3BzIHtcbiAgICBpZCE6IHN0cmluZztcbiAgICBuYW1lITogc3RyaW5nO1xuICAgIGhpZGRlbiE6IGJvb2xlYW47XG4gICAgY2xvbmUoZGVzdDogRGF0YUVsZW1lbnRHcm91cFByb3BzIHwgbnVsbCkge1xuICAgICAgICBkZXN0ID0gZGVzdCA/PyBuZXcgRGF0YUVsZW1lbnRHcm91cFByb3BzKCk7XG4gICAgICAgIGRlc3QuaWQgPSB0aGlzLmlkO1xuICAgICAgICBkZXN0Lm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgIGRlc3QuaGlkZGVuID0gdGhpcy5oaWRkZW47XG4gICAgfVxuXG4gICAgZ2V0U2VyaWFsaXplUHJvcHMoKSB7XG4gICAgICAgIGNvbnN0IHByb3BzOiBOdWxsYWJsZVR5cGU8RGF0YUVsZW1lbnRHcm91cFByb3BzPiA9IHt9XG4gICAgICAgIGlmICh0aGlzLmlkKSB7XG4gICAgICAgICAgICBwcm9wcy5pZCA9IHRoaXMuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubmFtZSkge1xuICAgICAgICAgICAgcHJvcHMubmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oaWRkZW4pIHtcbiAgICAgICAgICAgIHByb3BzLmhpZGRlbiA9IHRoaXMuaGlkZGVuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50QmFyY29kZVByb3BzIHtcbiAgICB0eXBlOiAnZW5hMTMnIHwgJ2NvZGUxMjgnIHwgJ2NvZGUzOScgfCAncXJjb2RlJyA9ICdjb2RlMTI4JztcbiAgICB0ZXh0OiBzdHJpbmcgPSAnJztcbiAgICB3aWR0aDogbnVtYmVyID0gMDtcbiAgICBoZWlnaHQ6IG51bWJlciA9IDA7XG5cbiAgICBjbG9uZShkZXN0OiBEYXRhRWxlbWVudEJhcmNvZGVQcm9wcyB8IG51bGwpIHtcbiAgICAgICAgZGVzdCA9IGRlc3QgPz8gbmV3IERhdGFFbGVtZW50QmFyY29kZVByb3BzKCk7XG4gICAgICAgIGRlc3QudHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgZGVzdC50ZXh0ID0gdGhpcy50ZXh0O1xuICAgICAgICBkZXN0LndpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgZGVzdC5oZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICB9XG5cbiAgICBnZXRTZXJpYWxpemVQcm9wcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dCxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodFxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQm9keVBhcnRQcm9wcyB7XG4gICAgcGFydElkITogc3RyaW5nO1xufSIsImltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgUG9zaXRpb24sXG4gICAgU2VsZWN0aW9uQ29udGVudFJhbmdlLFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0Jsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtDb21tZW50UmFuZ2VTdGF0dXN9IGZyb20gXCIuL2NvbW1lbnQtY29udGVudC1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBDb21tc0NvbnRhaW5lckVsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignY29tbS1saXN0Jyk7XG4gICAgICAgIHRoaXMubm9GaWxsRW1wdHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBDb21tc0NvbnRhaW5lclJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnJlY3QubWF4V2lkdGggPSBvcHRpb25zLnJldmlld1dpbmRvd1dpZHRoO1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHJlbmRlci5yZWN0Lm1heFdpZHRoO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge31cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IENvbW1zQ29udGFpbmVyRWxlbWVudCgpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0IGV4dGVuZHMgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3Qge1xuICAgIC8v5om55rOo5YaF5a655piv5ZCm5bey57uP6YeN57uELOWPquimgemHjeaWsOe7mOWItueahOaXtuWAmee7hOWQiOS4gOasoeWNs+WPr1xuICAgIGlzTWVhc3VyZUNvbW0hOiBib29sZWFuO1xuICAgIHNlbGVjdGVkU2V0ITogTWFwPEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZT47XG4gICAgY29tbWVudFJhbmdlU3RhdHVzOiBBcnJheTxDb21tZW50UmFuZ2VTdGF0dXM+ID0gW107XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVjdC5oZWlnaHQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlLnJlbmRlci5jb250ZW50Q29udGV4dC5zdHJva2VSZWN0KGUucG9zaXRpb24ueCwgZS5wb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsICdibGFjaycsIDAuNSk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgQ29tbWVudHNGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8bnVsbD4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJjb21tLWxpc3RcIjtcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjb21tZW50c0VsZSA9IG5ldyBDb21tc0NvbnRhaW5lckVsZW1lbnQoKTtcbiAgICAgICAgcmV0dXJuIGNvbW1lbnRzRWxlO1xuICAgIH1cbn1cbiIsImltcG9ydCB7TGVhZkVsZW1lbnQsIFNlcmlhbGl6ZVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtJbmxpbmVHcm91cElucHV0RWxlbWVudCwgdmFsaWRhdGVJbmxpbmVJbnB1dFJlbmRlck9ian0gZnJvbSBcIi4vZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRGF0YURlY29yYXRlRWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50PGFueT4ge1xuICAgIC8vcHJvcHM6IERhdGFEZWNvcmF0ZVByb3BzO1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRhRWxlOiBJbmxpbmVHcm91cElucHV0RWxlbWVudCwgcHVibGljIGlzUHJlZml4OiBib29sZWFuKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWRlYycpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdHb3RDdXJzb3InLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7c2VsZWN0aW9uU3RhdGV9ID0gZXZ0LmN0eDtcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZS5jb2xsYXBzZWQgJiYgdGhpcy5wYXJlbnQgaW5zdGFuY2VvZiBJbmxpbmVHcm91cElucHV0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5wYXJlbnQgYXMgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMgPT09IGdyb3VwLmVuZERlY29yYXRlICYmIHNlbGVjdGlvblN0YXRlLnN0YXJ0T2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChncm91cC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoZ3JvdXAuc3RhcnREZWNvcmF0ZSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBldnQuaXNDYW5jZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pc0RlY29yYXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogRGF0YURlY29yYXRlUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IERhdGFEZWNvcmF0ZVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgLy9yZW5kZXIucmVjdC53aWR0aCA9IHRoaXMuZFByb3BzLnNpemUgLyAyO1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IDY7XG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IDE0O1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBTZXJpYWxpemVQcm9wcyB8IG51bGwge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBEYXRhRGVjb3JhdGVFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0YURlY29yYXRlRWxlbWVudCh0aGlzLmRhdGFFbGUsIHRoaXMuaXNQcmVmaXgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgLy9jbG9uZS5yZW5kZXJDdHggPSB0aGlzLnJlbmRlckN0eDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRGF0YURlY29yYXRlUmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdCB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVuZGVyRGVjb3JSZWN0KGUucmVuZGVyLCBlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICByZW5kZXJEZWNvclJlY3QoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGN0eC5kcmF3TW9kZSA9PT0gJ3ByaW50Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGFFbGVSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXJCeVByZWRpY2F0ZSh0aGlzLCBpdGVtID0+IHZhbGlkYXRlSW5saW5lSW5wdXRSZW5kZXJPYmooaXRlbSkpO1xuICAgICAgICBpZiAoIWRhdGFFbGVSZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhRWxlUmVuZGVyUG9zID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyUG9zKGRhdGFFbGVSZW5kZXIsIHRoaXMsIHBvc2l0aW9uKTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudCBhcyBEYXRhRGVjb3JhdGVFbGVtZW50O1xuICAgICAgICBsZXQge3gsIHksIGhlaWdodCwgd2lkdGh9ID0gZGF0YUVsZVJlbmRlclBvcztcbiAgICAgICAgY29uc3QgbGluZVdpZHRoID0gMjtcbiAgICAgICAgY29uc3QgcGFpbnRDb2xvciA9ICcjMDA1MGIzJztcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LnRyYW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5wYXJlbnQudHlwZSA9PT0gJ2RhdGEtZ3JvdXAnKSB7XG4gICAgICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmN0eC5zaGFkb3dCbHVyID0gNTtcbiAgICAgICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuY3R4LnNoYWRvd0NvbG9yID0gJ2JsYWNrJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50LmlzUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgeCArPSAyO1xuICAgICAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5zdHJva2VMaW5lcyhbe3g6IHggKyBsaW5lV2lkdGgsIHl9LCB7eDogeCwgeX0sIHtcbiAgICAgICAgICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIGhlaWdodFxuICAgICAgICAgICAgICAgIH0sIHt4OiB4ICsgbGluZVdpZHRoLCB5OiB5ICsgaGVpZ2h0fV0sIDEsIHBhaW50Q29sb3IpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB4ID0geCArIHdpZHRoIC0gMjtcbiAgICAgICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuc3Ryb2tlTGluZXMoW3t4OiB4IC0gbGluZVdpZHRoLCB5fSwge3g6IHgsIHl9LCB7XG4gICAgICAgICAgICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyBoZWlnaHRcbiAgICAgICAgICAgICAgICB9LCB7eDogeCAtIGxpbmVXaWR0aCwgeTogeSArIGhlaWdodH1dLCAxLCBwYWludENvbG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjbG9uZShjbG9uZURhdGEgPSB0cnVlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0YURlY29yYXRlUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHsgRG9jTW9kZSwgRWxlbWVudCwgRWxlbWVudEZhY3RvcnksIElubGluZUdyb3VwRWxlbWVudCwgTGVhZkVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IElubGluZUdyb3VwUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IEdvdEN1cnNvckV2ZW50LCBLZXlib3JhZEVsZW1lbnRFdmVudCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRGF0YUVsZUJhc2VQcm9wcywgVGV4dFByb3BzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7IERhdGFEZWNvcmF0ZUVsZW1lbnQgfSBmcm9tIFwiLi9kYXRhLWRlY29yYXRlLWltcGxcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuXG4vKipcbiAqIOaJgOacieeahOaVsOaNruWFg+e7p+aJv+S4iui/sOS4pOS4quaKveixoeexu1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0YUVsZW1lbnRMZWFmPFAgZXh0ZW5kcyBvYmplY3QgPSBhbnk+IGV4dGVuZHMgTGVhZkVsZW1lbnQ8UD4ge1xuICAgIGFic3RyYWN0IHNldFZhbHVlKHZhbDogYW55KTogdm9pZDtcblxuICAgIGFic3RyYWN0IGdldFZhbHVlKCk6IGFueTtcbn1cblxuLyoqXG4gKiDlj6/kvpvovpPlhaXnmoTlhoXogZTlnZdcbiAqIOS9v+eUqOWcuuaZr++8muaVsOaNruWFg++8jOaVsOaNrue7hFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IGFueT4gZXh0ZW5kcyBJbmxpbmVHcm91cEVsZW1lbnQ8UD4ge1xuICAgIHN0YXJ0RGVjb3JhdGUhOiBEYXRhRGVjb3JhdGVFbGVtZW50O1xuICAgIGVuZERlY29yYXRlITogRGF0YURlY29yYXRlRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZykge1xuICAgICAgICBzdXBlcih0eXBlKTtcbiAgICAgICAgLy/ooYzlhoXlnZfkuI3lhYHorrjmjaLooYxcbiAgICAgICAgdGhpcy5hZGRFdmVudDxLZXlib3JhZEVsZW1lbnRFdmVudD4oJ0VsZW1lbnRLZXlEb3duJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBzZWxlY3Rpb25TdGF0ZSwgc291cmNlRXZlbnQsIHNvdXJjZSB9ID0gZXZ0O1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0IH0gPSBzZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgICAgIGlmIChJc0luU2lkZURhdGFFbGVtZW50KHN0YXJ0Q29udHJvbCBhcyBMZWFmRWxlbWVudCwgc3RhcnRPZmZzZXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUV2ZW50LnNoaWZ0S2V5ICYmIHNvdXJjZUV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5yZW1vdmVOdWxsVGV4dCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXNvdXJjZUV2ZW50LnNoaWZ0S2V5ICYmIHNvdXJjZUV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2dC5pc0NhbmNlbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB0cnVlKTtcblxuICAgICAgICB0aGlzLmFkZEV2ZW50KCdHb3RDdXJzb3InLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgfSA9IGV2dC5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgICAgIGlmIChJc0luU2lkZURhdGFFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnTG9zdEN1cnNvcicsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZpbGxEZWNvcmF0ZSgpO1xuICAgIH1cblxuICAgIGZpbGxEZWNvcmF0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0YXJ0RGVjb3JhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnREZWNvcmF0ZSwgZW5kRGVjb3JhdGUgfSA9IHRoaXMuY3JlYXRlRGF0YURlY29yYXRlKCk7XG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkKHN0YXJ0RGVjb3JhdGUsIDApO1xuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZChlbmREZWNvcmF0ZSwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGVjb3JhdGUgPSBzdGFydERlY29yYXRlO1xuICAgICAgICAgICAgdGhpcy5lbmREZWNvcmF0ZSA9IGVuZERlY29yYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlRGF0YURlY29yYXRlKCk6IHsgc3RhcnREZWNvcmF0ZTogRGF0YURlY29yYXRlRWxlbWVudCwgZW5kRGVjb3JhdGU6IERhdGFEZWNvcmF0ZUVsZW1lbnQgfSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGVjb3JhdGUgPSBuZXcgRGF0YURlY29yYXRlRWxlbWVudCh0aGlzLCB0cnVlKTtcbiAgICAgICAgY29uc3QgZW5kRGVjb3JhdGUgPSBuZXcgRGF0YURlY29yYXRlRWxlbWVudCh0aGlzLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydERlY29yYXRlLFxuICAgICAgICAgICAgZW5kRGVjb3JhdGVcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBjbG9uZVNlbGY8VCBleHRlbmRzIElubGluZUdyb3VwSW5wdXRFbGVtZW50PihkYXRhOiBib29sZWFuLCBjb25zdHI6IG5ldyAoKSA9PiBUKTogVCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IGNvbnN0cigpO1xuICAgICAgICAoPChwcm9wOiBQKSA9PiBQPnRoaXMucHJvcHNbJ2Nsb25lJ10pKGNsb25lLnByb3BzKTtcbiAgICAgICAgLy9jbG9uZUZ1bmMuYXBwbHkodGhpcywgY2xvbmUucHJvcHMpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZCAhPT0gdGhpcy5zdGFydERlY29yYXRlICYmIGNoaWxkICE9PSB0aGlzLmVuZERlY29yYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkVG9MYXN0KGNoaWxkLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGJlZ2luTWVhc3VyZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWxsRGVjb3JhdGUoKTtcbiAgICAgICAgc3VwZXIuYmVnaW5NZWFzdXJlKCk7XG4gICAgfVxuXG4gICAgYWRkQ2hpbGQoY2hpbGQ6IEVsZW1lbnQ8YW55PiwgaW5kZXg6IG51bWJlciA9IC0xKTogdm9pZCB7XG4gICAgICAgIGluZGV4ID0gaW5kZXggPT09IC0xID8gdGhpcy5sZW5ndGggLSAxIDogaW5kZXg7XG4gICAgICAgIGluZGV4ID0gaW5kZXggPiB0aGlzLmxlbmd0aCA/IHRoaXMubGVuZ3RoIDogaW5kZXg7XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCAmJiB0aGlzLnN0YXJ0RGVjb3JhdGUpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Py5hZGRDaGlsZChjaGlsZCwgdGhpcy5nZXRJbmRleCgpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMubGVuZ3RoICYmIHRoaXMuZW5kRGVjb3JhdGUpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Py5hZGRDaGlsZChjaGlsZCwgdGhpcy5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIuYWRkQ2hpbGQoY2hpbGQsIGluZGV4KTtcbiAgICB9XG5cbiAgICBjbGVhcklubmVySXRlbXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlbW92ZUl0ZW1zID0gdGhpcy5nZXRJbm5lckl0ZW1zKCk7XG4gICAgICAgIHJlbW92ZUl0ZW1zLmZvckVhY2goaXRlbSA9PiB0aGlzLnJlbW92ZUNoaWxkKGl0ZW0pKTtcbiAgICB9XG5cbiAgICBnZXRJbm5lckl0ZW1zKCk6IEFycmF5PEVsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PEVsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpZiAoY2hpbGQgIT09IHRoaXMuc3RhcnREZWNvcmF0ZSAmJiBjaGlsZCAhPT0gdGhpcy5lbmREZWNvcmF0ZSkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDov73liqDliLDlhoXlrrnlnZfmnKvlsL5cbiAgICAgKiDosIPnlKhhZGRDaGlsZFxuICAgICAqIEBwYXJhbSBjaGlsZFxuICAgICAqL1xuICAgIGFkZENoaWxkVG9MYXN0KGNoaWxkOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmFkZENoaWxkKGNoaWxkLCB0aGlzLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi/veWKoOWIsOWGheWuueWdl+W8gOWni+S9jee9rlxuICAgICAqL1xuICAgIGFkZENoaWxkVG9GaXJzdChjaGlsZDogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBzdXBlci5hZGRDaGlsZChjaGlsZCwgMSk7XG4gICAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0YUVsZW1lbnRJbmxpbmVHcm91cDxQIGV4dGVuZHMgRGF0YUVsZUJhc2VQcm9wcyA9IERhdGFFbGVCYXNlUHJvcHMgJiB7IHZhbHVlVGV4dFByb3BzOiBUZXh0UHJvcHMgfT4gZXh0ZW5kcyBJbmxpbmVHcm91cElucHV0RWxlbWVudDxQPiB7XG4gICAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHR5cGUpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50TW91c2Vtb3ZlJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01vdXNlZW50ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudE1vdXNlTGVhdmUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTW91c2VlbnRlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50PEdvdEN1cnNvckV2ZW50PignR290Q3Vyc29yJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkdvdEN1cnNvckV2ZW50KGV2dClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Hb3RDdXJzb3JFdmVudChldnQ6IEdvdEN1cnNvckV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc291cmNlLCBzZWxlY3Rpb25TdGF0ZSB9ID0gZXZ0O1xuICAgICAgICBpZiAoZXZ0LmN0eC52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0KSB7XG4gICAgICAgICAgICAvL+W9k+WJjeaVsOaNruWFg+S4jeWPr+e8lui+kVxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlLmVkaXRhYmxlICYmICF0aGlzLnByb3BzLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0IH0gPSBzZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRDb250cm9sID09PSB0aGlzLnN0YXJ0RGVjb3JhdGUgJiYgc3RhcnRPZmZzZXQgPT09IDAgfHwgc3RhcnRDb250cm9sID09PSB0aGlzLmVuZERlY29yYXRlICYmIHN0YXJ0T2Zmc2V0ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUuZWRpdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvblN0YXRlLnJhbmdlPy5jbG9uZSgpO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICByYW5nZS5lZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5hZGRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gdGhpcy5lbmREZWNvcmF0ZSAmJiBzZWxlY3Rpb25TdGF0ZS5zdGFydE9mZnNldCA9PT0gMCAmJiB0aGlzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgZXZ0LmlzQ2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UodGhpcy5zdGFydERlY29yYXRlLCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFic3RyYWN0IHNldFZhbHVlKHZhbDogYW55KTogdm9pZDtcblxuICAgIGFic3RyYWN0IGdldFZhbHVlKCk6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIOmqjOivgeaVsOaNruWFg+eahOWAvOaYr+WQpuWQiOazlVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgdmFsaWRhdGUoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucmVxdWlyZWQgJiYgdGhpcy5wcm9wcy5lZGl0YWJsZSAmJiAhdGhpcy5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+ivpeWtl+auteS4jeiDveS4uuepuic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0YUVsZW1lbnRSZW5kZXJPYmplY3Q8VCBleHRlbmRzIERhdGFFbGVtZW50SW5saW5lR3JvdXAgPSBEYXRhRWxlbWVudElubGluZUdyb3VwPiBleHRlbmRzIElubGluZUdyb3VwUmVuZGVyT2JqZWN0PFQ+IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyByZW5kZXIsIHBvc2l0aW9uLCBkb2NDdHg6IHsgdmlld09wdGlvbnMgfSB9ID0gZTtcbiAgICAgICAgLy/mlbDmja7lhYPkuI3miZPljbBcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQucHJvcHMucHJpbnRhYmxlICYmIHJlbmRlci5kcmF3TW9kZSA9PT0gJ3ByaW50Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC50cmFuKCgpID0+IHtcbiAgICAgICAgICAgIC8v57uY5Yi25pWw5o2u5YWD5Yy65Z+f5bqV6ImyXG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50LmlzTW91c2VlbnRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG92ZXJsYXlDb2xvciA9IHRoaXMuZWxlbWVudC5wcm9wcy5lZGl0YWJsZSA/IHZpZXdPcHRpb25zLmRhdGFFbGVPdmVybGF5c0NvbG9yIDogdmlld09wdGlvbnMuZGF0YUVsZVJlYWRPbmx5T3ZlcmxheUNvbG9yO1xuICAgICAgICAgICAgICAgIHJlbmRlci5vdmVybGF5c0NvbnRleHQuZmlsbFJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSAtIDIsIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCArIDQsIG92ZXJsYXlDb2xvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50LnByb3BzLnNlY3JldEJyb3dzZSAmJiB2aWV3T3B0aW9ucy5zZWNyZXRCcm93c2UpIHtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuY3R4LmZpbHRlciA9IFwiYmx1cigxMHB4KVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50LnByb3BzLnVuZGVybGluZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHkgPSBwb3NpdGlvbi55ICsgMiArIHRoaXMucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZUxpbmVzKFt7IHg6IHBvc2l0aW9uLngsIHkgfSwgeyB4OiBwb3NpdGlvbi54ICsgdGhpcy5yZWN0LndpZHRoLCB5IH1dLCAxLCAnIzU5NTk1OScpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLm5leHRSZW5kZXIoKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbn1cblxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVEYXRhRWxlID0gKGVsZTogRWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBlbGUgaW5zdGFuY2VvZiBEYXRhRWxlbWVudExlYWYgfHwgZWxlIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cDtcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZURhdGFFbGVSZW5kZXJPYmogPSAocmVuZGVyT2JqOiBSZW5kZXJPYmplY3QpID0+IHtcbiAgICBpZiAocmVuZGVyT2JqLmVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlRGF0YUVsZShyZW5kZXJPYmouZWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUlubGluZUlucHV0UmVuZGVyT2JqID0gKHJlbmRlck9iajogUmVuZGVyT2JqZWN0KSA9PiB7XG4gICAgaWYgKHJlbmRlck9iai5lbGVtZW50KSB7XG4gICAgICAgIHJldHVybiByZW5kZXJPYmouZWxlbWVudCBpbnN0YW5jZW9mIElubGluZUdyb3VwSW5wdXRFbGVtZW50O1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIOaYr+WQpuWcqOaVsOaNruWFg+WGhemDqFxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEBwYXJhbSBvZmZzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElzSW5TaWRlRGF0YUVsZW1lbnQoY29udHJvbDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWF0aEVsZSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudChjb250cm9sLCAoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXApIGFzIERhdGFFbGVtZW50SW5saW5lR3JvdXA7XG4gICAgaWYgKG1hdGhFbGUpIHtcbiAgICAgICAgaWYgKChjb250cm9sID09PSBtYXRoRWxlLnN0YXJ0RGVjb3JhdGUgJiYgb2Zmc2V0ID09PSAwKSB8fCAoY29udHJvbCA9PT0gbWF0aEVsZS5lbmREZWNvcmF0ZSAmJiBvZmZzZXQgPT09IDEpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuXG4vKipcbiAqIOaYr+WQpuWcqOWGheiBlOWdl+WGhemDqFxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEBwYXJhbSBvZmZzZXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIElzSW5TaWRlSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQoY29udHJvbDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWF0aEVsZSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudChjb250cm9sLCAoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIElubGluZUdyb3VwSW5wdXRFbGVtZW50KSBhcyBJbmxpbmVHcm91cElucHV0RWxlbWVudDtcbiAgICBpZiAobWF0aEVsZSkge1xuICAgICAgICBpZiAoKGNvbnRyb2wgPT09IG1hdGhFbGUuc3RhcnREZWNvcmF0ZSAmJiBvZmZzZXQgPT09IDApIHx8IChjb250cm9sID09PSBtYXRoRWxlLmVuZERlY29yYXRlICYmIG9mZnNldCA9PT0gMSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhRWxlbWVudEJhc2VGYWN0b3J5PFQgPSBudWxsPiBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFQ+IHtcbiAgICByZWFkQ29tcGxldGVkKGVsZTogRWxlbWVudCwgY2hpbGRyZW46IEFycmF5PEVsZW1lbnQ+KSB7XG4gICAgICAgIGlmIChlbGUgaW5zdGFuY2VvZiBJbmxpbmVHcm91cElucHV0RWxlbWVudCkge1xuICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChpdGVtID0+IGVsZS5hZGRDaGlsZFRvTGFzdChpdGVtKSlcbiAgICAgICAgfVxuICAgIH1cbn0iLCJpbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyRWxlbWVudCxcbiAgICBEb2NNb2RlLFxuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgTWFyZ2luUHJvcHMsXG4gICAgUGFkZGluZ1Byb3BzLCBQb3NpdGlvbixcbiAgICByZWFkRWxlbWVudFByb3BzLFxuICAgIFJlY3QsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudFByb3BzLCBUZXh0UHJvcHMgfSBmcm9tICcuLi8uLi9lbGVtZW50LXByb3BzJztcbmltcG9ydCB7IElSZW5kZXJDb250ZXh0Q29udHJhY3QsIFJlbmRlckNvbnRleHRUeXBlIH0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQgeyBEb2N1bWVudEJvZHlFbGVtZW50IH0gZnJvbSBcIi4vZG9jLWJvZHktaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRIZWFkZXJFbGVtZW50IH0gZnJvbSBcIi4vZG9jLWhlYWRlci1pbXBsXCI7XG5pbXBvcnQgeyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCwgSVJlbmRlckRhdGEsIFJlbmRlck9iamVjdCB9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IERvY3VtZW50Rm9vdGVyRWxlbWVudCB9IGZyb20gXCIuL2RvYy1mb290ZXItaW1wbFwiO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IGRvY3VtZW50UHJpbnQgfSBmcm9tIFwiLi4vLi4vZG9jdW1lbnQtcHJpbnRcIjtcbmltcG9ydCB7IENvbW1zQ29udGFpbmVyRWxlbWVudCB9IGZyb20gXCIuLi9jb21tZW50cy9jb21tZW50cy1jb250YWluZXItaW1wbFwiO1xuaW1wb3J0IHsgQ29tbW9uVXRpbCB9IGZyb20gXCIuLi8uLi9jb21tb24tdXRpbFwiO1xuaW1wb3J0IHsgU2VsZWN0aW9uU3RhdGUgfSBmcm9tIFwiLi4vLi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEVsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQ8RG9jdW1lbnRQcm9wcz4ge1xuICAgIC8vcHJvcHM6IERvY3VtZW50UHJvcHM7XG4gICAgdmlld09wdGlvbnMhOiBWaWV3T3B0aW9ucztcbiAgICBib2R5RWxlbWVudCE6IERvY3VtZW50Qm9keUVsZW1lbnQ7XG4gICAgaGVhZGVyRWxlbWVudCE6IERvY3VtZW50SGVhZGVyRWxlbWVudDtcbiAgICBmb290ZXJFbGVtZW50ITogRG9jdW1lbnRGb290ZXJFbGVtZW50O1xuICAgIGNvbW1lbnRzQ29udGFpbmVyRWxlbWVudCE6IENvbW1zQ29udGFpbmVyRWxlbWVudDtcbiAgICBoZWFkZXJFZGl0U3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignZG9jJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgRG9jdW1lbnRQcm9wcygpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucyk6IERvY3VtZW50UmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgeyB3aWR0aDogZG9jUGl4ZWxzV2lkdGgsIGhlaWdodDogZG9jUGl4ZWxzSGVpZ2h0IH0gPSB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncztcbiAgICAgICAgY29uc3QgZG9jUmVuZGVyT2JqZWN0ID0gbmV3IERvY3VtZW50UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QucmVjdC53aWR0aCA9IGRvY1BpeGVsc1dpZHRoO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QucmVjdC5tYXhXaWR0aCA9IGRvY1BpeGVsc1dpZHRoO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QucmVjdC5tYXhIZWlnaHQgPSBkb2NQaXhlbHNIZWlnaHQ7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5yZWN0LmhlaWdodCA9IGRvY1BpeGVsc0hlaWdodDtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LmVsZW1lbnQgPSB0aGlzO1xuICAgICAgICBjb25zdCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9ID0gdGhpcy5wcm9wcy5wYWRkaW5nO1xuICAgICAgICBsZXQgeyBoZWFkZXJMaW5lOiBoZWFkTGluZSwgZm9vdGVyTGluZTogZm9vdExpbmUgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHsgbW1Ub1BpeGVsc1JhdGlvIH0gPSB0aGlzLnZpZXdPcHRpb25zO1xuICAgICAgICBoZWFkTGluZSA9IGhlYWRMaW5lICogbW1Ub1BpeGVsc1JhdGlvO1xuICAgICAgICBmb290TGluZSA9IGZvb3RMaW5lICogbW1Ub1BpeGVsc1JhdGlvO1xuICAgICAgICBkb2NSZW5kZXJPYmplY3QucGFkZGluZy50b3AgPSBNYXRoLmZsb29yKHRvcCAqIG1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5wYWRkaW5nLmJvdHRvbSA9IE1hdGguZmxvb3IoYm90dG9tICogbW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0LnBhZGRpbmcubGVmdCA9IE1hdGguZmxvb3IobGVmdCAqIG1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5wYWRkaW5nLnJpZ2h0ID0gTWF0aC5mbG9vcihyaWdodCAqIG1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5oZWFkZXJMaW5lID0gaGVhZExpbmU7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5mb290ZXJMaW5lID0gZm9vdExpbmU7XG4gICAgICAgIGRvY1JlbmRlck9iamVjdC5tYXJnaW4udG9wID0gb3B0aW9ucy5kb2NTcGFjZTtcbiAgICAgICAgZG9jUmVuZGVyT2JqZWN0Lm1hcmdpbi5ib3R0b20gPSBvcHRpb25zLmRvY1NwYWNlO1xuICAgICAgICByZXR1cm4gZG9jUmVuZGVyT2JqZWN0O1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnZG9jJyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcygpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBEb2N1bWVudEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEb2N1bWVudEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcylcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pu05paw6aG16L656LedXG4gICAgICogQHBhcmFtIG1hcmdpblByb3BzXG4gICAgICovXG4gICAgdXBkYXRlTWFyZ2luKG1hcmdpblByb3BzOiBQYXJ0aWFsPE1hcmdpblByb3BzPiwgdW5pdDogJ21tJyB8ICdjbScgPSAnY20nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gPSBtYXJnaW5Qcm9wcyBhcyBNYXJnaW5Qcm9wcztcbiAgICAgICAgY29uc3QgcGFkZGlnID0gdGhpcy5wcm9wcy5wYWRkaW5nO1xuICAgICAgICBjb25zdCByYXRpbyA9IHVuaXQgPT09ICdjbScgPyAxMCA6IDE7XG4gICAgICAgIHBhZGRpZy50b3AgPSB0b3AgKiByYXRpbztcbiAgICAgICAgcGFkZGlnLmJvdHRvbSA9IGJvdHRvbSAqIHJhdGlvO1xuICAgICAgICBwYWRkaWcubGVmdCA9IGxlZnQgKiByYXRpbztcbiAgICAgICAgcGFkZGlnLnJpZ2h0ID0gcmlnaHQgKiByYXRpbztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliIfmjaLlvIDlkK/pobXnnInpobXohJrnvJbovpHlip/og71cbiAgICAgKi9cbiAgICBzd2l0Y2hQYWdlSGVhZGVyRWRpdG9yKHNzOiBTZWxlY3Rpb25TdGF0ZSwgZWxlOiBFbGVtZW50IHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlICE9PSBEb2NNb2RlLkRlc2lnbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5oZWFkZXJFZGl0U3RhdGUgJiYgKCFlbGUgfHwgKGVsZSA9PT0gdGhpcy5oZWFkZXJFbGVtZW50IHx8IGVsZSA9PT0gdGhpcy5mb290ZXJFbGVtZW50KSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyRWxlbWVudC5kaXNhYmxlQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm9vdGVyRWxlbWVudC5kaXNhYmxlQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYm9keUVsZW1lbnQuZGlzYWJsZUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyRWRpdFN0YXRlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhlYWRlckVkaXRTdGF0ZSAmJiAoIWVsZSB8fCBlbGUgPT09IHRoaXMuYm9keUVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlckVsZW1lbnQuZGlzYWJsZUNsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZm9vdGVyRWxlbWVudC5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5kaXNhYmxlQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaGVhZGVyRWRpdFN0YXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgc3MuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRSZW5kZXJPYmplY3QgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCB7XG4gICAgY29uc3RydWN0b3IoZWxlOiBFbGVtZW50KSB7XG4gICAgICAgIHN1cGVyKGVsZSk7XG4gICAgfVxuXG4gICAgaGVhZGVyTGluZSE6IG51bWJlcjtcbiAgICBmb290ZXJMaW5lITogbnVtYmVyO1xuXG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgcmVuZGVyLCBwb3NpdGlvbiwgZG9jQ3R4OiB7IHZpZXdPcHRpb25zIH0gfSA9IGU7XG4gICAgICAgIGNvbnN0IHsgd2lkdGg6IGRvY1dpZHRoLCBoZWlnaHQ6IGRvY0hlaWdodCB9ID0gdmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzO1xuICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LmZpbGxSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIGRvY1dpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCAnd2hpdGUnLCA1LCAnYmxhY2snKTtcbiAgICAgICAgZS5yZW5kZXIudHJhbigoKSA9PiB7XG4gICAgICAgICAgICBlLnJlbmRlci5jb250ZW50Q29udGV4dC5jdHguZmlsbFN0eWxlID0gZS5kb2NDdHgudmlld09wdGlvbnMuZGVmYXVsdENvbG9yO1xuICAgICAgICAgICAgZS5uZXh0UmVuZGVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRyYXdDb3B5UmlnaHQodmlld09wdGlvbnMsIHJlbmRlciwgcG9zaXRpb24pO1xuICAgICAgICB0aGlzLmRyYXdEb2NQYWdlTnVtKHJlbmRlciwgdmlld09wdGlvbnMsIHBvc2l0aW9uKTtcbiAgICAgICAgLy/nu5jliLbmlofmoaPovrnot53nur9cbiAgICAgICAgdGhpcy5kcmF3TWFyZ2luTGluZShwb3NpdGlvbiwgcmVuZGVyLCBkb2NXaWR0aCwgZG9jSGVpZ2h0KTtcbiAgICAgICAgdGhpcy5kcmF3V2F0ZXJtYXJrKHJlbmRlciwgdmlld09wdGlvbnMsIHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnu5jliLbniYjmnYPkv6Hmga9cbiAgICAgKi9cbiAgICBwcml2YXRlIGRyYXdDb3B5UmlnaHQodmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXI6IElSZW5kZXJDb250ZXh0Q29udHJhY3QsIHBvc2l0aW9uOiBQb3NpdGlvbikge1xuICAgICAgICBjb25zdCB0ZXh0UCA9IG5ldyBUZXh0UHJvcHMoKTtcbiAgICAgICAgdGV4dFAuY29sb3IgPSBcInJnYigwLDAsMClcIjtcbiAgICAgICAgdGV4dFAuZm9udE5hbWUgPSAn5qW35L2TJztcbiAgICAgICAgdGV4dFAuZm9udFNpemUgPSAxMjtcbiAgICAgICAgaWYgKHZpZXdPcHRpb25zLmNvcHlSaWdodEluZm8pIHtcbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3VGV4dCh2aWV3T3B0aW9ucy5jb3B5UmlnaHRJbmZvLCB0ZXh0UCwgcG9zaXRpb24ueCArIDUsIHBvc2l0aW9uLnkgKyA1LCAxMDAsIDEyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOe7mOWItuaWh+aho+i+uei3nee6v1xuICAgICAqL1xuICAgIHByaXZhdGUgZHJhd01hcmdpbkxpbmUocG9zaXRpb246IFBvc2l0aW9uLCByZW5kZXI6IElSZW5kZXJDb250ZXh0Q29udHJhY3QsIGRvY1dpZHRoOiBudW1iZXIsIGRvY0hlaWdodDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSB0aGlzLnBhZGRpbmc7XG4gICAgICAgIGxldCBwYWRkaW5nUG9zID0geyB4OiBwYWRkaW5nLmxlZnQgKyBwb3NpdGlvbi54LCB5OiBwYWRkaW5nLnRvcCArIHBvc2l0aW9uLnkgfTtcbiAgICAgICAgY29uc3QgZHJhd0xpbmVXaWR0aCA9IDAuNTtcbiAgICAgICAgY29uc3QgbGluZVdpZHRoID0gMjA7XG4gICAgICAgIHJlbmRlci5vdmVybGF5c0NvbnRleHQuc3Ryb2tlTGluZXMoW3sgeDogcGFkZGluZ1Bvcy54IC0gbGluZVdpZHRoLCB5OiBwYWRkaW5nUG9zLnkgfSwgcGFkZGluZ1Bvcywge1xuICAgICAgICAgICAgeDogcGFkZGluZ1Bvcy54LFxuICAgICAgICAgICAgeTogcGFkZGluZ1Bvcy55IC0gbGluZVdpZHRoXG4gICAgICAgIH1dLCBkcmF3TGluZVdpZHRoKTtcbiAgICAgICAgcGFkZGluZ1BvcyA9IHsgeDogZG9jV2lkdGggLSBwYWRkaW5nLnJpZ2h0ICsgcG9zaXRpb24ueCwgeTogcGFkZGluZy50b3AgKyBwb3NpdGlvbi55IH07XG4gICAgICAgIHJlbmRlci5vdmVybGF5c0NvbnRleHQuc3Ryb2tlTGluZXMoW3sgeDogcGFkZGluZ1Bvcy54ICsgbGluZVdpZHRoLCB5OiBwYWRkaW5nUG9zLnkgfSwgcGFkZGluZ1Bvcywge1xuICAgICAgICAgICAgeDogcGFkZGluZ1Bvcy54LFxuICAgICAgICAgICAgeTogcGFkZGluZ1Bvcy55IC0gbGluZVdpZHRoXG4gICAgICAgIH1dLCBkcmF3TGluZVdpZHRoKTtcbiAgICAgICAgcGFkZGluZ1BvcyA9IHsgeDogcGFkZGluZy5sZWZ0ICsgcG9zaXRpb24ueCwgeTogZG9jSGVpZ2h0IC0gdGhpcy5wYWRkaW5nLmJvdHRvbSArIHBvc2l0aW9uLnkgfTtcbiAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5zdHJva2VMaW5lcyhbeyB4OiBwYWRkaW5nUG9zLnggLSBsaW5lV2lkdGgsIHk6IHBhZGRpbmdQb3MueSB9LCBwYWRkaW5nUG9zLCB7XG4gICAgICAgICAgICB4OiBwYWRkaW5nUG9zLngsXG4gICAgICAgICAgICB5OiBwYWRkaW5nUG9zLnkgKyBsaW5lV2lkdGhcbiAgICAgICAgfV0sIGRyYXdMaW5lV2lkdGgpO1xuICAgICAgICBwYWRkaW5nUG9zID0geyB4OiBkb2NXaWR0aCAtIHBhZGRpbmcubGVmdCArIHBvc2l0aW9uLngsIHk6IGRvY0hlaWdodCAtIHRoaXMucGFkZGluZy5ib3R0b20gKyBwb3NpdGlvbi55IH07XG4gICAgICAgIHJlbmRlci5vdmVybGF5c0NvbnRleHQuc3Ryb2tlTGluZXMoW3sgeDogcGFkZGluZ1Bvcy54ICsgbGluZVdpZHRoLCB5OiBwYWRkaW5nUG9zLnkgfSwgcGFkZGluZ1Bvcywge1xuICAgICAgICAgICAgeDogcGFkZGluZ1Bvcy54LFxuICAgICAgICAgICAgeTogcGFkZGluZ1Bvcy55ICsgbGluZVdpZHRoXG4gICAgICAgIH1dLCBkcmF3TGluZVdpZHRoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnu5jliLbmsLTljbBcbiAgICAgKiBAcGFyYW0gY3R4XG4gICAgICogQHBhcmFtIHBvc2l0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBkcmF3V2F0ZXJtYXJrKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucywgcG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZpZXdPcHRpb25zLndhdGVybWFyaykge1xuICAgICAgICAgICAgY29uc3Qgd2F0ZXJtYXJrID0gdmlld09wdGlvbnMud2F0ZXJtYXJrO1xuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmN0eC5zYXZlKCk7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuY3R4LnRyYW5zbGF0ZShwb3NpdGlvbi54LCBwb3NpdGlvbi55KTtcbiAgICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5yZWN0O1xuICAgICAgICAgICAgY29uc3QgZGVncmVlcyA9IE1hdGguYXRhbihoZWlnaHQgLyB3aWR0aCkgKiAxODAgLyBNYXRoLlBJXG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuY3R4LnJvdGF0ZShkZWdyZWVzICogTWF0aC5QSSAvIDE4MCk7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuY3R4Lmdsb2JhbEFscGhhID0gMC4zO1xuICAgICAgICAgICAgY29uc3QgZCA9IE1hdGguc3FydCh3aWR0aCAqIHdpZHRoICsgaGVpZ2h0ICogaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IG5ldyBUZXh0UHJvcHMoKTtcbiAgICAgICAgICAgIHRleHRQcm9wcy5jb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgICAgICAgICAgdGV4dFByb3BzLmZvbnROYW1lID0gJ+alt+S9kyc7XG4gICAgICAgICAgICB0ZXh0UHJvcHMuZm9udFNpemUgPSA2MDtcbiAgICAgICAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGN0eC5jb250ZW50Q29udGV4dC5tZWFzdXJlVGV4dCh3YXRlcm1hcmssIHRleHRQcm9wcykud2lkdGhcbiAgICAgICAgICAgIGNvbnN0IHggPSBkIC8gMiAtIHRleHRXaWR0aCAvIDI7XG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuY3R4LmZvbnQgPSB0ZXh0UHJvcHMuZ2V0Rm9udCgpXG4gICAgICAgICAgICBjdHguY29udGVudENvbnRleHQuY3R4LmZpbGxUZXh0KHdhdGVybWFyaywgeCwgMzApO1xuICAgICAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmN0eC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnu5jliLbmlofmoaPpobXnoIFcbiAgICAgKi9cbiAgICBkcmF3RG9jUGFnZU51bShjdHg6IFJlbmRlckNvbnRleHRUeXBlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIHBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhZ2VXaWR0aCA9IHZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy53aWR0aDtcbiAgICAgICAgY29uc3QgcGFnZUluZGV4ID0gdGhpcy5nZXRJbmRleCgpICsgMSArIHZpZXdPcHRpb25zLnBhZ2VOdW1PZmZzZXQ7XG4gICAgICAgIGNvbnN0IHN0ciA9IENvbW1vblV0aWwucGFyc2VUZXh0KHZpZXdPcHRpb25zLnBhZ2VOdW1Gb3JtYXQsIHsgaW5kZXg6IHBhZ2VJbmRleCwgY291bnQ6IHRoaXMucGFyZW50Lmxlbmd0aCB9KTtcbiAgICAgICAgY29uc3QgdGV4dFByb3BzID0gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICB0ZXh0UHJvcHMuY29sb3IgPSBcInJnYigwLDAsMClcIjtcbiAgICAgICAgdGV4dFByb3BzLmZvbnROYW1lID0gJ+S7v+Wuiyc7XG4gICAgICAgIHRleHRQcm9wcy5mb250U2l6ZSA9IDE0O1xuICAgICAgICB0ZXh0UHJvcHMuZm9udFN0eWxlID0gJ2l0YWxpYyc7XG4gICAgICAgIGNvbnN0IHNpemUgPSBjdHguY29udGVudENvbnRleHQubWVhc3VyZVRleHQoc3RyLCB0ZXh0UHJvcHMpO1xuICAgICAgICBjb25zdCBhbGlnbkNlbnRlclggPSBwb3NpdGlvbi54ICsgTWF0aC5jZWlsKHBhZ2VXaWR0aCAvIDIpIC0gTWF0aC5jZWlsKHNpemUud2lkdGggLyAyKVxuICAgICAgICBjb25zdCBwYWludFkgPSBwb3NpdGlvbi55ICsgdGhpcy5yZWN0LmhlaWdodCAtIHNpemUuaGVpZ2h0IC0gNTtcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KHN0ciwgdGV4dFByb3BzLCBhbGlnbkNlbnRlclgsIHBhaW50WSwgc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5a6e546wJyk7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IERvY3VtZW50UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgY2xvbmVSZW5kZXIuaGVhZGVyTGluZSA9IHRoaXMuaGVhZGVyTGluZTtcbiAgICAgICAgY2xvbmVSZW5kZXIuZm9vdGVyTGluZSA9IHRoaXMuZm9vdGVyTGluZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxEb2N1bWVudFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnZG9jJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8RG9jdW1lbnRQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gbmV3IERvY3VtZW50RWxlbWVudCgpO1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgRG9jdW1lbnRQcm9wcztcbiAgICAgICAgY29uc3QgZG9jUHJvcHMgPSBkb2N1bWVudEVsZW1lbnQucHJvcHM7XG4gICAgICAgIGRvY1Byb3BzLndpZHRoID0gcHJvcHMud2lkdGg7XG4gICAgICAgIGRvY1Byb3BzLmhlaWdodCA9IHByb3BzLmhlaWdodDtcbiAgICAgICAgZG9jUHJvcHMucGFkZGluZyA9IG5ldyBQYWRkaW5nUHJvcHMocHJvcHMucGFkZGluZy50b3AsIHByb3BzLnBhZGRpbmcuYm90dG9tLCBwcm9wcy5wYWRkaW5nLmxlZnQsIHByb3BzLnBhZGRpbmcucmlnaHQpO1xuICAgICAgICBkb2NQcm9wcy5oZWFkZXJMaW5lID0gcHJvcHMuaGVhZGVyTGluZSA/PyAxMjtcbiAgICAgICAgZG9jUHJvcHMuZm9vdGVyTGluZSA9IHByb3BzLmZvb3RlckxpbmUgPz8gMTI7XG4gICAgICAgIGRvY1Byb3BzLnNjcmlwdHMgPSBwcm9wcy5zY3JpcHRzO1xuICAgICAgICBkb2NQcm9wcy5jcmVhdGVVc2VySWQgPSBwcm9wcy5jcmVhdGVVc2VySWQ7XG4gICAgICAgIGRvY1Byb3BzLmNyZWF0ZVVzZXJOYW1lID0gcHJvcHMuY3JlYXRlVXNlck5hbWU7XG4gICAgICAgIGRvY1Byb3BzLmNyZWF0ZURhdGUgPSBwcm9wcy5jcmVhdGVEYXRlO1xuICAgICAgICBkb2NQcm9wcy5vcmllbnQgPSBwcm9wcy5vcmllbnQgPz8gJ3BvcnRyYWl0JztcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudDtcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7QmxvY2tDb250YWluZXJFbGVtZW50LCBFbGVtZW50LCBFbGVtZW50RmFjdG9yeSwgUmVjdCwgU2VyaWFsaXplUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtNb3VzZUVsZW1lbnRFdmVudH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0RvY3VtZW50RWxlbWVudH0gZnJvbSBcIi4vZG9jLWltcGxcIjtcblxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRCb2R5RWxlbWVudCBleHRlbmRzIEJsb2NrQ29udGFpbmVyRWxlbWVudCB7XG4gICAgLy/lvZPliY3ljLrln5/lhoXmmK/lkKbnlZnnl5VcbiAgICB0cmFja0NoYW5nZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignYm9keScpO1xuICAgICAgICAvL3RoaXMuZWRpdE1vZGUgPSBFZGl0TW9kZS5GcmVlO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50RGJsQ2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN3aXRjaEVkaXRNb2RlKGV2dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3Qge1xuICAgICAgICByZXR1cm4gbmV3IERvY3VtZW50Qm9keVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2JvZHknLFxuICAgICAgICAgICAgcHJvcHM6IHt9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2hFZGl0TW9kZShldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0VsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUodGhpcywgRG9jdW1lbnRFbGVtZW50KTtcbiAgICAgICAgaWYgKGRvY0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGRvY0VsZW1lbnQuc3dpdGNoUGFnZUhlYWRlckVkaXRvcihldnQuc2VsZWN0aW9uU3RhdGUsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRG9jdW1lbnRCb2R5RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERvY3VtZW50Qm9keUVsZW1lbnQoKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cblxufVxuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEJvZHlSZW5kZXJPYmplY3QgZXh0ZW5kcyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIHBvc2l0aW9ufSA9IGU7XG4gICAgICAgIHJlbmRlci50cmFuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQuZGlzYWJsZUNsaWNrICYmIHJlbmRlci5kcmF3TW9kZSA9PT0gJ3ZpZXcnKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnNldEdsb2JhbEFscGhhKDAuNSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLm5leHRSZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xvbmUoY2xvbmVEYXRhID0gdHJ1ZSk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IERvY3VtZW50Qm9keVJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGlmIChjbG9uZURhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cblxufVxuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEJvZHlGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8bnVsbD4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2JvZHknO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgRG9jdW1lbnRCb2R5RWxlbWVudCgpO1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbn1cblxuIiwiaW1wb3J0IHtCbG9ja0NvbnRhaW5lckVsZW1lbnQsIEVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBSZWN0LCBTZXJpYWxpemVQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge01vdXNlRWxlbWVudEV2ZW50fSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCwgSVJlbmRlckRhdGEsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RG9jdW1lbnRFbGVtZW50fSBmcm9tIFwiLi9kb2MtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRGb290ZXJFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2Zvb3RlcicpO1xuICAgICAgICAvL3RoaXMuZWRpdE1vZGUgPSBFZGl0TW9kZS5EaXNhYmxlZDtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50RGJsQ2xpY2snLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaEVkaXRNb2RlKGV2dCk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRG9jdW1lbnRGb290ZXJFbGVtZW50KCk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgc3dpdGNoRWRpdE1vZGUoZXZ0OiBNb3VzZUVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2NFbGVtZW50ID0gdGhpcy5wYXJlbnQgYXMgRG9jdW1lbnRFbGVtZW50O1xuICAgICAgICBkb2NFbGVtZW50LnN3aXRjaFBhZ2VIZWFkZXJFZGl0b3IoZXZ0LnNlbGVjdGlvblN0YXRlLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBEb2N1bWVudEZvb3RlclJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlck9iamVjdCA9IG5ldyBEb2N1bWVudEZvb3RlclJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHJlbmRlck9iamVjdDtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUoKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2Zvb3RlcicsXG4gICAgICAgICAgICBwcm9wczoge31cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50Rm9vdGVyUmVuZGVyT2JqZWN0IGV4dGVuZHMgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3Qge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBwb3NpdGlvbn0gPSBlO1xuICAgICAgICByZW5kZXIudHJhbigoKSA9PiB7XG4gICAgICAgICAgICAvL+WIpOaWremhteecieaYr+WQpuS4uui+k+WFpeWGheWuuVxuICAgICAgICAgICAgY29uc3QgaXNGb290ZXJFbXB0eSA9IEVsZW1lbnRVdGlsLmNoZWNrRW1wdHlDb250ZW50KHRoaXMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5kaXNhYmxlQ2xpY2sgJiYgcmVuZGVyLmRyYXdNb2RlID09PSAndmlldycpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNGb290ZXJFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc2V0R2xvYmFsQWxwaGEoMCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnNldEdsb2JhbEFscGhhKDAuNSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZS5uZXh0UmVuZGVyKCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEb2N1bWVudEZvb3RlclJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEZvb3RlckZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxudWxsPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnZm9vdGVyJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IGFueSwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbmV3IERvY3VtZW50Rm9vdGVyRWxlbWVudCgpO1xuICAgICAgICAvL2VsZW1lbnQucmVuZGVyQ3R4ID0gcmVuZGVyQ3R4O1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBCbG9ja0NvbnRhaW5lckVsZW1lbnQsIEVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBTZXJpYWxpemVQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgTW91c2VFbGVtZW50RXZlbnQgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgUmVuZGVyQ29udGV4dFR5cGUgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7IEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSwgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7IERvY3VtZW50RWxlbWVudCB9IGZyb20gXCIuL2RvYy1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudEhlYWRlckVsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lckVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignaGVhZGVyJyk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnREYmxDbGljaycsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNoRWRpdE1vZGUoZXZ0KTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIC8vdGhpcy5lZGl0TW9kZSA9IEVkaXRNb2RlLkRpc2FibGVkO1xuICAgICAgICB0aGlzLmRpc2FibGVDbGljayA9IHRydWU7XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEb2N1bWVudEhlYWRlckVsZW1lbnQoKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBzd2l0Y2hFZGl0TW9kZShldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRvY0VsZW1lbnQgPSB0aGlzLnBhcmVudCBhcyBEb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIGRvY0VsZW1lbnQuc3dpdGNoUGFnZUhlYWRlckVkaXRvcihldnQuc2VsZWN0aW9uU3RhdGUsIHRoaXMpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogRG9jdW1lbnRIZWFkZXJSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXJPYmplY3QgPSBuZXcgRG9jdW1lbnRIZWFkZXJSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJldHVybiByZW5kZXJPYmplY3Q7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKCk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdoZWFkZXInLFxuICAgICAgICAgICAgcHJvcHM6IHt9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRIZWFkZXJSZW5kZXJPYmplY3QgZXh0ZW5kcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgcmVuZGVyLCBwb3NpdGlvbiB9ID0gZTtcbiAgICAgICAgcmVuZGVyLnRyYW4oKCkgPT4ge1xuICAgICAgICAgICAgLy/liKTmlq3pobXnnInmmK/lkKbkuLrovpPlhaXlhoXlrrlcbiAgICAgICAgICAgIGNvbnN0IGlzSGVhZGVyRW1wdHkgPSBFbGVtZW50VXRpbC5jaGVja0VtcHR5Q29udGVudCh0aGlzKTtcbiAgICAgICAgICAgIC8v5a2Y5Zyo6L6T5YWl5YaF5a655pe277yM57uY5Yi26aG155yJLemhteS9k+WIhuWJsue6v1xuICAgICAgICAgICAgaWYgKCFpc0hlYWRlckVtcHR5IHx8ICF0aGlzLmVsZW1lbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyTGluZVkgPSB0aGlzLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3SG9yaUxpbmUocG9zaXRpb24ueCwgcG9zaXRpb24ueSArIGhlYWRlckxpbmVZLCB0aGlzLnJlY3Qud2lkdGgsICdibGFjaycsIDAuNSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50LmRpc2FibGVDbGljayAmJiByZW5kZXIuZHJhd01vZGUgPT09ICd2aWV3Jykge1xuICAgICAgICAgICAgICAgIGlmIChpc0hlYWRlckVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zZXRHbG9iYWxBbHBoYSgwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc2V0R2xvYmFsQWxwaGEoMC43KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUubmV4dFJlbmRlcigpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IERvY3VtZW50SGVhZGVyUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50SGVhZGVyRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PG51bGw+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdoZWFkZXInO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgRG9jdW1lbnRIZWFkZXJFbGVtZW50KCk7XG4gICAgICAgIC8vZWxlbWVudC5yZW5kZXJDdHggPSByZW5kZXJDdHg7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgQmxvY2tDb250ZW50RWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBFbGVtZW50LFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zLFxuICAgIHJlYWRFbGVtZW50UHJvcHNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBDb250ZXh0TWVudUVsZW1lbnRFdmVudCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgUGFyYWdyYXBoUHJvcHMgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtcbiAgICBCbG9ja0xpbmVSZWN0UmVuZGVyT2JqZWN0LCBJUmVuZGVyRGF0YSxcbiAgICBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCxcbiAgICBSZW5kZXJPYmplY3Rcbn0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCAqIGFzIEhpc3RvcnkgZnJvbSAnLi4vLi4vZWxlbWVudC10cmFjZS10cmFja2luZydcblxuZXhwb3J0IGNsYXNzIFBhcmFncmFwaEVsZW1lbnQgZXh0ZW5kcyBCbG9ja0NvbnRlbnRFbGVtZW50PFBhcmFncmFwaFByb3BzPiB7XG4gICAgLy9wcm9wczogUGFyYWdyYXBoUHJvcHM7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdwJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgUGFyYWdyYXBoUHJvcHMoKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnQmFja3NwYWNlS2V5JywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2dC5zZWxlY3Rpb25TdGF0ZS5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwRmlyc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldEZpcnN0TGVhZkVsZW1lbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgaWYgKHBGaXJzdExlYWZFbGVtZW50ID09PSBldnQuc291cmNlICYmIGV2dC5zb3VyY2VPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMubnVtYmVyVHlwZSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm51bWJlclR5cGUgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5pc0NhbmNlbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5pbmRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuaW5kZW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2dC5pc0NhbmNlbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5qC35byPXG4gICAgICogQHBhcmFtIGZvcm1hdFxuICAgICAqL1xuICAgIHNldEZvcm1hdChmb3JtYXQ6IFBhcnRpYWw8UGFyYWdyYXBoUHJvcHM+KTogdm9pZCB7XG4gICAgICAgIEhpc3RvcnkuZm9ybWF0RWxlKHRoaXMsIGZvcm1hdCk7XG4gICAgICAgIE9iamVjdC5rZXlzKGZvcm1hdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9wc1trZXldID0gZm9ybWF0W2tleV07XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IFBhcmFncmFwaFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHBhcmFSZW5kZXIgPSBuZXcgUGFyYWdyYXBoUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZXR1cm4gcGFyYVJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3AnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBQYXJhZ3JhcGhFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVFbGVtZW50KCk6IFBhcmFncmFwaEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gbmV3IFBhcmFncmFwaEVsZW1lbnQoKTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFBhcmFncmFwaFJlbmRlck9iamVjdCBleHRlbmRzIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgZS5uZXh0UmVuZGVyKCk7XG4gICAgICAgIHRoaXMuZHJhd1Byb2plY3ROdW1iZXIoZS5yZW5kZXIsIGUuZG9jQ3R4LnZpZXdPcHRpb25zKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOe7mOWItumhueebruespuWPt1xuICAgICAqL1xuICAgIGRyYXdQcm9qZWN0TnVtYmVyKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJhRWxlbWVudCA9IHRoaXMuZWxlbWVudCBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICBpZiAocGFyYUVsZW1lbnQucHJvcHMubnVtYmVyVHlwZSA+PSAwKSB7XG4gICAgICAgICAgICBpZiAocGFyYUVsZW1lbnQucGFpbnRSZW5kZXJzLmluZGV4T2YodGhpcykgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmlyc3RMaW5lID0gdGhpcy5nZXRDaGlsZCgwKSBhcyBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGlmICghZmlyc3RMaW5lKSB7XG4gICAgICAgICAgICAgICAgZGVidWdnZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaXJzdElubGluZSA9IGZpcnN0TGluZS5nZXRDaGlsZCgwKTtcbiAgICAgICAgICAgIGlmICghZmlyc3RJbmxpbmUpIHtcbiAgICAgICAgICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SW5saW5lUGFpbnRQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKGZpcnN0SW5saW5lLCB7XG4gICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICB5OiAtdmlld09wdGlvbnMudHJhbnNsYXRlWVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBudW1iZXJTeW1ib2xZID0gZmlyc3RJbmxpbmVQYWludFBvcy55ICsgTWF0aC5jZWlsKGZpcnN0SW5saW5lLnJlY3QuaGVpZ2h0IC8gMik7XG4gICAgICAgICAgICAvL2N0eC5jb250ZW50Q29udGV4dC5kcmF3VGV4dChzdHIsIHRleHRQcm9wcywgZmlyc3RJbmxpbmVQYWludFBvcy54IC0gcGFyYUVsZW1lbnQucGFyYVByb3BzLmluZGVudCwgbnVtYmVyU3ltYm9sWSwgMTQsIDE0KTtcbiAgICAgICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5maWxsQ2lyY3VsYXIoZmlyc3RJbmxpbmVQYWludFBvcy54IC0gcGFyYUVsZW1lbnQucHJvcHMuaW5kZW50ICsgMiwgbnVtYmVyU3ltYm9sWSwgNClcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgUGFyYWdyYXBoUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbiAgICBjcmVhdGVMaW5lUmVjdCgpOiBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGxpbmVSZWN0ID0gbmV3IFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGxpbmVSZWN0LnJlY3QubWF4V2lkdGggPSB0aGlzLnJlY3QubWF4V2lkdGg7XG4gICAgICAgIHJldHVybiBsaW5lUmVjdDtcbiAgICB9XG5cblxufVxuXG5leHBvcnQgY2xhc3MgUGFyYWdyYXBoRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFBhcmFncmFwaFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAncCc7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPFBhcmFncmFwaFByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwYXJhRWxlbWVudCA9IG5ldyBQYXJhZ3JhcGhFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcztcbiAgICAgICAgcGFyYUVsZW1lbnQucHJvcHMuaW5kZW50ID0gcHJvcHM/LmluZGVudCA/PyAwO1xuICAgICAgICBwYXJhRWxlbWVudC5wcm9wcy5oYW5naW5nID0gcHJvcHM/LmhhbmdpbmcgPz8gMDtcbiAgICAgICAgcGFyYUVsZW1lbnQucHJvcHMudGV4dEFsaWduID0gcHJvcHM/LnRleHRBbGlnbiA/PyAnbGVmdCc7XG4gICAgICAgIHBhcmFFbGVtZW50LnByb3BzLm51bWJlclR5cGUgPSBwcm9wcz8ubnVtYmVyVHlwZSA/PyAtMTtcbiAgICAgICAgcGFyYUVsZW1lbnQucHJvcHMubGluZUhlaWdodCA9IHByb3BzPy5saW5lSGVpZ2h0ID8/IDEuMztcbiAgICAgICAgcGFyYUVsZW1lbnQucHJvcHMucGFnZUJyZWFrID0gcHJvcHM/LnBhZ2VCcmVhayA/PyBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHBhcmFFbGVtZW50O1xuICAgIH1cbn1cblxuLyoqXG4gKiDmrrXokL3ooYzmoYZcbiAqL1xuZXhwb3J0IGNsYXNzIFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0IGV4dGVuZHMgQmxvY2tMaW5lUmVjdFJlbmRlck9iamVjdCB7XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRWxlbWVudCwgTGVhZkVsZW1lbnQsIFNlcmlhbGl6ZVByb3BzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IElSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgVGV4dFByb3BzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcblxuZXhwb3J0IGNsYXNzIFBTeW1ib2xFbGVtZW50IGV4dGVuZHMgTGVhZkVsZW1lbnQge1xuICAgIHRleHRQcm9wczogVGV4dFByb3BzO1xuICAgIGRlZmF1bHRIZWlnaHQgPSAxNDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigncHN5bScpO1xuICAgICAgICB0aGlzLnRleHRQcm9wcyA9IG5ldyBUZXh0UHJvcHMoKTtcbiAgICAgICAgdGhpcy50ZXh0UHJvcHMuZm9udFNpemUgPSB0aGlzLmRlZmF1bHRIZWlnaHQ7XG4gICAgICAgIHRoaXMudGV4dFByb3BzLmZvbnROYW1lID0gJ+Wui+S9kyc7XG4gICAgICAgIHRoaXMudGV4dFByb3BzLmNvbG9yID0gJyM4YzhjOGMnO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3Qgc3ltYm9sID0gbmV3IFBTeW1ib2xSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHN5bWJvbC5yZWN0LmhlaWdodCA9IHRoaXMuZGVmYXVsdEhlaWdodDtcbiAgICAgICAgc3ltYm9sLnJlY3Qud2lkdGggPSA3O1xuICAgICAgICByZXR1cm4gc3ltYm9sO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSgpOiBTZXJpYWxpemVQcm9wcyB8IG51bGwge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgUFN5bWJvbEVsZW1lbnQoKTtcbiAgICAgICAgY2xvbmUuZGVmYXVsdEhlaWdodCA9IHRoaXMuZGVmYXVsdEhlaWdodDtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldFNlbGZMZW5ndGgocHVyZTogYm9vbGVhbik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBwdXJlID8gMCA6IDE7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUFN5bWJvbFJlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Q8UFN5bWJvbEVsZW1lbnQ+IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyByZW5kZXIsIHBvc2l0aW9uIH0gPSBlO1xuICAgICAgICBpZiAocmVuZGVyLmRyYXdNb2RlID09PSAncHJpbnQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KCfipLYnLCB0aGlzLmVsZW1lbnQudGV4dFByb3BzLCBwb3NpdGlvbi54LCBwb3NpdGlvbi55LCAyMCwgdGhpcy5yZWN0LmhlaWdodCk7XG4gICAgfVxuXG4gICAgLy/nu5jliLbmrrXokL3nrKblj7dcbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgUFN5bWJvbFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICByZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxufVxuXG4iLCJpbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyRWxlbWVudCxcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIFBhZGRpbmdQcm9wcyxcbiAgICByZWFkRWxlbWVudFByb3BzLFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtUYWJsZUNlbGxQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJbmxpbmVNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCwgSVJlbmRlckRhdGEsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7VGFibGVFbGVtZW50fSBmcm9tIFwiLi90YWJsZS1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZUNlbGxFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50PFRhYmxlQ2VsbFByb3BzPiB7XG4gICAgLy9wcm9wczogVGFibGVDZWxsUHJvcHM7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCd0YmMnKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBUYWJsZUNlbGxQcm9wcygpO1xuICAgICAgICAvL3RoaXMuYWRkUHJvcFZhbHVlQ2hhbmdlZFN1Yih0aGlzLnByb3BzKTtcbiAgICB9XG5cbiAgICBiZWdpbk1lYXN1cmUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmJlZ2luTWVhc3VyZSgpO1xuICAgICAgICB0aGlzLmRpc2FibGVDbGljayA9ICF0aGlzLmlzTm90QmVNZXJnZWRDZWxsKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5LiN6KKr5ZCI5bm25Y2V5YWD5qC855qE5Y2V5YWD5qC8XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBpc05vdEJlTWVyZ2VkQ2VsbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuaE1lcmdlICE9PSAnY29udGludWUnICYmIHRoaXMucHJvcHMudk1lcmdlICE9PSAnY29udGludWUnO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTm90QmVNZXJnZWRDZWxsKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtjZWxsV2lkdGgsIGNlbGxPZmZzZXR9ID0gdGhpcy5nZXRDZWxsV2lkdGgoKTtcbiAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IG5ldyBUYWJsZUNlbGxSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIGNlbGxSZW5kZXIucmVjdC53aWR0aCA9IGNlbGxXaWR0aDtcbiAgICAgICAgY2VsbFJlbmRlci5yZWN0Lm1heFdpZHRoID0gY2VsbFdpZHRoO1xuICAgICAgICBjZWxsUmVuZGVyLnBhZGRpbmcgPSBuZXcgUGFkZGluZ1Byb3BzKDAsIDAsIDUsIDUpO1xuICAgICAgICBjZWxsUmVuZGVyLnJlY3QueCA9IGNlbGxPZmZzZXQ7XG4gICAgICAgIHJldHVybiBjZWxsUmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZShvcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICd0YmMnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBUYWJsZUNlbGxFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2xvbmUuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIGdldENlbGxXaWR0aCgpOiB7IGNlbGxXaWR0aDogbnVtYmVyLCBjZWxsT2Zmc2V0OiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMucGFyZW50O1xuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb3cgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhYmxlID0gcm93LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNlbGxJbmRleCA9IHJvdy5nZXRDaGlsZEluZGV4KHRoaXMpO1xuICAgICAgICBsZXQgY2VsbFdpZHRoID0gdGFibGUuZ2V0Q2VsbFdpZHRoKGNlbGxJbmRleCk7XG4gICAgICAgIGNvbnN0IGNlbGxPZmZzZXQgPSB0YWJsZS5nZXRDZWxsT2Zmc2V0WChjZWxsSW5kZXgpO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5oTWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNlbGxJbmRleCArIDE7IGkgPCB0YWJsZS5nZXRDb2xzQ291bnQoKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dENlbGwgPSByb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAobmV4dENlbGwucHJvcHMuaE1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGxXaWR0aCArPSB0YWJsZS5nZXRDZWxsV2lkdGgoaSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7Y2VsbFdpZHRoLCBjZWxsT2Zmc2V0fTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlQ2VsbCgpOiBUYWJsZUNlbGxFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdGMgPSBuZXcgVGFibGVDZWxsRWxlbWVudCgpO1xuICAgICAgICByZXR1cm4gdGM7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZUNlbGxSZW5kZXJPYmplY3QgZXh0ZW5kcyBJbmxpbmVNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdCB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIHBvc2l0aW9ufSA9IGU7XG4gICAgICAgIHJlbmRlci50cmFuKCgpID0+IHtcbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5jbGlwKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCk7XG4gICAgICAgICAgICBjb25zdCB7aE1lcmdlLCB2TWVyZ2UsIGJhY2tncm91bmRDb2xvciwgZGlhZ29uYWx9ID0gKDxUYWJsZUNlbGxFbGVtZW50PnRoaXMuZWxlbWVudCkucHJvcHM7XG4gICAgICAgICAgICBpZiAoaE1lcmdlID09PSAnY29udGludWUnIHx8IHZNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zZXRHbG9iYWxBbHBoYSgwKTtcbiAgICAgICAgICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LnNldEdsb2JhbEFscGhhKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJhY2tncm91bmRDb2xvciAmJiB0aGlzLnJlY3Qud2lkdGggJiYgdGhpcy5yZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5maWxsUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsIGJhY2tncm91bmRDb2xvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkaWFnb25hbCAmJiB0aGlzLnJlY3Qud2lkdGggJiYgdGhpcy5yZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgICAgIGxldCBkaWFnb25hbFN0YXJ0WCA9IGRpYWdvbmFsID09PSAnbWFpbicgPyBwb3NpdGlvbi54IDogcG9zaXRpb24ueCArIHRoaXMucmVjdC53aWR0aDtcbiAgICAgICAgICAgICAgICBsZXQgZGlhZ29uYWxTdGFydFkgPSBwb3NpdGlvbi55O1xuICAgICAgICAgICAgICAgIGxldCBkaWFnb25hbEVuZFggPSBkaWFnb25hbCA9PT0gJ21haW4nID8gcG9zaXRpb24ueCArIHRoaXMucmVjdC53aWR0aCA6IHBvc2l0aW9uLng7XG4gICAgICAgICAgICAgICAgbGV0IGRpYWdvbmFsRW5kWSA9IHBvc2l0aW9uLnkgKyB0aGlzLnJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zdHJva2VMaW5lcyhbe3g6IGRpYWdvbmFsU3RhcnRYLCB5OiBkaWFnb25hbFN0YXJ0WX0sIHtcbiAgICAgICAgICAgICAgICAgICAgeDogZGlhZ29uYWxFbmRYLFxuICAgICAgICAgICAgICAgICAgICB5OiBkaWFnb25hbEVuZFlcbiAgICAgICAgICAgICAgICB9XSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUubmV4dFJlbmRlcigpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IFRhYmxlQ2VsbFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnBhZGRpbmcgPSB0aGlzLnBhZGRpbmc/LmNsb25lKCk7XG4gICAgICAgIGNsb25lUmVuZGVyLm1hcmdpbiA9IHRoaXMubWFyZ2luPy5jbG9uZSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lUmVuZGVyLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lUmVuZGVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRhYmxlQ2VsbEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxUYWJsZUNlbGxQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3RiYyc7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPFRhYmxlQ2VsbFByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCB0YyA9IG5ldyBUYWJsZUNlbGxFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcztcbiAgICAgICAgdGMucHJvcHMudk1lcmdlID0gcHJvcHM/LnZNZXJnZSA/PyBudWxsO1xuICAgICAgICB0Yy5wcm9wcy5oTWVyZ2UgPSBwcm9wcz8uaE1lcmdlID8/IG51bGw7XG4gICAgICAgIHRjLnByb3BzLnZBbGlnbiA9IHByb3BzPy52QWxpZ24gPz8gbnVsbDtcbiAgICAgICAgdGMucHJvcHMuYmFja2dyb3VuZENvbG9yID0gcHJvcHM/LmJhY2tncm91bmRDb2xvciA/PyBudWxsO1xuICAgICAgICB0Yy5wcm9wcy5kaWFnb25hbCA9IHByb3BzPy5kaWFnb25hbCA/PyBudWxsO1xuICAgICAgICAvL3RjLnJlbmRlckN0eCA9IHJlbmRlckN0eDtcbiAgICAgICAgcmV0dXJuIHRjO1xuICAgIH1cblxufVxuIiwiaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lckVsZW1lbnQsXG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBNb2RpZnlGbGFnLFxuICAgIHJlYWRFbGVtZW50UHJvcHMsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge1RhYmxlUm93UHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIE11aWx0QmxvY2tMaW5lUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge1RhYmxlQ2VsbEVsZW1lbnR9IGZyb20gXCIuL3RhYmxlLWNlbGwtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgVGFibGVSb3dFbGVtZW50IGV4dGVuZHMgQmxvY2tDb250YWluZXJFbGVtZW50PFRhYmxlUm93UHJvcHM+IHtcbiAgICAvL3Byb3BzOiBUYWJsZVJvd1Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigndHInKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBUYWJsZVJvd1Byb3BzKCk7XG4gICAgICAgIC8v5Zyo5beu5byC5pu05paw5Lit77yM55Sx5LqO6KGM5YaF5Y2V5YWD5qC85a2Y5Zyo5ZCI5bm26KGM55qE5oOF5Ya177yM6ZyA6KaB5bCG5b2T5YmN6KGM5YaF5a2Y5Zyo5ZCI5bm255qE5Y2V5YWD5qC877yM5bCG5YW25L+u5pS55qCH5b+X5pS55Li65L+u5pS5XG4gICAgICAgIGNvbnN0IGNoYW5nZVN1YiA9IHRoaXMub25DaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLlRyYWNrKSB7XG4gICAgICAgICAgICAgICAgLy90aGlzLmNoZWNrUm93TW9kaWZ5U3RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnB1Yk9uQ2hhbmdlKCd0by1jaGlsZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRzdWJzY3JpYmUodGhpcywgY2hhbmdlU3ViKTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZVJvd1JlbmRlck9iamVjdCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ3RyJyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcz8uZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBUYWJsZVJvd0VsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZVJvdyhjb2xzOiBudW1iZXIpOiBUYWJsZVJvd0VsZW1lbnQge1xuICAgICAgICBjb25zdCB0ciA9IG5ldyBUYWJsZVJvd0VsZW1lbnQoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzOyBpKyspIHtcbiAgICAgICAgICAgIHRyLmFkZENoaWxkKFRhYmxlQ2VsbEVsZW1lbnQuY3JlYXRlQ2VsbCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVSb3dSZW5kZXJPYmplY3QgZXh0ZW5kcyBNdWlsdEJsb2NrTGluZVJlbmRlck9iamVjdDxUYWJsZVJvd0VsZW1lbnQ+IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICB9XG5cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IFRhYmxlUm93UmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUYWJsZVJvd0ZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxUYWJsZVJvd1Byb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAndHInO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxUYWJsZVJvd1Byb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgVGFibGVSb3dQcm9wcztcbiAgICAgICAgY29uc3QgdHIgPSBuZXcgVGFibGVSb3dFbGVtZW50KCk7XG4gICAgICAgIHRyLnByb3BzLm1pbkhlaWdodCA9IHByb3BzPy5taW5IZWlnaHQgPz8gLTE7XG4gICAgICAgIHRyLnByb3BzLmhlYWRlclJvdyA9IHByb3BzPy5oZWFkZXJSb3c7XG4gICAgICAgIHJldHVybiB0cjtcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7IFNlbGVjdGlvblN0YXRlIH0gZnJvbSBcIi4uLy4uL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBQYXJhZ3JhcGhFbGVtZW50IH0gZnJvbSBcIi4uL3BhcmFncmFwaC9wLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlQ2VsbEVsZW1lbnQgfSBmcm9tIFwiLi90YWJsZS1jZWxsLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlRWxlbWVudCB9IGZyb20gXCIuL3RhYmxlLWltcGxcIjtcbmltcG9ydCB7IFRhYmxlUm93RWxlbWVudCB9IGZyb20gXCIuL3RhYmxlLXJvdy1pbXBsXCI7XG5cblxuZXhwb3J0IGNsYXNzIFRhYmxlVXRpbCB7XG5cbiAgICBzdGF0aWMgY2FuRGVsZXRlVGFibGUoc3M6IFNlbGVjdGlvblN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sIH0gPSBzcztcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YiA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlRWxlbWVudCk7XG4gICAgICAgIHJldHVybiAhIXRiO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagoemqjOW9k+WJjemAieWMuuaYr+WQpuWPr+S7peaJp+ihjOWQiOW5tuWNleWFg+agvOaTjeS9nFxuICAgICAqIEBwYXJhbSBzc1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGNhbk1lcmdlQ2VsbHMoc3M6IFNlbGVjdGlvblN0YXRlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgYW5jZXN0b3JDb21tb25Db250cm9sLCBzdGFydENvbnRyb2wsIGVuZENvbnRyb2wsIGNvbGxhcHNlZCwgc2VsZWN0ZWRSYW5nZSB9ID0gc3M7XG4gICAgICAgIGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50IHx8IGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlUm93RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgdGJFbGVtZW50ID0gYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50ID8gYW5jZXN0b3JDb21tb25Db250cm9sIDogYW5jZXN0b3JDb21tb25Db250cm9sLnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGVuZENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZW5kQ29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoc3RhcnRDZWxsPy5wYXJlbnQ/LnBhcmVudCA9PT0gdGJFbGVtZW50ICYmIGVuZENlbGw/LnBhcmVudD8ucGFyZW50ID09PSB0YkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YlJlZ2lvbiA9IHRoaXMuZ2V0VGFibGVSZWN0U2VsZWN0ZWRSZWdpb24odGJFbGVtZW50LCBzdGFydENlbGwsIGVuZENlbGwpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlICYmIHNlbGVjdGVkUmFuZ2UudGFyZ2V0ID09PSB0YkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsczogQXJyYXk8VGFibGVDZWxsRWxlbWVudD4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5zZWxlY3RlZENoaWxkcmVuLmV2ZXJ5KGl0ZW0gPT4gaXRlbS5zZWxlY3RlZENoaWxkcmVuLmV2ZXJ5KGNlbGwgPT4gc2VsZWN0ZWRDZWxscy5wdXNoKGNlbGwudGFyZ2V0IGFzIFRhYmxlQ2VsbEVsZW1lbnQpKSk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0YlJlZ2lvbi5zdGFydFJvdzsgaSA8PSB0YlJlZ2lvbi5lbmRSb3c7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyclJvdyA9IHRiRWxlbWVudC5nZXRDaGlsZDxUYWJsZVJvd0VsZW1lbnQ+KGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IHRiUmVnaW9uLnN0YXJ0Q29sOyBqIDw9IHRiUmVnaW9uLmVuZENvbDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyckNlbGwgPSBjdXJyUm93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyQ2VsbC5pc05vdEJlTWVyZ2VkQ2VsbCgpICYmIHNlbGVjdGVkQ2VsbHMuaW5kZXhPZihjdXJyQ2VsbCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmqKrlkJHlkIjlubblvZPliY3ljZXlhYPmoLzlkIjlubbnu5PmnZ/ntKLlvJXkvY3nva5cbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICAgKiBAcGFyYW0gY29sSW5kZXhcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0SE1lcmdlRW5kSW5kZXgodGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0Yi5nZXRDaGlsZChyb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBsZXQgaW5kZXggPSBjb2xJbmRleDtcbiAgICAgICAgZm9yIChsZXQgaSA9IGNvbEluZGV4ICsgMTsgaSA8IHRiLmdldENvbHNDb3VudCgpOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBjdXJyUm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmqKrlkJHlkIjlubblvZPliY3ljZXlhYPmoLzlkIjlubblvIDlp4vntKLlvJXkvY3nva5cbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICAgKiBAcGFyYW0gY29sSW5kZXhcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0SE1lcmdlU3RhcnRJbmRleCh0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQocm93SW5kZXgpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgZm9yIChsZXQgaSA9IGNvbEluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLmhNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrmib7liLDkuLvlkIjlubbljZXlhYPmoLwnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnurXlkJHlkIjlubblvZPliY3ljZXlhYPmoLzlkIjlubbnu5PmnZ/ntKLlvJXkvY3nva5cbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICAgKiBAcGFyYW0gY29sSW5kZXggaVxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRWTWVyZ2VFbmRJbmRleCh0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGluZGV4ID0gcm93SW5kZXg7XG4gICAgICAgIGZvciAobGV0IGkgPSByb3dJbmRleCArIDE7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY3VyclJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSBjdXJyUm93LmdldENoaWxkKGNvbEluZGV4KSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W57q15ZCR5ZCI5bm25b2T5YmN5Y2V5YWD5qC85ZCI5bm25byA5aeL57Si5byV5L2N572uXG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICogQHBhcmFtIGNvbEluZGV4IGlcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Vk1lcmdlU3RhcnRJbmRleCh0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd0luZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gY3VyclJvdy5nZXRDaGlsZChjb2xJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLnZNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrmib7liLDkuLvlkIjlubbljZXlhYPmoLwnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkIjlubbljZXlhYPmoLxcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBtZXJnZUNlbGxzKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGFuY2VzdG9yQ29tbW9uQ29udHJvbCwgc3RhcnRDb250cm9sLCBlbmRDb250cm9sLCBjb2xsYXBzZWQgfSA9IHNzO1xuICAgICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCB8fCBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZVJvd0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRiRWxlbWVudCA9IGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCA/IGFuY2VzdG9yQ29tbW9uQ29udHJvbCA6IGFuY2VzdG9yQ29tbW9uQ29udHJvbC5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBlbmRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGVuZENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHN0YXJ0Q2VsbD8ucGFyZW50Py5wYXJlbnQgPT09IHRiRWxlbWVudCAmJiBlbmRDZWxsPy5wYXJlbnQ/LnBhcmVudCA9PT0gdGJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgLy90aGlzLmNvbWJpbmVDZWxsQ29udGVudCh0YkVsZW1lbnQsIHN0YXJ0Q2VsbCwgZW5kQ2VsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21iaW5lQ2VsbHModGJFbGVtZW50LCBzdGFydENlbGwsIGVuZENlbGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jaGVja1Jvd0JlTWVyZ2VkKHNzKTtcbiAgICAgICAgICAgIHNzLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlnKjlkIjlubbljZXlhYPmoLzlkI7pnIDopoHmoKHpqoxcbiAgICAgKiAxLuWmguaenOafkOS4quihjOeahOaJgOacieWNleWFg+agvOmDveS4jeaYr25vcm1hbO+8jOWImemcgOimgeWIoOmZpOW9k+WJjeihjFxuICAgICAqIDIu5aaC5p6c5p+Q5Liq5YiX55qE5omA5pyJ55qE5Y2V5YWD5qC86YO95LiN5pivbm9ybWFs77yM5YiZ6ZyA6KaB5Yig6Zmk5b2T5YmN5YiXXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgY2hlY2tSb3dCZU1lcmdlZChzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIXRiKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xzQ291bnQgPSB0Yi5nZXRDb2xzQ291bnQoKTtcbiAgICAgICAgY29uc3QgZnVsbE1lcmdlUm93czogQXJyYXk8VGFibGVSb3dFbGVtZW50PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xzQ291bnQ7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoIWNlbGwuaXNOb3RCZU1lcmdlZENlbGwoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5b2T5YmN6KGM5omA5pyJ55qE5Y2V5YWD5qC86YO96KKr5ZCI5bm277yM6ZyA6KaB5Yig6ZmkXG4gICAgICAgICAgICBpZiAoY291bnQgPT09IGNvbHNDb3VudCkge1xuICAgICAgICAgICAgICAgIGZ1bGxNZXJnZVJvd3MucHVzaChyb3cpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVsbE1lcmdlUm93cy5mb3JFYWNoKHJvdyA9PiB0aGlzLnJlbW92ZVJvdyhyb3cpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTooYxcbiAgICAgKiBAcGFyYW0gcm93XG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVtb3ZlUm93KHJvdzogVGFibGVSb3dFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gcm93LmdldEluZGV4KCk7XG4gICAgICAgIGNvbnN0IHRiID0gcm93LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGkpO1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2TWVyZ2VFbmRJbmRleCA9IHRoaXMuZ2V0Vk1lcmdlRW5kSW5kZXgodGIsIHJvd0luZGV4LCBpKTtcbiAgICAgICAgICAgICAgICBpZiAodk1lcmdlRW5kSW5kZXggPiByb3dJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0Um93ID0gdGIuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50Pihyb3dJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICBuZXh0Um93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGkpLnByb3BzLnZNZXJnZSA9IHZNZXJnZUVuZEluZGV4IC0gcm93SW5kZXggPiAyID8gJ3Jlc3RhcnQnIDogbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc3Qgdk1lcmdlRW5kSW5kZXggPSB0aGlzLmdldFZNZXJnZUVuZEluZGV4KHRiLCByb3dJbmRleCwgaSk7XG4gICAgICAgICAgICAgICAgLy8gaWYgKHZNZXJnZUVuZEluZGV4ID4gcm93SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgY29uc3QgbmV4dFJvdyA9IHRiLmdldENoaWxkPFRhYmxlUm93RWxlbWVudD4ocm93SW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgbmV4dFJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50PihpKS5jZWxsUHJvcHMudk1lcmdlID0gJ2NvbnRpbnVlJztcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgY29uc3Qgdk1lcmdlU3RhcnRJbmRleCA9IHRoaXMuZ2V0Vk1lcmdlU3RhcnRJbmRleCh0Yiwgcm93SW5kZXgsIGkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZNZXJnZUVuZEluZGV4ID0gdGhpcy5nZXRWTWVyZ2VFbmRJbmRleCh0Yiwgcm93SW5kZXgsIGkpO1xuICAgICAgICAgICAgICAgIC8v5b2T5YmN5Y2V5YWD5qC85aSE5LqO5ZCI5bm26KGM55qE5pyA5ZCO5LiA6KGM77yM5bm25LiU5ZCI5bm255qE6KGM5pWw5Li6MuihjFxuICAgICAgICAgICAgICAgIGlmICh2TWVyZ2VFbmRJbmRleCA9PT0gcm93SW5kZXggJiYgdk1lcmdlRW5kSW5kZXggLSB2TWVyZ2VTdGFydEluZGV4ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFib3ZlQ2VsbCA9IHRiLmdldENoaWxkPFRhYmxlUm93RWxlbWVudD4odk1lcmdlU3RhcnRJbmRleCkuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oaSlcbiAgICAgICAgICAgICAgICAgICAgYWJvdmVDZWxsLnByb3BzLnZNZXJnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRiLnJlbW92ZUNoaWxkKHJvdyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog56e76Zmk5YiXXG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIGNvbEluZGV4XG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVtb3ZlQ29sKHRiOiBUYWJsZUVsZW1lbnQsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50PihpKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oY29sSW5kZXgpO1xuICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSAncmVzdGFydCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoTWVyZ2VFbmRJbmRleCA9IHRoaXMuZ2V0SE1lcmdlRW5kSW5kZXgodGIsIGksIGNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoaE1lcmdlRW5kSW5kZXggPiBjb2xJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0Q2VsbCA9IHJvdy5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50Pihjb2xJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICBuZXh0Q2VsbC5wcm9wcy5oTWVyZ2UgPSBoTWVyZ2VFbmRJbmRleCAtIGNvbEluZGV4ID4gMiA/ICdyZXN0YXJ0JyA6IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjZWxsLnByb3BzLmhNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhNZXJnZVN0YXJ0SW5kZXggPSB0aGlzLmdldEhNZXJnZVN0YXJ0SW5kZXgodGIsIGksIGNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBoTWVyZ2VFbmRJbmRleCA9IHRoaXMuZ2V0SE1lcmdlRW5kSW5kZXgodGIsIGksIGNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICAvL+W9k+WJjeWNleWFg+agvOWkhOS6juWQiOW5tuihjOeahOacgOWQjuS4gOihjO+8jOW5tuS4lOWQiOW5tueahOihjOaVsOS4ujLooYxcbiAgICAgICAgICAgICAgICBpZiAoaE1lcmdlRW5kSW5kZXggPT09IGNvbEluZGV4ICYmIGhNZXJnZUVuZEluZGV4IC0gaE1lcmdlU3RhcnRJbmRleCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXN0ZXJWTWVyZ2VDZWxsID0gdGIuZ2V0Q2hpbGQ8VGFibGVSb3dFbGVtZW50PihoTWVyZ2VTdGFydEluZGV4KS5nZXRDaGlsZDxUYWJsZUNlbGxFbGVtZW50PihpKVxuICAgICAgICAgICAgICAgICAgICBtYXN0ZXJWTWVyZ2VDZWxsLnByb3BzLmhNZXJnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93LnJlbW92ZUNoaWxkKGNlbGwpO1xuICAgICAgICB9XG4gICAgICAgIHRiLnJlbW92ZUNvbChjb2xJbmRleCk7XG4gICAgICAgIGlmICh0Yi5wcm9wcy5jb2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGIucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTlhYnmoIfmiYDlnKjnmoTlvZPliY3ooYxcbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtb3ZlQ3VyclJvdyhzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFzcy5zdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyclJvdyA9IHN0YXJ0Q2VsbC5wYXJlbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCB0YiA9IGN1cnJSb3cucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgdGhpcy5yZW1vdmVSb3coY3VyclJvdyk7XG4gICAgICAgIGlmICh0Yi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRiLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog56e76Zmk5YWJ5qCH5omA5Zyo55qE5b2T5YmN5YiXXG4gICAgICogQHBhcmFtIHNzXG4gICAgICovXG4gICAgc3RhdGljIHJlbW92ZUN1cnJDb2woc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3MuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyUm93ID0gc3RhcnRDZWxsLnBhcmVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB0YiA9IGN1cnJSb3cucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29sKHRiLCBzdGFydENlbGwuZ2V0SW5kZXgoKSk7XG4gICAgICAgICAgICBzcy5jbGVhcigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgYW5jZXN0b3JDb21tb25Db250cm9sLCBzdGFydENvbnRyb2wsIGVuZENvbnRyb2wgfSA9IHNzO1xuICAgICAgICBpZiAoYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50IHx8IGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlUm93RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgdGJFbGVtZW50ID0gYW5jZXN0b3JDb21tb25Db250cm9sIGluc3RhbmNlb2YgVGFibGVFbGVtZW50ID8gYW5jZXN0b3JDb21tb25Db250cm9sIDogYW5jZXN0b3JDb21tb25Db250cm9sLnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGVuZENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZW5kQ29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoc3RhcnRDZWxsPy5wYXJlbnQ/LnBhcmVudCA9PT0gdGJFbGVtZW50ICYmIGVuZENlbGw/LnBhcmVudD8ucGFyZW50ID09PSB0YkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydENvbEluZGV4ID0gc3RhcnRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgICAgICAgICAgbGV0IGVuZENvbEluZGV4ID0gZW5kQ2VsbC5nZXRJbmRleCgpO1xuICAgICAgICAgICAgICAgIHdoaWxlIChzdGFydENvbEluZGV4IDw9IGVuZENvbEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29sKHRiRWxlbWVudCwgZW5kQ29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBlbmRDb2xJbmRleC0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRiRWxlbWVudC5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB9XG4gICAgICAgIHNzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ZCI5bm25Y2V5YWD5qC8XG4gICAgICovXG4gICAgc3RhdGljIGNvbWJpbmVDZWxscyh0YkVsZW1lbnQ6IFRhYmxlRWxlbWVudCwgc3RhcnRDZWxsOiBUYWJsZUNlbGxFbGVtZW50LCBlbmRDZWxsOiBUYWJsZUNlbGxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRiUmVnaW9uID0gdGhpcy5nZXRUYWJsZVJlY3RTZWxlY3RlZFJlZ2lvbih0YkVsZW1lbnQsIHN0YXJ0Q2VsbCwgZW5kQ2VsbCk7XG4gICAgICAgIGNvbnN0IGNlbGxDb250ZW50czogQXJyYXk8RWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRiUmVnaW9uLnN0YXJ0Um93OyBpIDw9IHRiUmVnaW9uLmVuZFJvdzsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyUm93ID0gdGJFbGVtZW50LmdldENoaWxkPFRhYmxlUm93RWxlbWVudD4oaSk7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gdGJSZWdpb24uc3RhcnRDb2w7IGogPD0gdGJSZWdpb24uZW5kQ29sOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyQ2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4oaik7XG4gICAgICAgICAgICAgICAgY3VyckNlbGwucHJvcHMudk1lcmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjdXJyQ2VsbC5wcm9wcy5oTWVyZ2UgPSAnY29udGludWUnO1xuICAgICAgICAgICAgICAgIGlmIChqID09PSB0YlJlZ2lvbi5zdGFydENvbCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyQ2VsbC5wcm9wcy52TWVyZ2UgPSBpID09PSB0YlJlZ2lvbi5zdGFydFJvdyA/ICdyZXN0YXJ0JyA6ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJDZWxsLnByb3BzLmhNZXJnZSA9ICdyZXN0YXJ0JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJDZWxsICE9PSBzdGFydENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbENvbnRlbnRzLnB1c2goLi4uRWxlbWVudFV0aWwuZ2V0Q2hpbGRyZW5FbGVtZW50cyhjdXJyQ2VsbCkpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyQ2VsbC5jbGVhckl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5aaC5p6c5ZCI5bm255qE5Y2V5YWD5qC86YO95piv56m65q616JC977yM5YiZ5LiN5ZCI5bm25YaF5a65XG4gICAgICAgIGlmICghY2VsbENvbnRlbnRzLmV2ZXJ5KChpdGVtKSA9PiAoaXRlbSBpbnN0YW5jZW9mIFBhcmFncmFwaEVsZW1lbnQgJiYgaXRlbS5sZW5ndGggPT09IDEpKSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjZWxsQ29udGVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzdGFydENlbGwuYWRkQ2hpbGQoY2VsbENvbnRlbnRzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgc3RhdGljIGNhblNwbGl0Q2VsbChzczogU2VsZWN0aW9uU3RhdGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyBhbmNlc3RvckNvbW1vbkNvbnRyb2wsIHN0YXJ0Q29udHJvbCwgZW5kQ29udHJvbCwgY29sbGFwc2VkIH0gPSBzcztcbiAgICAgICAgaWYgKGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCB8fCBhbmNlc3RvckNvbW1vbkNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZVJvd0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRiRWxlbWVudCA9IGFuY2VzdG9yQ29tbW9uQ29udHJvbCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCA/IGFuY2VzdG9yQ29tbW9uQ29udHJvbCA6IGFuY2VzdG9yQ29tbW9uQ29udHJvbC5wYXJlbnQ7XG4gICAgICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGVuZENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZW5kQ29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoc3RhcnRDZWxsPy5wYXJlbnQ/LnBhcmVudCA9PT0gdGJFbGVtZW50ICYmIGVuZENlbGw/LnBhcmVudD8ucGFyZW50ID09PSB0YkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRDZWxsID09PSBlbmRDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFydENlbGwucHJvcHMuaE1lcmdlID09PSAncmVzdGFydCcgfHwgc3RhcnRDZWxsLnByb3BzLnZNZXJnZSA9PT0gJ3Jlc3RhcnQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKCFzdGFydENlbGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXJ0Q2VsbCBpcyBudWxsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGhNZXJnZSwgdk1lcmdlIH0gPSBzdGFydENlbGw/LnByb3BzO1xuICAgICAgICAgICAgcmV0dXJuIGhNZXJnZSA9PT0gJ3Jlc3RhcnQnIHx8IHZNZXJnZSA9PT0gJ3Jlc3RhcnQnIHx8ICFoTWVyZ2UgfHwgIXZNZXJnZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlsIblkIjlubbnmoTljZXlhYPmoLzlkIjlubbov5jljp9cbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVzdG9yZUNlbGwoc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgYW5jZXN0b3JDb21tb25Db250cm9sLCBzdGFydENvbnRyb2wsIGVuZENvbnRyb2wsIGNvbGxhcHNlZCB9ID0gc3M7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoc3RhcnRDZWxsKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVDZWxsTWVyZ2Uoc3RhcnRDZWxsKTtcbiAgICAgICAgICAgIHNzLnJlc2V0UmFuZ2Uoc3RhcnRDZWxsLCAwKTtcbiAgICAgICAgICAgIHN0YXJ0Q2VsbC5yZWZyZXNoVmlldygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVzdG9yZUNlbGxNZXJnZShjZWxsOiBUYWJsZUNlbGxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgdk1lcmdlLCBoTWVyZ2UgfSA9IGNlbGwucHJvcHM7XG4gICAgICAgIGNvbnN0IHJvdyA9IGNlbGwucGFyZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgdGIgPSByb3cucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSByb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgY29sSW5kZXggPSBjZWxsLmdldEluZGV4KCk7XG4gICAgICAgIGlmICh2TWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHJvd0luZGV4ICsgMTsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoY29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2VsbC5wcm9wcy52TWVyZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy5oTWVyZ2UgPT09IFwicmVzdGFydFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmVDZWxsTWVyZ2UoY2VsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY29sSW5kZXggKyAxOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLmhNZXJnZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwucHJvcHMuaE1lcmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwucHJvcHMudk1lcmdlID09PSBcInJlc3RhcnRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JlQ2VsbE1lcmdlKGNlbGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNlbGwucHJvcHMuaE1lcmdlID0gbnVsbDtcbiAgICAgICAgY2VsbC5wcm9wcy52TWVyZ2UgPSBudWxsO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0Vk1lcmdlUm93cyh0YjogVGFibGVFbGVtZW50LCBtYXN0ZXJSb3dJbmRleDogbnVtYmVyLCBtYXN0ZXJDb2xJbmRleDogbnVtYmVyKTogQXJyYXk8VGFibGVSb3dFbGVtZW50PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxUYWJsZVJvd0VsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSBtYXN0ZXJSb3dJbmRleCArIDE7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gPFRhYmxlUm93RWxlbWVudD50Yi5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQobWFzdGVyQ29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHJvdyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgaW5zZXJ0Q29sKHNzOiBTZWxlY3Rpb25TdGF0ZSwgaW5zZXJ0Q29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSb3cgPSBzdGFydENlbGwucGFyZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgdGIgPSBzdGFydFJvdy5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBjb25zdCBjdXJyQ29sSW5kZXggPSBzdGFydENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgY29sc0NvdW50ID0gdGIuZ2V0Q29sc0NvdW50KCk7XG4gICAgICAgIGluc2VydENvbEluZGV4ID0gaW5zZXJ0Q29sSW5kZXggPCAwID8gMCA6IGluc2VydENvbEluZGV4O1xuICAgICAgICBpbnNlcnRDb2xJbmRleCA9IGluc2VydENvbEluZGV4ID4gY29sc0NvdW50ID8gY29sc0NvdW50IDogaW5zZXJ0Q29sSW5kZXg7XG4gICAgICAgIC8v5o+S5YWl5YiX6ZyA6KaB5bCG5LmL5YmN5YiX5YiG5YmyXG4gICAgICAgIGNvbnN0IGluc2VydENvbFdpZHRoID0gaW5zZXJ0Q29sSW5kZXggPT09IGNvbHNDb3VudCA/IHRiLmdldENlbGxXaWR0aChjb2xzQ291bnQgLSAxKSA6IHRiLmdldENlbGxXaWR0aChpbnNlcnRDb2xJbmRleCk7XG4gICAgICAgIGNvbnN0IG5ld0NvbFdpZHRoID0gTWF0aC5mbG9vcihpbnNlcnRDb2xXaWR0aCAvIDIpO1xuICAgICAgICBpZiAobmV3Q29sV2lkdGggPCAyMCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCfmj5LlhaXliJfnmoTmnIDlsI/lrr3luqbkuI3og73lsI/kuo4yMCzlvZPliY3kuLo6JyArIG5ld0NvbFdpZHRoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkPFRhYmxlUm93RWxlbWVudD4oaSlcbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbGwgPSBuZXcgVGFibGVDZWxsRWxlbWVudCgpO1xuICAgICAgICAgICAgaWYgKGluc2VydENvbEluZGV4ID09PSAwIHx8IGluc2VydENvbEluZGV4ID09PSBjb2xzQ291bnQpIHtcbiAgICAgICAgICAgICAgICByb3cuYWRkQ2hpbGQobmV3Q2VsbCwgaW5zZXJ0Q29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZm9jdXNDZWxsID0gcm93LmdldENoaWxkPFRhYmxlQ2VsbEVsZW1lbnQ+KGluc2VydENvbEluZGV4KTtcbiAgICAgICAgICAgIGlmIChmb2N1c0NlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoZm9jdXNDZWxsLnByb3BzLmhNZXJnZSA9PT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgICAgICAvL+iOt+WPluWQiOW5tuihjOeahOacgOWQjueahOihjOe0ouW8lVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoTWVyZ2VFbmRDb2xJbmRleCA9IHRoaXMuZ2V0SE1lcmdlRW5kSW5kZXgodGIsIGksIGN1cnJDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoTWVyZ2VFbmRDb2xJbmRleCA+IGluc2VydENvbEluZGV4IHx8IChoTWVyZ2VFbmRDb2xJbmRleCA9PT0gaW5zZXJ0Q29sSW5kZXggJiYgY3VyckNvbEluZGV4IDwgaW5zZXJ0Q29sSW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLmhNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvY3VzQ2VsbC5wcm9wcy5oTWVyZ2UgPT09ICdyZXN0YXJ0JyAmJiBjdXJyQ29sSW5kZXggPiBpbnNlcnRDb2xJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLmhNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93LmFkZENoaWxkKG5ld0NlbGwsIGluc2VydENvbEluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRiLnNldENlbGxXaWR0aChpbnNlcnRDb2xJbmRleCA9PT0gY29sc0NvdW50ID8gaW5zZXJ0Q29sSW5kZXggLSAxIDogaW5zZXJ0Q29sSW5kZXgsIGluc2VydENvbFdpZHRoIC0gbmV3Q29sV2lkdGgpO1xuICAgICAgICB0Yi5pbnNlcnRDb2woaW5zZXJ0Q29sSW5kZXgsIG5ld0NvbFdpZHRoKTtcbiAgICAgICAgdGIucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgdGIucmVmcmVzaFZpZXcoKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaW5zZXJ0Um93KHNzOiBTZWxlY3Rpb25TdGF0ZSwgaW5zZXJ0Um93SW5kZXg6IG51bWJlcik6IFRhYmxlUm93RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFJvdyA9IHN0YXJ0Q2VsbC5wYXJlbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCB0YiA9IHN0YXJ0Um93LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGN1cnJSb3dJbmRleCA9IHN0YXJ0Um93LmdldEluZGV4KCk7XG4gICAgICAgIGluc2VydFJvd0luZGV4ID0gaW5zZXJ0Um93SW5kZXggPCAwID8gMCA6IGluc2VydFJvd0luZGV4O1xuICAgICAgICBpbnNlcnRSb3dJbmRleCA9IGluc2VydFJvd0luZGV4ID4gdGIubGVuZ3RoID8gdGIubGVuZ3RoIDogaW5zZXJ0Um93SW5kZXg7XG4gICAgICAgIGNvbnN0IG5ld1JvdyA9IFRhYmxlUm93RWxlbWVudC5jcmVhdGVSb3codGIuZ2V0Q29sc0NvdW50KCkpO1xuICAgICAgICAvL+aWsOihjOaPkuWcqOesrOS4gOihjOaIluiAheacgOWQjuS4gOihjFxuICAgICAgICBpZiAoaW5zZXJ0Um93SW5kZXggPT09IDAgfHwgaW5zZXJ0Um93SW5kZXggPT09IHRiLmxlbmd0aCkge1xuICAgICAgICAgICAgdGIuYWRkQ2hpbGQobmV3Um93LCBpbnNlcnRSb3dJbmRleCk7XG4gICAgICAgICAgICB0Yi5yZWZyZXNoVmlldygpO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZXN0Um93ID0gdGIuZ2V0Q2hpbGQoaW5zZXJ0Um93SW5kZXgpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXN0Um93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkZXN0Q2VsbCA9IGRlc3RSb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NlbGwgPSBuZXdSb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIC8v5aaC5p6c5b2T5YmN5Y2V5YWD5qC85piv5pmu6YCa5Y2V5YWD5qC85oiW6ICF5ZCI5bm25YiX55qE5pyA5ZCO5LiA5Liq5Y2V5YWD5qC877yM5YiZ5LiN5YGa5aSE55CGXG4gICAgICAgICAgICBpZiAoZGVzdENlbGwucHJvcHMudk1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICAgICAgLy/ojrflj5blkIjlubbliJfnmoTmnIDlkI7nmoTooYzntKLlvJVcbiAgICAgICAgICAgICAgICBjb25zdCB2TWVyZ2VFbmRSb3dJbmRleCA9IHRoaXMuZ2V0Vk1lcmdlRW5kSW5kZXgodGIsIGluc2VydFJvd0luZGV4LCBpKTtcbiAgICAgICAgICAgICAgICBpZiAodk1lcmdlRW5kUm93SW5kZXggPiBpbnNlcnRSb3dJbmRleCB8fCAodk1lcmdlRW5kUm93SW5kZXggPT09IGluc2VydFJvd0luZGV4ICYmIGN1cnJSb3dJbmRleCA8IGluc2VydFJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLnZNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgICAgIC8vbmV3Q2VsbC5jZWxsUHJvcHMuaE1lcmdlID0gZGVzdENlbGwuY2VsbFByb3BzLmhNZXJnZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlc3RDZWxsLnByb3BzLnZNZXJnZSA9PT0gJ3Jlc3RhcnQnICYmIGN1cnJSb3dJbmRleCA+IGluc2VydFJvd0luZGV4KSB7XG4gICAgICAgICAgICAgICAgLy/lnKjkuIrmlrnmlrDlop7ooYzvvIznm67moIfooYzljZXlhYPmoLzlsZ7kuo7lkIjlubbnmoTotbfngrlcbiAgICAgICAgICAgICAgICBuZXdDZWxsLnByb3BzLnZNZXJnZSA9ICdjb250aW51ZSc7XG4gICAgICAgICAgICAgICAgLy9uZXdDZWxsLmNlbGxQcm9wcy5oTWVyZ2UgPSBkZXN0Q2VsbC5jZWxsUHJvcHMuaE1lcmdlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgdGIuYWRkQ2hpbGQobmV3Um93LCBpbnNlcnRSb3dJbmRleCk7XG4gICAgICAgIHRiLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIHJldHVybiBuZXdSb3c7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Zyo5LiL5pa55o+S5YWl6KGMXG4gICAgICovXG4gICAgc3RhdGljIGluc2VydFJvd0JlbG93KHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSb3cgPSBzdGFydENlbGwucGFyZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgY3VyclJvd0luZGV4ID0gc3RhcnRSb3cuZ2V0SW5kZXgoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRSb3coc3MsIGN1cnJSb3dJbmRleCArIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWcqOS4iuaWueaPkuWFpeihjFxuICAgICAqL1xuICAgIHN0YXRpYyBpbnNlcnRSb3dBYm92ZShzczogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVDZWxsRWxlbWVudCk7XG4gICAgICAgIGlmICghc3RhcnRDZWxsPy5wYXJlbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncGFyZW50IGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0Um93ID0gc3RhcnRDZWxsLnBhcmVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGN1cnJSb3dJbmRleCA9IHN0YXJ0Um93LmdldEluZGV4KCk7XG4gICAgICAgIHRoaXMuaW5zZXJ0Um93KHNzLCBjdXJyUm93SW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWcqOWPs+S+p+aPkuWFpeWIl1xuICAgICAqL1xuICAgIHN0YXRpYyBpbnNlcnRDb2xUb1JpZ2h0KHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyckNvbEluZGV4ID0gc3RhcnRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgIHRoaXMuaW5zZXJ0Q29sKHNzLCBjdXJyQ29sSW5kZXggKyAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlnKjlt6bkvqfmj5LlhaXliJdcbiAgICAgKi9cbiAgICBzdGF0aWMgaW5zZXJ0Q29sVG9MZWZ0KHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydENlbGwgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFzdGFydENlbGw/LnBhcmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYXJlbnQgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyckNvbEluZGV4ID0gc3RhcnRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgIHRoaXMuaW5zZXJ0Q29sKHNzLCBjdXJyQ29sSW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOi3s+i9rOWIsOS4i+S4gOS4quWNleWFg+agvOS4rVxuICAgICAqIEBwYXJhbSBzc1xuICAgICAqL1xuICAgIHN0YXRpYyBtb3ZlTmV4dENlbGwoc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJbmRleCA9IHN0YXJ0Q2VsbC5wYXJlbnQuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgbmV4dENlbGwgPSB0aGlzLmdldE5leHRDZWxsKHNzKTtcbiAgICAgICAgaWYgKG5leHRDZWxsKSB7XG4gICAgICAgICAgICBzcy5yZXNldFJhbmdlKG5leHRDZWxsLCAwKTtcbiAgICAgICAgICAgIG5leHRDZWxsLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/mlrDlop7ooYws5bm25a6a5L2NXG4gICAgICAgIGNvbnN0IG5ld1JvdyA9IHRoaXMuaW5zZXJ0Um93KHNzLCByb3dJbmRleCArIDEpO1xuICAgICAgICBzcy5yZXNldFJhbmdlKG5ld1JvdywgMCk7XG4gICAgICAgIG5ld1Jvdy5yZWZyZXNoVmlldygpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5LiL5LiA5Liq5Y+v5a6a5L2N55qE5Y2V5YWD5qC8XG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0TmV4dENlbGwoc3M6IFNlbGVjdGlvblN0YXRlKTogVGFibGVDZWxsRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzcy5zdGFydENvbnRyb2wsIFRhYmxlQ2VsbEVsZW1lbnQpO1xuICAgICAgICBpZiAoIXN0YXJ0Q2VsbD8ucGFyZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJbmRleCA9IHN0YXJ0Q2VsbC5wYXJlbnQuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgY29sSW5kZXggPSBzdGFydENlbGwuZ2V0SW5kZXgoKTtcbiAgICAgICAgY29uc3QgdGIgPSBzdGFydENlbGwucGFyZW50LnBhcmVudCBhcyBUYWJsZUVsZW1lbnQ7XG4gICAgICAgIGZvciAobGV0IGkgPSByb3dJbmRleDsgaSA8IHRiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgaiA9IGkgPT09IHJvd0luZGV4ID8gY29sSW5kZXggKyAxIDogMDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBmb3IgKDsgaiA8IHRiLmdldENvbHNDb3VudCgpOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyQ2VsbCA9IGN1cnJSb3cuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAoY3VyckNlbGwuaXNOb3RCZU1lcmdlZENlbGwoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VyckNlbGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vdGhyb3cgbmV3IEVycm9yKCdnZXROZXh0Q2VsbCBpcyBudWxsJylcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlvZPliY3lhYnmoIfmmK/lkKblnKjmnIDlkI7kuIDkuKrljZXlhYPmoLzkuK1cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNMYXN0VmlzaWFibGVDZWxsKHNzOiBTZWxlY3Rpb25TdGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZ2V0TmV4dENlbGwoc3MpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog56e76Zmk5b2T5YmNdGFibGVcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtb3ZlVGFibGUoc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRiID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHNzLnN0YXJ0Q29udHJvbCwgVGFibGVFbGVtZW50KTtcbiAgICAgICAgaWYgKCF0Yikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCflvZPliY3kvY3nva7kuI3lrZjlnKjooajmoLwnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0Yi5wYXJlbnQucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgdGIucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6KGo5qC85Y2V5YWD5qC85a+56KeS57q/XG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHBhcmFtIGRpYWdvbmFsXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgc2V0VGFibGVDZWxsRGlhZ29uYWwoc3M6IFNlbGVjdGlvblN0YXRlLCBkaWFnb25hbDogJ21haW4nIHwgJ3N1YicpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGMgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBUYWJsZUNlbGxFbGVtZW50KTtcbiAgICAgICAgaWYgKCF0Yykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCflvZPliY3kvY3nva7kuI3lrZjlnKjooajmoLwnKTtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmICghdGMucHJvcHMuZGlhZ29uYWwgfHwgdGMucHJvcHMuZGlhZ29uYWwgIT09IGRpYWdvbmFsKSB7XG4gICAgICAgICAgICB0Yy5wcm9wcy5kaWFnb25hbCA9IGRpYWdvbmFsO1xuICAgICAgICB9IGVsc2UgaWYgKHRjLnByb3BzLmRpYWdvbmFsID09PSBkaWFnb25hbCkge1xuICAgICAgICAgICAgdGMucHJvcHMuZGlhZ29uYWwgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRjLnJlZnJlc2hWaWV3KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5bCG5b2T5YmN6KGo5qC85oiq5pat5oiQ5Lik5Liq55u46YK755qE6KGo5qC8XG4gICAgICogQHBhcmFtIHRiXG4gICAgICogQHBhcmFtIHJvd0luZGV4XG4gICAgICovXG4gICAgc3RhdGljIGN1dFRhYmxlKHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHJvd0luZGV4ID09PSAwIHx8IHJvd0luZGV4ID09PSB0Yi5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3VGIgPSB0Yi5jbG9uZShmYWxzZSkgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBjb25zdCBsZW4gPSB0Yi5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAobGVuID4gcm93SW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdGIuZ2V0Q2hpbGQobGVuKTtcbiAgICAgICAgICAgIG5ld1RiLmFkZENoaWxkKGNoaWxkLmNsb25lKHRydWUpLCAwKTtcbiAgICAgICAgICAgIHRiLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3VGIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGIucGFyZW50LmFkZENoaWxkKG5ld1RiLCB0Yi5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5booajmoLzpgInljLrljLrln5/mnIDlpKfnmoTnn6nlvaLljLrln59cbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gc3RhcnRDZWxsXG4gICAgICogQHBhcmFtIGVuZENlbGxcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUYWJsZVJlY3RTZWxlY3RlZFJlZ2lvbih0YjogVGFibGVFbGVtZW50LCBzdGFydENlbGw6IFRhYmxlQ2VsbEVsZW1lbnQsIGVuZENlbGw6IFRhYmxlQ2VsbEVsZW1lbnQpOiBJVGFibGVTZWxlY3RlZFJlZ2lvbiB7XG4gICAgICAgIGxldCBzdGFydFJvdyA9IHN0YXJ0Q2VsbC5wYXJlbnQuZ2V0SW5kZXgoKTtcbiAgICAgICAgbGV0IHN0YXJ0Q29sID0gc3RhcnRDZWxsLmdldEluZGV4KCk7XG4gICAgICAgIGxldCBlbmRSb3cgPSBlbmRDZWxsLnBhcmVudC5nZXRJbmRleCgpO1xuICAgICAgICBsZXQgZW5kQ29sID0gZW5kQ2VsbC5nZXRJbmRleCgpO1xuICAgICAgICBpZiAoc3RhcnRSb3cgPiBlbmRSb3cpIHtcbiAgICAgICAgICAgIFtlbmRSb3csIHN0YXJ0Um93XSA9IFtzdGFydFJvdywgZW5kUm93XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnRDb2wgPiBlbmRDb2wpIHtcbiAgICAgICAgICAgIFtlbmRDb2wsIHN0YXJ0Q29sXSA9IFtzdGFydENvbCwgZW5kQ29sXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRSb3c7IGkgPD0gZW5kUm93OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRiLmdldENoaWxkKGkpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBzdGFydENvbDsgaiA8PSBlbmRDb2w7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGhNZXJnZSwgdk1lcmdlIH0gPSBjZWxsLnByb3BzO1xuICAgICAgICAgICAgICAgIGlmIChoTWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRDb2xJbmRleCA9IFRhYmxlVXRpbC5nZXRITWVyZ2VTdGFydEluZGV4KHRiLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kQ29sSW5kZXggPSBUYWJsZVV0aWwuZ2V0SE1lcmdlRW5kSW5kZXgodGIsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICBzdGFydENvbCA9IE1hdGgubWluKHN0YXJ0Q29sLCBzdGFydENvbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgZW5kQ29sID0gTWF0aC5tYXgoZW5kQ29sLCBlbmRDb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2TWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRSb3dJbmRleCA9IFRhYmxlVXRpbC5nZXRWTWVyZ2VTdGFydEluZGV4KHRiLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kUm93SW5kZXggPSBUYWJsZVV0aWwuZ2V0Vk1lcmdlRW5kSW5kZXgodGIsIGksIGopO1xuICAgICAgICAgICAgICAgICAgICBzdGFydFJvdyA9IE1hdGgubWluKHN0YXJ0Um93LCBzdGFydFJvd0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgZW5kUm93ID0gTWF0aC5tYXgoZW5kUm93LCBlbmRSb3dJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2TWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dJbmRleCA9IFRhYmxlVXRpbC5nZXRWTWVyZ2VFbmRJbmRleCh0YiwgaSwgaik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3dJbmRleCA+IGVuZFJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUm93ID0gcm93SW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGhNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbEluZGV4ID0gVGFibGVVdGlsLmdldEhNZXJnZUVuZEluZGV4KHRiLCBpLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbEluZGV4ID4gZW5kQ29sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRDb2wgPSBjb2xJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGFydFJvdywgZW5kUm93LCBzdGFydENvbCwgZW5kQ29sIH1cbiAgICB9XG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBJVGFibGVTZWxlY3RlZFJlZ2lvbiB7XG4gICAgc3RhcnRSb3c6IG51bWJlcjtcbiAgICBlbmRSb3c6IG51bWJlcjtcbiAgICBzdGFydENvbDogbnVtYmVyO1xuICAgIGVuZENvbDogbnVtYmVyO1xufSIsImltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJFbGVtZW50LFxuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgUG9zaXRpb24sXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0NvbnRlbnRNZW51SXRlbSwgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQsIEtleWJvcmFkRWxlbWVudEV2ZW50fSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7VGFibGVQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7UGFyYWdyYXBoRWxlbWVudCwgUGFyYWdyYXBoUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHtUYWJsZUNlbGxSZW5kZXJPYmplY3R9IGZyb20gXCIuL3RhYmxlLWNlbGwtaW1wbFwiO1xuaW1wb3J0IHtUYWJsZVJvd0VsZW1lbnQsIFRhYmxlUm93UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi90YWJsZS1yb3ctaW1wbFwiO1xuaW1wb3J0IHtUYWJsZVNwbGl0Q2VsbH0gZnJvbSBcIi4vdGFibGUtc3BsaXQtY2VsbFwiO1xuaW1wb3J0IHtUYWJsZVV0aWx9IGZyb20gXCIuL3RhYmxlLXV0aWxcIjtcblxuZXhwb3J0IGNsYXNzIFRhYmxlRWxlbWVudCBleHRlbmRzIEJsb2NrQ29udGFpbmVyRWxlbWVudDxUYWJsZVByb3BzPiB7XG4gICAgLy9wcm9wczogVGFibGVQcm9wcztcbiAgICBwcml2YXRlIF9hY3R1YWxDb2xzUHJvcHMhOiBBcnJheTxJQ29sc0RhdGE+IHwgbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigndGInKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBUYWJsZVByb3BzKCk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQ8S2V5Ym9yYWRFbGVtZW50RXZlbnQ+KCdFbGVtZW50S2V5RG93bicsIChldnQpID0+IHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+ihqOagvEVsZW1lbnRLZXlEb3duJywgZXZ0KTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUV2ZW50ID0gZXZ0LnNvdXJjZUV2ZW50O1xuICAgICAgICAgICAgLy/mjInkuIt0YWLplK5cbiAgICAgICAgICAgIGlmIChzb3VyY2VFdmVudC5rZXlDb2RlID09PSA5ICYmICFzb3VyY2VFdmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGV2dC5pc0NhbmNlbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc291cmNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBUYWJsZVV0aWwubW92ZU5leHRDZWxsKGV2dC5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWunumZhea1i+mHj+eahOWuveW6pu+8jOWwhmF1dG/jgIHnmb7liIbmr5TliJflrr3luqbov5vooYzovazljJbkuLogbnVtYmVyIOexu+Wei1xuICAgICAqL1xuICAgIGdldCBhY3R1YWxDb2xzUHJvcHMoKSB7XG4gICAgICAgIGlmICghdGhpcy5fYWN0dWFsQ29sc1Byb3BzKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xzRGF0YTogQXJyYXk8SUNvbHNEYXRhPiA9IFtdO1xuICAgICAgICAgICAgY29uc3QgY29scyA9IGNhbGNUYWJsZUNvbHModGhpcyk7XG4gICAgICAgICAgICBjb2xzLnJlZHVjZSgocHJlLCBjdXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb2xzRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGN1cixcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBwcmVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJlICsgY3VyO1xuICAgICAgICAgICAgfSwgMClcbiAgICAgICAgICAgIHRoaXMuX2FjdHVhbENvbHNQcm9wcyA9IGNvbHNEYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3R1YWxDb2xzUHJvcHM7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbFdpZHRoKGNlbGxJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGNlbGxJbmRleCA+PSB0aGlzLmFjdHVhbENvbHNQcm9wcy5sZW5ndGggfHwgY2VsbEluZGV4IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFjdHVhbENvbHNQcm9wc1tjZWxsSW5kZXhdLndpZHRoO1xuICAgIH1cblxuICAgIGdldENlbGxPZmZzZXRYKGNlbGxJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0dWFsQ29sc1Byb3BzW2NlbGxJbmRleF0ub2Zmc2V0O1xuICAgIH1cblxuICAgIHNldENlbGxXaWR0aChjZWxsSW5kZXg6IG51bWJlciwgd2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvL3RoaXMuYWN0dWFsQ29sc1Byb3BzW2luZGV4XS53aWR0aCA9IHdpZHRoO1xuICAgICAgICBpZiAoY2VsbEluZGV4ID49IHRoaXMuYWN0dWFsQ29sc1Byb3BzLmxlbmd0aCB8fCBjZWxsSW5kZXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29scyA9IFsuLi50aGlzLnByb3BzLmNvbHNdO1xuICAgICAgICBjb2xzW2NlbGxJbmRleF0gPSB3aWR0aDtcbiAgICAgICAgdGhpcy5wcm9wcy5jb2xzID0gY29sc1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaPkuWFpeWIl+eahOWumuS5iVxuICAgICAqIEBwYXJhbSBpbmRleFxuICAgICAqIEBwYXJhbSB3aWR0aFxuICAgICAqL1xuICAgIGluc2VydENvbChpbmRleDogbnVtYmVyLCB3aWR0aDogbnVtYmVyIHwgc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBbLi4udGhpcy5wcm9wcy5jb2xzXTtcbiAgICAgICAgY29scy5zcGxpY2UoaW5kZXgsIDAsIHdpZHRoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jb2xzID0gY29scztcbiAgICAgICAgdGhpcy5fYWN0dWFsQ29sc1Byb3BzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTliJfnmoTlrprkuYlcbiAgICAgKiBAcGFyYW0gaW5kZXhcbiAgICAgKi9cbiAgICByZW1vdmVDb2woaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2xzID0gWy4uLnRoaXMucHJvcHMuY29sc107XG4gICAgICAgIGNvbHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jb2xzID0gY29scztcbiAgICB9XG5cbiAgICBnZXRDb2xzQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0dWFsQ29sc1Byb3BzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFRhYmxlRWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICByZXR1cm4gbmV3IFRhYmxlUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgIH1cblxuICAgIGJlZ2luTWVhc3VyZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuYmVnaW5NZWFzdXJlKCk7XG4gICAgICAgIHRoaXMuX2FjdHVhbENvbHNQcm9wcyA9IG51bGw7XG4gICAgfVxuXG5cbiAgICBzZXJpYWxpemUob3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIC8vdGhpcy5wcm9wcy53aWR0aCA9IHRoaXMubWVhc3VyZVJlbmRlcj8ucmVjdC53aWR0aCBhcyBudW1iZXI7XG4gICAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICAgICAgdHlwZTogJ3RiJyxcbiAgICAgICAgICAgIHByb3BzOiB7Li4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyhvcHRpb25zKX1cbiAgICAgICAgfVxuICAgICAgICBwcm9wcy5wcm9wcy53aWR0aCA9IHRoaXMubWVhc3VyZVJlbmRlcj8ucmVjdC53aWR0aCBhcyBudW1iZXI7XG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlVGFibGUocm93czogbnVtYmVyLCBjb2xzOiBudW1iZXIpOiBUYWJsZUVsZW1lbnQge1xuICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBUYWJsZUVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgdGJQcm9wcyA9IG5ldyBUYWJsZVByb3BzKCk7XG4gICAgICAgIHRhYmxlLnByb3BzID0gdGJQcm9wcztcbiAgICAgICAgdGJQcm9wcy5ib3JkZXIgPSAnYWxsJztcbiAgICAgICAgdGJQcm9wcy5jb2xzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sczsgaSsrKSB7XG4gICAgICAgICAgICB0YlByb3BzLmNvbHMucHVzaChcIjFcIik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAgIHRhYmxlLmFkZENoaWxkKFRhYmxlUm93RWxlbWVudC5jcmVhdGVSb3coY29scykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWJsZTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIFRhYmxlUmVuZGVyT2JqZWN0IGV4dGVuZHMgTXVpbHRCbG9ja0xpbmVSZW5kZXJPYmplY3Q8VGFibGVFbGVtZW50PiB7XG4gICAgc2V0UmVuZGVyV2lkdGgobWF4V2lkdGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBzdXBlci5zZXRSZW5kZXJXaWR0aChtYXhXaWR0aCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIHBvc2l0aW9ufSA9IGU7XG4gICAgICAgIC8v57uY5Yi26KGo5qC857q/XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQucHJvcHMuYm9yZGVyICE9PSAnYWxsJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93UmVuZGVyID0gdGhpcy5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IHJvd1BvczogUG9zaXRpb24gPSB7eDogcm93UmVuZGVyLnJlY3QueCArIHBvc2l0aW9uLngsIHk6IHJvd1JlbmRlci5yZWN0LnkgKyBwb3NpdGlvbi55fTtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcm93UmVuZGVyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbFJlbmRlciA9IHJvd1JlbmRlci5nZXRDaGlsZChqKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbFBvczogUG9zaXRpb24gPSB7eDogY2VsbFJlbmRlci5yZWN0LnggKyByb3dQb3MueCwgeTogY2VsbFJlbmRlci5yZWN0LnkgKyByb3dQb3MueX07XG4gICAgICAgICAgICAgICAgLy/nu5jliLbljZXlhYPmoLzkuIrovrnmoYZcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvL2N0eC5jb250ZW50Q29udGV4dC5maWxsUmVjdChjZWxsUG9zLngsIGNlbGxQb3MueSwgY2VsbFJlbmRlci5yZWN0LndpZHRoLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmZpbGxMaW5lcyhbe3g6IGNlbGxQb3MueCwgeTogY2VsbFBvcy55fSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogY2VsbFBvcy54ICsgY2VsbFJlbmRlci5yZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogY2VsbFBvcy55XG4gICAgICAgICAgICAgICAgICAgIH1dKTtcbiAgICAgICAgICAgICAgICAgICAgLy90aGlzLmRyYXdMaW5lKGN0eCwgeyB4OiBjZWxsUG9zLngsIHk6IGNlbGxQb3MueSB9LCB7IHg6IGNlbGxQb3MueCArIGNlbGxSZW5kZXIucmVjdC53aWR0aCwgeTogY2VsbFBvcy55IH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvL+e7mOWItuW3pui+ueahhlxuICAgICAgICAgICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vY3R4LmNvbnRlbnRDb250ZXh0LmZpbGxSZWN0KGNlbGxQb3MueCwgY2VsbFBvcy55LCAxLCBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmZpbGxMaW5lcyhbe3g6IGNlbGxQb3MueCwgeTogY2VsbFBvcy55fSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogY2VsbFBvcy54LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogY2VsbFBvcy55ICsgY2VsbFJlbmRlci5yZWN0LmhlaWdodFxuICAgICAgICAgICAgICAgICAgICB9XSk7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5kcmF3TGluZShjdHgsIHsgeDogY2VsbFBvcy54LCB5OiBjZWxsUG9zLnkgfSwgeyB4OiBjZWxsUG9zLngsIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8v57uY5Yi25Y+z6L655qGGXG4gICAgICAgICAgICAgICAgLy9jdHguY29udGVudENvbnRleHQuZmlsbFJlY3QoY2VsbFBvcy54ICsgY2VsbFJlbmRlci5yZWN0LndpZHRoLCBjZWxsUG9zLnksIDEsIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5maWxsTGluZXMoW3tcbiAgICAgICAgICAgICAgICAgICAgeDogY2VsbFBvcy54ICsgY2VsbFJlbmRlci5yZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICAgICB5OiBjZWxsUG9zLnlcbiAgICAgICAgICAgICAgICB9LCB7eDogY2VsbFBvcy54ICsgY2VsbFJlbmRlci5yZWN0LndpZHRoLCB5OiBjZWxsUG9zLnkgKyBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0fV0pO1xuICAgICAgICAgICAgICAgIC8vdGhpcy5kcmF3TGluZShjdHgsIHsgeDogY2VsbFBvcy54ICsgY2VsbFJlbmRlci5yZWN0LndpZHRoLCB5OiBjZWxsUG9zLnkgfSwgeyB4OiBjZWxsUG9zLnggKyBjZWxsUmVuZGVyLnJlY3Qud2lkdGgsIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgfSk7XG4gICAgICAgICAgICAgICAgLy/nu5jliLbkuIvovrnmoYZcbiAgICAgICAgICAgICAgICAvL2N0eC5jb250ZW50Q29udGV4dC5maWxsUmVjdChjZWxsUG9zLngsIGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHQsIGNlbGxSZW5kZXIucmVjdC53aWR0aCwgMSk7XG4gICAgICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmZpbGxMaW5lcyhbe1xuICAgICAgICAgICAgICAgICAgICB4OiBjZWxsUG9zLngsXG4gICAgICAgICAgICAgICAgICAgIHk6IGNlbGxQb3MueSArIGNlbGxSZW5kZXIucmVjdC5oZWlnaHRcbiAgICAgICAgICAgICAgICB9LCB7eDogY2VsbFBvcy54ICsgY2VsbFJlbmRlci5yZWN0LndpZHRoLCB5OiBjZWxsUG9zLnkgKyBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0fV0pO1xuICAgICAgICAgICAgICAgIC8vdGhpcy5kcmF3TGluZShjdHgsIHsgeDogY2VsbFBvcy54LCB5OiBjZWxsUG9zLnkgKyBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0IH0sIHsgeDogY2VsbFBvcy54ICsgY2VsbFJlbmRlci5yZWN0LndpZHRoLCB5OiBjZWxsUG9zLnkgKyBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0IH0pO1xuICAgICAgICAgICAgICAgIC8vY2VsbFJlbmRlci5iZWdpblJlbmRlcihjdHgsIHsgeDogcG9zaXRpb24ueCArIGNlbGxSZW5kZXIub2Zmc2V0WCwgeTogcG9zaXRpb24ueSArIGNlbGxSZW5kZXIub2Zmc2V0WSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IFRhYmxlUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIFRhYmxlRmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PFRhYmxlUHJvcHM+IHtcbiAgICBtYXRjaCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICd0Yic7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiBhbnksIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcHJvcHMgPSBkYXRhLnByb3BzIGFzIFRhYmxlUHJvcHM7XG4gICAgICAgIGNvbnN0IHRiID0gbmV3IFRhYmxlRWxlbWVudCgpO1xuICAgICAgICBjb25zdCBjb2xzID0gcHJvcHMuY29scztcbiAgICAgICAgY29uc3QgdGJQcm9wcyA9IHRiLnByb3BzO1xuICAgICAgICB0YlByb3BzLmJvcmRlciA9IHByb3BzLmJvcmRlciB8fCAnYWxsJztcbiAgICAgICAgdGJQcm9wcy5jb2xzID0gW107XG4gICAgICAgIHRiUHJvcHMuaWQgPSB0Yi5wcm9wcy5pZDtcbiAgICAgICAgdGJQcm9wcy5hbGlnbm1lbnQgPSBwcm9wcy5hbGlnbm1lbnQ7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29sID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRiUHJvcHMuY29scy5wdXNoKCg8YW55PmNvbCkud2lkdGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YlByb3BzLmNvbHMucHVzaChjb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRiLnByb3BzID0gdGJQcm9wcztcbiAgICAgICAgcmV0dXJuIHRiO1xuICAgIH1cblxufVxuXG4vKipcbiAqIOihjC3ooajmoLzmuLLmn5PmqKHlvI9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRleHRMaW5lUmVuZGVyTW9kZShlbGU6IFRhYmxlRWxlbWVudCwgb3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0YiA9IGVsZS5tZWFzdXJlUmVuZGVyIGFzIFRhYmxlUmVuZGVyT2JqZWN0O1xuICAgIGNvbnN0IHJvd3M6IEFycmF5PFRhYmxlUm93UmVuZGVyT2JqZWN0PiA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0Yi5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByb3cgPSB0Yi5nZXRDaGlsZChpKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgLy/ooajmoLzlpLTkuI3lgZrlpITnkIZcbiAgICAgICAgaWYgKCg8VGFibGVSb3dFbGVtZW50PnJvdy5lbGVtZW50KS5wcm9wcy5oZWFkZXJSb3cpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgcm93ID0gcm93c1tpXTtcbiAgICAgICAgLy/ojrflj5blvZPliY3ooYznmoTmloflrZfooYzmlbBcbiAgICAgICAgY29uc3QgbWF4TGluZXNDb3VudCA9IGdldFJvd01heFRleHRMaW5lcyhyb3cpO1xuICAgICAgICBpZiAobWF4TGluZXNDb3VudCA+IDEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgbWF4TGluZXNDb3VudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Um93ID0gcm93LmVsZW1lbnQuY3JlYXRlUmVuZGVyT2JqZWN0KCkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgbmV3Um93LnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3Qocm93LnJlY3QpO1xuICAgICAgICAgICAgICAgIHRiLmluc2VydENoaWxkKG5ld1Jvdywgcm93LmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgICAgICAgICAvL+WkjeWItuihjOaWh+Wtl+WIsOaWsOihjOS4rVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcm93Lmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaykgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdDZWxsID0gY2VsbC5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zLCByZW5kZXJDdHgpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdFxuICAgICAgICAgICAgICAgICAgICBuZXdDZWxsLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QoY2VsbC5yZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Jvdy5hZGRDaGlsZChuZXdDZWxsKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNwbGl0VGV4dGxpbmVUb05ld1Jvdyhyb3csIG1heExpbmVzQ291bnQsIG9wdGlvbnMsIHJlbmRlckN0eCk7XG4gICAgfVxuICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZSh0Yik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICog6I635Y+W5b2T5YmN6KGM55qE5paH5a2X6KGM5pWwXG4gKiBAcGFyYW0gcm93XG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBnZXRSb3dNYXhUZXh0TGluZXMocm93OiBUYWJsZVJvd1JlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGopIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgbGV0IGNlbGxNYXhMaW5lcyA9IDA7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgY2VsbC5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyYVJlbmRlciA9IGNlbGwuZ2V0Q2hpbGQoaykgYXMgUGFyYWdyYXBoUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY2VsbE1heExpbmVzICs9IHBhcmFSZW5kZXIubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNvdW50ID0gY2VsbE1heExpbmVzID4gY291bnQgPyBjZWxsTWF4TGluZXMgOiBjb3VudDtcbiAgICB9XG4gICAgcmV0dXJuIGNvdW50O1xufVxuXG4vKipcbiAqIOWwhuWkmuihjOaWh+acrOenu+WKqOWIsOaWsOihjOS4rVxuICogQHBhcmFtIHJvd1xuICogQHBhcmFtIG1heExpbmVzQ291bnRcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHNwbGl0VGV4dGxpbmVUb05ld1Jvdyhyb3c6IFRhYmxlUm93UmVuZGVyT2JqZWN0LCBtYXhMaW5lc0NvdW50OiBudW1iZXIsIG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogdm9pZCB7XG4gICAgaWYgKG1heExpbmVzQ291bnQgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGkpIGFzIFRhYmxlQ2VsbFJlbmRlck9iamVjdDtcbiAgICAgICAgY29uc3QgcGFyYUxpbmVzID0gRWxlbWVudFV0aWwuZ2V0Q2VsbFBhcmFMaW5lcyhjZWxsKTtcbiAgICAgICAgaWYgKHBhcmFMaW5lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgcGFyYUxpbmVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBvdXR0ZXJMaW5lUmVjdCA9IHBhcmFMaW5lc1tqXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFSZW5kZXIgPSBvdXR0ZXJMaW5lUmVjdC5wYXJlbnQgYXMgUGFyYWdyYXBoUmVuZGVyT2JqZWN0O1xuXG4gICAgICAgICAgICBjb25zdCBuZXdQYXJhUmVuZGVyID0gcGFyYVJlbmRlci5lbGVtZW50LmNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zLCByZW5kZXJDdHgpIGFzIFBhcmFncmFwaFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIG5ld1BhcmFSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChwYXJhUmVuZGVyLnJlY3QpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdPdXR0ZXJMaW5lUmVjdCA9IG91dHRlckxpbmVSZWN0LmNsb25lKCk7XG4gICAgICAgICAgICBuZXdPdXR0ZXJMaW5lUmVjdC5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KG91dHRlckxpbmVSZWN0LnJlY3QpO1xuICAgICAgICAgICAgbmV3UGFyYVJlbmRlci5hZGRDaGlsZChuZXdPdXR0ZXJMaW5lUmVjdCk7XG5cbiAgICAgICAgICAgIHBhcmFSZW5kZXIucmVtb3ZlQ2hpbGQob3V0dGVyTGluZVJlY3QpO1xuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKHBhcmFSZW5kZXIpO1xuXG4gICAgICAgICAgICBpZiAocGFyYVJlbmRlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjZWxsLnJlbW92ZUNoaWxkKHBhcmFSZW5kZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3BsaXRSb3cgPSByb3cucGFyZW50LmdldENoaWxkKHJvdy5nZXRJbmRleCgpICsgaikgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBzcGxpdENlbGwgPSBzcGxpdFJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBzcGxpdENlbGwuYWRkQ2hpbGQobmV3UGFyYVJlbmRlcik7XG4gICAgICAgICAgICBFbGVtZW50VXRpbC5yZW1lYXN1cmUobmV3UGFyYVJlbmRlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdGIgPSByb3cucGFyZW50IGFzIFRhYmxlUmVuZGVyT2JqZWN0O1xuICAgIGNvbnN0IHJvd0luZGV4ID0gcm93LmdldEluZGV4KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhMaW5lc0NvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQocm93SW5kZXggKyBpKSBhcyBUYWJsZVJvd1JlbmRlck9iamVjdDtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgRWxlbWVudFV0aWwucmVtZWFzdXJlKGNlbGwpO1xuICAgICAgICB9XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlbWVhc3VyZShyb3cpO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIOiuoeeul+ihqOagvOWIl1xuICovXG5mdW5jdGlvbiBjYWxjVGFibGVDb2xzKGVsZW1lbnQ6IFRhYmxlRWxlbWVudCk6IEFycmF5PG51bWJlcj4ge1xuICAgIGNvbnN0IHBlcmNlbnRDb2xzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+ID0gW107XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgbGV0IHBlcmNlbnRTdW0gPSAwO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGVsZW1lbnQucHJvcHMuY29scykge1xuICAgICAgICBpZiAodHlwZW9mIGNvbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBlcmNlbnRDb2xzLnB1c2goY29sKTtcbiAgICAgICAgICAgIHBlcmNlbnRTdW0gKz0gTnVtYmVyLnBhcnNlRmxvYXQoY29sKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlcmNlbnRDb2xzLnB1c2goY29sKTtcbiAgICAgICAgICAgIHN1bSArPSBjb2w7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbWVhc3VyZVJlbmRlciA9IGVsZW1lbnQubWVhc3VyZVJlbmRlciBhcyBSZW5kZXJPYmplY3Q7XG4gICAgY29uc3QgdGJXaWR0aCA9IG1lYXN1cmVSZW5kZXIucmVjdC5tYXhXaWR0aCBhcyBudW1iZXI7XG4gICAgY29uc3QgcmVtYWluV2lkdGggPSB0YldpZHRoIC0gc3VtO1xuICAgIGNvbnN0IHJhdGlvID0gcmVtYWluV2lkdGggLyBwZXJjZW50U3VtO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGVyY2VudENvbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBwZXJjZW50Q29sc1tpXTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aWR0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBlcmNlbnRDb2xzW2ldID0gTWF0aC5mbG9vcihOdW1iZXIucGFyc2VGbG9hdCh3aWR0aCkgKiByYXRpbyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBlcmNlbnRDb2xzIGFzIEFycmF5PG51bWJlcj47XG59XG5cbmludGVyZmFjZSBJQ29sc0RhdGEge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgb2Zmc2V0OiBudW1iZXI7XG59XG5cblxuaW50ZXJmYWNlIHRiUHJvcHMge1xuICAgIGNvbHM6IEFycmF5PHsgd2lkdGg6IG51bWJlciB9PlxufVxuXG5cbiIsImltcG9ydCB7IFRleHRQcm9wcyB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IElSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgTGVhZkVsZW1lbnQsIEVsZW1lbnRGYWN0b3J5LCBFbGVtZW50LCBTZXJpYWxpemVQcm9wcywgVmlld09wdGlvbnMsIE1vZGlmeUZsYWcgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IHdhdGNoQ2hhbmdlZCB9IGZyb20gXCIuLi8uLi9ub3RpZnlcIjtcbmltcG9ydCB7IFJlbmRlckNvbnRleHRUeXBlLCBUZXh0VW5pdHMgfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCAqIGFzIEhpc3RvcnkgZnJvbSAnLi4vLi4vZWxlbWVudC10cmFjZS10cmFja2luZydcblxuXG5leHBvcnQgY2xhc3MgVGV4dEdyb3VwRWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50PFRleHRQcm9wcz4ge1xuICAgIC8vcHJvcHM6IFRleHRQcm9wcztcbiAgICB0ZXh0TWVhc3VyZXM6IEFycmF5PFRleHRVbml0cz4gPSBbXTtcbiAgICBpc01lYXN1cmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigndGV4dCcpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICB3YXRjaENoYW5nZWQodGhpcy5wcm9wcywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc01lYXN1cmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2xlYXJDYWNoZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXQgdGV4dCh2YWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNwbGljZSgwLCB0aGlzLnRleHRNZWFzdXJlcy5sZW5ndGgsIHZhbCk7XG4gICAgfVxuXG4gICAgc3BsaWNlKGluZGV4OiBudW1iZXIsIGRlbGV0ZUNvdW50OiBudW1iZXIsIGFkZFRleHQ6IHN0cmluZyB8IG51bGwgPSBudWxsKTogQXJyYXk8VGV4dFVuaXRzPiB7XG4gICAgICAgIGNvbnN0IGRlbGV0SXRlbXM6IEFycmF5PFRleHRVbml0cz4gPSBbXTtcbiAgICAgICAgaWYgKGRlbGV0ZUNvdW50KSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVDaGFycyA9IHRoaXMudGV4dE1lYXN1cmVzLnNwbGljZShpbmRleCwgZGVsZXRlQ291bnQpO1xuICAgICAgICAgICAgSGlzdG9yeS5yZW1vdmVUZXh0KHRoaXMsIGluZGV4LCBkZWxldGVDb3VudCwgcmVtb3ZlQ2hhcnMubWFwKGl0ZW0gPT4gaXRlbS5jaGFyKS5qb2luKCcnKSk7XG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDA7XG4gICAgICAgICAgICBkZWxldEl0ZW1zLnB1c2goLi4ucmVtb3ZlQ2hhcnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNNZWFzdXJlID0gZmFsc2U7XG4gICAgICAgIGFkZFRleHQgPSBhZGRUZXh0ID8/ICcnO1xuICAgICAgICBIaXN0b3J5LmlucHV0VGV4dCh0aGlzLCBpbmRleCwgYWRkVGV4dCk7XG4gICAgICAgIGNvbnN0IGFkZFRleHRVbml0cyA9IGFkZFRleHQuc3BsaXQoJycpLm1hcChjaGFyID0+ICh7IHNvdXJjZVNpemU6IDAsIGFjdHVhbFNpemU6IDAsIGNoYXIgfSkpO1xuICAgICAgICBpZiAodGhpcy50ZXh0TWVhc3VyZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRNZWFzdXJlcyA9IGFkZFRleHRVbml0cztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGV4dE1lYXN1cmVzLnNwbGljZShpbmRleCwgZGVsZXRlQ291bnQsIC4uLmFkZFRleHRVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICByZXR1cm4gZGVsZXRJdGVtcztcbiAgICB9XG5cbiAgICBnZXQgdGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dE1lYXN1cmVzLm1hcChpdGVtID0+IGl0ZW0uY2hhcikuam9pbignJyk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTWVhc3VyZSB8fCB0aGlzLm1vZGlmeUZsYWcgIT09IE1vZGlmeUZsYWcuTm9uZSkge1xuICAgICAgICAgICAgcmVuZGVyQ3R4LmNvbnRlbnRDb250ZXh0Lm1lYXN1cmVUZXh0VW5pdHModGhpcy50ZXh0TWVhc3VyZXMsIHRoaXMucHJvcHMpO1xuICAgICAgICAgICAgdGhpcy5pc01lYXN1cmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBUZXh0R3JvdXBSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5kaXNhYmxlQ2xpY2sgPSB0aGlzLmRpc2FibGVDbGljaztcbiAgICAgICAgcmVuZGVyLnRleHRNZWFzdXJlcyA9IFsuLi50aGlzLnRleHRNZWFzdXJlc107XG4gICAgICAgIHJlbmRlci5tZWFzdXJlKCk7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzICYgYW55IHtcbiAgICAgICAgLy/kv67ppbDlhYPntKDkuI3luo/liJfljJZcbiAgICAgICAgaWYgKHRoaXMuaXNEZWNvcmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50OiB0aGlzLnRleHQsXG4gICAgICAgICAgICBjb21wbGV0ZTogdHJ1ZVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IFRleHRHcm91cEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICBjbG9uZS50ZXh0ID0gdGhpcy50ZXh0O1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHNwbGljZVRleHQoc3RhcnRPZmZzZXQ6IG51bWJlciwgZW5kT2Zmc2V0OiBudW1iZXIsIHhDb3B5OiBib29sZWFuKTogVGV4dEdyb3VwRWxlbWVudCB8IG51bGwge1xuICAgICAgICBlbmRPZmZzZXQgPSBlbmRPZmZzZXQgPT09IC0xID8gdGhpcy50ZXh0TWVhc3VyZXMubGVuZ3RoIDogZW5kT2Zmc2V0O1xuICAgICAgICBpZiAoZW5kT2Zmc2V0ID09PSBzdGFydE9mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgaWYgKHhDb3B5KSB7XG4gICAgICAgICAgICAvL2Nsb25lLnRleHRNZWFzdXJlcyA9IHRoaXMudGV4dE1lYXN1cmVzLnNwbGljZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpO1xuICAgICAgICAgICAgY2xvbmUudGV4dE1lYXN1cmVzID0gdGhpcy5zcGxpY2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsb25lLnRleHRNZWFzdXJlcyA9IHRoaXMudGV4dE1lYXN1cmVzLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IGluZGV4ID49IHN0YXJ0T2Zmc2V0ICYmIGluZGV4IDwgZW5kT2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICBjbG9uZS50ZXh0TWVhc3VyZXMgPSBjbG9uZS50ZXh0TWVhc3VyZXMubWFwKGl0ZW0gPT4gKHsgc291cmNlU2l6ZTogMCwgYWN0dWFsU2l6ZTogMCwgY2hhcjogaXRlbS5jaGFyIH0pKTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOS/ruaUueagt+W8j1xuICAgICAqIEBwYXJhbSBmb3JtYXRcbiAgICAgKi9cbiAgICBzZXRGb3JtYXQoZm9ybWF0OiBQYXJ0aWFsPFRleHRQcm9wcz4pOiB2b2lkIHtcbiAgICAgICAgSGlzdG9yeS5mb3JtYXRFbGUodGhpcywgZm9ybWF0KTtcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybWF0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb3BzW2tleV0gPSBmb3JtYXRba2V5XTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjbGVhclRleHRDYWNoZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc01lYXN1cmUgPSBmYWxzZTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIFRleHRHcm91cFJlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Q8VGV4dEdyb3VwRWxlbWVudD4ge1xuICAgIHRleHRNZWFzdXJlcyE6IEFycmF5PFRleHRVbml0cz47XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyByZW5kZXIsIHBvc2l0aW9uIH0gPSBlO1xuICAgICAgICAvL251bGwtdGV4dOS4jeaJk+WNsFxuICAgICAgICBpZiAocmVuZGVyLmRyYXdNb2RlID09PSAncHJpbnQnICYmIHRoaXMuZWxlbWVudC5pc0RlY29yYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5wcm9wcy5ib3JkZXIpIHtcbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5zdHJva2VSZWN0KHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0VW5pdHModGhpcywgcG9zaXRpb24ueCwgcG9zaXRpb24ueSk7XG4gICAgICAgIC8vIGlmICh0aGlzLmVsZW1lbnQuaXNNb3VzZWVudGVyKSB7XG4gICAgICAgIC8vICAgICBjdHgub3ZlcmxheXNDb250ZXh0LnN0cm9rZVJlY3QocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCBDb21tb25VdGlsLnJhbmRvbUNvbG9yKCkpO1xuICAgICAgICAvLyB9XG5cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IFRleHRHcm91cFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5kaXNhYmxlQ2xpY2sgPSB0aGlzLmRpc2FibGVDbGljaztcbiAgICAgICAgY2xvbmVSZW5kZXIucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICBjbG9uZVJlbmRlci50ZXh0TWVhc3VyZXMgPSBbLi4udGhpcy50ZXh0TWVhc3VyZXNdO1xuICAgICAgICAvL0ZJWDrmlbDmja7lhYPkuK3ljIXlkKtOdWxsVGV4dOaXtu+8jOWcqOWkjeWItlJlbmRlcuWQju+8jOeUseS6jk51bGxUZXh05a+55bqU55qERWxlbWVudOS4jeWcqOWFg+e0oOagkeS4re+8jOWboOatpE51bGxUZXh0UmVuZGVyXG4gICAgICAgIC8v5Zyo5riy5p+T5pe25Lya5LiN5pat55qEUHVzaOWIsFBhaW50UmVuZGVyc+S4re+8jOWvvOiHtOWGheWtmOazhOmcslxuICAgICAgICBpZiAodGhpcy5lbGVtZW50ICYmIHRoaXMuZWxlbWVudC5pc0RlY29yYXRlICYmIHRoaXMuZWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5wYWludFJlbmRlcnMubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxuXG4gICAgbWVhc3VyZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWN0LndpZHRoID0gdGhpcy50ZXh0TWVhc3VyZXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci5hY3R1YWxTaXplLCAwKTtcbiAgICAgICAgdGhpcy5yZWN0LmhlaWdodCA9IHRoaXMuZWxlbWVudC5wcm9wcy5mb250U2l6ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZXh0R3JvdXBGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8bnVsbD4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ3RleHQnO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBUZXh0UHJvcHM7XG4gICAgICAgIGNvbnN0IHRleHQgPSBkYXRhLmNvbnRlbnQgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCB0ZXh0R3JvdXAgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpO1xuICAgICAgICB0ZXh0R3JvdXAudGV4dCA9IHRleHQ7XG4gICAgICAgIEVsZW1lbnRVdGlsLnJlYWRUZXh0UHJvcHModGV4dEdyb3VwLnByb3BzLCBwcm9wcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRleHRHcm91cDtcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7IENvbW1vblV0aWwgfSBmcm9tIFwiLi9jb21tb24tdXRpbFwiO1xuaW1wb3J0IHsgU2VsZWN0aW9uU3RhdGUgfSBmcm9tIFwiLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7IEJyYW5jaEVsZW1lbnQsIEVsZW1lbnQsIFNlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9ucyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgdmFsaWRhdGVEYXRhRWxlIH0gZnJvbSBcIi4vaW1wbC9kYXRhLWVsZW1lbnQvZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuaW1wb3J0IHsgVGV4dEdyb3VwRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvdGV4dC90ZXh0LWltcGxcIjtcbmltcG9ydCB7IFRyYWNrUnVuRWxlbWVudCwgVHJhY2tSdW5UeXBlRW51bSB9IGZyb20gXCIuL2ltcGwvdGV4dC90cmFjay1ydW4taW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudFNlcmlhbGl6ZSB7XG4gICAgc3RhdGljIHNlcmlhbGl6ZShlbGVtZW50OiBFbGVtZW50LCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB8IG51bGwge1xuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGVsZW1lbnQuc2VyaWFsaXplKHZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC5jb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIGxldCBwcmV2RWxlOiB7IGVsZTogRWxlbWVudCwgcHJvcHM6IGFueSB9IHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGVsZW1lbnQuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VyaWFsaXplQ2hpbGQgPSB0aGlzLnNlcmlhbGl6ZShjaGlsZCwgdmlld09wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSAndGV4dCcgJiYgcHJldkVsZSAmJiBwcmV2RWxlLmVsZS50eXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCg8VGV4dEdyb3VwRWxlbWVudD5jaGlsZCkucHJvcHMuZXF1YWxzKCg8VGV4dEdyb3VwRWxlbWVudD5wcmV2RWxlLmVsZSkucHJvcHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2RWxlLnByb3BzLmNvbnRlbnQgKz0gKDxhbnk+c2VyaWFsaXplQ2hpbGQpLmNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VyaWFsaXplQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlcmlhbGl6ZUNoaWxkLmNvbXBsZXRlO1xuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVDaGlsZC5wcm9wcyA9IHNlcmlhbGl6ZUNoaWxkLnByb3BzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQucHJvcHMgJiYgY2hpbGQucHJvcHNbJ19fYXR0YWNoZWRQcm9wZXJ0eSddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVDaGlsZC5wcm9wc1snX19hdHRhY2hlZFByb3BlcnR5J10gPSBDb21tb25VdGlsLmNsb25lVmFsdWUoY2hpbGQucHJvcHNbJ19fYXR0YWNoZWRQcm9wZXJ0eSddKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2VyaWFsaXplQ2hpbGQucHJvcHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlcmlhbGl6ZUNoaWxkLnByb3BzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlcmlhbGl6ZUNoaWxkLmNoaWxkcmVuICYmIHNlcmlhbGl6ZUNoaWxkLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlcmlhbGl6ZUNoaWxkLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jaGlsZHJlbi5wdXNoKHNlcmlhbGl6ZUNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldkVsZSA9IHsgZWxlOiBjaGlsZCwgcHJvcHM6IHNlcmlhbGl6ZUNoaWxkIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LnNlcmlhbGl6ZSh2aWV3T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG5cbiAgICBzdGF0aWMgc2VyaWFsaXplU3RyaW5nKGVsZW1lbnQ6IEVsZW1lbnQsIG9wdGlvbnM6IHsgYWxsOiBib29sZWFuIH0gPSB7IGFsbDogZmFsc2UgfSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghb3B0aW9ucy5hbGwgJiYgZWxlbWVudCBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCAmJiBlbGVtZW50LnR5cGUgPT09IFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCAmJiAhZWxlbWVudC5pc0RlY29yYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC50ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2godGhpcy5zZXJpYWxpemVTdHJpbmcoaXRlbSwgb3B0aW9ucykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLmpvaW4oJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6I635Y+W6YCJ5Lit55qE57uT5p6EXG4gICAgICogQHBhcmFtIHNzXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zXG4gICAgICovXG4gICAgc3RhdGljIGdldFNlbGVjdGVkU3RydWN0KHNzOiBTZWxlY3Rpb25TdGF0ZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBpZiAoc3MuY29sbGFwc2VkIHx8ICFzcy5zdGFydENvbnRyb2wgfHwgIXNzLnNlbGVjdGVkUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhbmdlID0gc3Muc2VsZWN0ZWRSYW5nZTtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRVdGlsLmNsb25lUmFuZ2UocmFuZ2UsIGZhbHNlLCAnY29weScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmAieS4reeahOaWh+acrFxuICAgICAqIEBwYXJhbSBzc1xuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9uc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRTZWxlY3RlZFRleHQoc3M6IFNlbGVjdGlvblN0YXRlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFN0cnVjdCA9IHRoaXMuZ2V0U2VsZWN0ZWRTdHJ1Y3Qoc3MsIHZpZXdPcHRpb25zKSBhcyBCcmFuY2hFbGVtZW50O1xuICAgICAgICBpZiAoc2VsZWN0ZWRTdHJ1Y3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZVN0cmluZyhzZWxlY3RlZFN0cnVjdCwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFNlbGVjdGVkSlNPTihzczogU2VsZWN0aW9uU3RhdGUsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkU3RydWN0ID0gdGhpcy5nZXRTZWxlY3RlZFN0cnVjdChzcywgdmlld09wdGlvbnMpIGFzIEJyYW5jaEVsZW1lbnQ7XG4gICAgICAgIGlmIChzZWxlY3RlZFN0cnVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VyaWFsaXplKHNlbGVjdGVkU3RydWN0LCB2aWV3T3B0aW9ucykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6YGN5Y6G5oyH5a6a5YWD57Sg5YaF6YOo5omA5pyJ5pWw5o2u5YWD5YiX6KGoXG4gICAgICovXG4gICAgc3RhdGljIGdldERhdGFFbGVtZW50cyhlbGVtZW50OiBCcmFuY2hFbGVtZW50KTogQXJyYXk8RWxlbWVudD4ge1xuICAgICAgICBjb25zdCBhcnJheTogQXJyYXk8RWxlbWVudD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZWxlbWVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZURhdGFFbGUoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaCguLi50aGlzLmdldERhdGFFbGVtZW50cyhpdGVtKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG5cblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFFbGVtZW50VmFsdWVTdHJ1Y3Qge1xuICAgIGlkOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHZhbHVlOiBzdHJpbmdcbn1cbiIsImltcG9ydCB7XG4gICAgSW5saW5lR3JvdXBFbGVtZW50LFxuICAgIFBvc2l0aW9uLFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zLFxuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksIHJlYWRFbGVtZW50UHJvcHNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SW5saW5lR3JvdXBSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge1RyYWNrUnVuUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge0VsZW1lbnRTZXJpYWxpemV9IGZyb20gXCIuLi8uLi9lbGVtZW50LXNlcmlhbGl6ZVwiO1xuaW1wb3J0IHtHZXRUcmFja1RpcHNFdmVudH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQge25hbm9pZH0gZnJvbSBcIm5hbm9pZFwiO1xuXG5leHBvcnQgZW51bSBUcmFja1J1blR5cGVFbnVtIHtcbiAgICBJbnNlcnRlZCA9ICdpbnMtcnVuJyxcbiAgICBEZWxldGVkID0gJ2RlbC1ydW4nLFxufVxuXG50eXBlIE51bGxhYmxlVHlwZTxUPiA9IFQgfCBudWxsO1xuXG5leHBvcnQgY2xhc3MgVHJhY2tSdW5FbGVtZW50IGV4dGVuZHMgSW5saW5lR3JvdXBFbGVtZW50PFRyYWNrUnVuUHJvcHM+IHtcbiAgICBjb25zdHJ1Y3Rvcih0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pIHtcbiAgICAgICAgc3VwZXIodHJhY2tUeXBlKTtcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBUcmFja1J1blByb3BzKHRyYWNrVHlwZSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQ8R2V0VHJhY2tUaXBzRXZlbnQ+KCdHZXRUcmFja1RpcHMnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICBldnQudHJhY2tUaXBzID0ge1xuICAgICAgICAgICAgICAgIHRyYWNrUnVuVHlwZTogdGhpcy50eXBlIGFzIFRyYWNrUnVuVHlwZUVudW0sXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5wcm9wcy51c2VyTmFtZSxcbiAgICAgICAgICAgICAgICBkYXRlOiB0aGlzLnByb3BzLmRhdGUsXG4gICAgICAgICAgICAgICAgY29udGVudDogRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemVTdHJpbmcodGhpcywge2FsbDogdHJ1ZX0pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc29sZS5sb2coZXZ0LnRyYWNrVGlwcy5jb250ZW50KTtcblxuICAgICAgICAgICAgZXZ0LmlzQ2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xvbmUoZGF0YTogYm9vbGVhbik6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBUcmFja1J1bkVsZW1lbnQodGhpcy50eXBlIGFzIFRyYWNrUnVuVHlwZUVudW0pO1xuICAgICAgICB0aGlzLnByb3BzLmNsb25lKGNsb25lLnByb3BzKTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBOdWxsYWJsZVR5cGU8UmVuZGVyT2JqZWN0PiB7XG4gICAgICAgIGlmICghb3B0aW9ucy5zaG93VHJhY2tDaGFuZ2VzICYmIHRoaXMudHlwZSA9PT0gVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFRyYWNrUnVuUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB8IG51bGwge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHMoKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHNwbGl0KGluZGV4OiBudW1iZXIpOiBUcmFja1J1bkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSAwIHx8IGluZGV4ID09PSB0aGlzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgVHJhY2tSdW5FbGVtZW50KHRoaXMudHlwZSBhcyBUcmFja1J1blR5cGVFbnVtKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxFbGVtZW50PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXg7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaXRlbS5yZW1vdmUoKTtcbiAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyYWNrUnVuUmVuZGVyT2JqZWN0IGV4dGVuZHMgSW5saW5lR3JvdXBSZW5kZXJPYmplY3Q8VHJhY2tSdW5FbGVtZW50PiB7XG4gICAgY29uc3RydWN0b3IoZWxlOiBUcmFja1J1bkVsZW1lbnQpIHtcbiAgICAgICAgc3VwZXIoZWxlKTtcbiAgICB9XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb24sIGRvY0N0eDoge3ZpZXdPcHRpb25zfX0gPSBlO1xuICAgICAgICByZW5kZXIudHJhbigoKSA9PiB7XG4gICAgICAgICAgICBsZXQgZmlsbENvbG9yID0gdmlld09wdGlvbnMuc2hvd1RyYWNrQ2hhbmdlcyA/IHRoaXMuZWxlbWVudC50eXBlID09PSAnaW5zLXJ1bicgPyB2aWV3T3B0aW9ucy50cmFja0luc0NvbG9yIDogdmlld09wdGlvbnMudHJhY2tEZWxDb2xvciA6ICcnO1xuICAgICAgICAgICAgaWYgKGZpbGxDb2xvcikge1xuICAgICAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5jdHguZmlsbFN0eWxlID0gZmlsbENvbG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZS5uZXh0UmVuZGVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB7eCwgeX0gPSBwb3NpdGlvbjtcbiAgICAgICAgLy/kuI3mmL7npLrnl5Xov7lcbiAgICAgICAgaWYgKCF2aWV3T3B0aW9ucy5zaG93VHJhY2tDaGFuZ2VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLmVsZW1lbnQudHlwZSA9PT0gJ2lucy1ydW4nID8gJ2dyZWVuJyA6ICdyZWQnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVuZGVyID0gdGhpcy5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGNvbnN0IHtyZWN0fSA9IGNoaWxkUmVuZGVyO1xuICAgICAgICAgICAgaWYgKGNoaWxkUmVuZGVyLmVsZW1lbnQgJiYgY2hpbGRSZW5kZXIuZWxlbWVudC50eXBlID09PSAnZGVsLXJ1bicpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBsaW5lWSA9IHkgKyByZWN0LnkgKyByZWN0LmhlaWdodDtcbiAgICAgICAgICAgIGxpbmVZID0gdGhpcy5lbGVtZW50LnR5cGUgPT09ICdpbnMtcnVuJyA/IGxpbmVZIDogbGluZVkgLSByZWN0LmhlaWdodCAvIDI7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZHJhd0hvcmlMaW5lKHggKyByZWN0LngsIGxpbmVZLCByZWN0LndpZHRoLCBjb2xvciwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBUcmFja1J1blJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUnVuRWxlbWVudEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxUcmFja1J1blByb3BzPiB7XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8VHJhY2tSdW5Qcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBUcmFja1J1bkVsZW1lbnQge1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgVHJhY2tSdW5FbGVtZW50KGRhdGEudHlwZSBhcyBUcmFja1J1blR5cGVFbnVtKTtcbiAgICAgICAgZWxlLnByb3BzLnVzZXJJZCA9IGRhdGEucHJvcHM/LnVzZXJJZCA/PyAnJztcbiAgICAgICAgZWxlLnByb3BzLnVzZXJOYW1lID0gZGF0YS5wcm9wcz8udXNlck5hbWUgPz8gJyc7XG4gICAgICAgIGVsZS5wcm9wcy5kYXRlID0gZGF0YS5wcm9wcz8uZGF0ZSA/PyAnJztcbiAgICAgICAgZWxlLnByb3BzLmlkID0gZGF0YS5wcm9wcz8uaWQgPz8gbmFub2lkKDUpO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gVHJhY2tSdW5UeXBlRW51bS5JbnNlcnRlZCB8fCB0eXBlID09PSBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQ7XG4gICAgfVxuXG5cbn1cblxuIiwiaW1wb3J0IHtuYW5vaWR9IGZyb20gXCJuYW5vaWRcIjtcbmltcG9ydCB7RWRpdG9yQ29udGV4dH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHtcbiAgICBCbG9ja0NvbnRhaW5lckVsZW1lbnQsXG4gICAgQnJhbmNoRWxlbWVudCxcbiAgICBEb2NNb2RlLFxuICAgIEVsZW1lbnQsXG4gICAgTGVhZkVsZW1lbnQsXG4gICAgUG9zaXRpb24sXG4gICAgUmVjdCxcbiAgICBTZWxlY3Rpb25Db250ZW50UmFuZ2UsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7SGl0UmVnaW9ufSBmcm9tIFwiLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtEYXRhRWxlQmFzZVByb3BzLCBUZXh0UHJvcHN9IGZyb20gXCIuL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7Q29tbXNDb250YWluZXJFbGVtZW50fSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnRzLWNvbnRhaW5lci1pbXBsXCI7XG5pbXBvcnQge0RhdGFFbGVtZW50SW5saW5lR3JvdXB9IGZyb20gXCIuL2ltcGwvZGF0YS1lbGVtZW50L2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcbmltcG9ydCB7RG9jdW1lbnRCb2R5RWxlbWVudH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1pbXBsXCI7XG5pbXBvcnQge0RvY3VtZW50Rm9vdGVyRWxlbWVudH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtZm9vdGVyLWltcGxcIjtcbmltcG9ydCB7RG9jdW1lbnRIZWFkZXJFbGVtZW50fSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1oZWFkZXItaW1wbFwiO1xuaW1wb3J0IHtEb2N1bWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuaW1wb3J0IHtQYXJhZ3JhcGhFbGVtZW50LCBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCwgUGFyYWdyYXBoUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9pbXBsL3BhcmFncmFwaC9wLWltcGxcIjtcbmltcG9ydCB7UFN5bWJvbEVsZW1lbnR9IGZyb20gXCIuL2ltcGwvc3ltYm9sL3Atc3ltYm9sLWltcGxcIjtcbmltcG9ydCB7VGFibGVDZWxsRWxlbWVudCwgVGFibGVDZWxsUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWNlbGwtaW1wbFwiO1xuaW1wb3J0IHtUYWJsZUVsZW1lbnQsIFRhYmxlUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9pbXBsL3RhYmxlL3RhYmxlLWltcGxcIjtcbmltcG9ydCB7VGFibGVSb3dFbGVtZW50LCBUYWJsZVJvd1JlbmRlck9iamVjdH0gZnJvbSBcIi4vaW1wbC90YWJsZS90YWJsZS1yb3ctaW1wbFwiO1xuaW1wb3J0IHtUZXh0R3JvdXBFbGVtZW50LCBUZXh0R3JvdXBSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGwvdGV4dC90ZXh0LWltcGxcIjtcbmltcG9ydCB7VHJhY2tSdW5FbGVtZW50LCBUcmFja1J1blR5cGVFbnVtfSBmcm9tIFwiLi9pbXBsL3RleHQvdHJhY2stcnVuLWltcGxcIjtcbmltcG9ydCB7XG4gICAgQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsXG4gICAgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0LFxuICAgIEJvcmRlclR5cGUsXG4gICAgQnJhbmNoUmVuZGVyT2JqZWN0LFxuICAgIEN1cnNvclR5cGUsXG4gICAgSW5saW5lR3JvdXBSZW5kZXJPYmplY3QsXG4gICAgTGVhZlJlbmRlck9iamVjdCxcbiAgICBSZW5kZXJPYmplY3Rcbn0gZnJvbSBcIi4vcmVuZGVyLWRlZmluZVwiO1xuXG5cbnR5cGUgUEFJUiA9IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfTtcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRVdGlsIHtcblxuICAgIHN0YXRpYyBzZXRDYW52YXNQcm9wcyhjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdmlld09wdGlvbnM6IHsgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfSk6IHZvaWQge1xuICAgICAgICAvLyBpZiAoY2FudmFzIGluc3RhbmNlb2YgT2Zmc2NyZWVuQ2FudmFzKSB7XG4gICAgICAgIC8vICAgICB0aGlzLnNldE9mZnNjcmVlbkNhbnZhcyhjYW52YXMsIGN0eCBhcyBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHZpZXdPcHRpb25zLCBzY2FsZSk7XG4gICAgICAgIC8vICAgICByZXR1cm5cbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB2aWV3T3B0aW9ucztcbiAgICAgICAgbGV0IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gICAgICAgIGRwciA9IE1hdGguY2VpbChkcHIpO1xuICAgICAgICBjb25zdCBzY2FsZVdpZHRoID0gTWF0aC5mbG9vcih3aWR0aCAqIGRwcikgLyBkcHI7XG4gICAgICAgIGNvbnN0IHNjYWxlSGVpZ2h0ID0gTWF0aC5mbG9vcihoZWlnaHQgKiBkcHIpIC8gZHByO1xuICAgICAgICBjYW52YXMuc3R5bGUud2lkdGggPSBzY2FsZVdpZHRoICsgJ3B4JztcbiAgICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IHNjYWxlSGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgY2FudmFzLndpZHRoID0gc2NhbGVXaWR0aCAqIGRwcjtcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IHNjYWxlSGVpZ2h0ICogZHByO1xuICAgICAgICBjdHguc2NhbGUoZHByLCBkcHIpO1xuICAgIH1cblxuICAgIC8vIHN0YXRpYyBzZXRPZmZzY3JlZW5DYW52YXMoY2FudmFzOiBPZmZzY3JlZW5DYW52YXMsIGN0eDogT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB2aWV3T3B0aW9uczogeyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9LCBzY2FsZTogbnVtYmVyID0gMSk6IHZvaWQge1xuXG4gICAgLy8gICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdmlld09wdGlvbnM7XG4gICAgLy8gICAgIGxldCBkcHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICAgIC8vICAgICBpZiAoc2NhbGUgPiAxKSB7XG4gICAgLy8gICAgICAgICBkcHIgKj0gc2NhbGU7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgZHByID0gTWF0aC5jZWlsKGRwcik7XG4gICAgLy8gICAgIGNvbnN0IHNjYWxlV2lkdGggPSBNYXRoLmZsb29yKHdpZHRoICogZHByKSAvIGRwcjtcbiAgICAvLyAgICAgY29uc3Qgc2NhbGVIZWlnaHQgPSBNYXRoLmZsb29yKGhlaWdodCAqIGRwcikgLyBkcHI7XG4gICAgLy8gICAgIGNhbnZhcy53aWR0aCA9IHNjYWxlV2lkdGggKiBkcHI7XG4gICAgLy8gICAgIGNhbnZhcy5oZWlnaHQgPSBzY2FsZUhlaWdodCAqIGRwcjtcbiAgICAvLyAgICAgY3R4LnNjYWxlKGRwciwgZHByKTtcbiAgICAvLyB9XG5cbiAgICBzdGF0aWMgZ2V0RHByTnVtYmVyKHZhbDogbnVtYmVyLCBzY2FsZTogbnVtYmVyID0gMSk6IG51bWJlciB7XG4gICAgICAgIGxldCBkcHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICAgICAgICBpZiAoc2NhbGUgPiAxKSB7XG4gICAgICAgICAgICBkcHIgKj0gc2NhbGU7XG4gICAgICAgIH1cbiAgICAgICAgZHByID0gTWF0aC5jZWlsKGRwcik7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHZhbCAqIGRwcikgLyBkcHJcbiAgICB9XG5cbiAgICBzdGF0aWMgcmVhZFRleHRQcm9wcyhkZXN0OiBUZXh0UHJvcHMgfCBudWxsLCBwcm9wczogVGV4dFByb3BzIHwgdW5kZWZpbmVkLCBvcHRpb25zOiBWaWV3T3B0aW9ucyk6IFRleHRQcm9wcyB7XG4gICAgICAgIGlmICghcHJvcHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRleHRQcm9wcyhkZXN0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXh0UHJvcHMgPSBkZXN0ID8/IG5ldyBUZXh0UHJvcHMoKTtcbiAgICAgICAgLy/kuI3pnIDorr7nva7pu5jorqTpopzoibLvvIzmoLnmja7lsYLnuqfnu6fmib/ov5vooYzloavlhYVcbiAgICAgICAgdGV4dFByb3BzLmNvbG9yID0gcHJvcHMuY29sb3I7Ly8gfHwgb3B0aW9ucy5kZWZhdWx0Q29sb3I7XG4gICAgICAgIHRleHRQcm9wcy5mb250TmFtZSA9IHByb3BzLmZvbnROYW1lIHx8IG9wdGlvbnMuZGVmYXVsdEZvbnROYW1lO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udFNpemUgPSBwcm9wcy5mb250U2l6ZSB8fCBvcHRpb25zLmRlZmF1bHRGb250U2l6ZTtcbiAgICAgICAgdGV4dFByb3BzLmJvcmRlciA9IHByb3BzLmJvcmRlcjtcbiAgICAgICAgaWYgKHByb3BzLmZvbnRXZWlnaHQpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5mb250V2VpZ2h0ID0gcHJvcHMuZm9udFdlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMuZm9udFN0eWxlKSB7XG4gICAgICAgICAgICB0ZXh0UHJvcHMuZm9udFN0eWxlID0gcHJvcHMuZm9udFN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy51bmRlcmxpbmUpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy51bmRlcmxpbmUgPSBwcm9wcy51bmRlcmxpbmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmxpbmV0aHJvdWdoKSB7XG4gICAgICAgICAgICB0ZXh0UHJvcHMubGluZXRocm91Z2ggPSBwcm9wcy5saW5ldGhyb3VnaDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMub3ZlcmxpbmUpIHtcbiAgICAgICAgICAgIHRleHRQcm9wcy5vdmVybGluZSA9IHByb3BzLm92ZXJsaW5lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5iYWNrZ3JvdW5kKSB7XG4gICAgICAgICAgICB0ZXh0UHJvcHMuYmFja2dyb3VuZCA9IHByb3BzLmJhY2tncm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmxldHRlclNwYWNlKSB7XG4gICAgICAgICAgICB0ZXh0UHJvcHMubGV0dGVyU3BhY2UgPSBwcm9wcy5sZXR0ZXJTcGFjZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMudmVydEFsaWduKSB7XG4gICAgICAgICAgICB0ZXh0UHJvcHMudmVydEFsaWduID0gcHJvcHMudmVydEFsaWduO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0UHJvcHM7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlYWRFbGVCYXNlUHJvcHMoZGVzdDogRGF0YUVsZUJhc2VQcm9wcywgcHJvcHM6IERhdGFFbGVCYXNlUHJvcHMpOiBEYXRhRWxlQmFzZVByb3BzIHtcbiAgICAgICAgZGVzdC5pZCA9IHByb3BzLmlkID8/IG5hbm9pZCg1KTtcbiAgICAgICAgZGVzdC5uYW1lID0gcHJvcHMubmFtZTtcbiAgICAgICAgZGVzdC5jYXB0aW9uID0gcHJvcHMuY2FwdGlvbjtcbiAgICAgICAgZGVzdC5lZGl0YWJsZSA9IHByb3BzLmVkaXRhYmxlID8/IHRydWU7XG4gICAgICAgIGRlc3QuZmllbGROYW1lID0gcHJvcHMuZmllbGROYW1lO1xuICAgICAgICBkZXN0Lm1pbkxlbmd0aCA9IHByb3BzLm1pbkxlbmd0aDtcbiAgICAgICAgZGVzdC5wcmludGFibGUgPSBwcm9wcy5wcmludGFibGUgPz8gdHJ1ZTtcbiAgICAgICAgZGVzdC5yZXF1aXJlZCA9IHByb3BzLnJlcXVpcmVkO1xuICAgICAgICBkZXN0LnNlY3JldEJyb3dzZSA9IHByb3BzLnNlY3JldEJyb3dzZTtcbiAgICAgICAgZGVzdC5kZWxldGVhYmxlID0gcHJvcHMuZGVsZXRlYWJsZTtcbiAgICAgICAgZGVzdC51bmRlcmxpbmUgPSBwcm9wcy51bmRlcmxpbmU7XG4gICAgICAgIGRlc3QudHlwZSA9IHByb3BzLnR5cGU7XG4gICAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWGheWuueWMuuWfn+acgOWkp+mrmOW6plxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKiBAcGFyYW0gcmVuZGVySGVpZ2h0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgaW5uZXJSZWN0TWF4SGVpZ2h0KHJlbmRlcjogUmVuZGVyT2JqZWN0LCByZW5kZXJIZWlnaHQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHtwYWRkaW5nfSA9IHJlbmRlcjtcbiAgICAgICAgcmV0dXJuIHJlbmRlckhlaWdodCAtIHBhZGRpbmcudG9wIC0gcGFkZGluZy5ib3R0b207XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5YaF5qGG5YaF5a656auY5bqm77yM5pu05paw5aSW5qGG5qGG5L2T6auY5bqmXG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqIEBwYXJhbSBpbm5lclJlY3RcbiAgICAgKi9cbiAgICBzdGF0aWMgdXBkYXRlUmVuZGVySGVpZ2h0QnlJbm5lclJlY3QocmVuZGVyOiBSZW5kZXJPYmplY3QsIGlubmVyUmVjdDogUmVjdCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cGFkZGluZywgbWFyZ2lufSA9IHJlbmRlcjtcbiAgICAgICAgLy/lpJblsYLlrrnlmajpq5jluqbnrYnkuo7lhoXlrrnpq5jluqYr5aSW6L656LedK+WGhei+uei3nVxuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSBpbm5lclJlY3QuaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyBwYWRkaW5nLnRvcCArIHBhZGRpbmcuYm90dG9tO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWdl+e6p+WFg+e0oOmZkOWItuWwuuWvuFxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKiBAcGFyYW0gcGFyZW50TGltaXRSZWN0XG4gICAgICovXG4gICAgc3RhdGljIHNldEJsb2NrRWxlbWVudExpbWl0U2l6ZShyZW5kZXI6IEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0IHwgQmxvY2tDb250ZW50UmVuZGVyT2JqZWN0LCBwYXJlbnRMaW1pdFJlY3Q6IFJlY3QpOiB2b2lkIHtcbiAgICAgICAgcmVuZGVyLnJlY3QueCA9IHBhcmVudExpbWl0UmVjdC54O1xuICAgICAgICByZW5kZXIucmVjdC55ID0gcGFyZW50TGltaXRSZWN0LnkgKyBwYXJlbnRMaW1pdFJlY3QuaGVpZ2h0O1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHBhcmVudExpbWl0UmVjdC5tYXhXaWR0aCA/PyAwO1xuICAgICAgICByZW5kZXIucmVjdC5tYXhXaWR0aCA9IHBhcmVudExpbWl0UmVjdC5tYXhXaWR0aDtcbiAgICAgICAgaWYgKHBhcmVudExpbWl0UmVjdC5tYXhIZWlnaHQpIHtcbiAgICAgICAgICAgIHJlbmRlci5yZWN0Lm1heEhlaWdodCA9IHBhcmVudExpbWl0UmVjdC5tYXhIZWlnaHQgLSBwYXJlbnRMaW1pdFJlY3QuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YWL6ZqG5qGG5L2TXG4gICAgICogQHBhcmFtIHJlY3RcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBjbG9uZVJlY3QocmVjdDogUmVjdCk6IFJlY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlY3QgPSBuZXcgUmVjdCgpO1xuICAgICAgICBjbG9uZVJlY3QueCA9IHJlY3QueDtcbiAgICAgICAgY2xvbmVSZWN0LnkgPSByZWN0Lnk7XG4gICAgICAgIGNsb25lUmVjdC53aWR0aCA9IHJlY3Qud2lkdGg7XG4gICAgICAgIGNsb25lUmVjdC5oZWlnaHQgPSByZWN0LmhlaWdodDtcbiAgICAgICAgY2xvbmVSZWN0Lm1heEhlaWdodCA9IHJlY3QubWF4SGVpZ2h0O1xuICAgICAgICBjbG9uZVJlY3QubWF4V2lkdGggPSByZWN0Lm1heFdpZHRoO1xuICAgICAgICByZXR1cm4gY2xvbmVSZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmHjeaWsOmZkOWumuWtkOWFg+e0oOS7peWPiuW9k+WJjemrmOW6puWAvCzlubbov5Tlm57lhoXovrnmoYblhoXlrrnpq5jluqZcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICogQHBhcmFtIHJlc2V0WCDmtYvph4/mrrXokL3lpJbmoYbml7bvvIzlhoXmoYbkuI3pnIDopoHph43nva5477yM5Zug5Li65YaF5qGG5bey57uP5a2Y5Zyo5a+56b2QXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtZWFzdXJlKHJlbmRlcjogQmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QgfCBCbG9ja0NvbnRlbnRSZW5kZXJPYmplY3QsIHJlc2V0WCA9IHRydWUpOiBudW1iZXIge1xuICAgICAgICBpZiAocmVuZGVyLnJlY3Qud2lkdGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVuZGVyIGluc3RhbmNlb2YgVGFibGVSb3dSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbWVhc3VyZVRhYmxlUm93KHJlbmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIFRhYmxlUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlQWxpZ24ocmVuZGVyKTtcbiAgICAgICAgICAgIHRoaXMucmVtZWFzdXJlVGFibGVNZXJnZShyZW5kZXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlubmVyUmVjdCA9IHJlbmRlci5nZXRJbm5lclJlY3QoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSByZW5kZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpZiAocmVzZXRYKSB7XG4gICAgICAgICAgICAgICAgbGluZS5yZWN0LnggPSBpbm5lclJlY3QueDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmUucmVjdC55ID0gaW5uZXJSZWN0LmhlaWdodCArIGlubmVyUmVjdC55ICsgbGluZS5tYXJnaW4udG9wO1xuICAgICAgICAgICAgbGluZS5yZWN0Lm1heFdpZHRoID0gaW5uZXJSZWN0Lm1heFdpZHRoO1xuICAgICAgICAgICAgaW5uZXJSZWN0LmhlaWdodCArPSBsaW5lLnJlY3QuaGVpZ2h0ICsgbGluZS5tYXJnaW4udG9wICsgbGluZS5tYXJnaW4uYm90dG9tO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlci51cGRhdGVSZW5kZXJIZWlnaHQoaW5uZXJSZWN0KTtcbiAgICAgICAgcmV0dXJuIGlubmVyUmVjdC5oZWlnaHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIHJlbWVhc3VyZVRhYmxlUm93KHJvd1JlbmRlcjogVGFibGVSb3dSZW5kZXJPYmplY3QsIGZvcmVjZUNvbEluZGV4ID0gLTEpOiBudW1iZXIge1xuICAgICAgICBjb25zdCByb3dFbGUgPSByb3dSZW5kZXIuZWxlbWVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJvd01pbkhlaWdodCA9IHJvd0VsZS5wcm9wcy5taW5IZWlnaHQgPiAxOSA/IHJvd0VsZS5wcm9wcy5taW5IZWlnaHQgOiAxOTtcbiAgICAgICAgbGV0IG1heENlbGxoZWlnaHQgPSByb3dNaW5IZWlnaHQ7XG4gICAgICAgIC8v6ZmQ5Yi26KGM5pyA5bCP6auY5bqmXG4gICAgICAgIG1heENlbGxoZWlnaHQgPSBtYXhDZWxsaGVpZ2h0IDwgMTkgPyAxOSA6IG1heENlbGxoZWlnaHQ7XG4gICAgICAgIC8v6I635Y+W6KGM5YaF6Z2e57q15ZCR5ZCI5bm25Y2V5YWD5qC855qE5pyA6auY5Y2V5YWD5qC86auY5bqmXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93UmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gcm93UmVuZGVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgY29uc3Qge3ZNZXJnZX0gPSAoPFRhYmxlQ2VsbEVsZW1lbnQ+Y2VsbFJlbmRlci5lbGVtZW50KS5wcm9wcztcbiAgICAgICAgICAgIGlmIChjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0ID4gbWF4Q2VsbGhlaWdodCAmJiAodk1lcmdlICE9PSAncmVzdGFydCcgfHwgaSA9PT0gZm9yZWNlQ29sSW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgbWF4Q2VsbGhlaWdodCA9IGNlbGxSZW5kZXIucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy/lvqrnjq/orr7nva7ljZXlhYPmoLzpq5jluqbkuLrooYzlhoXmnIDlpKfljZXlhYPmoLzpq5jluqZcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dSZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSByb3dSZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3QgY2VsbEVsZW1lbnQgPSA8VGFibGVDZWxsRWxlbWVudD5jZWxsUmVuZGVyLmVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB7dk1lcmdlfSA9IGNlbGxFbGVtZW50LnByb3BzO1xuICAgICAgICAgICAgaWYgKCh2TWVyZ2UgIT09ICdyZXN0YXJ0JyB8fCBpID09PSBmb3JlY2VDb2xJbmRleCkgfHwgY2VsbFJlbmRlci5yZWN0LmhlaWdodCA8IG1heENlbGxoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBjZWxsUmVuZGVyLnJlY3QuaGVpZ2h0ID0gbWF4Q2VsbGhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8v5aSE55CG5Y2V5YWD5qC85YaF5a6557q15ZCR5bGF5LitXG4gICAgICAgICAgICB0aGlzLm1lYXN1cmVDZWxsVkFsaWduKGNlbGxSZW5kZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8v6K6+572u6KGM6auYXG4gICAgICAgIHJvd1JlbmRlci51cGRhdGVSZW5kZXJIZWlnaHQobWF4Q2VsbGhlaWdodCk7XG4gICAgICAgIHJldHVybiBtYXhDZWxsaGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluihqOagvOihjOe7mOWItuWFg+e0oOeahOWGheWuuemrmOW6pu+8jOeUqOS6jue8qeaUvuihjOmrmOW6puaXtu+8jOiOt+WPluacgOWwj+WGheWuuemrmOW6pu+8jOe8qeaUvueahOmrmOW6puS4jeiDveWwj+S6juWGheWuueacgOWwj+mrmOW6plxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUYWJsZVJvd1JlbmRlckNvbnRlbnRIZWlnaHQocm93UmVuZGVyOiBUYWJsZVJvd1JlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHJvd0VsZSA9IHJvd1JlbmRlci5lbGVtZW50IGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgbGV0IG1heENlbGxoZWlnaHQgPSAxOTtcbiAgICAgICAgLy/pmZDliLbooYzmnIDlsI/pq5jluqZcbiAgICAgICAgLy/ojrflj5booYzlhoXpnZ7nurXlkJHlkIjlubbljZXlhYPmoLznmoTmnIDpq5jljZXlhYPmoLzpq5jluqZcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dSZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSByb3dSZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgY29uc3QgY2VsbENvbnRlbnRIZWlnaHQgPSB0aGlzLmdldFRhYmxlQ2VsbFJlbmRlckNvbnRlbnRIZWlnaHQoY2VsbFJlbmRlcik7XG4gICAgICAgICAgICBjb25zdCB7dk1lcmdlfSA9ICg8VGFibGVDZWxsRWxlbWVudD5jZWxsUmVuZGVyLmVsZW1lbnQpLnByb3BzO1xuICAgICAgICAgICAgaWYgKGNlbGxDb250ZW50SGVpZ2h0ID4gbWF4Q2VsbGhlaWdodCAmJiB2TWVyZ2UgIT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgIG1heENlbGxoZWlnaHQgPSBjZWxsQ29udGVudEhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4Q2VsbGhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bljZXlhYPmoLzlhoXlrrnpq5jluqZcbiAgICAgKiDljZXlhYPmoLzmmoLkuI3lpITnkIbkuIrkuIttYXJnaW7jgIFwYWRkaW5nXG4gICAgICogQHBhcmFtIGNlbGxSZW5kZXJcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUYWJsZUNlbGxSZW5kZXJDb250ZW50SGVpZ2h0KGNlbGxSZW5kZXI6IFRhYmxlQ2VsbFJlbmRlck9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIGxldCBjb250ZW50SGVpZ2h0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjZWxsUmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb250ZW50SGVpZ2h0ICs9IGNlbGxSZW5kZXIuZ2V0Q2hpbGQoaSkucmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRlbnRIZWlnaHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5aSE55CG5Y2V5YWD5qC85YaF5a6557q15ZCR5a+56b2QXG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIG1lYXN1cmVDZWxsVkFsaWduKHJlbmRlcjogVGFibGVDZWxsUmVuZGVyT2JqZWN0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRjRWxlbWVudCA9IHJlbmRlci5lbGVtZW50IGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHt2QWxpZ259ID0gdGNFbGVtZW50LnByb3BzO1xuICAgICAgICBpZiAoIXZBbGlnbiB8fCB2QWxpZ24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN1bUhlaWdodCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzdW1IZWlnaHQgKz0gcmVuZGVyLmdldENoaWxkKGkpLnJlY3QuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBzcGFjZUhlaWdodCA9IDA7XG4gICAgICAgIHNwYWNlSGVpZ2h0ID0gdkFsaWduID09PSAnbWlkZGxlJyA/IE1hdGguZmxvb3IoKHJlbmRlci5yZWN0LmhlaWdodCAtIHN1bUhlaWdodCkgLyAyKSA6IHZBbGlnbiA9PT0gJ2JvdHRvbScgPyByZW5kZXIucmVjdC5oZWlnaHQgLSBzdW1IZWlnaHQgOiAwXG4gICAgICAgIGlmIChzcGFjZUhlaWdodCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHkgPSBzcGFjZUhlaWdodDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlbmRlci5nZXRDaGlsZChpKS5yZWN0LnkgPSB5O1xuICAgICAgICAgICAgeSArPSByZW5kZXIuZ2V0Q2hpbGQoaSkucmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7ooajmoLzmqKrlkJHmjpLliJfmlrnlvI9cbiAgICAgKiBAcGFyYW0gdGJSZW5kZXJcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIHNldFRhYmxlQWxpZ24odGJSZW5kZXI6IFRhYmxlUmVuZGVyT2JqZWN0KTogdm9pZCB7XG4gICAgICAgIC8vIGNvbnN0IHthbGlnbm1lbnR9ID0gdGJSZW5kZXIuZWxlbWVudC5wcm9wcztcbiAgICAgICAgLy8gaWYgKCFhbGlnbm1lbnQpIHtcbiAgICAgICAgLy8gICAgIHJldHVybjtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBjb25zdCBwYXJlbnRSZW5kZXIgPSB0YlJlbmRlci5wYXJlbnQ7XG4gICAgICAgIC8vIGNvbnN0IHJlbWFpblNwYWNlID0gcGFyZW50UmVuZGVyLnJlY3Qud2lkdGggLSB0YlJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAvLyBpZiAocmVtYWluU3BhY2UgPD0gMCkge1xuICAgICAgICAvLyAgICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGlmIChhbGlnbm1lbnQgPT09ICdjZW50ZXInKSB7XG4gICAgICAgIC8vICAgICB0YlJlbmRlci5yZWN0LnggPSBNYXRoLmZsb29yKHJlbWFpblNwYWNlIC8gMik7XG4gICAgICAgIC8vIH0gZWxzZSBpZiAoYWxpZ25tZW50ID09PSAnZW5kJykge1xuICAgICAgICAvLyAgICAgdGJSZW5kZXIucmVjdC54ID0gcmVtYWluU3BhY2U7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDph43mlrDmtYvph4/lkIjlubbljZXlhYPmoLzpq5jluqZcbiAgICAgKiBAcGFyYW0gdGJSZW5kZXJcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyByZW1lYXN1cmVUYWJsZU1lcmdlKHRiUmVuZGVyOiBUYWJsZVJlbmRlck9iamVjdCk6IHZvaWQge1xuICAgICAgICAvL+aYr+WQpumcgOimgemHjeaWsOiuoeeulyzkuLvopoHop6PlhrPvvJrkuYvliY3lkIjlubborqHnrpfnmoTliJfvvIzlj6/og73kvJrooqvlkI7pnaLlkIjlubborqHnrpfnmoTliJfmiYDlvbHlk43vvIzpnIDopoHlho3mrKHph43mlrDorqHnrpfmtYvph49cbiAgICAgICAgbGV0IG5lZWRSZUNhbGMgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YlJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGJSZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJvdy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxSZW5kZXIgPSByb3cuZ2V0Q2hpbGQoaikgYXMgVGFibGVDZWxsUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZSA9IGNlbGxSZW5kZXIuZWxlbWVudCBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IHt2TWVyZ2V9ID0gZWxlLnByb3BzO1xuICAgICAgICAgICAgICAgIGlmICh2TWVyZ2UgPT09ICdyZXN0YXJ0Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVJbmRleCA9IGVsZS5nZXRJbmRleCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250aW51ZVJvd3MgPSB0aGlzLmdldENvbnRpbnVlVk1lcmdlUmVuZGVyUm93cyh0YlJlbmRlciwgaSwgZWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRpbnVlUm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v5ZCR5LiL5LiN5a2Y5Zyo5ZCI5bm255qE5Y2V5YWD5qC877yM5b2T5YmN5ZCI5bm255qE5Y2V5YWD5qC85piv6KKrY3V06L+H5p2l55qE77yM5bm25LiU5b2T5YmN5Y2V5YWD5qC86auY5bqm6auY5LqO6KGM5YaF6auY5bqm6ZyA6KaBcmVtZWFzdXJl5b2T5YmN6KGMXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbFJlbmRlci5yZWN0LmhlaWdodCA+IHJvdy5yZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtZWFzdXJlVGFibGVSb3cocm93LCBqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkUmVDYWxjID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRpbnVlQ2VsbEhlaWdodCA9IGNvbnRpbnVlUm93cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLnJlY3QuaGVpZ2h0LCAwKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdmVyZmxvd0hlaWdodCA9IGNlbGxSZW5kZXIucmVjdC5oZWlnaHQgLSByb3cucmVjdC5oZWlnaHQgLSBjb250aW51ZUNlbGxIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIC8v5rqi5Ye655qE6auY5bqm5Yqg5Yiw5pyA5ZCO5LiA5Liq5ZCI5bm25Y2V5YWD5qC85LitXG4gICAgICAgICAgICAgICAgICAgIGlmIChvdmVyZmxvd0hlaWdodCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RSb3cgPSBjb250aW51ZVJvd3NbY29udGludWVSb3dzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFJvdy5yZWN0LmhlaWdodCArPSBvdmVyZmxvd0hlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzaXplQ2VsbFRvRmlsbFJvdyhsYXN0Um93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRSZUNhbGMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFJlbmRlci5yZWN0LmhlaWdodCA9IHJvdy5yZWN0LmhlaWdodCArIGNvbnRpbnVlQ2VsbEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobmVlZFJlQ2FsYykge1xuICAgICAgICAgICAgdGhpcy5yZW1lYXN1cmVUYWJsZU1lcmdlKHRiUmVuZGVyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWQkeS4i+e6teWQkeWQiOW5tueahOihjFxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICAgKiBAcGFyYW0gY29sSW5kZXhcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGdldENvbnRpbnVlVk1lcmdlUmVuZGVyUm93cyhyZW5kZXI6IFRhYmxlUmVuZGVyT2JqZWN0LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogVGFibGVSb3dSZW5kZXJPYmplY3RbXSB7XG4gICAgICAgIGNvbnN0IHJvd3M6IEFycmF5PFRhYmxlUm93UmVuZGVyT2JqZWN0PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gcm93SW5kZXggKyAxOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3dSZW5kZXIgPSByZW5kZXIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCByb3dFbGUgPSByb3dSZW5kZXIuZWxlbWVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBlbGUgPSByb3dFbGUuZ2V0Q2hpbGQoY29sSW5kZXgpIGFzIFRhYmxlQ2VsbEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB7dk1lcmdlfSA9IGVsZS5wcm9wcztcbiAgICAgICAgICAgIGlmICh2TWVyZ2UgIT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvd3MucHVzaChyb3dSZW5kZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3dzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNruaoquWQkeW9k+WJjeiiq+WQiOW5tueahOWNleWFg+agvFxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRIb3Jpem9udGFsUmVzdGFydENlbGxJbmRleCh0YjogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQocm93SW5kZXgpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgZm9yIChsZXQgaSA9IGNvbEluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2hpbGQoaSkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLmhNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrmib7liLDkuLvlkIjlubbljZXlhYPmoLwnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7mqKrlkJHlvZPliY3ooqvlkIjlubbnmoTljZXlhYPmoLxcbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICAgKiBAcGFyYW0gY29sSW5kZXhcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0VmVydGljYWxSZXN0YXJ0Q2VsbEluZGV4KHRiOiBUYWJsZUVsZW1lbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBmb3IgKGxldCBpID0gcm93SW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQoaSkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChjb2xJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLnZNZXJnZSA9PT0gJ3Jlc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrmib7liLDmqKrlkJHlvZPliY3ooqvlkIjlubbnmoTljZXlhYPmoLwnKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWQiOW5tuWNleWFg+agvOS4u+WNleWFg+agvFxuICAgICAqIEBwYXJhbSB0YlxuICAgICAqIEBwYXJhbSByb3dJbmRleFxuICAgICAqIEBwYXJhbSBjb2xJbmRleFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFJlc3RhcnRDZWxsUG9zaXRpb24odGI6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IHsgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGIuZ2V0Q2hpbGQocm93SW5kZXgpIGFzIFRhYmxlUm93RWxlbWVudDtcbiAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChjb2xJbmRleCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgaWYgKGNlbGwucHJvcHMuaE1lcmdlID09PSAnY29udGludWUnKSB7XG4gICAgICAgICAgICBjb25zdCByZXN0YXJ0Q2VsbEluZGV4ID0gdGhpcy5nZXRIb3Jpem9udGFsUmVzdGFydENlbGxJbmRleCh0Yiwgcm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlc3RhcnRDZWxsUG9zaXRpb24odGIsIHJvd0luZGV4LCByZXN0YXJ0Q2VsbEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2VsbC5wcm9wcy52TWVyZ2UgPT09ICdjb250aW51ZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3RhcnRSb3dJbmRleCA9IHRoaXMuZ2V0VmVydGljYWxSZXN0YXJ0Q2VsbEluZGV4KHRiLCByb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzdGFydENlbGxQb3NpdGlvbih0YiwgcmVzdGFydFJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtyb3dJbmRleCwgY29sSW5kZXh9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6LCD5pW05Y2V5YWD5qC86auY5bqm5aGr5ruh5pW05Liq6KGM55qE6auY5bqmXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVzaXplQ2VsbFRvRmlsbFJvdyhyb3c6IFRhYmxlUm93UmVuZGVyT2JqZWN0KTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gcm93LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgY2VsbC5yZWN0LmhlaWdodCA9IHJvdy5yZWN0LmhlaWdodDtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5YWD57Sg55qE5YWo5bGA57Si5byV5L2N572uXG4gICAgICogQHBhcmFtIGNvbnRyb2xcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRDb250cm9sSW5kZXgoY29udHJvbDogRWxlbWVudCk6IG51bWJlcjtcbiAgICBzdGF0aWMgZ2V0Q29udHJvbEluZGV4KGNvbnRyb2w6IEVsZW1lbnQsIHB1cmU6IGJvb2xlYW4pOiBudW1iZXI7XG4gICAgc3RhdGljIGdldENvbnRyb2xJbmRleChjb250cm9sOiBFbGVtZW50LCBwdXJlPzogYm9vbGVhbik6IG51bWJlciB7XG4gICAgICAgIHB1cmUgPSB0eXBlb2YgcHVyZSA9PT0gJ3VuZGVmaW5lZCcgPyBmYWxzZSA6IHB1cmU7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRDb250cm9sSW5kZXgocHVyZSwgY29udHJvbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5YWo5bGA57Si5byV5L2N572u6I635Y+W5YWD57SgXG4gICAgICogQHBhcmFtIGNvbnRyb2xcbiAgICAgKiBAcGFyYW0gY291bnRlclxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldENvbnRyb2xCeUluZGV4KGNvbnRyb2w6IEVsZW1lbnQsIGNvdW50ZXI6IHsgY3VyckluZGV4OiBudW1iZXIsIGluZGV4OiBudW1iZXIgfSk6IEVsZW1lbnQgfCBudWxsO1xuICAgIHN0YXRpYyBnZXRDb250cm9sQnlJbmRleChjb250cm9sOiBFbGVtZW50LCBjb3VudGVyOiB7IGN1cnJJbmRleDogbnVtYmVyLCBpbmRleDogbnVtYmVyIH0sIHB1cmU6IGJvb2xlYW4pOiBFbGVtZW50IHwgbnVsbDtcbiAgICBzdGF0aWMgZ2V0Q29udHJvbEJ5SW5kZXgoY29udHJvbDogRWxlbWVudCwgY291bnRlcjogeyBjdXJySW5kZXg6IG51bWJlciwgaW5kZXg6IG51bWJlciB9LCBwdXJlPzogYm9vbGVhbik6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgcHVyZSA9IHR5cGVvZiBwdXJlID09PSAndW5kZWZpbmVkJyA/IGZhbHNlIDogcHVyZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldENvbnRyb2xCeUluZGV4KHB1cmUsIGNvbnRyb2wsIGNvdW50ZXIpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5YWD57Sg55qE5YWo5bGA57Si5byV5L2N572u77yM5LiN57uf6K6h5q616JC956ym5Y+3XG4gICAgICogQHBhcmFtIHB1cmVcbiAgICAgKiBAcGFyYW0gY29udHJvbFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2dldENvbnRyb2xJbmRleChwdXJlOiBib29sZWFuLCBjb250cm9sOiBFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyZW50ID0gY29udHJvbC5wYXJlbnQ7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY29udHJvbC5nZXRJbmRleCgpO1xuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSBwdXJlICYmIGNvbnRyb2wudHlwZSA9PT0gJ3BzeW0nID8gMCA6IDE7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHBhcmVudC5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBjb3VudGVyICs9IGNoaWxkLmdldFNlbGZMZW5ndGgocHVyZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY291bnRlciArIHRoaXMuX2dldENvbnRyb2xJbmRleChwdXJlLCBwYXJlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOagueaNruWFqOWxgOe0ouW8leS9jee9ruiOt+WPluWFg+e0oO+8jOS4jee7n+iuoeauteiQveespuWPt1xuICAgICAqIEBwYXJhbSBjb250cm9sXG4gICAgICogQHBhcmFtIGNvdW50ZXJcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIF9nZXRDb250cm9sQnlJbmRleChwdXJlOiBib29sZWFuLCBjb250cm9sOiBFbGVtZW50LCBjb3VudGVyOiB7IGN1cnJJbmRleDogbnVtYmVyLCBpbmRleDogbnVtYmVyIH0pOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGluY3JlYXNlVmFsID0gcHVyZSAmJiBjb250cm9sLnR5cGUgPT09ICdwc3ltJyA/IDAgOiAxO1xuICAgICAgICBjb3VudGVyLmN1cnJJbmRleCArPSBpbmNyZWFzZVZhbDtcbiAgICAgICAgaWYgKGNvdW50ZXIuY3VyckluZGV4ID09PSBjb3VudGVyLmluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250cm9sLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5fZ2V0Q29udHJvbEJ5SW5kZXgocHVyZSwgY29udHJvbC5nZXRDaGlsZChpKSwgY291bnRlcik7XG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuICAgIC8vIC8qKlxuICAgIC8vICAqIOiOt+WPluWFg+e0oOeahOWFqOWxgOe0ouW8leS9jee9rlxuICAgIC8vICAqIEBwYXJhbSBjb250cm9sXG4gICAgLy8gICogQHJldHVybnNcbiAgICAvLyAgKi9cbiAgICAvLyBzdGF0aWMgZ2V0Q29udHJvbEluZGV4Mihjb250cm9sOiBFbGVtZW50KTogbnVtYmVyIHtcbiAgICAvLyAgICAgY29uc3QgcGFyZW50ID0gY29udHJvbC5wYXJlbnQ7XG4gICAgLy8gICAgIGlmIChwYXJlbnQpIHtcbiAgICAvLyAgICAgICAgIGNvbnN0IGluZGV4ID0gY29udHJvbC5nZXRJbmRleCgpO1xuICAgIC8vICAgICAgICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgIC8vICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgLy8gICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBwYXJlbnQuZ2V0Q2hpbGQoaSk7XG4gICAgLy8gICAgICAgICAgICAgY291bnRlciArPSBjaGlsZC5nZXRTZWxmTGVuZ3RoKCk7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgICByZXR1cm4gY291bnRlciArIHRoaXMuZ2V0Q29udHJvbEluZGV4MihwYXJlbnQpO1xuICAgIC8vICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgcmV0dXJuIDA7XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyAvKipcbiAgICAvLyAgKiDmoLnmja7lhajlsYDntKLlvJXkvY3nva7ojrflj5blhYPntKBcbiAgICAvLyAgKiBAcGFyYW0gY29udHJvbFxuICAgIC8vICAqIEBwYXJhbSBjb3VudGVyXG4gICAgLy8gICogQHJldHVybnNcbiAgICAvLyAgKi9cbiAgICAvLyBzdGF0aWMgZ2V0Q29udHJvbEJ5SW5kZXgyKGNvbnRyb2w6IEVsZW1lbnQsIGNvdW50ZXI6IHsgY3VyckluZGV4OiBudW1iZXIsIGluZGV4OiBudW1iZXIgfSk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAvLyAgICAgY291bnRlci5jdXJySW5kZXgrKztcbiAgICAvLyAgICAgaWYgKGNvdW50ZXIuY3VyckluZGV4ID09PSBjb3VudGVyLmluZGV4KSB7XG4gICAgLy8gICAgICAgICByZXR1cm4gY29udHJvbDtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgLy8gICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgIC8vICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250cm9sLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRDb250cm9sQnlJbmRleDIoY29udHJvbC5nZXRDaGlsZChpKSwgY291bnRlcik7XG4gICAgLy8gICAgICAgICAgICAgaWYgKHJlcykge1xuICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfVxuICAgIC8vICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blkIznuqfntKfmjKjliY3mlrnnmoTlhYTlvJ/lhYPntKBcbiAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFByZXZTaWJsaW5nRWxlbWVudChlbGVtZW50OiBFbGVtZW50KTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyZW50LmdldENoaWxkSW5kZXgoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5nZXRDaGlsZChpbmRleCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWQjOe6p+e0p+aMqOS4i+aWueeahOWFg+e0oFxuICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0TmV4dFNpYmxpbmdFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICAgICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuZ2V0Q2hpbGRJbmRleChlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChpbmRleCA8IHBhcmVudC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5nZXRDaGlsZChpbmRleCArIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldE5leHRTaWJsaW5nVHJhY2tFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQsIHR5cGU6IFRyYWNrUnVuVHlwZUVudW0sIHVzZXJJZDogc3RyaW5nKTogVHJhY2tSdW5FbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IG5leHRTaWJsaW5nRWxlID0gdGhpcy5nZXROZXh0U2libGluZ0VsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGlmIChuZXh0U2libGluZ0VsZSBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKG5leHRTaWJsaW5nRWxlLnR5cGUgPT09IHR5cGUgJiYgbmV4dFNpYmxpbmdFbGUucHJvcHMudXNlcklkID09PSB1c2VySWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dFNpYmxpbmdFbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFByZXZTaWJsaW5nVHJhY2tFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQsIHR5cGU6IFRyYWNrUnVuVHlwZUVudW0sIHVzZXJJZDogc3RyaW5nKTogVHJhY2tSdW5FbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHByZXZTaWJsaW5nRWxlID0gdGhpcy5nZXRQcmV2U2libGluZ0VsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGlmIChwcmV2U2libGluZ0VsZSBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKHByZXZTaWJsaW5nRWxlLnR5cGUgPT09IHR5cGUgJiYgcHJldlNpYmxpbmdFbGUucHJvcHMudXNlcklkID09PSB1c2VySWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldlNpYmxpbmdFbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u6buY6K6k6YWN572u5Yib5bu66ZW/5paH5pysXG4gICAgICogQHBhcmFtIHZpZXdPcHRpb25zXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0TmV3VGV4dEdyb3VwKHRleHRQcm9wczogVGV4dFByb3BzKTogVGV4dEdyb3VwRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBuZXcgVGV4dEdyb3VwRWxlbWVudCgpXG4gICAgICAgIHRleHRQcm9wcy5jbG9uZSh0ZXh0LnByb3BzKTtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZVRleHRQcm9wcyhkZXN0OiBUZXh0UHJvcHMgfCBudWxsLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBUZXh0UHJvcHMge1xuICAgICAgICBjb25zdCB0ZXh0UHJvcHMgPSBkZXN0ID8/IG5ldyBUZXh0UHJvcHMoKTtcbiAgICAgICAgdGV4dFByb3BzLmZvbnRTaXplID0gdmlld09wdGlvbnMuZGVmYXVsdEZvbnRTaXplO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udE5hbWUgPSB2aWV3T3B0aW9ucy5kZWZhdWx0Rm9udE5hbWU7XG4gICAgICAgIHRleHRQcm9wcy5jb2xvciA9IHZpZXdPcHRpb25zLmRlZmF1bHRDb2xvcjtcbiAgICAgICAgcmV0dXJuIHRleHRQcm9wcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blrrnlmajlhoXnmoTmnIDlsI/muLLmn5PlhYPntKDpm4blkIhcbiAgICAgKiBAcGFyYW0gcGFyUG9zXG4gICAgICogQHBhcmFtIGFycmF5XG4gICAgICovXG4gICAgc3RhdGljIGdldEF2YWlsSGl0TGVhZlJlbmRlck9iamVjdHMocmVuZGVyOiBSZW5kZXJPYmplY3QsIHBhclBvczogUG9zaXRpb24pOiBBcnJheTx7IHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCwgcmVjdDogUmVjdCB9PiB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0F2YWlsSGl0UmVuZGVyKHJlbmRlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW5kZXJPYmplY3RSZWN0OiBSZWN0ID0ge1xuICAgICAgICAgICAgeDogcGFyUG9zLnggKyByZW5kZXIucmVjdC54LFxuICAgICAgICAgICAgeTogcGFyUG9zLnkgKyByZW5kZXIucmVjdC55LFxuICAgICAgICAgICAgd2lkdGg6IHJlbmRlci5yZWN0LndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiByZW5kZXIucmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBtYXhXaWR0aDogMCxcbiAgICAgICAgICAgIG1heEhlaWdodDogMFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhcnJheTogQXJyYXk8eyByZW5kZXI6IExlYWZSZW5kZXJPYmplY3QsIHJlY3Q6IFJlY3QgfT4gPSBbXTtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHJlbmRlci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKC4uLnRoaXMuZ2V0QXZhaWxIaXRMZWFmUmVuZGVyT2JqZWN0cyhjaGlsZCwge3g6IHJlbmRlck9iamVjdFJlY3QueCwgeTogcmVuZGVyT2JqZWN0UmVjdC55fSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlbmRlciBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGFycmF5LnB1c2goe3JlbmRlcjogcmVuZGVyLCByZWN0OiByZW5kZXJPYmplY3RSZWN0fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blrrnlmajlhoXnmoTmnIDlsI/muLLmn5PlhYPntKDpm4blkIhcbiAgICAgKiBAcGFyYW0gcGFyUG9zXG4gICAgICogQHBhcmFtIGFycmF5XG4gICAgICovXG4gICAgc3RhdGljIGdldEF2YWlsSGl0UmVuZGVyT2JqZWN0cyhyZW5kZXI6IFJlbmRlck9iamVjdCwgcGFyUG9zOiBQb3NpdGlvbik6IEFycmF5PHsgcmVuZGVyOiBSZW5kZXJPYmplY3QsIHJlY3Q6IFJlY3QgfT4ge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tBdmFpbEhpdFJlbmRlcihyZW5kZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0UmVjdDogUmVjdCA9IHRoaXMuZ2V0UmVuZGVyT2JqZWN0QWJzb2x1dGVSZWN0KHJlbmRlciwgcGFyUG9zKTtcbiAgICAgICAgY29uc3QgYXJyYXk6IEFycmF5PHsgcmVuZGVyOiBSZW5kZXJPYmplY3QsIHJlY3Q6IFJlY3QgfT4gPSBbXTtcbiAgICAgICAgaWYgKHJlbmRlciBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IHJlbmRlci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja0F2YWlsSGl0UmVuZGVyKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHtyZW5kZXI6IGNoaWxkLCByZWN0OiB0aGlzLmdldFJlbmRlck9iamVjdEFic29sdXRlUmVjdChjaGlsZCwgcmVuZGVyT2JqZWN0UmVjdCl9KVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlbmRlciBpbnN0YW5jZW9mIExlYWZSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGFycmF5LnB1c2goe3JlbmRlcjogcmVuZGVyLCByZWN0OiByZW5kZXJPYmplY3RSZWN0fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquWunueOsCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnu5jliLblhYPntKDnmoTnu53lr7nkvY3nva7moYZcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UmVuZGVyT2JqZWN0QWJzb2x1dGVSZWN0KHJlbmRlcjogUmVuZGVyT2JqZWN0LCBwYXJQb3M6IFBvc2l0aW9uKTogUmVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlck9iamVjdFJlY3Q6IFJlY3QgPSB7XG4gICAgICAgICAgICB4OiBwYXJQb3MueCArIHJlbmRlci5yZWN0LngsXG4gICAgICAgICAgICB5OiBwYXJQb3MueSArIHJlbmRlci5yZWN0LnksXG4gICAgICAgICAgICB3aWR0aDogcmVuZGVyLnJlY3Qud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlbmRlci5yZWN0LmhlaWdodCxcbiAgICAgICAgICAgIG1heFdpZHRoOiAwLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiAwXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZW5kZXJPYmplY3RSZWN0O1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5qOA5p+l5b2T5YmN57uY5Yi25YWD57Sg5piv5ZCm5bGe5LqO5pyJ5pWI54K55Ye75YWD57SgXG4gICAgICovXG4gICAgc3RhdGljIGNoZWNrQXZhaWxIaXRSZW5kZXIocmVuZGVyOiBSZW5kZXJPYmplY3QpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHJlbmRlci5lbGVtZW50ICYmIHJlbmRlci5lbGVtZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBUYWJsZVJvd1JlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgY29uc3Qgcm93RWxlID0gcmVuZGVyLmVsZW1lbnQgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHJvd0VsZS5wcm9wcy5oZWFkZXJSb3cpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93RWxlLnBhaW50UmVuZGVycy5pbmRleE9mKHJlbmRlcikgPT09IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFyZW5kZXIuZGlzYWJsZUNsaWNrO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmqjOivgeeCueWHu+WPr+aTjeS9nOaAp1xuICAgICAqIOS4u+imgemZkOWItumhteeciemhteiEmueahOe8lui+keaooeW8j1xuICAgICAqL1xuICAgIHN0YXRpYyB2ZXJpZnlIaXRhYmxlKHNvdXJjZUVsZW1lbnQ6IExlYWZFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXNvdXJjZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnRzID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50RWxlbWVudHMoc291cmNlRWxlbWVudCk7XG4gICAgICAgIGZvciAobGV0IGkgPSBwYXJlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IHBhcmVudHNbaV07XG4gICAgICAgICAgICBpZiAoY2hpbGQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluS4gOS4queCueWIsOS4gOS4quefqeW9ouacgOefreeahOi3neemu1xuICAgICAqIEBwYXJhbSByZWN0XG4gICAgICogQHBhcmFtIHBcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXREaXN0YW5jZVRvUmVjdChyZWN0OiBSZWN0LCBwOiBQb3NpdGlvbikge1xuICAgICAgICBjb25zdCBsaW5lczogQXJyYXk8eyBmOiBQQUlSLCBzOiBQQUlSIH0+ID0gW107XG4gICAgICAgIGxpbmVzLnB1c2goe1xuICAgICAgICAgICAgZjoge1xuICAgICAgICAgICAgICAgIHg6IHJlY3QueCxcbiAgICAgICAgICAgICAgICB5OiByZWN0LnlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzOiB7XG4gICAgICAgICAgICAgICAgeDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICB5OiByZWN0LnlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgZjoge1xuICAgICAgICAgICAgICAgIHg6IHJlY3QueCxcbiAgICAgICAgICAgICAgICB5OiByZWN0LnlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzOiB7XG4gICAgICAgICAgICAgICAgeDogcmVjdC54LFxuICAgICAgICAgICAgICAgIHk6IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGY6IHtcbiAgICAgICAgICAgICAgICB4OiByZWN0LngsXG4gICAgICAgICAgICAgICAgeTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzOiB7XG4gICAgICAgICAgICAgICAgeDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICB5OiByZWN0LnkgKyByZWN0LmhlaWdodFxuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICBmOiB7XG4gICAgICAgICAgICAgICAgeDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICB5OiByZWN0LnlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzOiB7XG4gICAgICAgICAgICAgICAgeDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICB5OiByZWN0LnkgKyByZWN0LmhlaWdodFxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkaXN0YW5jZXMgPSBsaW5lcy5tYXAoaXRlbSA9PiB0aGlzLm1pbkRpc3RhbmNlKGl0ZW0uZiwgaXRlbS5zLCBwKSlcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKC4uLmRpc3RhbmNlcyk7XG4gICAgfVxuXG4gICAgc3RhdGljIG1pbkRpc3RhbmNlKEE6IFBBSVIsIEI6IFBBSVIsIEU6IFBBSVIpIHtcblxuICAgICAgICBjb25zdCBBQjogUEFJUiA9IHt4OiBCLnggLSBBLngsIHk6IEIueSAtIEEueX1cblxuICAgICAgICBjb25zdCBCRTogUEFJUiA9IHt4OiBFLnggLSBCLngsIHk6IEUueSAtIEIueX07XG5cbiAgICAgICAgY29uc3QgQUU6IFBBSVIgPSB7eDogRS54IC0gQS54LCB5OiBFLnkgLSBBLnl9XG5cbiAgICAgICAgY29uc3QgQUJfQkUgPSAoQUIueCAqIEJFLnggKyBBQi55ICogQkUueSk7XG4gICAgICAgIGNvbnN0IEFCX0FFID0gKEFCLnggKiBBRS54ICsgQUIueSAqIEFFLnkpO1xuXG4gICAgICAgIGxldCByZXFBbnMgPSAwO1xuXG4gICAgICAgIGlmIChBQl9CRSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBFLnkgLSBCLnk7XG4gICAgICAgICAgICBjb25zdCB4ID0gRS54IC0gQi54O1xuICAgICAgICAgICAgcmVxQW5zID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xuICAgICAgICB9IGVsc2UgaWYgKEFCX0FFIDwgMCkge1xuICAgICAgICAgICAgY29uc3QgeSA9IEUueSAtIEEueTtcbiAgICAgICAgICAgIGNvbnN0IHggPSBFLnggLSBBLng7XG4gICAgICAgICAgICByZXFBbnMgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB4MSA9IEFCLng7XG4gICAgICAgICAgICBjb25zdCB5MSA9IEFCLnk7XG4gICAgICAgICAgICBjb25zdCB4MiA9IEFFLng7XG4gICAgICAgICAgICBjb25zdCB5MiA9IEFFLnk7XG4gICAgICAgICAgICBjb25zdCBtb2QgPSBNYXRoLnNxcnQoeDEgKiB4MSArIHkxICogeTEpO1xuICAgICAgICAgICAgcmVxQW5zID0gTWF0aC5hYnMoeDEgKiB5MiAtIHkxICogeDIpIC8gbW9kO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXFBbnM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W54i257qn5bGC57qn5riy5p+T5a+56LGhXG4gICAgICogQHBhcmFtIHJlbmRlclxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldFBhcmVudFJlbmRlcnMocmVuZGVyOiBSZW5kZXJPYmplY3QpOiBBcnJheTxSZW5kZXJPYmplY3Q+IHtcbiAgICAgICAgaWYgKHJlbmRlcikge1xuICAgICAgICAgICAgcmV0dXJuIFtyZW5kZXIsIC4uLnRoaXMuZ2V0UGFyZW50UmVuZGVycyhyZW5kZXIucGFyZW50KV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UmVuZGVyTWFwRWxlbWVudHMocmVuZGVyOiBSZW5kZXJPYmplY3QpOiBBcnJheTxFbGVtZW50PiB7XG4gICAgICAgIGNvbnN0IHJlbmRlcnMgPSB0aGlzLmdldFBhcmVudFJlbmRlcnMocmVuZGVyKTtcbiAgICAgICAgcmV0dXJuIHJlbmRlcnMubWFwKHJlbmRlciA9PiByZW5kZXIuZWxlbWVudCkuZmlsdGVyKGVsZSA9PiBlbGUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRQYXJlbnRSZW5kZXI8VCBleHRlbmRzIEJyYW5jaFJlbmRlck9iamVjdD4oY2hpbGQ6IFJlbmRlck9iamVjdCwgcGFyZW50VHlwZTogeyBuZXcoLi4uYXJnczogYW55KTogVCB9KTogVCB8IG51bGwge1xuICAgICAgICBpZiAoIWNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBwYXJlbnRUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnRSZW5kZXIoY2hpbGQucGFyZW50LCBwYXJlbnRUeXBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRQYXJlbnRSZW5kZXJCeVByZWRpY2F0ZShjaGlsZDogUmVuZGVyT2JqZWN0LCBwcmVkaWNhdGU6IChpdGVtOiBSZW5kZXJPYmplY3QpID0+IGJvb2xlYW4pOiBSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWRpY2F0ZShjaGlsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudFJlbmRlckJ5UHJlZGljYXRlKGNoaWxkLnBhcmVudCwgcHJlZGljYXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlueItue6p+Wxgue6p+WFg+e0oOWvueixoVxuICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0UGFyZW50RWxlbWVudHMoZWxlbWVudDogRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQpOiBBcnJheTxFbGVtZW50PiB7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gW2VsZW1lbnQsIC4uLnRoaXMuZ2V0UGFyZW50RWxlbWVudHMoZWxlbWVudC5wYXJlbnQpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluacgOWQjuS4gOS4quWtkOWFg+e0oFxuICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0TGFzdExlYWZFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQsIHByZWRpY2F0ZTogbnVsbCB8ICgoaXRlbTogRWxlbWVudCkgPT4gYm9vbGVhbikgPSBudWxsKTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCAmJiAoIXByZWRpY2F0ZSB8fCBwcmVkaWNhdGUoZWxlbWVudCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGVsZW1lbnQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldExhc3RMZWFmRWxlbWVudChlbGVtZW50LmdldENoaWxkKGkpLCBwcmVkaWNhdGUpXG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6I635Y+W56ys5LiA5Liq5a2Q5YWD57SgXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRGaXJzdExlYWZFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRGaXJzdExlYWZFbGVtZW50KGVsZW1lbnQuZ2V0Q2hpbGQoaSkpO1xuICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoKHpqozkuKTkuKrlhYPntKDmmK/lkKblnKjlkIzkuIDkuKrmrrXokL3kuK1cbiAgICAgKiBAcGFyYW0gZWxlbWVudDFcbiAgICAgKiBAcGFyYW0gZWxlbWVudDJcbiAgICAgKi9cbiAgICBzdGF0aWMgaXNJblNhbWVQYXJhZ3JhcGgoZWxlbWVudDE6IEVsZW1lbnQsIGVsZW1lbnQyOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBhcjEgPSB0aGlzLmdldFBhcmVudEJ5VHlwZShlbGVtZW50MSwgUGFyYWdyYXBoRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHBhcjIgPSB0aGlzLmdldFBhcmVudEJ5VHlwZShlbGVtZW50MiwgUGFyYWdyYXBoRWxlbWVudCk7XG4gICAgICAgIHJldHVybiBwYXIxID09PSBwYXIyO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRCb3JkZXJDdXJzb3IoYm9yZGVyVHlwZTogQm9yZGVyVHlwZSk6IEN1cnNvclR5cGUge1xuICAgICAgICBzd2l0Y2ggKGJvcmRlclR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAndGV4dCc7XG4gICAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgICAgIHJldHVybiAncm93LXJlc2l6ZSc7XG4gICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbC1yZXNpemUnO1xuICAgICAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnY29sLXJlc2l6ZSc7XG4gICAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgICAgIHJldHVybiAncm93LXJlc2l6ZSdcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQtbWlkZGxlJzpcbiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0LW1pZGRsZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICd3LXJlc2l6ZSc7XG4gICAgICAgICAgICBjYXNlICd0b3AtbWlkZGxlJzpcbiAgICAgICAgICAgIGNhc2UgJ2JvdHRvbS1taWRkbGUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAncy1yZXNpemUnO1xuICAgICAgICAgICAgY2FzZSAnbGVmdC10b3AnOlxuICAgICAgICAgICAgY2FzZSAncmlnaHQtYm90dG9tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NlLXJlc2l6ZSc7XG4gICAgICAgICAgICBjYXNlICdyaWdodC10b3AnOlxuICAgICAgICAgICAgY2FzZSAnbGVmdC1ib3R0b20nOlxuICAgICAgICAgICAgICAgIHJldHVybiAnbmUtcmVzaXplJztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRQYXJlbnRCeVR5cGU8UCBleHRlbmRzIEVsZW1lbnQsIFQ+KGNoaWxkOiBQIHwgbnVsbCwgcGFyZW50VHlwZTogeyBuZXcoLi4uYXJnczogYW55KTogVCB9KTogVCB8IG51bGwge1xuICAgICAgICBpZiAoIWNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBwYXJlbnRUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnRCeVR5cGUoY2hpbGQucGFyZW50LCBwYXJlbnRUeXBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRQYXJlbnQoY2hpbGQ6IEVsZW1lbnQgfCBudWxsLCBwcmVkaWNhdGU6IChpdGVtOiBFbGVtZW50KSA9PiBib29sZWFuKTogRWxlbWVudCB8IG51bGwge1xuICAgICAgICBpZiAoIWNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJlZGljYXRlKGNoaWxkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50KGNoaWxkLnBhcmVudCwgcHJlZGljYXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5L+u5q2j5q616JC95YaF5a65XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZml4UGFyYWdyYXBoQ29udGVudChjb250cm9sOiBQYXJhZ3JhcGhFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIC8v5aaC5p6c5pyA5ZCO5LiA5Liq5YWD57Sg5LiN5piv5q616JC956ym5Y+377yM5YiZ6KGl6LazXG4gICAgICAgIGlmICghKGNvbnRyb2wuZ2V0Q2hpbGQoY29udHJvbC5sZW5ndGggLSAxKSBpbnN0YW5jZW9mIFBTeW1ib2xFbGVtZW50KSkge1xuICAgICAgICAgICAgY29udHJvbC5hZGRDaGlsZChuZXcgUFN5bWJvbEVsZW1lbnQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PFBTeW1ib2xFbGVtZW50PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyb2wubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNvbnRyb2wuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBQU3ltYm9sRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBjb250cm9sLnJlbW92ZUNoaWxkKGl0ZW0pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOS/ruato+Wdl+e6p+WuueWZqOWGheWuuVxuICAgICAqIEBwYXJhbSBjb250cm9sXG4gICAgICovXG4gICAgc3RhdGljIGZpeEJsb2NrQ29udGFpbmVyKGNvbnRyb2w6IEJsb2NrQ29udGFpbmVyRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAoY29udHJvbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGFibGVDZWxsRWxlbWVudCAmJiAoY29udHJvbC5wcm9wcy52TWVyZ2UgPT09ICdjb250aW51ZScgfHwgY29udHJvbC5wcm9wcy5oTWVyZ2UgPT09ICdjb250aW51ZScpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbnRyb2wubm9GaWxsRW1wdHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250cm9sLmFkZENoaWxkKG5ldyBQYXJhZ3JhcGhFbGVtZW50KCkpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnu5jliLblhYPntKDnm7jlr7nkuo7mlbTkuKrnlLvluIPnmoTnu53lr7nkvY3nva5cbiAgICAgKiDmlbTkuKrnlLvluIPnu5jliLbnmoTml7blgJnkuI3kuIDlrprku454PTAseT0w5pe257uY5Yi255qE77yM5LiL5ouJ5rua5Yqo5pe277yM5LiK6Z2i5LuO6LSfeeWdkOagh+W8gOWni+e7mOWItlxuICAgICAqIOWmguaenOiuoeeul+afkOS4quWFg+e0oOebuOWvueeUu+W4g+eahOW3puS4iuinkueahOe7neWvueWdkOagh+S9jee9ru+8jOmcgOimgWNoaWxkUG9z55qEeeWAvOWHj+WOu3RyYW5zbGF0ZVlcbiAgICAgKiBAcGFyYW0gcmVuZGVyXG4gICAgICogQHBhcmFtIHJlZlBvcyDlj4LnhafkvY3nva5cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKHJlbmRlcjogUmVuZGVyT2JqZWN0LCByZWZQb3M6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiBQb3NpdGlvbiB7XG4gICAgICAgIHJlZlBvcyA9IHJlZlBvcyA/PyB7eDogMCwgeTogMH07XG4gICAgICAgIGNvbnN0IGN1cnJQb3M6IFBvc2l0aW9uID0ge3g6IHJlbmRlci5yZWN0LnggKyByZWZQb3MueCwgeTogcmVuZGVyLnJlY3QueSArIHJlZlBvcy55fTtcbiAgICAgICAgaWYgKCFyZW5kZXIucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY3VyclBvcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKHJlbmRlci5wYXJlbnQsIGN1cnJQb3MpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRSZW5kZXJBYnNvbHV0ZVBhaW50UmVjdChyZW5kZXI6IFJlbmRlck9iamVjdCwgY2hpbGRQb3M6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiBSZWN0IHtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKHJlbmRlciwgY2hpbGRQb3MpO1xuICAgICAgICByZXR1cm4gey4uLnBvcywgd2lkdGg6IHJlbmRlci5yZWN0LndpZHRoLCBoZWlnaHQ6IHJlbmRlci5yZWN0LmhlaWdodCwgbWF4V2lkdGg6IDAsIG1heEhlaWdodDogMH07XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDojrflj5bpgInkuK3ljLrln5/nmoTlvIDlp4vljLrln59cbiAgICAgKiBAcGFyYW0gcmFuZ2VcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRGaXJzdFNlbGVjdGVkUmFuZ2UocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSk6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSB7XG4gICAgICAgIGlmIChyYW5nZS5zZWxlY3RlZENoaWxkcmVuLmxlbmd0aCA9PT0gMCB8fCByYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRGaXJzdFNlbGVjdGVkUmFuZ2UocmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlblswXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bpgInkuK3ljLrln5/nmoTlvIDlp4vljLrln59cbiAgICAgKiBAcGFyYW0gcmFuZ2UgXFxcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRMYXN0U2VsZWN0ZWRSYW5nZShyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlKTogU2VsZWN0aW9uQ29udGVudFJhbmdlIHtcbiAgICAgICAgaWYgKHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoID09PSAwIHx8IHJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiByYW5nZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExhc3RTZWxlY3RlZFJhbmdlKHJhbmdlLnNlbGVjdGVkQ2hpbGRyZW5bcmFuZ2Uuc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggLSAxXSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWFi+mahumAieWMuuWGheWuuVxuICAgICAqIEBwYXJhbSByYW5nZVxuICAgICAqIEBwYXJhbSBpc0RlbGV0ZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGNsb25lUmFuZ2UocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgaXNEZWxldGU6IGJvb2xlYW4sIGNsb25lTW9kZTogJ2Nsb25lJyB8ICdzb3VyY2UnIHwgJ2NvcHknID0gJ2Nsb25lJyk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3Qge3RhcmdldCwgaXNGdWxsU2VsZWN0ZWQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIHNlbGVjdGVkQ2hpbGRyZW59ID0gcmFuZ2U7XG4gICAgICAgIGlmIChpc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgLy/kv67ppbDlhYPntKDkuI3og73lpI3liLYg5a6h6ZiF5qCH6K6w44CB5pWw5o2u5YWDTnVsbFRleHRcbiAgICAgICAgICAgIGlmIChjbG9uZU1vZGUgPT09ICdjb3B5JyAmJiB0YXJnZXQuaXNEZWNvcmF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSBjbG9uZU1vZGUgPT09ICdzb3VyY2UnID8gdGFyZ2V0IDogdGFyZ2V0LmNsb25lKHRydWUpO1xuICAgICAgICAgICAgaWYgKGlzRGVsZXRlKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQgJiYgc3RhcnRPZmZzZXQgIT09IGVuZE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWxldGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcHlUYXJnZXQgPSB0YXJnZXQuc3BsaWNlVGV4dChzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQudGV4dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29weVRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcHlUYXJnZXQgPSB0YXJnZXQuc3BsaWNlVGV4dChzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29weVRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0IGluc3RhbmNlb2YgQnJhbmNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5OiBBcnJheTxFbGVtZW50PiA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3B5Q2hpbGQgPSB0aGlzLmNsb25lUmFuZ2Uoc2VsZWN0ZWRDaGlsZHJlbltpXSwgaXNEZWxldGUsIGNsb25lTW9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3B5Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2goY29weUNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3B5VGFyZ2V0ID0gdGFyZ2V0LmNsb25lKGZhbHNlKSBhcyBCcmFuY2hFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBhcnJheS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29weVRhcmdldC5hZGRDaGlsZChpdGVtKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvcHlUYXJnZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaJgOacieeahOWtkOe6p+WFg+e0oFxuICAgICAqIEBwYXJhbSBicmFuY2hFbGVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRDaGlsZHJlbkVsZW1lbnRzKGJyYW5jaEVsZTogQnJhbmNoRWxlbWVudCk6IEFycmF5PEVsZW1lbnQ+IHtcbiAgICAgICAgY29uc3QgYXJyYXkgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBicmFuY2hFbGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFycmF5LnB1c2goYnJhbmNoRWxlLmdldENoaWxkKGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6YCS5b2S5ZCR5YmN5a+75om+5pyA6L+R55qE5YWD57SgXG4gICAgICogQHBhcmFtIGN1cnJFbGVtZW50XG4gICAgICogQHBhcmFtIGluUGFyYSAg5piv5ZCm5Zyo5ZCM5LiA5q616JC95Lit5a+75om+XG4gICAgICogQHBhcmFtIGZvckN1cnNvciDmn6Xmib7nu5PmnpzmmK/lkKbnlKjkuo7lhYnmoIflrprkvY1cbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnNcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQoY3VyckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsLCBpblBhcmE6IGJvb2xlYW4gPSBmYWxzZSwgZm9yQ3Vyc29yOiBib29sZWFuID0gZmFsc2UsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IExlYWZFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGN1cnJFbGVtZW50Py5wYXJlbnQ7XG4gICAgICAgIC8v5Yig6Zmk55WZ55eV5Z2X55qEbWVhc3VyZVJlbmRlcuWcqOS4jeaYvuekuueVmeeXleaooeW8j+S4i++8jOS4jeeUn+aIkHJlbmRlclxuICAgICAgICBpZiAoIWN1cnJFbGVtZW50IHx8ICFwYXJlbnQgfHwgKCFjdXJyRWxlbWVudC5tZWFzdXJlUmVuZGVyICYmICEoY3VyckVsZW1lbnQgaW5zdGFuY2VvZiBUcmFja1J1bkVsZW1lbnQpKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy/lpoLmnpzlvZPliY3mlbDmja7lhYPkuI3lj6/nvJbovpHvvIzliJnnm7TmjqXot7Pov4dcbiAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXAgJiYgIXBhcmVudC5wcm9wcy5lZGl0YWJsZSAmJiB2aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQocGFyZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JDdXJzb3IgJiYgcGFyZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KHBhcmVudCwgaW5QYXJhLCBmb3JDdXJzb3IsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5nZXRDaGlsZEluZGV4KGN1cnJFbGVtZW50KTtcbiAgICAgICAgaWYgKCFpbmRleCkge1xuICAgICAgICAgICAgaWYgKGluUGFyYSAmJiBwYXJlbnQudHlwZSA9PT0gJ3AnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnQocGFyZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHByZXZFbGVtZW50OiBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gaW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIHByZXZFbGVtZW50ID0gcGFyZW50LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2RWxlbWVudCAmJiAhcHJldkVsZW1lbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcHJldkVsZW1lbnQgfHwgcHJldkVsZW1lbnQuZGlzYWJsZUNsaWNrKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KHBhcmVudCwgaW5QYXJhLCBmb3JDdXJzb3IsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxhc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChwcmV2RWxlbWVudCk7XG4gICAgICAgICAgICAvL+eUqOS6juWFieagh+WumuS9jVxuICAgICAgICAgICAgaWYgKGZvckN1cnNvciAmJiBsYXN0TGVhZkVsZW1lbnQgJiYgbGFzdExlYWZFbGVtZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChsYXN0TGVhZkVsZW1lbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGFzdExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RMZWFmRWxlbWVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KHByZXZFbGVtZW50LnBhcmVudCwgaW5QYXJhLCBmb3JDdXJzb3IsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5b6q546v5ZCR5YmN5a+75om+5Y+v5a6a5L2N55qE5pWw5o2u5YWDXG4gICAgICogQHBhcmFtIGN1cnJFbGVtZW50XG4gICAgICovXG4gICAgc3RhdGljIGdldFByZXZEYXRhRWxlbWVudChjdHg6IEVkaXRvckNvbnRleHQsIGN1cnJFbGVtZW50OiBEYXRhRWxlbWVudElubGluZUdyb3VwKTogRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IG51bGwge1xuICAgICAgICBjb25zdCBkYXRhRWxlID0gY3R4LmdldEN1cnJlbnRDdHgoY3VyckVsZW1lbnQpLmdldENvbnRyb2xJbnN0YW5jZUxpc3QoKS5maWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkgYXMgQXJyYXk8RGF0YUVsZW1lbnRJbmxpbmVHcm91cD47XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YUVsZS5pbmRleE9mKGN1cnJFbGVtZW50KTtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4IC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGFFbGVbaV0uZGlzYWJsZUNsaWNrICYmIGRhdGFFbGVbaV0ucHJvcHMuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFFbGVbaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIC8qKlxuICAgIC8vICog6YCS5b2S5ZCR5YmN5a+75om+5pyA6L+R55qE5Y+v54K55Ye75YWD57SgXG4gICAgLy8gKi9cbiAgICAvLyBzdGF0aWMgZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50Rm9ySGl0KGN1cnJFbGVtZW50OiBFbGVtZW50IHwgbnVsbCk6IExlYWZFbGVtZW50IHwgbnVsbCB7XG4gICAgLy8gICAgIGxldCBlbGU6IExlYWZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgLy8gICAgIGRvIHtcbiAgICAvLyAgICAgICAgIGVsZSA9IHRoaXMuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KGN1cnJFbGVtZW50KTtcbiAgICAvLyAgICAgfSB3aGlsZSAoZWxlICYmIGVsZS5kaXNhYmxlQ2xpY2spXG4gICAgLy8gICAgIHJldHVybiBlbGU7XG4gICAgLy8gfVxuXG4gICAgLy8gLyoqXG4gICAgLy8gKiDlnKjlkIzkuIDmrrXokL3kuK3vvIzpgJLlvZLlkJHliY3lr7vmib7mnIDov5HnmoTlhYPntKBcbiAgICAvLyAqL1xuICAgIC8vIHN0YXRpYyBnZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnRJblBhcmEoY3VyckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsKTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAvLyAgICAgY29uc3QgcGFyZW50ID0gY3VyckVsZW1lbnQ/LnBhcmVudDtcbiAgICAvLyAgICAgaWYgKCFjdXJyRWxlbWVudCB8fCAhcGFyZW50KSB7XG4gICAgLy8gICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5nZXRDaGlsZEluZGV4KGN1cnJFbGVtZW50KTtcbiAgICAvLyAgICAgaWYgKCFpbmRleCkge1xuICAgIC8vICAgICAgICAgaWYgKHBhcmVudC50eXBlID09PSAncCcpIHtcbiAgICAvLyAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudEluUGFyYShwYXJlbnQpO1xuICAgIC8vICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgY29uc3QgcHJldkVsZW1lbnQgPSBwYXJlbnQuZ2V0Q2hpbGQoaW5kZXggLSAxKTtcbiAgICAvLyAgICAgICAgIGNvbnN0IGxhc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChwcmV2RWxlbWVudCk7XG4gICAgLy8gICAgICAgICBpZiAobGFzdExlYWZFbGVtZW50KSB7XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuIGxhc3RMZWFmRWxlbWVudDtcbiAgICAvLyAgICAgICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50SW5QYXJhKHByZXZFbGVtZW50Py5wYXJlbnQpO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gLyoqXG4gICAgLy8gKiDlnKjlkIzkuIDmrrXokL3kuK3vvIzpgJLlvZLlkJHliY3lr7vmib7mnIDov5HnmoTlj6/ngrnlh7vlhYPntKBcbiAgICAvLyAqL1xuICAgIC8vIHN0YXRpYyBnZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnRJblBhcmFGb3JIaXQoY3VyckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsKTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAvLyAgICAgbGV0IGVsZTogTGVhZkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAvLyAgICAgZG8ge1xuICAgIC8vICAgICAgICAgZWxlID0gdGhpcy5nZXRSZWN1cnNpb25QcmV2U2libGluZ0VsZW1lbnRJblBhcmEoY3VyckVsZW1lbnQpO1xuICAgIC8vICAgICB9IHdoaWxlIChlbGUgJiYgZWxlLmRpc2FibGVDbGljaylcbiAgICAvLyAgICAgcmV0dXJuIGVsZTtcbiAgICAvLyB9XG5cblxuICAgIC8qKlxuICAgICAqIOmAkuW9kuWQkeWQjuWvu+aJvuacgOi/keeahOWFg+e0oFxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQoY3VyckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsLCBpblBhcmE6IGJvb2xlYW4gPSBmYWxzZSwgZm9yQ3Vyc29yOiBib29sZWFuID0gZmFsc2UsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IExlYWZFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGN1cnJFbGVtZW50Py5wYXJlbnQ7XG4gICAgICAgIGlmICghY3VyckVsZW1lbnQgfHwgIXBhcmVudCB8fCAhY3VyckVsZW1lbnQubWVhc3VyZVJlbmRlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy/lpoLmnpzlvZPliY3mlbDmja7lhYPkuI3lj6/nvJbovpHvvIzliJnnm7TmjqXot7Pov4dcbiAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXAgJiYgIXBhcmVudC5wcm9wcy5lZGl0YWJsZSAmJiB2aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQocGFyZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JDdXJzb3IgJiYgcGFyZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KHBhcmVudCwgaW5QYXJhLCBmb3JDdXJzb3IsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5nZXRDaGlsZEluZGV4KGN1cnJFbGVtZW50KTtcbiAgICAgICAgaWYgKGluZGV4ID09PSBwYXJlbnQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgaWYgKGluUGFyYSAmJiBwYXJlbnQudHlwZSA9PT0gJ3AnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQocGFyZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5leHRFbGVtZW50OiBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gaW5kZXggKyAxOyBpIDwgcGFyZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQgPSBwYXJlbnQuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICAgICAgaWYgKG5leHRFbGVtZW50ICYmICFuZXh0RWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFuZXh0RWxlbWVudCB8fCBuZXh0RWxlbWVudC5kaXNhYmxlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQocGFyZW50LCBpblBhcmEsIGZvckN1cnNvciwgdmlld09wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGFzdExlYWZFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChuZXh0RWxlbWVudCk7XG4gICAgICAgICAgICAvL+eUqOS6juWFieagh+WumuS9jVxuICAgICAgICAgICAgaWYgKGZvckN1cnNvciAmJiBsYXN0TGVhZkVsZW1lbnQgJiYgbGFzdExlYWZFbGVtZW50LmRpc2FibGVDbGljaykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChsYXN0TGVhZkVsZW1lbnQsIGluUGFyYSwgZm9yQ3Vyc29yLCB2aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGFzdExlYWZFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RMZWFmRWxlbWVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KG5leHRFbGVtZW50LnBhcmVudCwgaW5QYXJhLCBmb3JDdXJzb3IsIHZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLy8gLyoqXG4gICAgLy8gKiDlnKjlkIzkuIDmrrXokL3kuK3vvIzpgJLlvZLlkJHlkI7lr7vmib7mnIDov5HnmoTlhYPntKBcbiAgICAvLyAqL1xuICAgIC8vIHN0YXRpYyBnZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnRJblBhcmEoY3VyckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsKTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAvLyAgICAgY29uc3QgcGFyZW50ID0gY3VyckVsZW1lbnQ/LnBhcmVudDtcbiAgICAvLyAgICAgaWYgKCFjdXJyRWxlbWVudCB8fCAhcGFyZW50KSB7XG4gICAgLy8gICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5nZXRDaGlsZEluZGV4KGN1cnJFbGVtZW50KTtcbiAgICAvLyAgICAgaWYgKGluZGV4ID09PSBwYXJlbnQubGVuZ3RoIC0gMSkge1xuICAgIC8vICAgICAgICAgaWYgKHBhcmVudC50eXBlID09PSAncCcpIHtcbiAgICAvLyAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudEluUGFyYShwYXJlbnQpO1xuICAgIC8vICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgY29uc3QgbmV4dEVsZW1lbnQgPSBwYXJlbnQuZ2V0Q2hpbGQoaW5kZXggKyAxKTtcbiAgICAvLyAgICAgICAgIGNvbnN0IGxhc3RMZWFmRWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldEZpcnN0TGVhZkVsZW1lbnQobmV4dEVsZW1lbnQpO1xuICAgIC8vICAgICAgICAgaWYgKGxhc3RMZWFmRWxlbWVudCkge1xuICAgIC8vICAgICAgICAgICAgIHJldHVybiBsYXN0TGVhZkVsZW1lbnQ7XG4gICAgLy8gICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudEluUGFyYShuZXh0RWxlbWVudC5wYXJlbnQpO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgLy8gLyoqXG4gICAgLy8gKiDlnKjlkIzkuIDmrrXokL3kuK3vvIzpgJLlvZLlkJHlkI7lr7vmib7mnIDov5HnmoTlj6/ngrnlh7vlhYPntKBcbiAgICAvLyAqL1xuICAgIC8vIHN0YXRpYyBnZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnRJblBhcmFGb3JIaXQoY3VyckVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsKTogTGVhZkVsZW1lbnQgfCBudWxsIHtcbiAgICAvLyAgICAgbGV0IGVsZTogTGVhZkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICAvLyAgICAgZG8ge1xuICAgIC8vICAgICAgICAgZWxlID0gdGhpcy5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnRJblBhcmEoY3VyckVsZW1lbnQpO1xuICAgIC8vICAgICB9IHdoaWxlIChlbGUgJiYgZWxlLmRpc2FibGVDbGljaylcbiAgICAvLyAgICAgcmV0dXJuIGVsZTtcbiAgICAvLyB9XG5cbiAgICAvLyAvKipcbiAgICAvLyAqIOWcqOWQjOS4gOauteiQveS4re+8jOmAkuW9kuWQkeWQjuWvu+aJvuacgOi/keeahOWPr+eCueWHu+WFg+e0oFxuICAgIC8vICovXG4gICAgLy8gc3RhdGljIGdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudEZvckhpdChjdXJyRWxlbWVudDogRWxlbWVudCB8IG51bGwpOiBMZWFmRWxlbWVudCB8IG51bGwge1xuICAgIC8vICAgICBsZXQgZWxlOiBMZWFmRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIC8vICAgICBkbyB7XG4gICAgLy8gICAgICAgICBlbGUgPSB0aGlzLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChjdXJyRWxlbWVudCk7XG4gICAgLy8gICAgIH0gd2hpbGUgKGVsZSAmJiBlbGUuZGlzYWJsZUNsaWNrKVxuICAgIC8vICAgICByZXR1cm4gZWxlO1xuICAgIC8vIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluihjOWGheacgOWkp+a4suafk+WNleWFg+agvOmrmOW6pu+8jOS4u+imgeWkhOeQhue6teWQkeWQiOW5tuWNleWFg+agvOmXrumimFxuICAgICAqIEBwYXJhbSByb3dcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRSb3dNYXhDZWxsSGVpZ2h0KHJvdzogVGFibGVSb3dSZW5kZXJPYmplY3QpOiBudW1iZXIge1xuICAgICAgICBsZXQgbWF4SGVpZ2h0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChyb3cuZ2V0Q2hpbGQoaSkucmVjdC5oZWlnaHQgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBtYXhIZWlnaHQgPSByb3cuZ2V0Q2hpbGQoaSkucmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heEhlaWdodDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOagoemqjOaYr+WQpuS4uuepuuWGheWuuVxuICAgICAqIEBwYXJhbSBlbGVcbiAgICAgKi9cbiAgICBzdGF0aWMgY2hlY2tFbXB0eUNvbnRlbnQoZWxlOiBCcmFuY2hSZW5kZXJPYmplY3QpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGVsZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0UmVuZGVyID0gZWxlLmdldENoaWxkKDApO1xuICAgICAgICAgICAgaWYgKGZpcnN0UmVuZGVyIGluc3RhbmNlb2YgUGFyYWdyYXBoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCg8UGFyYWdyYXBoRWxlbWVudD4oZmlyc3RSZW5kZXIuZWxlbWVudCkpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOa1i+mHj+ihjOWGhee8lue7hOWFg+e0oFxuICAgICAqIEBwYXJhbSByZW5kZXJcbiAgICAgKi9cbiAgICBzdGF0aWMgcmVtZWFzdXJlSW5saW5lR3JvdXBSZW5kZXIocmVuZGVyOiBJbmxpbmVHcm91cFJlbmRlck9iamVjdCk6IHZvaWQge1xuICAgICAgICBsZXQgeCA9IDA7XG4gICAgICAgIGxldCBtYXhIZWlnaHQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHJlbmRlci5nZXRDaGlsZChpKTtcbiAgICAgICAgICAgIGl0ZW0ucmVjdC54ID0geDtcbiAgICAgICAgICAgIGlmIChpdGVtLnJlY3QuaGVpZ2h0ID4gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gaXRlbS5yZWN0LmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHggKz0gaXRlbS5yZWN0LndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcmVuZGVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgaXRlbS5yZWN0LnkgPSBtYXhIZWlnaHQgLSBpdGVtLnJlY3QuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0geDtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gbWF4SGVpZ2h0O1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRQYXJhTGluZVBvcyhjaGlsZFJlbmRlcjogUmVuZGVyT2JqZWN0LCBjaGlsZFJlbmRlclBvczogUG9zaXRpb24pOiBSZWN0IHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gY2hpbGRSZW5kZXIucGFyZW50O1xuICAgICAgICBjb25zdCByZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHBhcmVudC5yZWN0KTtcbiAgICAgICAgcmVjdC54ID0gY2hpbGRSZW5kZXJQb3MueCAtIGNoaWxkUmVuZGVyLnJlY3QueDtcbiAgICAgICAgcmVjdC55ID0gY2hpbGRSZW5kZXJQb3MueSAtIGNoaWxkUmVuZGVyLnJlY3QueTtcbiAgICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVjdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhcmFMaW5lUG9zKHBhcmVudCwgcmVjdCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHN0YXRpYyBnZXRQYXJlbnRSZW5kZXJQb3MocGFyZW50UmVuZGVyOiBSZW5kZXJPYmplY3QsIGNoaWxkUmVuZGVyOiBSZW5kZXJPYmplY3QsIGNoaWxkUmVuZGVyUG9zOiBQb3NpdGlvbik6IFJlY3Qge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBjaGlsZFJlbmRlci5wYXJlbnQ7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QocGFyZW50LnJlY3QpO1xuICAgICAgICByZWN0LnggPSBjaGlsZFJlbmRlclBvcy54IC0gY2hpbGRSZW5kZXIucmVjdC54O1xuICAgICAgICByZWN0LnkgPSBjaGlsZFJlbmRlclBvcy55IC0gY2hpbGRSZW5kZXIucmVjdC55O1xuICAgICAgICBpZiAocGFyZW50ID09PSBwYXJlbnRSZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50UmVuZGVyUG9zKHBhcmVudFJlbmRlciwgcGFyZW50LCByZWN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6I635Y+W57uY5Yi25YWD57Sg5omA5Zyo55qE5Yy65Z+fXG4gICAgICovXG4gICAgc3RhdGljIGdldFJlbmRlck9iamVjdFJlZ2lvbihyZW5kZXI6IFJlbmRlck9iamVjdCk6IEhpdFJlZ2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghcmVuZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXIuZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudFJlZ2lvbihyZW5kZXIuZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVuZGVyT2JqZWN0UmVnaW9uKHJlbmRlci5wYXJlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaWh+aho+WFg+e0oOaJgOWcqOeahOWMuuWfn1xuICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0RWxlbWVudFJlZ2lvbihlbGVtZW50OiBFbGVtZW50KTogSGl0UmVnaW9uIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgcmVnaW9uVGFyZ2V0ID0gdGhpcy5nZXRFbGVtZW50UmVnaW9uVGFyZ2V0KGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gcmVnaW9uVGFyZ2V0Py50eXBlO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRFbGVtZW50UmVnaW9uVGFyZ2V0KGVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsKTogeyB0eXBlOiBIaXRSZWdpb24sIHRhcmdldDogQnJhbmNoRWxlbWVudCB9IHwgbnVsbCB7XG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge3R5cGU6ICdib2R5JywgdGFyZ2V0OiBlbGVtZW50fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIERvY3VtZW50Rm9vdGVyRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHt0eXBlOiAnZm9vdGVyJywgdGFyZ2V0OiBlbGVtZW50fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIERvY3VtZW50SGVhZGVyRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHt0eXBlOiAnaGVhZGVyJywgdGFyZ2V0OiBlbGVtZW50fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIENvbW1zQ29udGFpbmVyRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHt0eXBlOiAncmV2aWV3JywgdGFyZ2V0OiBlbGVtZW50fVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRSZWdpb25UYXJnZXQoZWxlbWVudC5wYXJlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNruWdkOagh+ezu+e7n+WBj+enu+S9jeiOt+WPluaJgOWcqOeahOaWh+acrOWBj+enu+S9jee9rlxuICAgICAqIEBwYXJhbSB0ZXh0UmVuZGVyXG4gICAgICogQHBhcmFtIHhcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRUZXh0UmVuZGVyT2Zmc2V0KHRleHRSZW5kZXI6IFRleHRHcm91cFJlbmRlck9iamVjdCwgeDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgZWxlID0gdGV4dFJlbmRlci5lbGVtZW50IGFzIFRleHRHcm91cEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcih0ZXh0UmVuZGVyLCBEb2N1bWVudFJlbmRlck9iamVjdCk7XG4gICAgICAgIGlmICghZG9jUmVuZGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RvY1JlbmRlciBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVQYWludFJlbmRlcnMgPSBlbGUucGFpbnRSZW5kZXJzOy8vLmZpbHRlcihpdGVtID0+IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihpdGVtLCBEb2N1bWVudFJlbmRlck9iamVjdCkgPT09IGRvY1JlbmRlcik7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlUGFpbnRSZW5kZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByZW5kZXIgPSBlbGVQYWludFJlbmRlcnNbaV0gYXMgVGV4dEdyb3VwUmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgaWYgKHJlbmRlciAhPT0gdGV4dFJlbmRlcikge1xuICAgICAgICAgICAgICAgIGNvdW50ICs9IHJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgaG9yWCA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChob3JYICsgcmVuZGVyLnRleHRNZWFzdXJlc1tqXS5hY3R1YWxTaXplID49IHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChob3JYICsgTWF0aC5mbG9vcihyZW5kZXIudGV4dE1lYXN1cmVzW2pdLmFjdHVhbFNpemUgLyAyKSA+IHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA9PT0gMCAmJiBpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqICsgY291bnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaG9yWCArPSByZW5kZXIudGV4dE1lYXN1cmVzW2pdLmFjdHVhbFNpemU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3VudCArIHJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcign5pyq5om+5Yiw5b2T5YmN5paH5pys5YWD57Sg55qE5YWJ5qCH5YGP56e76YePJyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEhpdFJlbmRlck9mZnNldChyZW5kZXI6IExlYWZSZW5kZXJPYmplY3QsIHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmIChyZW5kZXIgaW5zdGFuY2VvZiBUZXh0R3JvdXBSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRleHRSZW5kZXJPZmZzZXQocmVuZGVyLCB4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZW5kZXIuZWxlbWVudCAmJiByZW5kZXIuZWxlbWVudC50eXBlID09PSAncHN5bScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAocmVuZGVyLnJlY3Qud2lkdGggLyAyKSA+PSB4ID8gMCA6IDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0VGV4dFJlbmRlckhvclgoY3VyclJlbmRlcjogVGV4dEdyb3VwUmVuZGVyT2JqZWN0LCBzdGFydE9mZnNldDogbnVtYmVyLCBlbmRPZmZzZXQ6IG51bWJlcik6IHsgc3RhcnRYOiBudW1iZXIsIGVuZFg6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3QgdGV4dEVsZSA9IGN1cnJSZW5kZXIuZWxlbWVudCBhcyBUZXh0R3JvdXBFbGVtZW50O1xuICAgICAgICBsZXQgZW5kWCA9IDA7XG4gICAgICAgIGxldCBzdGFydFggPSAwO1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRFbGUucGFpbnRSZW5kZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYWludFJlbmRlciA9IHRleHRFbGUucGFpbnRSZW5kZXJzW2ldIGFzIFRleHRHcm91cFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGlmIChwYWludFJlbmRlciAhPT0gY3VyclJlbmRlcikge1xuICAgICAgICAgICAgICAgIGNvdW50ICs9IHBhaW50UmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjb3VudCArIHBhaW50UmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGggPCBzdGFydE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gZW5kT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhaW50UmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW5kT2Zmc2V0ID09PSBjb3VudCArIGopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCArIGogPT09IHN0YXJ0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFggPSBlbmRYO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuZFggKz0gcGFpbnRSZW5kZXIudGV4dE1lYXN1cmVzW2pdLmFjdHVhbFNpemU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7c3RhcnRYLCBlbmRYfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bkuIDkuKrlhYPntKDnu5PlsL7lgY/np7vph49cbiAgICAgKiDmlofmnKzku6XlrZfnrKbplb/luqbov5vooYznoa7lrppcbiAgICAgKiBAcGFyYW0gZWxlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0RWxlbWVudEVuZE9mZnNldChlbGU6IExlYWZFbGVtZW50KTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGVsZSBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGUudGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliKTmlq3lvZPliY3lgY/np7vph4/mmK/lkKbmmK/mnIDnu4jlgY/np7vph49cbiAgICAgKiBAcGFyYW0gZWxlXG4gICAgICogQHBhcmFtIG9mZnNldFxuICAgICAqL1xuICAgIHN0YXRpYyBpc0VsZW1lbnRFbmRPZmZzZXQoZWxlOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudEVuZE9mZnNldChlbGUpID09PSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W55u05o6l5a2Q6IqC54K555qE5omA5pyJ5riy5p+T5YWD57SgXG4gICAgICogQHBhcmFtIGVsZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldENoaWxkUmVuZGVyczxUIGV4dGVuZHMgUmVuZGVyT2JqZWN0PihlbGU6IEJyYW5jaFJlbmRlck9iamVjdCk6IEFycmF5PFQ+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IEFycmF5PFQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGVsZS5nZXRDaGlsZChpKSBhcyBUKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5b2T5YmN5Y2V5YWD5qC85YaF5omA5pyJ55qE5q616JC96KGMXG4gICAgICogQHBhcmFtIGNlbGxcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBnZXRDZWxsUGFyYUxpbmVzKGNlbGw6IFRhYmxlQ2VsbFJlbmRlck9iamVjdCk6IEFycmF5PFBhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBBcnJheTxQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdD4gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjZWxsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhID0gY2VsbC5nZXRDaGlsZChpKSBhcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhcmEubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKHBhcmEuZ2V0Q2hpbGQoaikgYXMgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3QpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRSYW5kb21Db2xvcihzZWVkOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGxldHRlcnMgPSAnMDEyMzQ1Njc4OUFCQ0RFRic7XG4gICAgICAgIGxldCBjb2xvciA9ICcjJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgICAgIGNvbG9yICs9IGxldHRlcnNbTWF0aC5mbG9vcih0aGlzLmdldFNlZWRSYW5kb20oc2VlZCkgKiAxNildO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xvcjtcbiAgICB9XG5cblxuICAgIHN0YXRpYyBnZXRTZWVkUmFuZG9tKHNlZWQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoXCIwLlwiICsgTWF0aC5zaW4oc2VlZCAqIE1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKCkuc3Vic3RyKDYpKTtcbiAgICB9XG5cblxuICAgIHN0YXRpYyBmaW5kQ2hpbGRSZW5kZXIocmVuZGVyOiBCcmFuY2hSZW5kZXJPYmplY3QsIHByZWRpY2F0ZTogKGNoaWxkOiBSZW5kZXJPYmplY3QpID0+IGJvb2xlYW4pOiBSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGUocmVuZGVyLmdldENoaWxkKGkpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIuZ2V0Q2hpbGQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5ZCR5LiK5p+l5om+57G75Z6L5Li65pWw5o2u5YWD55qE54i257qnXG4gICAgICogQHBhcmFtIGVsZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIGdldERhdGFFbGVtZW50KGVsZTogRWxlbWVudCk6IERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50KGVsZSwgaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkgYXMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cDtcbiAgICB9XG59XG5cbiIsImltcG9ydCB7SVJlbmRlckNvbnRleHRDb250cmFjdCwgUmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdCwgSVJlbmRlckRhdGEsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RG9jdW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuL2RvYy1pbXBsXCI7XG5pbXBvcnQge1JlbmRlckN0eH0gZnJvbSBcIi4uLy4uLy4uL2NvbnRyb2xzL3JlbmRlci1jb250ZXh0XCI7XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudENvbnRhaW5lclJlbmRlciBleHRlbmRzIEJsb2NrQ29udGFpbmVyUmVuZGVyT2JqZWN0IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIobnVsbCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIG5leHRSZW5kZXIsZG9jQ3R4Ont2aWV3T3B0aW9uc319ID0gZTtcbiAgICAgICAgY29uc3Qge3ZpZXdTZXR0aW5ncywgZG9jUGFnZVNldHRpbmdzLCB2aWV3QmFja2NvbG9yLHNjYWxlfSA9IHZpZXdPcHRpb25zO1xuICAgICAgICByZW5kZXIuY2xlYXIoKTtcbiAgICAgICAgcmVuZGVyLm92ZXJsYXlzQ29udGV4dC5maWxsUmVjdCgwLCAwLCB2aWV3U2V0dGluZ3Mud2lkdGgsIHZpZXdTZXR0aW5ncy5oZWlnaHQsIHZpZXdCYWNrY29sb3IpO1xuICAgICAgICByZW5kZXIudHJhbigoKSA9PiB7XG4gICAgICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LmN0eC5zY2FsZShzY2FsZSwgc2NhbGUpO1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmN0eC5zY2FsZShzY2FsZSwgc2NhbGUpO1xuICAgICAgICAgICAgbmV4dFJlbmRlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBhZGRQYWdlcyhwYWdlczogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+KTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGQocGFnZXNbaV0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQnJhbmNoRWxlbWVudCwgTGVhZkVsZW1lbnQsIFJlY3QsIEVsZW1lbnQsIFNlbGVjdGlvbkNvbnRlbnRSYW5nZSwgUG9zaXRpb24gfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgSGl0RXZlbnRJbmZvLCBIaXRSZWdpb24gfSBmcm9tIFwiLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7IERvY3VtZW50Q29udGFpbmVyUmVuZGVyIH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtY29udGFpbmVyLWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuaW1wb3J0IHsgVGV4dEdyb3VwRWxlbWVudCwgVGV4dEdyb3VwUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHsgUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRCb2R5RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWJvZHktaW1wbFwiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCIuL2V2ZW50LXN1YmplY3RcIjtcblxuZXhwb3J0IGNsYXNzIERvY3VtZW50U2VsZWN0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZSA9IG5ldyBTZWxlY3Rpb25TdGF0ZSgpO1xuICAgIH1cblxuICAgIHNlbGVjdGlvblN0YXRlOiBTZWxlY3Rpb25TdGF0ZTtcbiAgICBzbmFwc2hvdFNlbGVjdGlvblN0YXRlITogU2VsZWN0aW9uU3RhdGUgfCBudWxsO1xuICAgIHNldFNlbGVjdGlvblN0YXRlKGhpdEluZm86IHsgc3RhcnRIaXRJbmZvOiBIaXRFdmVudEluZm8sIGVuZEhpdEluZm86IEhpdEV2ZW50SW5mbyB9KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRIaXRJbmZvLCBlbmRIaXRJbmZvIH0gPSBoaXRJbmZvO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRIaXRJbmZvID0gc3RhcnRIaXRJbmZvO1xuICAgICAgICBpZiAoIXN0YXJ0SGl0SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0UmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgc3RhcnRSYW5nZS5zZXRTdGFydChzdGFydEhpdEluZm8uZWxlbWVudCwgc3RhcnRIaXRJbmZvLm9mZnNldCk7XG4gICAgICAgIGlmIChlbmRIaXRJbmZvKSB7XG4gICAgICAgICAgICBzdGFydFJhbmdlLnNldEVuZChlbmRIaXRJbmZvLmVsZW1lbnQsIGVuZEhpdEluZm8ub2Zmc2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXJ0UmFuZ2Uuc2V0RW5kKHN0YXJ0SGl0SW5mby5lbGVtZW50LCBzdGFydEhpdEluZm8ub2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmFkZFJhbmdlKHN0YXJ0UmFuZ2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICog6I635Y+W6YCJ5Yy65YWx5ZCM55qE56WW5YWI5o6n5Lu2XG4gICAgKi9cbiAgICBzdGF0aWMgZ2V0QW5jZXN0b3JDb21tb25Db250cm9sKHN0YXJ0Q29udHJvbDogTGVhZkVsZW1lbnQsIGVuZENvbnRyb2w6IExlYWZFbGVtZW50KTogQnJhbmNoRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0TmVzdFBhcmVudHMgPSB0aGlzLmdldE5lc3RQYXJlbnRzKHN0YXJ0Q29udHJvbC5wYXJlbnQpO1xuICAgICAgICBjb25zdCBhbmNlc3RvckNvbW1vbkNvbnRyb2wgPSB0aGlzLmdldENvbW1vblBhcmVuZXQoZW5kQ29udHJvbC5wYXJlbnQsIHN0YXJ0TmVzdFBhcmVudHMpO1xuICAgICAgICBpZiAoIWFuY2VzdG9yQ29tbW9uQ29udHJvbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrmib7liLDlhazlhbHnmoTnpZblhYjnu4Tku7YnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYW5jZXN0b3JDb21tb25Db250cm9sO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluWQkeS4iueahOW1jOWll+eItue6p+iKgueCuembhuWQiFxuICAgICAqIEBwYXJhbSBjb250cm9sIFxuICAgICAqIEBwYXJhbSBhcnJheSBcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0TmVzdFBhcmVudHMoY29udHJvbDogQnJhbmNoRWxlbWVudCB8IG51bGwpOiBBcnJheTxCcmFuY2hFbGVtZW50PiB7XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gW2NvbnRyb2wsIC4uLnRoaXMuZ2V0TmVzdFBhcmVudHMoY29udHJvbC5wYXJlbnQpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG5cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0Q29tbW9uUGFyZW5ldChjb250cm9sOiBCcmFuY2hFbGVtZW50IHwgbnVsbCwgYXJyYXk6IEFycmF5PEJyYW5jaEVsZW1lbnQ+KTogQnJhbmNoRWxlbWVudCB8IG51bGwge1xuICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcnJheS5zb21lKGl0ZW0gPT4gaXRlbSA9PT0gY29udHJvbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbW1vblBhcmVuZXQoY29udHJvbD8ucGFyZW50LCBhcnJheSk7XG4gICAgfVxuXG4gICAgdXBkYXRlU2VsZWN0aW9uU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBhcmVTZWxlY3Rpb25FcXVhbHMoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5zZWxlY3Rpb25TdGF0ZS5yYW5nZTtcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1SYW5nZSgpO1xuICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRDb250cm9sSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgocmFuZ2Uuc3RhcnRDb250cm9sKTtcbiAgICAgICAgY29uc3QgZW5kQ29udHJvbEluZGV4ID0gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KHJhbmdlLmVuZENvbnRyb2wpO1xuICAgICAgICBpZiAoZW5kQ29udHJvbEluZGV4IDwgc3RhcnRDb250cm9sSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lID0gcmFuZ2UuY2xvbmUoKTtcbiAgICAgICAgICAgIGNsb25lLnN0YXJ0Q29udHJvbCA9IHJhbmdlLmVuZENvbnRyb2w7XG4gICAgICAgICAgICBjbG9uZS5zdGFydE9mZnNldCA9IHJhbmdlLmVuZE9mZnNldDtcbiAgICAgICAgICAgIGNsb25lLmVuZENvbnRyb2wgPSByYW5nZS5zdGFydENvbnRyb2w7XG4gICAgICAgICAgICBjbG9uZS5lbmRPZmZzZXQgPSByYW5nZS5zdGFydE9mZnNldDtcbiAgICAgICAgICAgIGNsb25lLmVkaXRhYmxlID0gcmFuZ2UuZWRpdGFibGU7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmFkZFJhbmdlKGNsb25lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmVkaXRhYmxlID0gcmFuZ2UuZWRpdGFibGU7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wgPSByYW5nZS5zdGFydENvbnRyb2wgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRPZmZzZXQgPSByYW5nZS5zdGFydE9mZnNldDtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2xJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChyYW5nZS5zdGFydENvbnRyb2wpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5kQ29udHJvbCA9IHJhbmdlLmVuZENvbnRyb2wgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5kT2Zmc2V0ID0gcmFuZ2UuZW5kT2Zmc2V0O1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmVuZENvbnRyb2xJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChyYW5nZS5lbmRDb250cm9sKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmFuY2VzdG9yQ29tbW9uQ29udHJvbCA9IERvY3VtZW50U2VsZWN0aW9uLmdldEFuY2VzdG9yQ29tbW9uQ29udHJvbCh0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCwgdGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmRDb250cm9sKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmVuYWJsZVRyYWNrQ2hhbmdlcyA9IHRoaXMuZ2V0RW5hYmxlVHJhY2tDaGFuZ2VzKHJhbmdlLnN0YXJ0Q29udHJvbCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluW9k+WJjemAieWMuuWMuuWfn+WGheaYr+WQpuaUr+aMgeeVmeeXlVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRFbmFibGVUcmFja0NoYW5nZXMoZWxlOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoZWxlLCBEb2N1bWVudEJvZHlFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGJvZHk/LnRyYWNrQ2hhbmdlcyB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXBhcmVTZWxlY3Rpb25FcXVhbHMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5zZWxlY3Rpb25TdGF0ZS5yYW5nZTtcbiAgICAgICAgY29uc3Qgc25hcCA9IHRoaXMuc25hcHNob3RTZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKHNuYXAgJiYgcmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiByYW5nZS5zdGFydENvbnRyb2wgPT09IHNuYXAuc3RhcnRDb250cm9sXG4gICAgICAgICAgICAgICAgJiYgcmFuZ2Uuc3RhcnRPZmZzZXQgPT09IHNuYXAuc3RhcnRPZmZzZXRcbiAgICAgICAgICAgICAgICAmJiByYW5nZS5lbmRDb250cm9sID09PSBzbmFwLmVuZENvbnRyb2xcbiAgICAgICAgICAgICAgICAmJiByYW5nZS5lbmRPZmZzZXQgPT09IHNuYXAuZW5kT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDovazmjaLpgInljLrlhoXlrrlcbiAgICAgKiDlpITnkIbnu5PmnZ/pgInljLrlnKjlvIDlp4vpgInljLrkuYvliY1cbiAgICAgKi9cbiAgICBwcml2YXRlIHRyYW5zZm9ybVJhbmdlKCk6IHZvaWQge1xuICAgICAgICBsZXQgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvblN0YXRlLnJhbmdlO1xuICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRDb250cm9sLCBlbmRPZmZzZXQgfSA9IHJhbmdlO1xuICAgICAgICBjb25zdCBzdGFydENvbnRyb2xJbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChzdGFydENvbnRyb2wpO1xuICAgICAgICBjb25zdCBlbmRDb250cm9sSW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgoZW5kQ29udHJvbCk7XG4gICAgICAgIGlmICgoZW5kQ29udHJvbEluZGV4IDwgc3RhcnRDb250cm9sSW5kZXgpKSB7XG4gICAgICAgICAgICBjb25zdCBjbG9uZSA9IHJhbmdlLmNsb25lKCk7XG4gICAgICAgICAgICBjbG9uZS5zdGFydENvbnRyb2wgPSBlbmRDb250cm9sO1xuICAgICAgICAgICAgY2xvbmUuc3RhcnRPZmZzZXQgPSBlbmRPZmZzZXQ7XG4gICAgICAgICAgICBjbG9uZS5lbmRDb250cm9sID0gc3RhcnRDb250cm9sO1xuICAgICAgICAgICAgY2xvbmUuZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmFkZFJhbmdlKGNsb25lKTtcbiAgICAgICAgfVxuICAgICAgICByYW5nZSA9IHRoaXMuc2VsZWN0aW9uU3RhdGUucmFuZ2U7XG4gICAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncmFuZ2UgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgcmFuZ2UuY2FsY1JhbmdlKCk7XG4gICAgICAgIGlmICgocmFuZ2Uuc3RhcnRDb250cm9sID09PSByYW5nZS5lbmRDb250cm9sICYmIHJhbmdlLnN0YXJ0T2Zmc2V0ID4gcmFuZ2UuZW5kT2Zmc2V0KSkge1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IH0gPSByYW5nZTtcbiAgICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID0gZW5kT2Zmc2V0O1xuICAgICAgICAgICAgcmFuZ2UuZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmFuZ2UuY2FsY1JhbmdlKCk7XG4gICAgICAgIC8v6Ziy5q2i5YWJ5qCH5a6a5L2N5Yiw5q616JC956ym5Y+35LmL5ZCOXG4gICAgICAgIGlmIChyYW5nZS5zdGFydENvbnRyb2wgPT09IHJhbmdlLmVuZENvbnRyb2wgJiYgcmFuZ2Uuc3RhcnRPZmZzZXQgPT09IDEgJiYgcmFuZ2UuZW5kT2Zmc2V0ID09PSAxICYmIHJhbmdlLnN0YXJ0Q29udHJvbC50eXBlID09PSAncHN5bScpIHtcbiAgICAgICAgICAgIHJhbmdlLnN0YXJ0T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHJhbmdlLmVuZE9mZnNldCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmFuZ2UuY2FsY1JhbmdlKCk7XG4gICAgfVxuXG4gICAgdGFrZVNuYXBzaG90KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNuYXBzaG90U2VsZWN0aW9uU3RhdGUgPSB0aGlzLnNlbGVjdGlvblN0YXRlLmNsb25lKCk7XG4gICAgfVxuXG4gICAgY2xlYXJTbmFwc2hvdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zbmFwc2hvdFNlbGVjdGlvblN0YXRlID0gbnVsbDtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvblN0YXRlIHtcbiAgICBnZXQgc3RhcnRDb250cm9sKCk6IExlYWZFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0Q29udHJvbCBhcyBMZWFmRWxlbWVudDtcbiAgICB9XG5cbiAgICBzZXQgc3RhcnRDb250cm9sKHZhbHVlOiBMZWFmRWxlbWVudCB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fc3RhcnRDb250cm9sID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGVuZENvbnRyb2woKTogTGVhZkVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kQ29udHJvbCBhcyBMZWFmRWxlbWVudDtcbiAgICB9XG5cbiAgICBzZXQgZW5kQ29udHJvbCh2YWx1ZTogTGVhZkVsZW1lbnQgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX2VuZENvbnRyb2wgPSB2YWx1ZTtcbiAgICB9XG4gICAgb25DaGFuZ2VkRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHN0YXJ0Q29udHJvbEluZGV4ITogbnVtYmVyO1xuICAgIHN0YXJ0T2Zmc2V0ITogbnVtYmVyO1xuICAgIGVuZENvbnRyb2xJbmRleCE6IG51bWJlcjtcbiAgICBlbmRPZmZzZXQhOiBudW1iZXI7XG4gICAgZ2V0IGNvbGxhcHNlZCgpIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2xJbmRleCwgc3RhcnRPZmZzZXQsIGVuZENvbnRyb2xJbmRleCwgZW5kT2Zmc2V0IH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gIShzdGFydENvbnRyb2xJbmRleCAhPT0gZW5kQ29udHJvbEluZGV4IHx8IChzdGFydENvbnRyb2xJbmRleCA9PT0gZW5kQ29udHJvbEluZGV4ICYmIHN0YXJ0T2Zmc2V0ICE9PSBlbmRPZmZzZXQpKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfc3RhcnRDb250cm9sITogTGVhZkVsZW1lbnQgfCBudWxsO1xuICAgIHByaXZhdGUgX2VuZENvbnRyb2whOiBMZWFmRWxlbWVudCB8IG51bGw7XG4gICAgYW5jZXN0b3JDb21tb25Db250cm9sITogQnJhbmNoRWxlbWVudCB8IG51bGw7XG4gICAgcmFuZ2UhOiBTZWxlY3Rpb25SYW5nZSB8IG51bGw7XG4gICAgc3RhcnRIaXRJbmZvITogSGl0RXZlbnRJbmZvIHwgbnVsbDtcbiAgICBzZWxlY3RlZFJhbmdlITogU2VsZWN0aW9uQ29udGVudFJhbmdlIHwgbnVsbDtcbiAgICBlZGl0YWJsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgcmVuZGVyQ29udGFpbmVyITogRG9jdW1lbnRDb250YWluZXJSZW5kZXI7XG4gICAgY3Vyc29yUG9zITogUmVjdCB8IG51bGw7XG4gICAgLy/lvZPliY3pgInljLrnmoTkuIrkuIvmlofmmK/lkKbmlK/mjIHnlZnnl5Xkv67mlLlcbiAgICBlbmFibGVUcmFja0NoYW5nZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgIH1cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yYW5nZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhcnRPZmZzZXQgPSAtMTtcbiAgICAgICAgdGhpcy5lbmRPZmZzZXQgPSAtMTtcbiAgICAgICAgdGhpcy5fc3RhcnRDb250cm9sID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZW5kQ29udHJvbCA9IG51bGw7XG4gICAgICAgIHRoaXMuYW5jZXN0b3JDb21tb25Db250cm9sID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGFydENvbnRyb2xJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLmVuZENvbnRyb2xJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnNvclBvcyA9IG51bGw7XG4gICAgfVxuXG4gICAgYWRkUmFuZ2UocmFuZ2U6IFNlbGVjdGlvblJhbmdlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5yYW5nZSA9IHJhbmdlO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZEV2ZW50Lm5leHQoKTtcbiAgICB9XG4gICAgcmVzZXRSYW5nZShzdGFydENvbnRyb2w6IEVsZW1lbnQsIHN0YXJ0T2Zmc2V0OiBudW1iZXIpOiBTZWxlY3Rpb25SYW5nZSB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpO1xuICAgICAgICByYW5nZS5zZXRFbmQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCk7XG4gICAgICAgIHRoaXMuYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICByZXR1cm4gcmFuZ2U7XG4gICAgfVxuXG4gICAgc3Vycm91bmQoZWxlOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KGVsZSwgMCk7XG4gICAgICAgIHJhbmdlLnNldEVuZChlbGUsIC0xKTtcbiAgICAgICAgdGhpcy5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogU2VsZWN0aW9uU3RhdGUge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBTZWxlY3Rpb25TdGF0ZSgpO1xuICAgICAgICBjbG9uZS5fc3RhcnRDb250cm9sID0gdGhpcy5fc3RhcnRDb250cm9sO1xuICAgICAgICBjbG9uZS5zdGFydE9mZnNldCA9IHRoaXMuc3RhcnRPZmZzZXQ7XG4gICAgICAgIGNsb25lLl9lbmRDb250cm9sID0gdGhpcy5fZW5kQ29udHJvbDtcbiAgICAgICAgY2xvbmUuZW5kT2Zmc2V0ID0gdGhpcy5lbmRPZmZzZXQ7XG4gICAgICAgIGNsb25lLmFuY2VzdG9yQ29tbW9uQ29udHJvbCA9IHRoaXMuYW5jZXN0b3JDb21tb25Db250cm9sO1xuICAgICAgICBjbG9uZS5zdGFydENvbnRyb2xJbmRleCA9IHRoaXMuc3RhcnRDb250cm9sSW5kZXg7XG4gICAgICAgIGNsb25lLmVuZENvbnRyb2xJbmRleCA9IHRoaXMuZW5kQ29udHJvbEluZGV4O1xuICAgICAgICBjbG9uZS5zZWxlY3RlZFJhbmdlID0gdGhpcy5zZWxlY3RlZFJhbmdlO1xuICAgICAgICBjbG9uZS5lZGl0YWJsZSA9IHRoaXMuZWRpdGFibGU7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cblxufVxuXG5cblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvblJhbmdlIHtcbiAgICBzdGFydENvbnRyb2whOiBFbGVtZW50O1xuICAgIHN0YXJ0T2Zmc2V0ITogbnVtYmVyO1xuICAgIGVuZENvbnRyb2whOiBFbGVtZW50O1xuICAgIGVuZE9mZnNldCE6IG51bWJlcjtcbiAgICBlZGl0YWJsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgc2V0U3RhcnQoY29udHJvbDogRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdGFydENvbnRyb2wgPSBjb250cm9sO1xuICAgICAgICB0aGlzLnN0YXJ0T2Zmc2V0ID0gb2Zmc2V0O1xuICAgIH1cbiAgICBzZXRFbmQoY29udHJvbDogRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbmRDb250cm9sID0gY29udHJvbDtcbiAgICAgICAgdGhpcy5lbmRPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2V0SW5mbyh0aGlzLnN0YXJ0Q29udHJvbCwgdGhpcy5zdGFydE9mZnNldCk7XG4gICAgICAgIHRoaXMuc2V0U3RhcnQocmVzLmNvbnRyb2wsIHJlcy5vZmZzZXQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY0VuZCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5zZXRJbmZvKHRoaXMuZW5kQ29udHJvbCwgdGhpcy5lbmRPZmZzZXQpO1xuICAgICAgICB0aGlzLnNldEVuZChyZXMuY29udHJvbCwgcmVzLm9mZnNldCk7XG4gICAgfVxuXG4gICAgY2FsY1JhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhbGNTdGFydCgpO1xuICAgICAgICB0aGlzLmNhbGNFbmQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEluZm8oY29udHJvbDogRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiB7IGNvbnRyb2w6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlciB9IHtcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID09PSAtMSA/IGNvbnRyb2wudGV4dC5sZW5ndGggOiBvZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgPT09IC0xID8gMSA6IG9mZnNldDtcbiAgICAgICAgICAgIHJldHVybiB7IGNvbnRyb2wsIG9mZnNldCB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAob2Zmc2V0ID4gY29udHJvbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+i2hee0ouW8lScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9mZnNldCA9PT0gY29udHJvbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNvbnRyb2wuZ2V0Q2hpbGQob2Zmc2V0IC0gMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0SW5mbyhjaGlsZCwgMSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNvbnRyb2wuZ2V0Q2hpbGQoY29udHJvbC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRJbmZvKGNoaWxkLCAtMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY29udHJvbC5nZXRDaGlsZChvZmZzZXQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldEluZm8oY2hpbGQsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IFNlbGVjdGlvblJhbmdlIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgY2xvbmUuc3RhcnRDb250cm9sID0gdGhpcy5zdGFydENvbnRyb2w7XG4gICAgICAgIGNsb25lLnN0YXJ0T2Zmc2V0ID0gdGhpcy5zdGFydE9mZnNldDtcbiAgICAgICAgY2xvbmUuZW5kQ29udHJvbCA9IHRoaXMuZW5kQ29udHJvbDtcbiAgICAgICAgY2xvbmUuZW5kT2Zmc2V0ID0gdGhpcy5lbmRPZmZzZXQ7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbn1cblxuZXhwb3J0IGNsYXNzIERvY3VtZW50Q3Vyc29yIHtcbiAgICBzdGF0aWMgZ2V0RWxlbWVudEN1cnNvclBvcyhlbGU6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlciwgaGl0UmVnaW9uOiBIaXRSZWdpb24gfCB1bmRlZmluZWQsIGRvY051bTogbnVtYmVyKTogeyByZW5kZXI6IFJlbmRlck9iamVjdCwgcmVjdDogUmVjdCB9IHtcbiAgICAgICAgaWYgKGhpdFJlZ2lvbiA9PT0gJ2JvZHknIHx8IGhpdFJlZ2lvbiA9PT0gJ3JldmlldycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRSZW5kZXJQb3MoZWxlLCBvZmZzZXQsIGVsZS5wYWludFJlbmRlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKGhpdFJlZ2lvbiA9PT0gJ2Zvb3RlcicgfHwgaGl0UmVnaW9uID09PSAnaGVhZGVyJykge1xuICAgICAgICAgICAgY29uc3QgZG9jQ29udGFpbmVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKGVsZS5wYWludFJlbmRlcnNbMF0sIERvY3VtZW50Q29udGFpbmVyUmVuZGVyKTtcbiAgICAgICAgICAgIGlmICghZG9jQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkb2NDb250YWluZXIgaXMgbnVsbCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBkb2NDb250YWluZXIuZ2V0Q2hpbGQoZG9jTnVtKSBhcyBEb2N1bWVudFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJEb2NQYWludFJlbmRlcnMgPSBlbGUucGFpbnRSZW5kZXJzLmZpbHRlcihpdGVtID0+IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihpdGVtLCBEb2N1bWVudFJlbmRlck9iamVjdCkgPT09IGRvY1JlbmRlcik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50UmVuZGVyUG9zKGVsZSwgb2Zmc2V0LCBjdXJyRG9jUGFpbnRSZW5kZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBkZWJ1Z2dlcjtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrmib7liLDlhYPntKDlgY/np7vph4/lr7nlupTnmoTlhYnmoIfkvY3nva4nKVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGdldEVsZW1lbnRSZW5kZXJQb3MoZWxlOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIsIHBhaW50czogQXJyYXk8UmVuZGVyT2JqZWN0Pik6IHsgcmVuZGVyOiBSZW5kZXJPYmplY3QsIHJlY3Q6IFJlY3QgfSB7XG4gICAgICAgIGlmIChlbGUgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWludFJlbmRlciA9IHBhaW50c1tpXSBhcyBUZXh0R3JvdXBSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgbGV0IGhvclggPSAwO1xuICAgICAgICAgICAgICAgIGlmIChwYWludFJlbmRlci50ZXh0TWVhc3VyZXMubGVuZ3RoICsgY291bnQgPCBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gcGFpbnRSZW5kZXIudGV4dE1lYXN1cmVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHBhaW50UmVuZGVyLnRleHRNZWFzdXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPT09IG9mZnNldCB8fCAoaSA9PT0gMCAmJiBjb3VudCArIDAuNSA9PT0gb2Zmc2V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRSZWN0KHBhaW50UmVuZGVyLCB7IHg6IDAsIHk6IDAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v5LiK5qCH44CB5LiL5qCH5L2N572u5aSE55CGXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoWydzdXBlcnNjcmlwdCcsICdzdWJzY3JpcHQnXS5pbmRleE9mKGVsZS5wcm9wcy52ZXJ0QWxpZ24pID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmhlaWdodCAtPSBlbGUucHJvcHMuZm9udFNpemUgLyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGUucHJvcHMudmVydEFsaWduID09PSAnc3Vic2NyaXB0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkgKz0gcmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC54ICs9IGhvclg7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcjogcGFpbnRSZW5kZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIGhvclggKz0gcGFpbnRSZW5kZXIudGV4dE1lYXN1cmVzW2ldLmFjdHVhbFNpemU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFpbnRSZW5kZXIgPSBwYWludHNbMF07XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFJlY3QocGFpbnRSZW5kZXIsIHsgeDogMCwgeTogMCB9KVxuICAgICAgICAgICAgaWYgKG9mZnNldCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJlY3QueCArPSByZWN0LndpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZW5kZXI6IHBhaW50UmVuZGVyLFxuICAgICAgICAgICAgICAgIHJlY3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquiDveWumuS9jeWIsOWFg+e0oOS9jee9ricpXG4gICAgfVxufVxuIiwiaW1wb3J0IHtFbGVtZW50RmFjdG9yeSwgTGVhZkVsZW1lbnQsIHJlYWRFbGVtZW50UHJvcHMsIFNlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9uc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0NoZWNrQm94UHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudEV2ZW50fSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcblxuZXhwb3J0IGNsYXNzIENoZWNrQm94RWxlbWVudCBleHRlbmRzIExlYWZFbGVtZW50PENoZWNrQm94UHJvcHM+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2NrYicpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IENoZWNrQm94UHJvcHMoKTtcbiAgICAgICAgdGhpcy5jdXJzb3JUeXBlID0gJ2RlZmF1bHQnXG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRDbGljaycsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU3RhdGUoZXZ0KVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogQ2hlY2tCb3hSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgQ2hlY2tCb3hSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgICAgIHJlbmRlci5yZWN0LndpZHRoID0gdGhpcy5wcm9wcy5zaXplICsgNDtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gdGhpcy5wcm9wcy5zaXplO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIGNoYW5nZVN0YXRlKGU6IEVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BzLmlzQ2hlY2tlZCA9ICF0aGlzLnByb3BzLmlzQ2hlY2tlZDtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2NrYicsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBDaGVja0JveEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBDaGVja0JveEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDaGVja0JveEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxDaGVja0JveFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSAnY2tiJztcbiAgICB9XG5cbiAgICBjcmVhdGVFbGVtZW50KGRhdGE6IHJlYWRFbGVtZW50UHJvcHM8Q2hlY2tCb3hQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBDaGVja0JveEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHM7XG4gICAgICAgIGNvbnN0IGNrYkVsZW1lbnQgPSBuZXcgQ2hlY2tCb3hFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IGNrYlByb3BzID0gY2tiRWxlbWVudC5wcm9wcztcbiAgICAgICAgY2tiUHJvcHMuc2l6ZSA9IHByb3BzPy5zaXplID8/IDE0O1xuICAgICAgICBja2JQcm9wcy5pc0NoZWNrZWQgPSBwcm9wcz8uaXNDaGVja2VkID8/IGZhbHNlO1xuICAgICAgICBja2JQcm9wcy5ncm91cE5hbWUgPSBwcm9wcz8uZ3JvdXBOYW1lID8/IG51bGw7XG4gICAgICAgIHJldHVybiBja2JFbGVtZW50O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENoZWNrQm94UmVuZGVyT2JqZWN0IGV4dGVuZHMgTGVhZlJlbmRlck9iamVjdDxDaGVja0JveEVsZW1lbnQ+IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgZS5yZW5kZXIuY29udGVudENvbnRleHQuZHJhd0NoZWNrQm94KGUucG9zaXRpb24ueCArIDIsIGUucG9zaXRpb24ueSwgdGhpcy5lbGVtZW50LnByb3BzLnNpemUsIHRoaXMuZWxlbWVudC5wcm9wcy5zaXplLCB0aGlzLmVsZW1lbnQucHJvcHMuaXNDaGVja2VkKTtcbiAgICB9XG5cbiAgICBjbG9uZShjbG9uZURhdGEgPSB0cnVlKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQ2hlY2tCb3hSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG59XG4iLCJpbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBQb3NpdGlvbixcbiAgICByZWFkRWxlbWVudFByb3BzLFxuICAgIFJlY3QsXG4gICAgU2VsZWN0aW9uQ29udGVudFJhbmdlLFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtDb21tQ29udGVudFByb3BzLCBUZXh0UHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnR9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiXG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7QmxvY2tDb250YWluZXJSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0RvY3VtZW50UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vZG9jdW1lbnQvZG9jLWltcGxcIjtcbmltcG9ydCB7Q29tbWVudEVsZW1lbnR9IGZyb20gXCIuL2NvbW1lbnQtZWxlbWVudC1pbXBsXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbW1Db250ZW50QmFzZUVsZW1lbnQ8UCBleHRlbmRzIG9iamVjdCA9IHsgaWQ6IHN0cmluZyB9PiBleHRlbmRzIEJsb2NrQ29udGFpbmVyRWxlbWVudDxQPiB7XG4gICAgc3RhcnRNYXJrITogQ29tbWVudEVsZW1lbnQ7XG4gICAgZW5kTWFyayE6IENvbW1lbnRFbGVtZW50O1xuICAgIGZvY3VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IodHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHR5cGUpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdHb3RDdXJzb3InLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnTG9zdEN1cnNvcicsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKVxuICAgICAgICB9KVxuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbW1Db250ZW50QmFzZVJlbmRlck9iamVjdDxFIGV4dGVuZHMgQ29tbUNvbnRlbnRCYXNlRWxlbWVudD4gZXh0ZW5kcyBCbG9ja0NvbnRhaW5lclJlbmRlck9iamVjdDxFPiB7XG4gICAgY29tbU1hcmtSZW5kZXIhOiB7IHJlbmRlcjogUmVuZGVyT2JqZWN0LCBwb3M6IFBvc2l0aW9uIH07XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tQ29udGVudEVsZW1lbnQgZXh0ZW5kcyBDb21tQ29udGVudEJhc2VFbGVtZW50PENvbW1Db250ZW50UHJvcHM+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXCJjb21tLWNvbnRlbnRcIik7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgQ29tbUNvbnRlbnRQcm9wcygpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBDb21tQ29udGVudFJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnBhZGRpbmcubGVmdCA9IDE0O1xuICAgICAgICByZW5kZXIucGFkZGluZy50b3AgPSAyNDtcbiAgICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9XG5cbiAgICBzZXJpYWxpemUodmlld09wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHsuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKX1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfkuI3mlK/mjIEnKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tQ29udGVudFJlbmRlck9iamVjdCBleHRlbmRzIENvbW1Db250ZW50QmFzZVJlbmRlck9iamVjdDxDb21tQ29udGVudEVsZW1lbnQ+IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgbGV0IGJvcmRlckNvbG9yID0gdGhpcy5lbGVtZW50LmZvY3VzID8gJyNmYThjMTYnIDogJyNmZmQ1OTEnO1xuICAgICAgICBlLnJlbmRlci5jb250ZW50Q29udGV4dC5zdHJva2VSZWN0KGUucG9zaXRpb24ueCwgZS5wb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsIGJvcmRlckNvbG9yKTtcbiAgICAgICAgZS5yZW5kZXIuY29udGVudENvbnRleHQuZmlsbFJlY3QoZS5wb3NpdGlvbi54LCBlLnBvc2l0aW9uLnksIDgsIHRoaXMucmVjdC5oZWlnaHQsICcjODcxNDAwJylcbiAgICAgICAgY29uc3QgZG9jUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHRoaXMuY29tbU1hcmtSZW5kZXIucmVuZGVyLCBEb2N1bWVudFJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgIC8v6I635Y+W5a6h6ZiF5qCH6K6w55qE57uY5Yi25Z2Q5qCHXG4gICAgICAgIGxldCBjb21tTWFya1BvcyA9IEVsZW1lbnRVdGlsLmdldFJlbmRlckFic29sdXRlUGFpbnRQb3ModGhpcy5jb21tTWFya1JlbmRlci5yZW5kZXIsIHtcbiAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICB5OiAtZS5kb2NDdHgudmlld09wdGlvbnMudHJhbnNsYXRlWVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29tbU1hcmtMaW5lUG9zID0gRWxlbWVudFV0aWwuZ2V0UGFyYUxpbmVQb3ModGhpcy5jb21tTWFya1JlbmRlci5yZW5kZXIsIGNvbW1NYXJrUG9zKTtcbiAgICAgICAgY29tbU1hcmtQb3MueSA9IGNvbW1NYXJrTGluZVBvcy55ICsgMjtcblxuICAgICAgICBjb25zdCBkb2NSZW5kZXJQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKGRvY1JlbmRlciwge3g6IDAsIHk6IC1lLmRvY0N0eC52aWV3T3B0aW9ucy50cmFuc2xhdGVZfSk7XG4gICAgICAgIGNvbnN0IG1hcmdpbkxlZnQgPSBjb21tTWFya1Bvcy54IC0gZG9jUmVuZGVyUG9zLnggLSBkb2NSZW5kZXIucGFkZGluZy5sZWZ0O1xuICAgICAgICBjb25zdCBtYXJnaW5SaWdodCA9IGUuZG9jQ3R4LnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy53aWR0aCAtIG1hcmdpbkxlZnQgLSBkb2NSZW5kZXIucGFkZGluZy5yaWdodCAqIDI7XG4gICAgICAgIGUucmVuZGVyLm92ZXJsYXlzQ29udGV4dC5kcmF3RGFzaExpbmUoW2NvbW1NYXJrUG9zLCB7XG4gICAgICAgICAgICB4OiBjb21tTWFya1Bvcy54ICsgbWFyZ2luUmlnaHQsXG4gICAgICAgICAgICB5OiBjb21tTWFya1Bvcy55XG4gICAgICAgIH1dLCBbMSwgMV0sICdyZWQnKTtcbiAgICAgICAgZS5yZW5kZXIub3ZlcmxheXNDb250ZXh0LmRyYXdEYXNoTGluZShbe1xuICAgICAgICAgICAgeDogY29tbU1hcmtQb3MueCArIG1hcmdpblJpZ2h0LFxuICAgICAgICAgICAgeTogY29tbU1hcmtQb3MueVxuICAgICAgICB9LCBlLnBvc2l0aW9uXSwgWzEsIDFdLCAncmVkJyk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJUaXRsZShlLnJlbmRlciwgZS5wb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcmVuZGVyVGl0bGUoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgcG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvcFBhZGRpbmcgPSAyNDtcbiAgICAgICAgY29uc3Qge3Byb3BzfSA9IHRoaXMuZWxlbWVudDtcbiAgICAgICAgY29uc3QgdGV4dFByb3BzID0gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICB0ZXh0UHJvcHMuZm9udFNpemUgPSAxMjtcbiAgICAgICAgdGV4dFByb3BzLmZvbnROYW1lID0gJ+alt+S9kyc7XG4gICAgICAgIHRleHRQcm9wcy5jb2xvciA9IFwicmdiKDAsMCwwKVwiO1xuICAgICAgICBjb25zdCBjcmVhdGVEYXRlID0gbW9tZW50KHByb3BzLmNyZWF0ZURhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbScpXG4gICAgICAgIGNvbnN0IGNvbW1UaXRsZSA9IGAke3Byb3BzLmNyZWF0ZU5hbWV9OiR7Y3JlYXRlRGF0ZX1gO1xuICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSBjdHguY29udGVudENvbnRleHQubWVhc3VyZVRleHQoY29tbVRpdGxlLCB0ZXh0UHJvcHMpO1xuICAgICAgICBjb25zdCByZWN0OiBSZWN0ID0ge3g6IHBvc2l0aW9uLnggKyB0aGlzLnBhZGRpbmcubGVmdCwgeTogcG9zaXRpb24ueSwgd2lkdGgsIGhlaWdodCwgbWF4SGVpZ2h0OiAwLCBtYXhXaWR0aDogMH1cbiAgICAgICAgcmVjdC55ICs9ICh0b3BQYWRkaW5nIC0gcmVjdC5oZWlnaHQpIC8gMjtcbiAgICAgICAgY3R4LmNvbnRlbnRDb250ZXh0LmRyYXdUZXh0KGNvbW1UaXRsZSwgdGV4dFByb3BzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpO1xuICAgIH1cblxuICAgIGVuZFJlbmRlcihjdHg6IFJlbmRlckNvbnRleHRUeXBlLCBwb3NpdGlvbjogUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgLy90aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBDb21tQ29udGVudFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGNsb25lLnBhZGRpbmcgPSB0aGlzLnBhZGRpbmcuY2xvbmUoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZS5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWVudFJhbmdlU3RhdHVzIHtcbiAgICByYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlLFxuICAgIGNvbW1Db250ZW50OiBDb21tQ29udGVudEJhc2VFbGVtZW50XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tZW50Q29udGVudEZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxDb21tQ29udGVudFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBcImNvbW0tY29udGVudFwiO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxDb21tQ29udGVudFByb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgQ29tbUNvbnRlbnRQcm9wcztcbiAgICAgICAgY29uc3QgY29tbWVudEVsZSA9IG5ldyBDb21tQ29udGVudEVsZW1lbnQoKTtcbiAgICAgICAgY29tbWVudEVsZS5wcm9wcy5pZCA9IHByb3BzLmlkO1xuICAgICAgICBjb21tZW50RWxlLnByb3BzLmNyZWF0ZURhdGUgPSBwcm9wcy5jcmVhdGVEYXRlO1xuICAgICAgICBjb21tZW50RWxlLnByb3BzLmNyZWF0ZUlkID0gcHJvcHMuY3JlYXRlSWQ7XG4gICAgICAgIGNvbW1lbnRFbGUucHJvcHMuY3JlYXRlTmFtZSA9IHByb3BzLmNyZWF0ZU5hbWU7XG4gICAgICAgIHJldHVybiBjb21tZW50RWxlO1xuICAgIH1cbn1cbiIsImltcG9ydCB7UG9zaXRpb259IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge1JlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7RG9jdW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuLi9kb2N1bWVudC9kb2MtaW1wbFwiO1xuaW1wb3J0IHtDb21tQ29udGVudEJhc2VFbGVtZW50LCBDb21tQ29udGVudEJhc2VSZW5kZXJPYmplY3QsfSBmcm9tIFwiLi9jb21tZW50LWNvbnRlbnQtaW1wbFwiO1xuaW1wb3J0IHtDb21tZW50RWxlbWVudCwgQ29tbWVudFJlbmRlck9iamVjdH0gZnJvbSBcIi4vY29tbWVudC1lbGVtZW50LWltcGxcIjtcbmltcG9ydCB7Q29tbXNDb250YWluZXJSZW5kZXJPYmplY3R9IGZyb20gXCIuL2NvbW1lbnRzLWNvbnRhaW5lci1pbXBsXCI7XG5cbmludGVyZmFjZSBDb21tTWFwUHJvcHMge1xuICAgIGNvbW1NYXJrUmVuZGVyOiBDb21tZW50UmVuZGVyT2JqZWN0LFxuICAgIGNvbW1NYXJrUG9zOiBQb3NpdGlvbixcbiAgICBjb21tQ29udGVudFJlbmRlcjogQ29tbUNvbnRlbnRCYXNlUmVuZGVyT2JqZWN0PGFueT4sXG4gICAgY29tbUNvbnRlbnRQb3M/OiBQb3NpdGlvblxufVxuXG5leHBvcnQgY2xhc3MgQ29tbWVudHNVdGlsIHtcbiAgICBzdGF0aWMgcmVtZWFzdXJlQ29tbWVudHMoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgY29tbVdpbmRvdzogQ29tbXNDb250YWluZXJSZW5kZXJPYmplY3QsIGNvbW1Db250YWluZXI6IENvbW1zQ29udGFpbmVyUmVuZGVyT2JqZWN0LCBtYXA6IEFycmF5PHsgZWxlOiBDb21tZW50RWxlbWVudCwgcmVuZGVyOiBSZW5kZXJPYmplY3QsIHBvczogUG9zaXRpb24gfT4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29tbU1hcDogQXJyYXk8Q29tbU1hcFByb3BzPiA9IFtdO1xuICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIoY29tbVdpbmRvdywgRG9jdW1lbnRSZW5kZXJPYmplY3QpIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1Db250YWluZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1SZW5kZXIgPSBjb21tQ29udGFpbmVyLmdldENoaWxkKGkpO1xuICAgICAgICAgICAgY29uc3QgY29tbUVsZSA9IGNvbW1SZW5kZXIuZWxlbWVudCBhcyBDb21tQ29udGVudEJhc2VFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgbWFwQ29tbSA9IG1hcC5maW5kKGl0ZW0gPT4gaXRlbS5lbGUucHJvcHMuaWQgPT09IGNvbW1FbGUucHJvcHMuaWQpO1xuICAgICAgICAgICAgaWYgKG1hcENvbW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tTWFya0xpbmVQb3MgPSBFbGVtZW50VXRpbC5nZXRQYXJhTGluZVBvcyhtYXBDb21tLnJlbmRlciwgbWFwQ29tbS5wb3MpO1xuICAgICAgICAgICAgICAgIG1hcENvbW0ucG9zLnkgPSBjb21tTWFya0xpbmVQb3MueSArIDI7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb21tQ29udGVudFJlbmRlciA9IGNvbW1SZW5kZXIuY2xvbmUoKSBhcyBDb21tQ29udGVudEJhc2VSZW5kZXJPYmplY3Q8YW55PjtcbiAgICAgICAgICAgICAgICBjb21tQ29udGVudFJlbmRlci5yZWN0LnggPSAwO1xuICAgICAgICAgICAgICAgIGNvbW1Db250ZW50UmVuZGVyLnJlY3QueSA9IG1hcENvbW0ucG9zLnk7XG4gICAgICAgICAgICAgICAgY29tbVdpbmRvdy5hZGRDaGlsZChjb21tQ29udGVudFJlbmRlcik7XG4gICAgICAgICAgICAgICAgY29tbU1hcC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgY29tbU1hcmtSZW5kZXI6IDxDb21tZW50UmVuZGVyT2JqZWN0Pm1hcENvbW0ucmVuZGVyLFxuICAgICAgICAgICAgICAgICAgICBjb21tTWFya1BvczogbWFwQ29tbS5wb3MsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1Db250ZW50UmVuZGVyOiBjb21tQ29udGVudFJlbmRlclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBzdW1Db21tZW50SGVpZ2h0ID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tTWFwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBtYXAgPSBjb21tTWFwW2ldO1xuICAgICAgICAgICAgY29uc3QgcHJldlJlbmRlciA9IGNvbW1NYXBbaSAtIDFdPy5jb21tQ29udGVudFJlbmRlcjtcbiAgICAgICAgICAgIGNvbnN0IHtjb21tQ29udGVudFJlbmRlcn0gPSBtYXA7XG4gICAgICAgICAgICBzdW1Db21tZW50SGVpZ2h0ICs9IGNvbW1Db250ZW50UmVuZGVyLnJlY3QuaGVpZ2h0ICsgNTtcbiAgICAgICAgICAgIGlmIChwcmV2UmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge3k6IHByZXZZLCBoZWlnaHQ6IHByZXZIZWlnaHR9ID0gcHJldlJlbmRlci5yZWN0O1xuICAgICAgICAgICAgICAgIGlmIChjb21tQ29udGVudFJlbmRlci5yZWN0LnkgPCBwcmV2WSArIHByZXZIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tbUNvbnRlbnRSZW5kZXIucmVjdC55ID0gcHJldlkgKyBwcmV2SGVpZ2h0ICsgNTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21tQ29udGVudFJlbmRlci5jb21tTWFya1JlbmRlciA9IHtyZW5kZXI6IG1hcC5jb21tTWFya1JlbmRlciwgcG9zOiBtYXAuY29tbU1hcmtQb3N9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29tbU1hcC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXN0Q29tbWVudE1hcCA9IGNvbW1NYXBbY29tbU1hcC5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3Qge2NvbW1Db250ZW50UmVuZGVyOiBsYXN0Q29tbUNvbnRlbnRSZW5kZXJ9ID0gbGFzdENvbW1lbnRNYXA7XG4gICAgICAgIGNvbnN0IHtyZWN0OiBsYXN0UmVjdH0gPSBsYXN0Q29tbUNvbnRlbnRSZW5kZXI7XG5cbiAgICAgICAgLy/mibnms6jlhoXlrrnotoXlh7rmlofmoaPvvIzpnIDopoHph43mlrDmjpLluo9cbiAgICAgICAgaWYgKGxhc3RSZWN0LnkgKyBsYXN0UmVjdC5oZWlnaHQgPiBkb2NSZW5kZXIucmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICAgIC8v5oC75YaF5a655bCP5LqO5a655Zmo6auY5bqmLOWImei/m+ihjOWAkuaOklxuICAgICAgICAgICAgLy/lkKbliJnov5vooYzmraPmjpJcbiAgICAgICAgICAgIGlmIChzdW1Db21tZW50SGVpZ2h0IDwgZG9jUmVuZGVyLnJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgbGFzdFJlY3QueSA9IGRvY1JlbmRlci5yZWN0LmhlaWdodCAtIGxhc3RSZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gY29tbU1hcC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXAgPSBjb21tTWFwW2ldO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2UmVuZGVyID0gY29tbU1hcFtpICsgMV0/LmNvbW1Db250ZW50UmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7Y29tbUNvbnRlbnRSZW5kZXJ9ID0gbWFwO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldlJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qge3k6IHByZXZZfSA9IHByZXZSZW5kZXIucmVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21tQ29udGVudFJlbmRlci5yZWN0LnkgKyBjb21tQ29udGVudFJlbmRlci5yZWN0LmhlaWdodCA+IHByZXZZKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbUNvbnRlbnRSZW5kZXIucmVjdC55ID0gcHJldlkgLSBjb21tQ29udGVudFJlbmRlci5yZWN0LmhlaWdodCAtIDU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29tbUNvbnRlbnRSZW5kZXIuY29tbU1hcmtSZW5kZXIgPSB7cmVuZGVyOiBtYXAuY29tbU1hcmtSZW5kZXIsIHBvczogbWFwLmNvbW1NYXJrUG9zfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgIH1cblxufVxuIiwiaW1wb3J0IHtcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRGYWN0b3J5LFxuICAgIExlYWZFbGVtZW50LFxuICAgIHJlYWRFbGVtZW50UHJvcHMsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0NvbW1Qcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7UmVuZGVyQ29udGV4dFR5cGV9IGZyb20gXCIuLi8uLi9yZW5kZXItY29udGV4dFwiO1xuaW1wb3J0IHtJUmVuZGVyRGF0YSwgTGVhZlJlbmRlck9iamVjdCwgUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuXG5leHBvcnQgY2xhc3MgQ29tbWVudEVsZW1lbnQgZXh0ZW5kcyBMZWFmRWxlbWVudDxDb21tUHJvcHM+IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2NvbW0nKTtcbiAgICAgICAgdGhpcy5pc0RlY29yYXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXNhYmxlQ2xpY2sgPSB0cnVlO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IENvbW1Qcm9wcygpO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdChvcHRpb25zOiBWaWV3T3B0aW9ucywgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IHJlbmRlciA9IG5ldyBDb21tZW50UmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IDA7XG4gICAgICAgIHJlbmRlci5yZWN0LmhlaWdodCA9IDE0O1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB8IG51bGwge1xuICAgICAgICBpZiAodGhpcy5pc0RlY29yYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKHZpZXdPcHRpb25zKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvbmUoKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IENvbW1lbnRFbGVtZW50KCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tbWVudFJlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Q8Q29tbWVudEVsZW1lbnQ+IHtcbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFlLmRvY0N0eC52aWV3T3B0aW9ucy5zaG93UmV2aWV3V2luZG93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYUxpbmVQb3MgPSBFbGVtZW50VXRpbC5nZXRQYXJhTGluZVBvcyh0aGlzLCB7eDogZS5wb3NpdGlvbi54LCB5OiBlLnBvc2l0aW9uLnl9KTtcbiAgICAgICAgY29uc3QgY29sb3IgPSAnI2ZmNGQ0Zic7XG4gICAgICAgIGUucmVuZGVyLmNvbnRlbnRDb250ZXh0LmZpbGxSZWN0KGUucG9zaXRpb24ueCAtIDEsIHBhcmFMaW5lUG9zLnksIDIsIHBhcmFMaW5lUG9zLmhlaWdodCwgY29sb3IpXG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgQ29tbWVudFJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21tZW50RmFjdG9yeSBleHRlbmRzIEVsZW1lbnRGYWN0b3J5PENvbW1Qcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJjb21tXCI7XG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPENvbW1Qcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IENvbW1lbnRFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBDb21tUHJvcHM7XG4gICAgICAgIGVsZS5wcm9wcy5pZCA9IHByb3BzLmlkO1xuICAgICAgICBlbGUucHJvcHMubWFya1R5cGUgPSBwcm9wcy5tYXJrVHlwZTtcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG59XG4iLCJpbXBvcnQge1ZpZXdPcHRpb25zLCBFbGVtZW50LCBTZXJpYWxpemVQcm9wcywgUG9zaXRpb24sIFJlY3R9IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtUZXh0UHJvcHMsIFZhbGlkYXRlUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7Q29tbUNvbnRlbnRCYXNlRWxlbWVudCwgQ29tbUNvbnRlbnRCYXNlUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9jb21tZW50LWNvbnRlbnQtaW1wbFwiO1xuaW1wb3J0IHtQYXJhZ3JhcGhFbGVtZW50fSBmcm9tIFwiLi4vcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHtUZXh0R3JvdXBFbGVtZW50fSBmcm9tIFwiLi4vdGV4dC90ZXh0LWltcGxcIjtcbmltcG9ydCB7RG9jdW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuLi9kb2N1bWVudC9kb2MtaW1wbFwiO1xuXG4vKipcbiAqIOaVsOaNruWFg+mqjOivgeaPkOekulxuICovXG5leHBvcnQgY2xhc3MgVmFsaWRhdGVFbGVtZW50IGV4dGVuZHMgQ29tbUNvbnRlbnRCYXNlRWxlbWVudDxWYWxpZGF0ZVByb3BzPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCd2YWxpZGF0ZScpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IFZhbGlkYXRlUHJvcHMoKTtcbiAgICAgICAgdGhpcy5pc0RlY29yYXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3Qob3B0aW9uczogVmlld09wdGlvbnMsIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBSZW5kZXJPYmplY3QgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IFZhbGlkYXRlUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucGFkZGluZy5sZWZ0ID0gMTQ7XG4gICAgICAgIHJlbmRlci5wYWRkaW5nLnRvcCA9IDI0O1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB8IG51bGwge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHNldENvbnRlbnQoY29udGVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJJdGVtcygpO1xuICAgICAgICBjb25zdCBwYXJhID0gbmV3IFBhcmFncmFwaEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KCk7XG4gICAgICAgIHRleHQucHJvcHMuZm9udFNpemUgPSAxNDtcbiAgICAgICAgdGV4dC5wcm9wcy5mb250TmFtZSA9ICfnrYnnur8nO1xuICAgICAgICB0ZXh0LnByb3BzLmNvbG9yID0gJyMwMDAwMDAnXG4gICAgICAgIHRleHQudGV4dCA9IGNvbnRlbnQ7XG4gICAgICAgIHBhcmEuYWRkQ2hpbGQodGV4dCk7XG4gICAgICAgIHRoaXMuYWRkQ2hpbGQocGFyYSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGVSZW5kZXJPYmplY3QgZXh0ZW5kcyBDb21tQ29udGVudEJhc2VSZW5kZXJPYmplY3Q8VmFsaWRhdGVFbGVtZW50PiB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGxldCBib3JkZXJDb2xvciA9IHRoaXMuZWxlbWVudC5mb2N1cyA/ICcjZmE4YzE2JyA6ICcjZmZkNTkxJztcbiAgICAgICAgZS5yZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChlLnBvc2l0aW9uLngsIGUucG9zaXRpb24ueSwgdGhpcy5yZWN0LndpZHRoLCB0aGlzLnJlY3QuaGVpZ2h0LCBib3JkZXJDb2xvcik7XG4gICAgICAgIGUucmVuZGVyLmNvbnRlbnRDb250ZXh0LmZpbGxSZWN0KGUucG9zaXRpb24ueCwgZS5wb3NpdGlvbi55LCA4LCB0aGlzLnJlY3QuaGVpZ2h0LCAnIzg3MTQwMCcpXG4gICAgICAgIGNvbnN0IGRvY1JlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcih0aGlzLmNvbW1NYXJrUmVuZGVyLnJlbmRlciwgRG9jdW1lbnRSZW5kZXJPYmplY3QpIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICAvL+iOt+WPluWuoemYheagh+iusOeahOe7mOWItuWdkOagh1xuICAgICAgICBsZXQgY29tbU1hcmtQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKHRoaXMuY29tbU1hcmtSZW5kZXIucmVuZGVyLCB7XG4gICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgeTogLWUuZG9jQ3R4LnZpZXdPcHRpb25zLnRyYW5zbGF0ZVlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbW1NYXJrTGluZVBvcyA9IEVsZW1lbnRVdGlsLmdldFBhcmFMaW5lUG9zKHRoaXMuY29tbU1hcmtSZW5kZXIucmVuZGVyLCBjb21tTWFya1Bvcyk7XG4gICAgICAgIGNvbW1NYXJrUG9zLnkgPSBjb21tTWFya0xpbmVQb3MueSArIDI7XG5cbiAgICAgICAgY29uc3QgZG9jUmVuZGVyUG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhkb2NSZW5kZXIsIHt4OiAwLCB5OiAtZS5kb2NDdHgudmlld09wdGlvbnMudHJhbnNsYXRlWX0pO1xuICAgICAgICBjb25zdCBtYXJnaW5MZWZ0ID0gY29tbU1hcmtQb3MueCAtIGRvY1JlbmRlclBvcy54IC0gZG9jUmVuZGVyLnBhZGRpbmcubGVmdDtcbiAgICAgICAgY29uc3QgbWFyZ2luUmlnaHQgPSBlLmRvY0N0eC52aWV3T3B0aW9ucy5kb2NQYWdlU2V0dGluZ3Mud2lkdGggLSBtYXJnaW5MZWZ0IC0gZG9jUmVuZGVyLnBhZGRpbmcucmlnaHQgKiAyO1xuICAgICAgICBlLnJlbmRlci5vdmVybGF5c0NvbnRleHQuZHJhd0Rhc2hMaW5lKFtjb21tTWFya1Bvcywge1xuICAgICAgICAgICAgeDogY29tbU1hcmtQb3MueCArIG1hcmdpblJpZ2h0LFxuICAgICAgICAgICAgeTogY29tbU1hcmtQb3MueVxuICAgICAgICB9XSwgWzEsIDFdLCAncmVkJyk7XG4gICAgICAgIGUucmVuZGVyLm92ZXJsYXlzQ29udGV4dC5kcmF3RGFzaExpbmUoW3tcbiAgICAgICAgICAgIHg6IGNvbW1NYXJrUG9zLnggKyBtYXJnaW5SaWdodCxcbiAgICAgICAgICAgIHk6IGNvbW1NYXJrUG9zLnlcbiAgICAgICAgfSwgZS5wb3NpdGlvbl0sIFsxLCAxXSwgJ3JlZCcpO1xuXG4gICAgICAgIHRoaXMucmVuZGVyVGl0bGUoZS5yZW5kZXIsIGUucG9zaXRpb24pO1xuICAgIH1cblxuICAgIHJlbmRlclRpdGxlKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHBvc2l0aW9uOiBQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICBjb25zdCB0b3BQYWRkaW5nID0gMjQ7XG4gICAgICAgIGNvbnN0IHRleHRQcm9wcyA9IG5ldyBUZXh0UHJvcHMoKTtcbiAgICAgICAgdGV4dFByb3BzLmZvbnRTaXplID0gMTI7XG4gICAgICAgIHRleHRQcm9wcy5mb250TmFtZSA9ICfmpbfkvZMnO1xuICAgICAgICB0ZXh0UHJvcHMuY29sb3IgPSBcInJnYigwLDAsMClcIjtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLmVsZW1lbnQucHJvcHMudGl0bGU7XG4gICAgICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IGN0eC5jb250ZW50Q29udGV4dC5tZWFzdXJlVGV4dCh0aXRsZSwgdGV4dFByb3BzKTtcbiAgICAgICAgY29uc3QgcmVjdDogUmVjdCA9IHt4OiBwb3NpdGlvbi54ICsgdGhpcy5wYWRkaW5nLmxlZnQsIHk6IHBvc2l0aW9uLnksIHdpZHRoLCBoZWlnaHQsIG1heEhlaWdodDogMCwgbWF4V2lkdGg6IDB9XG4gICAgICAgIHJlY3QueSArPSAodG9wUGFkZGluZyAtIHJlY3QuaGVpZ2h0KSAvIDI7XG4gICAgICAgIGN0eC5jb250ZW50Q29udGV4dC5kcmF3VGV4dCh0aXRsZSwgdGV4dFByb3BzLCByZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IFZhbGlkYXRlUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgY2xvbmUucGFkZGluZyA9IHRoaXMucGFkZGluZy5jbG9uZSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNsb25lLmFkZENoaWxkKHRoaXMuZ2V0Q2hpbGQoaSkuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBQb3NpdGlvbixcbiAgICByZWFkRWxlbWVudFByb3BzLFxuICAgIFJlc2l6ZUxlYWZSZW5kZXJPYmplY3QsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVtZW50QmFyY29kZVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVtZW50TGVhZn0gZnJvbSBcIi4vZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuaW1wb3J0IGJ3aXBqcyBmcm9tIFwiYndpcC1qc1wiO1xuaW1wb3J0IHt3YXRjaENoYW5nZWR9IGZyb20gXCIuLi8uLi9ub3RpZnlcIjtcblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRCYXJjb2RlIGV4dGVuZHMgRGF0YUVsZW1lbnRMZWFmPERhdGFFbGVtZW50QmFyY29kZVByb3BzPiB7XG4gICAgcmVzaXplYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBiYXJDb2RlQ2FudmFzITogSFRNTENhbnZhc0VsZW1lbnQgfCBudWxsO1xuICAgIHByaXZhdGUgY2FjaGUgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignZGF0YS1lbGUtYmFyY29kZScpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERhdGFFbGVtZW50QmFyY29kZVByb3BzKCk7XG4gICAgICAgIHRoaXMucHJvcHMud2lkdGggPSAxMDA7XG4gICAgICAgIHRoaXMucHJvcHMuaGVpZ2h0ID0gMzA7XG4gICAgICAgIHRoaXMuZm9jdXNhYmxlID0gdHJ1ZTtcbiAgICAgICAgd2F0Y2hDaGFuZ2VkKHRoaXMucHJvcHMsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KCk6IExlYWZSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgRGF0YUVsZW1lbnRCYXJjb2RlUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgICAgICByZW5kZXIucmVjdC53aWR0aCA9IHRoaXMucHJvcHMud2lkdGggKyAyO1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSB0aGlzLnByb3BzLmhlaWdodCArIDI7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKG9wdGlvbnM6IFZpZXdPcHRpb25zKTogU2VyaWFsaXplUHJvcHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRGF0YUVsZW1lbnRCYXJjb2RlKCk7XG4gICAgICAgIHRoaXMucHJvcHMuY2xvbmUoY2xvbmUucHJvcHMpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgc2V0VmFsdWUodmFsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9wcy50ZXh0ID0gdmFsO1xuICAgIH1cblxuICAgIGdldFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnRleHQ7XG4gICAgfVxuXG4gICAgZHJhd0JhcmNvZGUocmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgcG9zOiBQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLmNyZWF0ZUJhcmNvZGVDYWNoZSgpO1xuICAgICAgICByZW5kZXJDdHguY29udGVudENvbnRleHQuY3R4LmRyYXdJbWFnZSh0aGlzLmJhckNvZGVDYW52YXMgYXMgSFRNTENhbnZhc0VsZW1lbnQsIHBvcy54LCBwb3MueSwgdGhpcy5wcm9wcy53aWR0aCwgdGhpcy5wcm9wcy5oZWlnaHQpO1xuICAgIH1cblxuICAgIGNyZWF0ZUJhcmNvZGVDYWNoZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhY2hlID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmJhckNvZGVDYW52YXMpIHtcbiAgICAgICAgICAgIHRoaXMuYmFyQ29kZUNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmFyQ29kZUNhbnZhcyA9IGJ3aXBqcy50b0NhbnZhcyh0aGlzLmJhckNvZGVDYW52YXMsIHtcbiAgICAgICAgICAgIGJjaWQ6IHRoaXMucHJvcHMudHlwZSwgLy8gQmFyY29kZSB0eXBlXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnByb3BzLnRleHQgfHwgXCIwMTIzNDU2Nzg5XCIsIC8vIFRleHQgdG8gZW5jb2RlXG4gICAgICAgICAgICBoZWlnaHQ6IDEwLCAvLyBCYXIgaGVpZ2h0LCBpbiBtaWxsaW1ldGVyc1xuICAgICAgICAgICAgaW5jbHVkZXRleHQ6IHRydWUsIC8vIFNob3cgaHVtYW4tcmVhZGFibGUgdGV4dFxuICAgICAgICAgICAgdGV4dHhhbGlnbjogXCJjZW50ZXJcIiwgLy8gQWx3YXlzIGdvb2QgdG8gc2V0IHRoaXNcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRCYXJjb2RlUmVuZGVyT2JqZWN0IGV4dGVuZHMgUmVzaXplTGVhZlJlbmRlck9iamVjdCB7XG4gICAgcmVuZGVyKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJhcmNvZGVFbGUgPSB0aGlzLmVsZW1lbnQgYXMgRGF0YUVsZW1lbnRCYXJjb2RlO1xuICAgICAgICBiYXJjb2RlRWxlLmRyYXdCYXJjb2RlKGUucmVuZGVyLCBlLnBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZSA9IG5ldyBEYXRhRWxlbWVudEJhcmNvZGVSZW5kZXJPYmplY3QodGhpcy5lbGVtZW50KTtcbiAgICAgICAgY2xvbmUucmVjdCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdCh0aGlzLnJlY3QpO1xuICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuXG4gICAgcGFnZVBhaW50Q29tcGxldGVkKGU6SVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHtyZW5kZXIscG9zaXRpb246cG9zfT1lO1xuICAgICAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gdGhpcy5yZWN0O1xuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LnN0cm9rZVJlY3QocG9zLngsIHBvcy55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsICcjMTg5MGZmJywgMC41KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54LCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIHdpZHRoLCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyB3aWR0aCwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgcG9zLnkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyAoTWF0aC5mbG9vcih3aWR0aCAvIDIpKSwgcG9zLnkgKyBoZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLngsIHBvcy55ICsgKE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpKTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgd2lkdGgsIHBvcy55ICsgKE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZHJhd1Jlc2l6ZUNpcmNsZShjdHg6IFJlbmRlckNvbnRleHRUeXBlLCB4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjdHhOYXRpdmUgPSBjdHguY29udGVudENvbnRleHQuY3R4O1xuICAgICAgICBjdHhOYXRpdmUuc2F2ZSgpO1xuICAgICAgICBjdHhOYXRpdmUuZmlsbFN0eWxlID0gJyM2OWMwZmYnO1xuICAgICAgICBjdHhOYXRpdmUuYmVnaW5QYXRoKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5hcmMoeCwgeSwgTWF0aC5mbG9vcig0IC8gNSAqIDQpLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgIGN0eE5hdGl2ZS5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4TmF0aXZlLmZpbGwoKTtcbiAgICAgICAgY3R4TmF0aXZlLnJlc3RvcmUoKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50QmFyY29kZUZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxEYXRhRWxlbWVudEJhcmNvZGVQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2RhdGEtZWxlLWJhcmNvZGUnO1xuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogcmVhZEVsZW1lbnRQcm9wczxEYXRhRWxlbWVudEJhcmNvZGVQcm9wcz4sIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGUpOiBFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZWxlID0gbmV3IERhdGFFbGVtZW50QmFyY29kZSgpO1xuICAgICAgICBlbGUucHJvcHMud2lkdGggPSBkYXRhLnByb3BzPy53aWR0aCB8fCAxMDA7XG4gICAgICAgIGVsZS5wcm9wcy5oZWlnaHQgPSBkYXRhLnByb3BzPy5oZWlnaHQgfHwgMzA7XG4gICAgICAgIGVsZS5wcm9wcy50eXBlID0gZGF0YS5wcm9wcz8udHlwZSB8fCAnY29kZTEyOCc7XG4gICAgICAgIGVsZS5wcm9wcy50ZXh0ID0gZGF0YS5wcm9wcz8udGV4dCB8fCAnJztcbiAgICAgICAgcmV0dXJuIGVsZTtcbiAgICB9XG59XG4iLCJpbXBvcnQge1xuICAgIERvY01vZGUsXG4gICAgRWxlbWVudCxcbiAgICBFbGVtZW50RmFjdG9yeSxcbiAgICBMZWFmRWxlbWVudCxcbiAgICByZWFkRWxlbWVudFByb3BzLFxuICAgIFNlcmlhbGl6ZVByb3BzLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuLi8uLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHtDb250ZXh0TWVudUVsZW1lbnRFdmVudCwgRWxlbWVudEV2ZW50fSBmcm9tIFwiLi4vLi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZUNoZWNrUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7SVJlbmRlckRhdGEsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4uLy4uL3JlbmRlci1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRMZWFmfSBmcm9tIFwiLi9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudENoZWNrIGV4dGVuZHMgRGF0YUVsZW1lbnRMZWFmPERhdGFFbGVDaGVja1Byb3BzPiB7XG4gICAgLy9wcm9wczogRGF0YUVsZUNoZWNrUHJvcHM7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWVsZS1jaGVjaycpO1xuICAgICAgICB0aGlzLmN1cnNvclR5cGUgPSAnZGVmYXVsdCdcbiAgICAgICAgdGhpcy5wcm9wcyA9IG5ldyBEYXRhRWxlQ2hlY2tQcm9wcygpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50PENvbnRleHRNZW51RWxlbWVudEV2ZW50PignRWxlbWVudENvbnRleHRNZW51JywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGljb246ICdTZXR0aW5ncycsIGNhcHRpb246ICflhoXlrrnmjqfliLborr7nva4nLCBldmVudE9iajoge31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRFdmVudCgnRWxlbWVudENsaWNrJywgKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrSGFuZGxlcihldnQpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCByZW5kZXIgPSBuZXcgRGF0YUVsZW1lbnRDaGVja1JlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSB0aGlzLnByb3BzLnNpemUgKyA0O1xuICAgICAgICByZW5kZXIucmVjdC5oZWlnaHQgPSB0aGlzLnByb3BzLnNpemU7XG4gICAgICAgIHJldHVybiByZW5kZXI7XG4gICAgfVxuXG4gICAgb25DbGlja0hhbmRsZXIoZXZ0OiBFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLmVkaXRhYmxlICYmIGV2dC5jdHgudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5Gb3JtRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5aaC5p6c5b2T5YmN5piv5Y2V6YCJ5qGG5bm25LiU5b2T5YmN5bey57uP6KKr6YCJ5Lit77yM5YiZ5LiN5L2c5aSE55CGXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmdyb3VwTmFtZSAmJiAhdGhpcy5wcm9wcy5tdWx0aVNlbGVjdCAmJiB0aGlzLnByb3BzLmNoZWNrZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3BzLmNoZWNrZWQgPSAhdGhpcy5wcm9wcy5jaGVja2VkO1xuICAgICAgICBjb25zdCBkb2NDdHggPSBldnQuY3R4O1xuICAgICAgICAvL+WkjemAieahhuWtmOWcqOe7hOaXtu+8jOW5tuS4lOS4uuWNlemAieaooeW8j+aXtlxuICAgICAgICBpZiAodGhpcy5wcm9wcy5ncm91cE5hbWUgJiYgIXRoaXMucHJvcHMubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGNrYnMgPSBkb2NDdHguZ2V0Q3VycmVudEN0eCh0aGlzKS5nZXRDaGVja0JveExpc3QodGhpcy5wcm9wcy5ncm91cE5hbWUpO1xuICAgICAgICAgICAgY2ticy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtICE9PSB0aGlzKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0VmFsdWUoIXRoaXMucHJvcHMuY2hlY2tlZClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucHJvcHMuZ2V0U2VyaWFsaXplUHJvcHModmlld09wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRGF0YUVsZW1lbnRDaGVjayB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFFbGVtZW50Q2hlY2soKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBzZXRWYWx1ZSh2YWw6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmNoZWNrZWQgPSB2YWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0cnVlVmFsdWUgPSB2YWwgPT09ICd0cnVlJztcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY2hlY2tlZCA9IHRydWVWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFZhbHVlKCk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmNoZWNrZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLmNoZWNrZWRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRDaGVja1JlbmRlck9iamVjdCBleHRlbmRzIExlYWZSZW5kZXJPYmplY3Qge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgY2xvbmUoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgY2xvbmVSZW5kZXIgPSBuZXcgRGF0YUVsZW1lbnRDaGVja1JlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3JlbmRlciwgcG9zaXRpb259ID0gZTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudCBhcyBEYXRhRWxlbWVudENoZWNrO1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LnByb3BzLm11bHRpU2VsZWN0KSB7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuZHJhd0NoZWNrQm94KHBvc2l0aW9uLnggKyAyLCBwb3NpdGlvbi55LCBlbGVtZW50LnByb3BzLnNpemUsIGVsZW1lbnQucHJvcHMuc2l6ZSwgZWxlbWVudC5wcm9wcy5jaGVja2VkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlbmRlci5jb250ZW50Q29udGV4dC5kcmF3UmFkaW9Cb3gocG9zaXRpb24ueCArIDIsIHBvc2l0aW9uLnksIGVsZW1lbnQucHJvcHMuc2l6ZSwgZWxlbWVudC5wcm9wcy5zaXplLCBlbGVtZW50LnByb3BzLmNoZWNrZWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRDaGVja0ZhY3RvcnkgZXh0ZW5kcyBFbGVtZW50RmFjdG9yeTxEYXRhRWxlQ2hlY2tQcm9wcz4ge1xuICAgIG1hdGNoKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJkYXRhLWVsZS1jaGVja1wiXG4gICAgfVxuXG4gICAgY3JlYXRlRWxlbWVudChkYXRhOiByZWFkRWxlbWVudFByb3BzPERhdGFFbGVDaGVja1Byb3BzPiwgcmVuZGVyQ3R4OiBSZW5kZXJDb250ZXh0VHlwZSk6IEVsZW1lbnQge1xuICAgICAgICBjb25zdCBwcm9wcyA9IGRhdGEucHJvcHMgYXMgRGF0YUVsZUNoZWNrUHJvcHM7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBEYXRhRWxlbWVudENoZWNrKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlRGF0YUVsZVByb3BzKGVsZS5wcm9wcywgcHJvcHMpO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxuICAgIGNyZWF0ZURhdGFFbGVQcm9wcyhkZXN0OiBEYXRhRWxlQ2hlY2tQcm9wcywgcHJvcHM6IERhdGFFbGVDaGVja1Byb3BzKTogRGF0YUVsZUNoZWNrUHJvcHMge1xuICAgICAgICBjb25zdCBkYXRhRWxlUHJvcHM6IERhdGFFbGVDaGVja1Byb3BzID0gZGVzdDtcbiAgICAgICAgRWxlbWVudFV0aWwucmVhZEVsZUJhc2VQcm9wcyhkYXRhRWxlUHJvcHMsIHByb3BzKTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMuaWQgPSBwcm9wcy5pZCA/PyBuYW5vaWQoNSk7XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5jYXB0aW9uID0gcHJvcHMuY2FwdGlvbjtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMudHlwZSA9IHByb3BzLnR5cGU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5jaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcbiAgICAgICAgZGF0YUVsZVByb3BzLnNpemUgPSBwcm9wcy5zaXplO1xuICAgICAgICBkYXRhRWxlUHJvcHMuZ3JvdXBOYW1lID0gcHJvcHMuZ3JvdXBOYW1lO1xuICAgICAgICBkYXRhRWxlUHJvcHMubXVsdGlTZWxlY3QgPSBwcm9wcy5tdWx0aVNlbGVjdCA/PyBmYWxzZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLmNoZWNrZWRWYWx1ZSA9IHByb3BzLmNoZWNrZWRWYWx1ZTtcbiAgICAgICAgcmV0dXJuIGRhdGFFbGVQcm9wcztcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7RWxlbWVudCwgRWxlbWVudEZhY3RvcnksIFNlcmlhbGl6ZVByb3BzLCBWaWV3T3B0aW9uc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVEYXRlUHJvcHN9IGZyb20gXCIuLi8uLi9lbGVtZW50LXByb3BzXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi4vLi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vLi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50U2VyaWFsaXplfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1zZXJpYWxpemVcIjtcbmltcG9ydCB7VGV4dEdyb3VwRWxlbWVudH0gZnJvbSBcIi4uL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQge0RhdGFFbGVtZW50QmFzZUZhY3RvcnksIERhdGFFbGVtZW50SW5saW5lR3JvdXAsIERhdGFFbGVtZW50UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9kYXRhLWVsZW1lbnQtYmFzZS1pbXBsXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCdcblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50RGF0ZSBleHRlbmRzIERhdGFFbGVtZW50SW5saW5lR3JvdXA8RGF0YUVsZURhdGVQcm9wcz4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignZGF0YS1lbGUtZGF0ZScpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERhdGFFbGVEYXRlUHJvcHMoKTtcbiAgICB9XG5cbiAgICBjcmVhdGVSZW5kZXJPYmplY3QoKTogUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhRWxlbWVudERhdGVSZW5kZXJPYmplY3QodGhpcyk7XG4gICAgfVxuXG4gICAgc2VyaWFsaXplKHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzICYgYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5nZXRTZXJpYWxpemVQcm9wcyh2aWV3T3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBEYXRhRWxlbWVudERhdGUge1xuICAgICAgICByZXR1cm4gc3VwZXIuY2xvbmVTZWxmKGRhdGEsIERhdGFFbGVtZW50RGF0ZSk7XG4gICAgfVxuXG5cbiAgICBzZXRWYWx1ZSh2YWw6IERhdGUgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5wcm9wcy5mb3JtYXQgPz8gJ1lZWVktTU0tREQnO1xuICAgICAgICBjb25zdCBkYXRlID0gbW9tZW50KHZhbCwgZm9ybWF0KTtcbiAgICAgICAgaWYgKCFkYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvcm1hdFN0ciA9IGRhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIGlmICh0aGlzLmdldFZhbHVlKCkgPT09IGZvcm1hdFN0cikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgdGhpcy5jbGVhcklubmVySXRlbXMoKTtcbiAgICAgICAgY29uc3QgdmFsdWVUZXh0ID0gbmV3IFRleHRHcm91cEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcm9wcy52YWx1ZVRleHRQcm9wcy5jbG9uZSh2YWx1ZVRleHQucHJvcHMpO1xuICAgICAgICB2YWx1ZVRleHQudGV4dCA9IGZvcm1hdFN0cjtcbiAgICAgICAgdGhpcy5hZGRDaGlsZCh2YWx1ZVRleHQsIHRoaXMubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMuYmVnaW5NZWFzdXJlKCk7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplU3RyaW5nKHRoaXMpXG4gICAgfVxuXG4gICAgdmFsaWRhdGUoKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlcyA9IHN1cGVyLnZhbGlkYXRlKCk7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5wcm9wcy5mb3JtYXQgPz8gJ1lZWVktTU0tREQnO1xuICAgICAgICBjb25zdCBkYXRlID0gbW9tZW50KHRoaXMuZ2V0VmFsdWUoKSwgZm9ybWF0KTtcbiAgICAgICAgaWYgKCFkYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuICfml6XmnJ/moLzlvI/kuI3mraPnoa4nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbn1cblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnREYXRlUmVuZGVyT2JqZWN0IGV4dGVuZHMgRGF0YUVsZW1lbnRSZW5kZXJPYmplY3Q8RGF0YUVsZW1lbnREYXRlPiB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogRGF0YUVsZW1lbnREYXRlKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lUmVuZGVyID0gbmV3IERhdGFFbGVtZW50RGF0ZVJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZVJlbmRlci5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY2xvbmVSZW5kZXIuYWRkQ2hpbGQodGhpcy5nZXRDaGlsZChpKS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xvbmVSZW5kZXI7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudERhdGVGYWN0b3J5IGV4dGVuZHMgRGF0YUVsZW1lbnRCYXNlRmFjdG9yeTxEYXRhRWxlRGF0ZVByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBcImRhdGEtZWxlLWRhdGVcIlxuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlRGF0ZVByb3BzO1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgRGF0YUVsZW1lbnREYXRlKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlRGF0YUVsZVByb3BzKGVsZS5wcm9wcywgcHJvcHMpO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxuICAgIGNyZWF0ZURhdGFFbGVQcm9wcyhkZXN0OiBEYXRhRWxlRGF0ZVByb3BzLCBwcm9wczogRGF0YUVsZURhdGVQcm9wcyk6IERhdGFFbGVEYXRlUHJvcHMge1xuICAgICAgICBjb25zdCBkYXRhRWxlUHJvcHM6IERhdGFFbGVEYXRlUHJvcHMgPSBkZXN0O1xuICAgICAgICBFbGVtZW50VXRpbC5yZWFkRWxlQmFzZVByb3BzKGRhdGFFbGVQcm9wcywgcHJvcHMpO1xuICAgICAgICAvL2RhdGFFbGVQcm9wcy5pZCA9IHByb3BzLmlkID8/IG5hbm9pZCg1KTtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMubmFtZSA9IHByb3BzLm5hbWU7XG4gICAgICAgIGRhdGFFbGVQcm9wcy5taW5WYWx1ZSA9IHByb3BzLm1pblZhbHVlO1xuICAgICAgICBkYXRhRWxlUHJvcHMubWF4VmFsdWUgPSBwcm9wcy5tYXhWYWx1ZTtcbiAgICAgICAgZGF0YUVsZVByb3BzLmZvcm1hdCA9IHByb3BzLmZvcm1hdDtcbiAgICAgICAgLy9kYXRhRWxlUHJvcHMuY2FwdGlvbiA9IHByb3BzLmNhcHRpb247XG4gICAgICAgIC8vZGF0YUVsZVByb3BzLnR5cGUgPSBwcm9wcy50eXBlO1xuICAgICAgICBkYXRhRWxlUHJvcHMubnVsbFRleHQgPSBwcm9wcy5udWxsVGV4dDtcbiAgICAgICAgZGF0YUVsZVByb3BzLm51bGxUZXh0UHJvcHMgPSBFbGVtZW50VXRpbC5yZWFkVGV4dFByb3BzKG51bGwsIHByb3BzLm51bGxUZXh0UHJvcHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIGRhdGFFbGVQcm9wcy52YWx1ZVRleHRQcm9wcyA9IEVsZW1lbnRVdGlsLnJlYWRUZXh0UHJvcHMobnVsbCwgcHJvcHMudmFsdWVUZXh0UHJvcHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBkYXRhRWxlUHJvcHM7XG4gICAgfVxuXG5cbn1cbiIsImltcG9ydCB7RGF0YUVsZW1lbnRCYXNlRmFjdG9yeSwgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnR9IGZyb20gXCIuL2RhdGEtZWxlbWVudC1iYXNlLWltcGxcIjtcbmltcG9ydCB7SW5saW5lR3JvdXBSZW5kZXJPYmplY3QsIElSZW5kZXJEYXRhLCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge1JlbmRlckNvbnRleHRUeXBlfSBmcm9tIFwiLi4vLi4vcmVuZGVyLWNvbnRleHRcIjtcbmltcG9ydCB7U2VyaWFsaXplUHJvcHMsIFZpZXdPcHRpb25zLCBFbGVtZW50LCBQb3NpdGlvbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVtZW50R3JvdXBQcm9wc30gZnJvbSBcIi4uLy4uL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuLi8uLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7Q29udGV4dE1lbnVFbGVtZW50RXZlbnR9IGZyb20gXCIuLi8uLi9lbGVtZW50LWV2ZW50LWRlZmluZVwiO1xuaW1wb3J0IHtFbGVtZW50U2VyaWFsaXplfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1zZXJpYWxpemVcIjtcbmltcG9ydCB7UGFyYWdyYXBoUmVuZGVyT2JqZWN0fSBmcm9tIFwiLi4vcGFyYWdyYXBoL3AtaW1wbFwiO1xuaW1wb3J0IHtDb21tb25VdGlsfSBmcm9tIFwiLi4vLi4vY29tbW9uLXV0aWxcIjtcblxuZXhwb3J0IGNsYXNzIERhdGFFbGVtZW50R3JvdXBFbGVtZW50IGV4dGVuZHMgSW5saW5lR3JvdXBJbnB1dEVsZW1lbnQ8RGF0YUVsZW1lbnRHcm91cFByb3BzPiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdkYXRhLWdyb3VwJyk7XG4gICAgICAgIHRoaXMucHJvcHMgPSBuZXcgRGF0YUVsZW1lbnRHcm91cFByb3BzKCk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnQoJ0VsZW1lbnRNb3VzZW1vdmUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTW91c2VlbnRlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEV2ZW50KCdFbGVtZW50TW91c2VMZWF2ZScsIChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNNb3VzZWVudGVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsb25lKGRhdGE6IGJvb2xlYW4pOiBFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmNsb25lU2VsZihkYXRhLCBEYXRhRWxlbWVudEdyb3VwRWxlbWVudCk7XG4gICAgfVxuXG4gICAgY3JlYXRlUmVuZGVyT2JqZWN0KG9wdGlvbnM6IFZpZXdPcHRpb25zLCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogUmVuZGVyT2JqZWN0IHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmhpZGRlbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhRWxlbWVudEdyb3VwUmVuZGVyT2JqZWN0KHRoaXMpO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZSh2aWV3T3B0aW9uczogVmlld09wdGlvbnMpOiBTZXJpYWxpemVQcm9wcyB8IG51bGwge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEdyb3VwUmVuZGVyT2JqZWN0IGV4dGVuZHMgSW5saW5lR3JvdXBSZW5kZXJPYmplY3Q8RGF0YUVsZW1lbnRHcm91cEVsZW1lbnQ+IHtcbiAgICBwYWludFBvcyE6IFBvc2l0aW9uO1xuXG5cbiAgICByZW5kZXIoZTogSVJlbmRlckRhdGEpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWludFBvcyA9IGUucG9zaXRpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDdXJyZW50UGFyYUdyb3VwUmVuZGVycygpOiBEYXRhRWxlbWVudEdyb3VwUmVuZGVyT2JqZWN0W10ge1xuICAgICAgICBjb25zdCByZW5kZXJzOiBEYXRhRWxlbWVudEdyb3VwUmVuZGVyT2JqZWN0W10gPSBbXTtcbiAgICAgICAgY29uc3QgY3VyclBhcmFSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIodGhpcywgUGFyYWdyYXBoUmVuZGVyT2JqZWN0KSBhcyBQYXJhZ3JhcGhSZW5kZXJPYmplY3Q7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5lbGVtZW50LnBhaW50UmVuZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyYVJlbmRlciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcih0aGlzLmVsZW1lbnQucGFpbnRSZW5kZXJzW2ldLCBQYXJhZ3JhcGhSZW5kZXJPYmplY3QpIGFzIFBhcmFncmFwaFJlbmRlck9iamVjdDtcbiAgICAgICAgICAgIGlmIChwYXJhUmVuZGVyID09PSBjdXJyUGFyYVJlbmRlcikge1xuICAgICAgICAgICAgICAgIHJlbmRlcnMucHVzaCh0aGlzLmVsZW1lbnQucGFpbnRSZW5kZXJzW2ldIGFzIERhdGFFbGVtZW50R3JvdXBSZW5kZXJPYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXJzO1xuICAgIH1cblxuXG4gICAgcGFnZVBhaW50Q29tcGxldGVkKGU6IElSZW5kZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtyZW5kZXIsIGRvY0N0eDoge3ZpZXdPcHRpb25zfX0gPSBlO1xuICAgICAgICBjb25zdCBjYW5QYWludCA9IHRoaXMuZWxlbWVudC5pc01vdXNlZW50ZXIgfHwgdGhpcy5lbGVtZW50LmlzRm9jdXNlZDtcbiAgICAgICAgaWYgKGNhblBhaW50ICYmIHRoaXMuZWxlbWVudC5wYWludFJlbmRlcnMuaW5kZXhPZih0aGlzKSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgY3VyclBhcmFSZW5kZXJzID0gdGhpcy5nZXRDdXJyZW50UGFyYUdyb3VwUmVuZGVycygpO1xuICAgICAgICAgICAgY29uc3QgdmVyT2Zmc2V0ID0gMztcbiAgICAgICAgICAgIGlmIChjdXJyUGFyYVJlbmRlcnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZEdyb3VwUmVuZGVyUG9zID0gY3VyclBhcmFSZW5kZXJzWzFdLnBhaW50UG9zO1xuICAgICAgICAgICAgICAgIGlmIChzZWNvbmRHcm91cFJlbmRlclBvcy54ICsgY3VyclBhcmFSZW5kZXJzWzFdLnJlY3Qud2lkdGggPiB0aGlzLnBhaW50UG9zLngpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdFBvaW50czogQXJyYXk8UG9zaXRpb24+ID0gW107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0UG9pbnRzOiBBcnJheTxQb3NpdGlvbj4gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyUGFyYVJlbmRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwUmVuZGVyID0gY3VyclBhcmFSZW5kZXJzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZW5kZXJQb3MgPSBncm91cFJlbmRlci5wYWludFBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFBvaW50cy5wdXNoKHt4OiBncm91cFJlbmRlclBvcy54LCB5OiBncm91cFJlbmRlclBvcy55IC0gdmVyT2Zmc2V0fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodFBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBncm91cFJlbmRlclBvcy54ICsgZ3JvdXBSZW5kZXIucmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBncm91cFJlbmRlclBvcy55IC0gdmVyT2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRQb2ludHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogZ3JvdXBSZW5kZXJQb3MueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBncm91cFJlbmRlclBvcy55ICsgZ3JvdXBSZW5kZXIucmVjdC5oZWlnaHQgKyB2ZXJPZmZzZXQgKiAyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0UG9pbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGdyb3VwUmVuZGVyUG9zLnggKyBncm91cFJlbmRlci5yZWN0LndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IGdyb3VwUmVuZGVyUG9zLnkgKyBncm91cFJlbmRlci5yZWN0LmhlaWdodCArIHZlck9mZnNldCAqIDJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJwUG9pbnRzMSA9IENvbW1vblV0aWwucmVzaGFycFBvaW50cyhyaWdodFBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXJwUG9pbnRzID0gQ29tbW9uVXRpbC5yZXNoYXJwUG9pbnRzKFsuLi5sZWZ0UG9pbnRzLnJldmVyc2UoKV0pO1xuICAgICAgICAgICAgICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LnN0cm9rZUxpbmVzKFsuLi5zaGFycFBvaW50cywgLi4uc2hhcnBQb2ludHMxLCBzaGFycFBvaW50c1swXV0sIDEsIHZpZXdPcHRpb25zLmRhdGFHcm91cENvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VyclBhcmFSZW5kZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclJlbiA9IGN1cnJQYXJhUmVuZGVyc1tpXTtcbiAgICAgICAgICAgICAgICByZW5kZXIub3ZlcmxheXNDb250ZXh0LnN0cm9rZVJlY3QoY3VyclJlbi5wYWludFBvcy54LCBjdXJyUmVuLnBhaW50UG9zLnkgLSB2ZXJPZmZzZXQsIGN1cnJSZW4ucmVjdC53aWR0aCwgY3VyclJlbi5yZWN0LmhlaWdodCArIHZlck9mZnNldCAqIDIsIHZpZXdPcHRpb25zLmRhdGFHcm91cENvbG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG5cbiAgICBlbmRSZW5kZXIoY3R4OiBSZW5kZXJDb250ZXh0VHlwZSwgcG9zaXRpb246IFBvc2l0aW9uKTogdm9pZCB7XG5cbiAgICB9XG5cbiAgICBjbG9uZSgpOiBSZW5kZXJPYmplY3Qge1xuICAgICAgICBjb25zdCBjbG9uZVJlbmRlciA9IG5ldyBEYXRhRWxlbWVudEdyb3VwUmVuZGVyT2JqZWN0KHRoaXMuZWxlbWVudCk7XG4gICAgICAgIGNsb25lUmVuZGVyLnJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QodGhpcy5yZWN0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjbG9uZVJlbmRlci5hZGRDaGlsZCh0aGlzLmdldENoaWxkKGkpLmNsb25lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZVJlbmRlcjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhRWxlbWVudEdyb3VwRmFjdG9yeSBleHRlbmRzIERhdGFFbGVtZW50QmFzZUZhY3Rvcnk8RGF0YUVsZW1lbnRHcm91cFByb3BzPiB7XG4gICAgbWF0Y2godHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0eXBlID09PSBcImRhdGEtZ3JvdXBcIlxuICAgIH1cblxuICAgIGNyZWF0ZUVsZW1lbnQoZGF0YTogYW55LCByZW5kZXJDdHg6IFJlbmRlckNvbnRleHRUeXBlKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5wcm9wcyBhcyBEYXRhRWxlbWVudEdyb3VwUHJvcHM7XG4gICAgICAgIGNvbnN0IGVsZSA9IG5ldyBEYXRhRWxlbWVudEdyb3VwRWxlbWVudCgpO1xuICAgICAgICBlbGUucHJvcHMuaWQgPSBwcm9wcy5pZDtcbiAgICAgICAgZWxlLnByb3BzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgICAgICBlbGUucHJvcHMuaGlkZGVuID0gQm9vbGVhbihwcm9wcy5oaWRkZW4pO1xuICAgICAgICByZXR1cm4gZWxlO1xuICAgIH1cblxufVxuXG4iLCJpbXBvcnQge1xuICAgIEVsZW1lbnQsXG4gICAgRWxlbWVudEZhY3RvcnksXG4gICAgSW1nTG9hZFN0YXR1cyxcbiAgICBMZWFmRWxlbWVudCxcbiAgICBQb3NpdGlvbixcbiAgICByZWFkRWxlbWVudFByb3BzLFxuICAgIFJlc2l6ZUxlYWZSZW5kZXJPYmplY3QsXG4gICAgU2VyaWFsaXplUHJvcHMsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVJbWFnZVByb3BzfSBmcm9tIFwiLi4vLi4vZWxlbWVudC1wcm9wc1wiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtSZW5kZXJDb250ZXh0VHlwZX0gZnJvbSBcIi4uLy4uL3JlbmRlci1jb250ZXh0XCI7XG5pbXBvcnQge0lSZW5kZXJEYXRhLCBMZWFmUmVuZGVyT2JqZWN0LCBSZW5kZXJPYmplY3R9IGZyb20gXCIuLi8uLi9yZW5kZXItZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVtZW50TGVhZn0gZnJvbSBcIi4vZGF0YS1lbGVtZW50LWJhc2UtaW1wbFwiO1xuaW1wb3J0IHtFZGl0b3JDb250ZXh0fSBmcm9tIFwiLi4vLi4vZG9jdW1lbnQtY29udGV4dFwiO1xuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRJbWFnZSBleHRlbmRzIERhdGFFbGVtZW50TGVhZjxEYXRhRWxlSW1hZ2VQcm9wcz4ge1xuICAgIC8vcHJvcHM6IERhdGFFbGVJbWFnZVByb3BzO1xuICAgIHN0YXR1czogSW1nTG9hZFN0YXR1cyA9ICdubyc7XG4gICAgcmVzaXplYWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ2RhdGEtZWxlLWltZycpO1xuICAgICAgICB0aGlzLnByb3BzID0gbmV3IERhdGFFbGVJbWFnZVByb3BzKCk7XG4gICAgICAgIC8vdGhpcy5hZGRQcm9wVmFsdWVDaGFuZ2VkU3ViKHRoaXMucHJvcHMpO1xuICAgICAgICB0aGlzLmN1cnNvclR5cGUgPSAnbW92ZSdcbiAgICAgICAgdGhpcy5mb2N1c2FibGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbmRlck9iamVjdCgpOiBMZWFmUmVuZGVyT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcmVuZGVyID0gbmV3IERhdGFJbWFnZVJlbmRlck9iamVjdCh0aGlzKTtcbiAgICAgICAgcmVuZGVyLnJlY3Qud2lkdGggPSB0aGlzLnByb3BzLndpZHRoICsgMjtcbiAgICAgICAgcmVuZGVyLnJlY3QuaGVpZ2h0ID0gdGhpcy5wcm9wcy5oZWlnaHQgKyAyO1xuICAgICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH1cblxuICAgIHNlcmlhbGl6ZShvcHRpb25zOiBWaWV3T3B0aW9ucyk6IFNlcmlhbGl6ZVByb3BzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdkYXRhLWVsZS1pbWcnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BzLmdldFNlcmlhbGl6ZVByb3BzKG9wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9uZShkYXRhOiBib29sZWFuKTogRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFFbGVtZW50SW1hZ2UoKTtcbiAgICAgICAgdGhpcy5wcm9wcy5jbG9uZShjbG9uZS5wcm9wcyk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBsb2FkSW1hZ2UoY3R4OiBFZGl0b3JDb250ZXh0KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gJ25vJykge1xuICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSAnbG9hZGluZyc7XG4gICAgICAgICAgICBjb25zdCBvbkNhbGxiYWNrID0gKHN0YXR1czogSW1nTG9hZFN0YXR1cykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHguaW1hZ2VMb2FkZXIubG9hZEltYWdlKHRoaXMucHJvcHMuc3JjLCBvbkNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBzZXRWYWx1ZSh2YWw6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5nZXRWYWx1ZSgpID09PSB2YWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3BzLnNyYyA9IHZhbCBhcyBzdHJpbmc7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc3JjO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGFJbWFnZVJlbmRlck9iamVjdCBleHRlbmRzIFJlc2l6ZUxlYWZSZW5kZXJPYmplY3Qge1xuICAgIHJlbmRlcihlOiBJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7cmVuZGVyLCBwb3NpdGlvbixkb2NDdHh9ID0gZTtcbiAgICAgICAgY29uc3QgZGF0YUltZ0VsZW1lbnQgPSB0aGlzLmVsZW1lbnQgYXMgRGF0YUVsZW1lbnRJbWFnZTtcbiAgICAgICAgY29uc3QgcGljUHJvcHMgPSBkYXRhSW1nRWxlbWVudC5wcm9wcztcbiAgICAgICAgaWYgKGRhdGFJbWdFbGVtZW50LnN0YXR1cyA9PT0gJ25vJykge1xuICAgICAgICAgICAgZGF0YUltZ0VsZW1lbnQubG9hZEltYWdlKGRvY0N0eCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGFJbWdFbGVtZW50LnN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlU291cmNlID0gZG9jQ3R4LmltYWdlTG9hZGVyLmdldEltYWdlKHBpY1Byb3BzLnNyYyk7XG4gICAgICAgICAgICBpZiAoIWltYWdlU291cmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBpY1Byb3BzLmJvcmRlciA9PT0gJ2FsbCcpIHtcbiAgICAgICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCB0aGlzLnJlY3Qud2lkdGgsIHRoaXMucmVjdC5oZWlnaHQsICdibGFjaycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVuZGVyLmNvbnRlbnRDb250ZXh0LmRyYXdJbWFnZShpbWFnZVNvdXJjZSwgMCwgMCwgaW1hZ2VTb3VyY2UubmF0dXJhbFdpZHRoLCBpbWFnZVNvdXJjZS5uYXR1cmFsSGVpZ2h0LCBwb3NpdGlvbi54ICsgMiwgcG9zaXRpb24ueSArIDIsIHBpY1Byb3BzLndpZHRoLCBwaWNQcm9wcy5oZWlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXIuZHJhd01vZGUgPT09ICd2aWV3Jykge1xuICAgICAgICAgICAgbGV0IHt4LCB5fSA9IHBvc2l0aW9uO1xuICAgICAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gdGhpcy5yZWN0O1xuICAgICAgICAgICAgY29uc3QgbGluZVdpZHRoID0gNTtcbiAgICAgICAgICAgIGNvbnN0IHBhaW50Q29sb3IgPSAnIzAwNTBiMyc7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlTGluZXMoW3t4OiB4ICsgbGluZVdpZHRoLCB5fSwge3gsIHl9LCB7eCwgeTogeSArIGhlaWdodH0sIHtcbiAgICAgICAgICAgICAgICB4OiB4ICsgbGluZVdpZHRoLFxuICAgICAgICAgICAgICAgIHk6IHkgKyBoZWlnaHRcbiAgICAgICAgICAgIH1dLCAxLCBwYWludENvbG9yKTtcbiAgICAgICAgICAgIHggPSB4ICsgd2lkdGg7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlTGluZXMoW3t4OiB4IC0gbGluZVdpZHRoLCB5fSwge3gsIHl9LCB7eCwgeTogeSArIGhlaWdodH0sIHtcbiAgICAgICAgICAgICAgICB4OiB4IC0gbGluZVdpZHRoLFxuICAgICAgICAgICAgICAgIHk6IHkgKyBoZWlnaHRcbiAgICAgICAgICAgIH1dLCAxLCBwYWludENvbG9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lKCk6IFJlbmRlck9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IERhdGFJbWFnZVJlbmRlck9iamVjdCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjbG9uZS5yZWN0ID0gRWxlbWVudFV0aWwuY2xvbmVSZWN0KHRoaXMucmVjdCk7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG5cbiAgICBwYWdlUGFpbnRDb21wbGV0ZWQoZTpJUmVuZGVyRGF0YSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgY29uc3Qge3JlbmRlcixwb3NpdGlvbjpwb3N9PWU7XG4gICAgICAgICAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB0aGlzLnJlY3Q7XG4gICAgICAgICAgICByZW5kZXIuY29udGVudENvbnRleHQuc3Ryb2tlUmVjdChwb3MueCwgcG9zLnksIHRoaXMucmVjdC53aWR0aCwgdGhpcy5yZWN0LmhlaWdodCwgJyMxODkwZmYnLCAwLjUpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLngsIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54ICsgd2lkdGgsIHBvcy55KTtcbiAgICAgICAgICAgIHRoaXMuZHJhd1Jlc2l6ZUNpcmNsZShyZW5kZXIsIHBvcy54LCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIHdpZHRoLCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIChNYXRoLmZsb29yKHdpZHRoIC8gMikpLCBwb3MueSk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCArIChNYXRoLmZsb29yKHdpZHRoIC8gMikpLCBwb3MueSArIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmRyYXdSZXNpemVDaXJjbGUocmVuZGVyLCBwb3MueCwgcG9zLnkgKyAoTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkpO1xuICAgICAgICAgICAgdGhpcy5kcmF3UmVzaXplQ2lyY2xlKHJlbmRlciwgcG9zLnggKyB3aWR0aCwgcG9zLnkgKyAoTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkcmF3UmVzaXplQ2lyY2xlKGN0eDogUmVuZGVyQ29udGV4dFR5cGUsIHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN0eE5hdGl2ZSA9IGN0eC5jb250ZW50Q29udGV4dC5jdHg7XG4gICAgICAgIGN0eE5hdGl2ZS5zYXZlKCk7XG4gICAgICAgIGN0eE5hdGl2ZS5maWxsU3R5bGUgPSAnIzY5YzBmZic7XG4gICAgICAgIGN0eE5hdGl2ZS5iZWdpblBhdGgoKTtcbiAgICAgICAgY3R4TmF0aXZlLmFyYyh4LCB5LCBNYXRoLmZsb29yKDQgLyA1ICogNCksIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgY3R4TmF0aXZlLmNsb3NlUGF0aCgpO1xuICAgICAgICBjdHhOYXRpdmUuZmlsbCgpO1xuICAgICAgICBjdHhOYXRpdmUucmVzdG9yZSgpO1xuICAgIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgRGF0YUVsZW1lbnRJbWdGYWN0b3J5IGV4dGVuZHMgRWxlbWVudEZhY3Rvcnk8RGF0YUVsZUltYWdlUHJvcHM+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+IHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wcm9wcy5zZXRQcm9wZXJ0eShrZXksIGV4dGVuZHNQcm9wc1trZXldKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7Q29tbW9uVXRpbH0gZnJvbSBcIi4vY29tbW9uLXV0aWxcIjtcbmltcG9ydCB7RG9jdW1lbnRQYWludH0gZnJvbSBcIi4vZG9jdW1lbnQtcGFpbnRcIjtcbmltcG9ydCB7U2VsZWN0aW9uUmFuZ2UsIFNlbGVjdGlvblN0YXRlfSBmcm9tIFwiLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7TGVhZkVsZW1lbnQsIFJlY3QsIEVsZW1lbnQsIFBvc2l0aW9uLCBWaWV3T3B0aW9ucywgUmVzaXplTGVhZlJlbmRlck9iamVjdCwgRG9jTW9kZX0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7XG4gICAgRHJvcEVsZW1lbnRFdmVudCxcbiAgICBFbGVtZW50RXZlbnQsXG4gICAgRXZlbnRTdGFnZSxcbiAgICBFdmVudFR5cGVzLFxuICAgIEdldFRyYWNrVGlwc0V2ZW50LFxuICAgIEdvdEN1cnNvckV2ZW50LFxuICAgIEhpdEV2ZW50SW5mbyxcbiAgICBIaXRSZWdpb24sXG4gICAgSVRyYWNrVGlwcyxcbiAgICBMb3N0Q3Vyc29yRXZlbnQsXG4gICAgTW91c2Vkb3duRWxlbWVudEV2ZW50LFxuICAgIE1vdXNlRWxlbWVudEV2ZW50XG59IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7RG9jdW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7UGljdHVyZUVsZW1lbnR9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7QnJlYWtFbGVtZW50fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge1BTeW1ib2xFbGVtZW50fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge1RhYmxlQ2VsbEVsZW1lbnQsIFRhYmxlQ2VsbFJlbmRlck9iamVjdH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtUYWJsZUVsZW1lbnR9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7VGFibGVSb3dFbGVtZW50LCBUYWJsZVJvd1JlbmRlck9iamVjdH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtCb3JkZXJUeXBlLCBCcmFuY2hSZW5kZXJPYmplY3QsIEN1cnNvclR5cGUsIExlYWZSZW5kZXJPYmplY3QsIFJlbmRlck9iamVjdH0gZnJvbSBcIi4vcmVuZGVyLWRlZmluZVwiO1xuaW1wb3J0IHtFZGl0b3JDb250ZXh0fSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQge1BhcmFncmFwaExpbmVSZWN0UmVuZGVyT2JqZWN0fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge1RleHRHcm91cEVsZW1lbnR9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7RG9jdW1lbnRIZWFkZXJSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7RG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7U3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnR9IGZyb20gXCIuL2V2ZW50LXN1YmplY3RcIjtcbmltcG9ydCB7RG9jdW1lbnRJbnB1dH0gZnJvbSBcIi4vZG9jdW1lbnQtaW5wdXQtY3Vyc29yXCI7XG5cbmludGVyZmFjZSBFZGdlUmVuZGVySW5mbyB7XG4gICAgcmVuZGVyRWxlbWVudDogRWxlbWVudCxcbiAgICByZWxhdGl2ZVBvczogUG9zaXRpb24sXG4gICAgbW91c2Vkb3duOiBib29sZWFuLFxuICAgIG1vdXNlZG93blBvcz86IFBvc2l0aW9uLFxuICAgIGJvcmRlcjogQm9yZGVyVHlwZVxufVxuXG4vKipcbiAqIOS6i+S7tuezu+e7n1xuICovXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRFdmVudCB7XG4gICAgcHJpdmF0ZSBpc21vdXNlZG93biE6IGJvb2xlYW47XG4gICAgLy/lvIDlp4vngrnlh7vml7bnmoTlhYPntKDkv6Hmga9cbiAgICBzdGFydEhpdEluZm8hOiBIaXRFdmVudEluZm8gfCBudWxsO1xuICAgIC8v5b2T5YmN5L2N572u54K55Ye755qE5YWD57Sg5L+h5oGvXG4gICAgZW5kSGl0SW5mbyE6IEhpdEV2ZW50SW5mbyB8IG51bGw7XG4gICAgLy/lvZPliY3lrprkvY3nmoTnhKbngrnlhYPntKAs5L6L5aaC5Zu+54mH562JXG4gICAgZm9jdXNlZEVsZW1lbnQhOiBMZWFmRWxlbWVudCB8IG51bGw7XG4gICAgZm9jdXNlZFJlY3QhOiBSZWN0IHwgbnVsbDtcbiAgICAvL+W9k+WJjeWFieagh+aJgOWcqOeahOWFg+e0oFxuICAgIGN1cnJlbnRNb3VzZW92ZXJSZW5kZXIhOiB7IHJlbmRlcjogUmVuZGVyT2JqZWN0LCBhYnNvbHV0ZVJlbmRlclJlY3Q6IFJlY3QgfSB8IG51bGw7XG4gICAgaGl0SW5mb0NoYW5nZWQ6IFN1YmplY3Q8eyBzdGFydEhpdEluZm86IEhpdEV2ZW50SW5mbywgZW5kSGl0SW5mbzogSGl0RXZlbnRJbmZvIH0+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjbGlja0V2ZW50OiBTdWJqZWN0PE1vdXNlRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBkYmxDbGlja0V2ZW50OiBTdWJqZWN0PE1vdXNlRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjaGFuZ2VDdXJzb3I6IFN1YmplY3Q8Q3Vyc29yVHlwZT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnRleHRNZW51OiBTdWJqZWN0PE1vdXNlRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICB0cmFja1RpcHNDaGFuZ2VkOiBTdWJqZWN0PHsgcG9zOiBQb3NpdGlvbiwgdGlwczogSVRyYWNrVGlwcyB9PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/lhYnmoIflpITkuo7ovrnmoYbnmoTnu5jliLblhYPntKBcbiAgICBlZGdlUmVuZGVySW5mbyE6IEVkZ2VSZW5kZXJJbmZvIHwgbnVsbDtcbiAgICAvL+W9k+WJjem8oOagh+aJgOWcqOeahHBhZ2UtcG9zaXRpb25cbiAgICBjdXJyZW50UG9zITogUG9zaXRpb247XG4gICAgLy/pvKDmoIfmjInkuIvnmoTkvY3nva5cbiAgICBtb3VzZWRvd25Qb3MhOiBQb3NpdGlvbjtcbiAgICBzdWJzOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XG4gICAgc2VsZWN0aW9uU3RhdGU6IFNlbGVjdGlvblN0YXRlO1xuICAgIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgcHJpdmF0ZSBkb2N1bWVudFBhaW50OiBEb2N1bWVudFBhaW50LCBwcml2YXRlIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcHJpdmF0ZSBkb2N1bWVudElucHV0OiBEb2N1bWVudElucHV0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUgPSB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyA9IHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLmJpbmRFdmVudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZEV2ZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFkZFN1YkV2ZW50KGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmNhbnZhcywgJ21vdXNlZG93bicpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlZG93bihldnQpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuYWRkU3ViRXZlbnQoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuY2FudmFzLCAnbW91c2V1cCcpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNldXAoZXZ0KTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmFkZFN1YkV2ZW50KGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmNhbnZhcywgJ2NsaWNrJykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2VDbGlja0hhbmRsZShldnQpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuYWRkU3ViRXZlbnQoZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuY2FudmFzLCAnY29udGV4dG1lbnUnKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudS5uZXh0KGV2dCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5hZGRTdWJFdmVudChmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdtb3VzZW1vdmUnKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3VzZW1vdmUoZXZ0KTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLmFkZFN1YkV2ZW50KGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmNhbnZhcywgJ2RibGNsaWNrJykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2VEYmxDbGlja0hhbmRsZShldnQpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkxlZnRFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9MZWZ0KClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vblJpZ2h0RXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvUmlnaHQoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uU2VsZWN0QWxsRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsKClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkhvbWVFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9MaW5lU3RhcnQoKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25FbmRFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9MaW5lRW5kKClcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uVXBFdmVudC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9VcE9yRG93bih0cnVlKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25Eb3duRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW92ZUN1cnNvclRvVXBPckRvd24oZmFsc2UpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgYWRkU3ViRXZlbnQoc3ViOiBTdWJzY3JpcHRpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goc3ViKTtcbiAgICB9XG5cbiAgICBjbGVhclN1YkV2ZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnMuZm9yRWFjaChpdGVtID0+IGl0ZW0udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3Vicy5sZW5ndGggPSAwO1xuICAgIH1cblxuICAgIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc3RhcnRIaXRJbmZvID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbmRIaXRJbmZvID0gbnVsbDtcbiAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudCA9IG51bGw7XG4gICAgICAgIHRoaXMuZm9jdXNlZFJlY3QgPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdXNlZG93bihldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jRXZlbnQgPSBuZXcgTW91c2VFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICB0aGlzLnNldEV2ZW50Vmlld1BvcyhldnQsIGRvY0V2ZW50KTtcbiAgICAgICAgZG9jRXZlbnQuYnV0dG9ucyA9IGV2dC5idXR0b25zO1xuICAgICAgICBkb2NFdmVudC5zaGlmdCA9IGV2dC5zaGlmdEtleTtcbiAgICAgICAgZG9jRXZlbnQuY3RybCA9IGV2dC5jdHJsS2V5O1xuICAgICAgICB0aGlzLm1vdXNlZG93blBvcyA9IHt4OiBkb2NFdmVudC5nbG9iYWxYLCB5OiBkb2NFdmVudC5nbG9iYWxZfTtcbiAgICAgICAgdGhpcy5tb3VzZWRvd25IYW5kbGUoZG9jRXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbW91c2V1cChldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jRXZlbnQgPSBuZXcgTW91c2VFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICB0aGlzLnNldEV2ZW50Vmlld1BvcyhldnQsIGRvY0V2ZW50KTtcbiAgICAgICAgZG9jRXZlbnQuc2hpZnQgPSBldnQuc2hpZnRLZXk7XG4gICAgICAgIGRvY0V2ZW50LmN0cmwgPSBldnQuY3RybEtleTtcbiAgICAgICAgdGhpcy5pc21vdXNlZG93biA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdXNlbW92ZShldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jRXZlbnQgPSBuZXcgTW91c2VFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICB0aGlzLnNldEV2ZW50Vmlld1BvcyhldnQsIGRvY0V2ZW50KTtcbiAgICAgICAgZG9jRXZlbnQuc2hpZnQgPSBldnQuc2hpZnRLZXk7XG4gICAgICAgIGRvY0V2ZW50LmN0cmwgPSBldnQuY3RybEtleTtcbiAgICAgICAgaWYgKHRoaXMubW91c2Vkb3duUG9zICYmIGRvY0V2ZW50Lmdsb2JhbFggPT09IHRoaXMubW91c2Vkb3duUG9zLnggJiYgZG9jRXZlbnQuZ2xvYmFsWSA9PT0gdGhpcy5tb3VzZWRvd25Qb3MueSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW91c2Vtb3ZlSGFuZGxlKGRvY0V2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7nvKnmlL7lgLzvvIzorr7nva7lnKjnu5jliLblr7nosaHkuIrnmoTlnZDmoIfkvY3nva5cbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICogQHBhcmFtIHZpZXdFdnRcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEV2ZW50Vmlld1BvcyhldnQ6IE1vdXNlRXZlbnQsIHZpZXdFdnQ6IEVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICB2aWV3RXZ0Lmdsb2JhbFggPSBldnQub2Zmc2V0WCAvIHRoaXMudmlld09wdGlvbnMuc2NhbGU7XG4gICAgICAgIHZpZXdFdnQuZ2xvYmFsWSA9IGV2dC5vZmZzZXRZIC8gdGhpcy52aWV3T3B0aW9ucy5zY2FsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXZUcmFja0luZm86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaYvuekuuaPkOekuuS/oeaBr1xuICAgICAqIOaYvuekuueVmeeXleaPkOekuuS/oeaBr+etiVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0VGlwcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyLnJlbmRlci5lbGVtZW50O1xuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBHZXRUcmFja1RpcHNFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIGV2ZW50LnNvdXJjZSA9IGVsZW1lbnQ7XG4gICAgICAgIERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0dldFRyYWNrVGlwcycsIGVsZW1lbnQsIGV2ZW50LCAnQnViYmxpbmcnLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIGlmIChldmVudC50cmFja1RpcHMpIHtcbiAgICAgICAgICAgIHRoaXMudHJhY2tUaXBzQ2hhbmdlZC5uZXh0KHtwb3M6IHsuLi50aGlzLmN1cnJlbnRQb3N9LCB0aXBzOiBldmVudC50cmFja1RpcHN9KTtcbiAgICAgICAgICAgIHRoaXMucHJldlRyYWNrSW5mbyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJldlRyYWNrSW5mbykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudHJhY2tUaXBzQ2hhbmdlZC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLnByZXZUcmFja0luZm8gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5rua5Yqo6KeG5Zu+55qE5pe25YCZ77yM6ZyA6KaB5omL5Yqo6Kem5Y+RbW91c2Vtb3ZlXG4gICAgICovXG4gICAgb25TY3JvbGxWaWV3KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY3VycmVudFBvcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvY0V2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWCA9IHRoaXMuY3VycmVudFBvcy54O1xuICAgICAgICBkb2NFdmVudC5nbG9iYWxZID0gdGhpcy5jdXJyZW50UG9zLnk7XG4gICAgICAgIHRoaXMubW91c2Vtb3ZlSGFuZGxlKGRvY0V2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlpITnkIbpvKDmoIfmjInkuIvkuovku7ZcbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIG1vdXNlZG93bkhhbmRsZShldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8v54K55Ye75Y+z6ZSu5pe2LOebtOaOpei/lOWbnlxuICAgICAgICBpZiAoZXZ0LmJ1dHRvbnMgPT09IDIgJiYgdGhpcy5zdGFydEhpdEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzbW91c2Vkb3duID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGFydEhpdEluZm8gPSB0aGlzLmdldEhpdEluZm8oZXZ0KTtcbiAgICAgICAgaWYgKCFFbGVtZW50VXRpbC52ZXJpZnlIaXRhYmxlKHRoaXMuc3RhcnRIaXRJbmZvPy5lbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5zdGFydEhpdEluZm8gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0SGl0SW5mbykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRFbGVtZW50ID0gdGhpcy5zdGFydEhpdEluZm8uZWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuc3dpdGNoRWxlbWVudEZvY3VzKCk7XG4gICAgICAgICAgICAvL+WmguaenOW9k+WJjemAieS4reeahOaYr+auteiQveespuWPt++8jOWImemcgOimgeaJi+WKqOWwhuWFtuWBj+enu+mHj+WumuS9jeWIsOW3pui+uVxuICAgICAgICAgICAgaWYgKHN0YXJ0RWxlbWVudCBpbnN0YW5jZW9mIFBTeW1ib2xFbGVtZW50IHx8IHN0YXJ0RWxlbWVudCBpbnN0YW5jZW9mIEJyZWFrRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRIaXRJbmZvLm9mZnNldCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL3RoaXMuc3RhcnRIaXRJbmZvLnN0YXJ0UmVnaW9uID0gdGhpcy5nZXRSZW5kZXJPYmplY3RSZWdpb24odGhpcy5zdGFydEhpdEluZm8ucmVuZGVyKTtcbiAgICAgICAgICAgIHRoaXMuZW5kSGl0SW5mbyA9IHRoaXMuc3RhcnRIaXRJbmZvO1xuICAgICAgICAgICAgY29uc3QgbW91c2Vkb3duRXZlbnQgPSBuZXcgTW91c2Vkb3duRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgIG1vdXNlZG93bkV2ZW50LnNvdXJjZSA9IHN0YXJ0RWxlbWVudDtcbiAgICAgICAgICAgIERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0VsZW1lbnRNb3VzZWRvd24nLCBzdGFydEVsZW1lbnQsIG1vdXNlZG93bkV2ZW50LCAnQWxsJywgdGhpcy5kb2NDdHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbGVhckhpdEluZm8oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lZGdlUmVuZGVySW5mbykge1xuICAgICAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mby5tb3VzZWRvd24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mby5tb3VzZWRvd25Qb3MgPSB0aGlzLmN1cnJlbnRQb3M7XG4gICAgICAgICAgICB0aGlzLmNsZWFySGl0SW5mbygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGl0SW5mb0NoYW5nZWQubmV4dCh7XG4gICAgICAgICAgICBzdGFydEhpdEluZm86IHRoaXMuc3RhcnRIaXRJbmZvIGFzIEhpdEV2ZW50SW5mbyxcbiAgICAgICAgICAgIGVuZEhpdEluZm86IHRoaXMuZW5kSGl0SW5mbyBhcyBIaXRFdmVudEluZm9cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRIaXRJbmZvID0gdGhpcy5zdGFydEhpdEluZm87XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5YWD57Sg54Sm54K554q25oCBXG4gICAgICovXG4gICAgcHJpdmF0ZSBzd2l0Y2hFbGVtZW50Rm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydEhpdEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydEVsZW1lbnQgPSB0aGlzLnN0YXJ0SGl0SW5mby5lbGVtZW50O1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkRWxlbWVudC5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkUmVjdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0RWxlbWVudCAmJiBzdGFydEVsZW1lbnQuZm9jdXNhYmxlKSB7XG4gICAgICAgICAgICBzdGFydEVsZW1lbnQuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnQgPSBzdGFydEVsZW1lbnQgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRSZWN0ID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFJlY3QodGhpcy5zdGFydEhpdEluZm8ucmVuZGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFySGl0SW5mbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdGFydEhpdEluZm8gPSBudWxsO1xuICAgICAgICB0aGlzLmVuZEhpdEluZm8gPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluW9k+WJjem8oOagh+aJgOWcqOS9jee9rueahOWFg+e0oOS/oeaBr1xuICAgICAqIEBwYXJhbSBldnRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0SGl0SW5mbyhldnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogSGl0RXZlbnRJbmZvIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGhpdERvY0luZm8gPSB0aGlzLmdldEhpdERvY1BhZ2UoZXZ0KTtcbiAgICAgICAgaWYgKCFoaXREb2NJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7ZG9jSW5kZXgsIGRvY1JlbmRlciwgaGl0UGFnZVBvc30gPSBoaXREb2NJbmZvO1xuICAgICAgICAvL+iuvue9ruaWh+aho+mhteS4reeahOebuOWvueS9jee9rlxuICAgICAgICBldnQucGFnZVggPSBoaXRQYWdlUG9zLng7XG4gICAgICAgIGV2dC5wYWdlWSA9IGhpdFBhZ2VQb3MueTtcblxuICAgICAgICBjb25zdCBoaXRJbmZvID0gdGhpcy5nZXRIaXRMZWFmUmVuZGVyKGRvY1JlbmRlciwge3g6IDAsIHk6IC1kb2NSZW5kZXIucmVjdC55fSwge1xuICAgICAgICAgICAgeDogZXZ0LnBhZ2VYLFxuICAgICAgICAgICAgeTogZXZ0LnBhZ2VZXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhpdEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBoaXRJbmZvLnJlbmRlci5lbGVtZW50IGFzIExlYWZFbGVtZW50O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGl0RG9jSW5kZXg6IGRvY0luZGV4LFxuICAgICAgICAgICAgb2Zmc2V0OiBoaXRJbmZvLm9mZnNldCxcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICByZW5kZXI6IGhpdEluZm8ucmVuZGVyLFxuICAgICAgICAgICAgcmVsYXRpdmVSZWN0OiBoaXRJbmZvLnJlbmRlci5yZWN0LFxuICAgICAgICAgICAgYWJzb2x1dGVSZWN0OiBoaXRJbmZvLmFic29sdXRlUmVuZGVyUmVjdCxcbiAgICAgICAgICAgIHNoYWRvd1JlbmRlckluZGV4OiBlbGVtZW50LnBhaW50UmVuZGVycy5pbmRleE9mKGhpdEluZm8ucmVuZGVyKSxcbiAgICAgICAgICAgIHN0YXJ0UmVnaW9uOiBFbGVtZW50VXRpbC5nZXRSZW5kZXJPYmplY3RSZWdpb24oaGl0SW5mby5yZW5kZXIpXG4gICAgICAgIH07XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1vdXNlb3ZlclJlbmRlckluZm8oZXZ0OiBNb3VzZUVsZW1lbnRFdmVudCk6IHsgcmVuZGVyOiBSZW5kZXJPYmplY3QsIGFic29sdXRlUmVuZGVyUmVjdDogUmVjdCB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGhpdERvY0luZm8gPSB0aGlzLmdldEhpdERvY1BhZ2UoZXZ0KTtcbiAgICAgICAgaWYgKCFoaXREb2NJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7ZG9jSW5kZXgsIGRvY1JlbmRlciwgcGFpbnRBYnNvbHV0ZVJlY3QsIGhpdFBhZ2VQb3N9ID0gaGl0RG9jSW5mbztcbiAgICAgICAgLy/orr7nva7mlofmoaPpobXkuK3nmoTnm7jlr7nkvY3nva5cbiAgICAgICAgZXZ0LnBhZ2VYID0gaGl0UGFnZVBvcy54O1xuICAgICAgICBldnQucGFnZVkgPSBoaXRQYWdlUG9zLnk7XG4gICAgICAgIC8vY29uc3QgZG9jUmVuZGVyUGFyZW50QWJzb2x1dGVQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKGRvY1JlbmRlci5wYXJlbnQpO1xuICAgICAgICAvL2NvbnN0IG1vdXNlb3ZlckluZm8gPSB0aGlzLmdldE1vdXNlb3ZlclJlbmRlcihkb2NSZW5kZXIsIGRvY1JlbmRlclBhcmVudEFic29sdXRlUG9zLCB7IHg6IGV2dC5nbG9iYWxYLCB5OiBldnQuZ2xvYmFsWSArIHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWSB9KTtcbiAgICAgICAgY29uc3QgbW91c2VvdmVySW5mbyA9IHRoaXMuZ2V0SGl0TGVhZlJlbmRlcihkb2NSZW5kZXIsIHtcbiAgICAgICAgICAgIHg6IC1kb2NSZW5kZXIucmVjdC54LFxuICAgICAgICAgICAgeTogLWRvY1JlbmRlci5yZWN0LnlcbiAgICAgICAgfSwge3g6IGV2dC5wYWdlWCwgeTogZXZ0LnBhZ2VZfSk7XG4gICAgICAgIHJldHVybiBtb3VzZW92ZXJJbmZvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOm8oOagh+enu+WKqOS6i+S7tlxuICAgICAqIOS4u+imgeWkhOeQhumAieWMuuaUueWPmFxuICAgICAqL1xuICAgIHByaXZhdGUgbW91c2Vtb3ZlSGFuZGxlKGV2dDogTW91c2VFbGVtZW50RXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy9jb25zb2xlLnRpbWUoJ21vdXNlbW92ZeiuoeaXticpXG4gICAgICAgIGxldCBlZGdlUmVuZGVySW5mbzogbnVsbCB8IHR5cGVvZiB0aGlzLmVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICAgICAgY29uc3QgbW91c2VQb3M6IFBvc2l0aW9uID0ge3g6IGV2dC5nbG9iYWxYLCB5OiBldnQuZ2xvYmFsWX07XG4gICAgICAgIGxldCBjdXJzb3JUeXBlOiBDdXJzb3JUeXBlID0gJ3RleHQnO1xuICAgICAgICB0aGlzLmN1cnJlbnRQb3MgPSBtb3VzZVBvcztcbiAgICAgICAgaWYgKHRoaXMuaXNtb3VzZWRvd24gJiYgdGhpcy5zdGFydEhpdEluZm8pIHtcbiAgICAgICAgICAgIHRoaXMuZW5kSGl0SW5mbyA9IHRoaXMuZ2V0SGl0SW5mbyhldnQpO1xuICAgICAgICAgICAgLy/lj6rmnInpvKDmoIfmjInkuIvnmoTml7blgJnpnIDopoHlj5HluIPkuovku7ZcbiAgICAgICAgICAgIHRoaXMucHViSGl0SW5mbygpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJNb3VzZW92ZXJSZW5kZXJJbmZvID0gdGhpcy5nZXRNb3VzZW92ZXJSZW5kZXJJbmZvKGV2dCk7XG4gICAgICAgIC8v5paw5pen5L+h5oGv5LiN5LiA6Ie0LOmcgOimgeagoemqjOe7mOWItuWMuuWfn++8jOinpuWPkW1vdXNlZW50ZXLjgIFtb3VzZWxlYXZl562J5LqL5Lu2XG4gICAgICAgIHRoaXMuaW52b2tlTW91c2Vtb3ZlRXZlbnQodGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5yZW5kZXIsIGN1cnJNb3VzZW92ZXJSZW5kZXJJbmZvPy5yZW5kZXIsIG1vdXNlUG9zKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyID0gY3Vyck1vdXNlb3ZlclJlbmRlckluZm87XG4gICAgICAgIC8v5b2T5YmN5pyJ5YWD57Sg5pyJ54Sm54K55pe277yM6ZyA6KaB6aaW5YWI5Yik5pat5b2T5YmN5L2N572u5piv5ZCm5Zyo54Sm54K55YWD57Sg5LiKXG4gICAgICAgIC8v5aaC5p6c5Y2V5YWD5qC85Lit5YyF5ZCr5Zu+54mH562J5Y+v57yp5pS+55qE5YWD57Sg77yM5bm25LiU5YWD57Sg55qE5aSn5bCP6LaF6L+H5Y2V5YWD5qC877yM5YiZ5b2T5YmN5Zu+54mH55qE5p+Q5LiA6YOo5YiG5bCx5peg5rOV57yp5pS+XG4gICAgICAgIGlmICghdGhpcy5pc21vdXNlZG93biAmJiB0aGlzLmZvY3VzZWRFbGVtZW50ICYmIHRoaXMuZm9jdXNlZFJlY3QgJiYgKDxhbnk+dGhpcy5mb2N1c2VkRWxlbWVudClbJ3Jlc2l6ZWFibGUnXSkge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRpdmVQb3M6IFBvc2l0aW9uID0ge3g6IG1vdXNlUG9zLnggLSB0aGlzLmZvY3VzZWRSZWN0LngsIHk6IG1vdXNlUG9zLnkgLSB0aGlzLmZvY3VzZWRSZWN0Lnl9O1xuICAgICAgICAgICAgY29uc3QgaXNJbkNlbGxCb3JkZXIgPSBDb21tb25VdGlsLmlzSW5QaWN0dXJlUmVzaXplUG9pbnQodGhpcy5mb2N1c2VkUmVjdCwgcmVsYXRpdmVQb3MsIDQpO1xuICAgICAgICAgICAgaWYgKGlzSW5DZWxsQm9yZGVyKSB7XG4gICAgICAgICAgICAgICAgY3Vyc29yVHlwZSA9IEVsZW1lbnRVdGlsLmdldEJvcmRlckN1cnNvcihpc0luQ2VsbEJvcmRlci5ib3JkZXJUeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNJbkNlbGxCb3JkZXI/LmJvcmRlclR5cGUgPT09ICdub25lJykge1xuICAgICAgICAgICAgICAgICAgICBlZGdlUmVuZGVySW5mbyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWRnZVJlbmRlckluZm8gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJFbGVtZW50OiB0aGlzLmZvY3VzZWRFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQb3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZWRvd246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBpc0luQ2VsbEJvcmRlci5ib3JkZXJUeXBlXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9Ly/lvZPliY3pvKDmoIfkuI3lpITkuo5tb3VzZWRvd27lubbkuJTpvKDmoIfkvY3kuo7ljZXlhYPmoLzovrnnlYzml7Ys6I635Y+W6L6555WM5L+h5oGvXG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLmlzbW91c2Vkb3duICYmIHRoaXMuaXNJbkNlbGxSZW5kZXJPYmplY3QodGhpcy5jdXJyZW50TW91c2VvdmVyUmVuZGVyPy5yZW5kZXIpKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcj8ucmVuZGVyIGFzIFJlbmRlck9iamVjdCwgVGFibGVDZWxsUmVuZGVyT2JqZWN0KSBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAvL2NvbnN0IGNlbGxSZW5kZXIgPSB0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXI/LnJlbmRlciBhcyBUYWJsZUNlbGxSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICAvL2NvbnN0IHsgcmVuZGVyOiB7IHJlbmRlclBvc2l0aW9uOiB7IHg6IHJ4LCB5OiByeSB9IH0gfSA9IHRoaXMuY3VycmVudE1vdXNlb3ZlclJlbmRlcjtcbiAgICAgICAgICAgIC8vY29uc3QgcnAgPSB0aGlzLmN1cnJlbnRNb3VzZW92ZXJSZW5kZXI/LmFic29sdXRlUmVuZGVyUmVjdCBhcyBSZWN0O1xuICAgICAgICAgICAgY29uc3QgcnAgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UmVjdChjZWxsUmVuZGVyKTtcbiAgICAgICAgICAgIHJwLnkgLT0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZO1xuICAgICAgICAgICAgY29uc3QgcmVsYXRpdmVQb3M6IFBvc2l0aW9uID0ge3g6IG1vdXNlUG9zLnggLSBycC54LCB5OiBtb3VzZVBvcy55IC0gcnAueX07XG4gICAgICAgICAgICBjb25zdCBpc0luQ2VsbEJvcmRlciA9IENvbW1vblV0aWwuaXNJblJlY3RCb3JkZXIoY2VsbFJlbmRlci5yZWN0LCAyLCByZWxhdGl2ZVBvcyk7XG4gICAgICAgICAgICBpZiAoaXNJbkNlbGxCb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCfmmK/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+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBhcnJheSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBuZXcgTG9zdEN1cnNvckV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LnNvdXJjZSA9IGZvY3VzRWxlbWVudDtcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LmN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LmN0eCA9IHRoaXMuZG9jQ3R4O1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuaW52b2tlRXZlbnQoZXZlbnROYW1lLCBtb3VzZUV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbG9vcEludm9rZUV2ZW50KCdMb3N0Q3Vyc29yJywgbGVhdmVQYXJlbnRzKTtcbiAgICAgICAgbG9vcEludm9rZUV2ZW50KCdHb3RDdXJzb3InLCBlbnRlclBhcmVudHMpO1xuXG4gICAgICAgIHRoaXMucHJldkN1cnNvckl0ZW1zID0gbmV3UGFyZW50cztcbiAgICAgICAgLy9kRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnR290Q3Vyc29yJywgZm9jdXNFbGVtZW50LCBnZXRDdXJzb3JFdmVudCwgJ0FsbCcsIHRoaXMuZG9jQ3R4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBtb3VzZWRvd24tbW91c2V1cC1jbGlja1xuICAgICAqL1xuICAgIHByaXZhdGUgbW91c2VDbGlja0hhbmRsZShldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudmlld09wdGlvbnMuZG9jTW9kZSA9PT0gRG9jTW9kZS5WaWV3KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhcnRIaXRJbmZvICYmIHRoaXMuZW5kSGl0SW5mbyAmJiB0aGlzLnN0YXJ0SGl0SW5mby5lbGVtZW50ID09PSB0aGlzLmVuZEhpdEluZm8uZWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRFbGVtZW50ID0gdGhpcy5zdGFydEhpdEluZm8ucmVuZGVyLmVsZW1lbnQgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBtb3VzZWRvd25FdmVudCA9IG5ldyBNb3VzZWRvd25FbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgbW91c2Vkb3duRXZlbnQuc291cmNlID0gc3RhcnRFbGVtZW50O1xuICAgICAgICAgICAgRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnRWxlbWVudENsaWNrJywgc3RhcnRFbGVtZW50LCBtb3VzZWRvd25FdmVudCwgXCJBbGxcIiwgdGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgLy90aGlzLnJlZnJlc2hEb2N1bWVudCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBjb2xsYXBzZWR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKGNvbGxhcHNlZCAmJiB0aGlzLnN0YXJ0SGl0SW5mbyAmJiBzdGFydENvbnRyb2wgJiYgdGhpcy5zdGFydEhpdEluZm8uZWxlbWVudCA9PT0gdGhpcy5mb2N1c2VkRWxlbWVudCkge1xuICAgICAgICAgICAgLy9jb25zdCB7IHJlbmRlcjogeyBlbGVtZW50OiBlbmRFbGVtZW50IH0sIG9mZnNldDogZW5kRWxlbWVudE9mZnNldCB9ID0gdGhpcy5lbmRIaXRJbmZvO1xuICAgICAgICAgICAgLy/lvZPliY3nhKbngrnlhYPntKDooqvmi5bmlL5cbiAgICAgICAgICAgIGlmICh0aGlzLmZvY3VzZWRFbGVtZW50IGluc3RhbmNlb2YgUGljdHVyZUVsZW1lbnQgJiYgdGhpcy5mb2N1c2VkRWxlbWVudCAhPT0gc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHJvcEV2ZW50ID0gbmV3IERyb3BFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgICAgIGRyb3BFdmVudC5zb3VyY2UgPSBzdGFydENvbnRyb2w7XG4gICAgICAgICAgICAgICAgZHJvcEV2ZW50LnNvdXJjZU9mZnNldCA9IHN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgICAgIGRyb3BFdmVudC5kcmFnRWxlbWVudCA9IHRoaXMuZm9jdXNlZEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0VsZW1lbnREcm9wJywgc3RhcnRDb250cm9sLCBkcm9wRXZlbnQsICdBbGwnLCB0aGlzLmRvY0N0eCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRvY0N0eC5kb2NDaGFuZ2UubW92ZUVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgdGhpcy5mb2N1c2VkRWxlbWVudCwgdGhpcy5zdGFydEhpdEluZm8ub2Zmc2V0LCB0aGlzLnNlbGVjdGlvblN0YXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50LmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZFJlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsaWNrRXZlbnQubmV4dChldnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOm8oOagh+WPjOWHu+S6i+S7tlxuICAgICAqL1xuICAgIHByaXZhdGUgbW91c2VEYmxDbGlja0hhbmRsZShldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZG9jRXZlbnQgPSBuZXcgTW91c2VFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICB0aGlzLnNldEV2ZW50Vmlld1BvcyhldnQsIGRvY0V2ZW50KTtcbiAgICAgICAgLy/pnIDopoHlhYjlpITnkIbmmK/lkKblvIDlkK/pobXnnInpobXohJrnvJbovpHlip/og71cbiAgICAgICAgY29uc3QgaGl0UmVnaW9uID0gdGhpcy5nZXRIaXRSZWdpb24oZG9jRXZlbnQpO1xuICAgICAgICBpZiAoKGhpdFJlZ2lvbiA9PT0gJ2Zvb3RlcicgfHwgaGl0UmVnaW9uID09PSAnaGVhZGVyJykgJiYgIXRoaXMuZG9jQ3R4LmRvY3VtZW50LmhlYWRlckVkaXRTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQuc3dpdGNoUGFnZUhlYWRlckVkaXRvcih0aGlzLnNlbGVjdGlvblN0YXRlLCBudWxsKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChoaXRSZWdpb24gPT09ICdib2R5JyAmJiB0aGlzLmRvY0N0eC5kb2N1bWVudC5oZWFkZXJFZGl0U3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LnN3aXRjaFBhZ2VIZWFkZXJFZGl0b3IodGhpcy5zZWxlY3Rpb25TdGF0ZSwgbnVsbCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGl0SW5mbyA9IHRoaXMuZ2V0SGl0SW5mbyhkb2NFdmVudCk7XG4gICAgICAgIGlmIChoaXRJbmZvKSB7XG4gICAgICAgICAgICBkb2NFdmVudC5zb3VyY2UgPSBoaXRJbmZvLmVsZW1lbnQ7XG4gICAgICAgICAgICBkb2NFdmVudC5zb3VyY2VSZW5kZXIgPSBoaXRJbmZvLnJlbmRlcjtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0VsZW1lbnREYmxDbGljaycsIGhpdEluZm8uZWxlbWVudCwgZG9jRXZlbnQsICdBbGwnLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRibENsaWNrRXZlbnQubmV4dChldnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W54K55Ye755qE5riy5p+T5YWD57Sg5a+56LGhXG4gICAgICogQHBhcmFtIHJlbmRlck9iamVjdFxuICAgICAqIEBwYXJhbSBwYXJQb3NcbiAgICAgKiBAcGFyYW0gaGl0UG9zXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEhpdExlYWZSZW5kZXIocmVuZGVyT2JqZWN0OiBSZW5kZXJPYmplY3QsIHBhclBvczogUG9zaXRpb24sIGhpdFBvczogUG9zaXRpb24pOiB7IHJlbmRlcjogTGVhZlJlbmRlck9iamVjdCwgb2Zmc2V0OiBudW1iZXIsIGFic29sdXRlUmVuZGVyUmVjdDogUmVjdCB9IHwgbnVsbCB7XG4gICAgICAgIC8v5aSE55CG5Y2V5YWD5qC85ZCI5bm277yM6KKr5ZCI5bm255qE5Y2V5YWD5qC85b2T5YmN5bGe5LqO6KKr6ZqQ6JeP54q25oCBLOS4jeiDveiiq+mAieaLqVxuICAgICAgICAvL2lmIChyZW5kZXJPYmplY3QuZWxlbWVudCAmJiByZW5kZXJPYmplY3QuZWxlbWVudC52aXNpYWJsZSA9PT0gZmFsc2UgfHwgcmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgRmlsbE51bGxTcGFjZVJlbmRlck9iamVjdCkge1xuICAgICAgICBpZiAoIUVsZW1lbnRVdGlsLmNoZWNrQXZhaWxIaXRSZW5kZXIocmVuZGVyT2JqZWN0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZW5kZXJPYmplY3QucmVjdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZW5kZXJPYmplY3QucmVjdCBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW5kZXJPYmplY3RSZWN0OiBSZWN0ID0ge1xuICAgICAgICAgICAgeDogcGFyUG9zLnggKyByZW5kZXJPYmplY3QucmVjdC54LFxuICAgICAgICAgICAgeTogcGFyUG9zLnkgKyByZW5kZXJPYmplY3QucmVjdC55LFxuICAgICAgICAgICAgd2lkdGg6IHJlbmRlck9iamVjdC5yZWN0LndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiByZW5kZXJPYmplY3QucmVjdC5oZWlnaHQsXG4gICAgICAgICAgICBtYXhXaWR0aDogMCxcbiAgICAgICAgICAgIG1heEhlaWdodDogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVuZGVyT2JqZWN0IGluc3RhbmNlb2YgVGFibGVSb3dSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRSb3dIaXRMZWFmUmVuZGVyKHJlbmRlck9iamVjdCwgcGFyUG9zLCBoaXRQb3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoQ29tbW9uVXRpbC5pc0luc2lkZVJlY3RCeVBvc2l0aW9uKHJlbmRlck9iamVjdFJlY3QsIGhpdFBvcykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4ID0gaGl0UG9zLnggLSByZW5kZXJPYmplY3RSZWN0Lng7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gRWxlbWVudFV0aWwuZ2V0SGl0UmVuZGVyT2Zmc2V0KHJlbmRlck9iamVjdCwgeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyOiByZW5kZXJPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVSZW5kZXJSZWN0OiByZW5kZXJPYmplY3RSZWN0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBCcmFuY2hSZW5kZXJPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChDb21tb25VdGlsLmlzSW5zaWRlUmVjdEJ5UG9zaXRpb24ocmVuZGVyT2JqZWN0UmVjdCwgaGl0UG9zKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyT2JqZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVuZGVyID0gcmVuZGVyT2JqZWN0LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldEhpdExlYWZSZW5kZXIoY2hpbGRSZW5kZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHJlbmRlck9iamVjdFJlY3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHJlbmRlck9iamVjdFJlY3QueVxuICAgICAgICAgICAgICAgICAgICB9LCBoaXRQb3MpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8v5aaC5p6c5b2T5YmN6IyD5Zu05pyq5Ye75Lit5Lu75L2V5YWD57Sg77yM5YiZ6ZyA6KaB5Yy56YWN5pyA6L+R55qE5YWD57SgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjZW50SGl0UmVuZGVyKHJlbmRlck9iamVjdCwgcGFyUG9zLCBoaXRQb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgZ2V0VFJvd0hpdExlYWZSZW5kZXIocmVuZGVyT2JqZWN0OiBUYWJsZVJvd1JlbmRlck9iamVjdCwgcGFyZW50OiBQb3NpdGlvbiwgcG9zaXRpb246IFBvc2l0aW9uKTogeyByZW5kZXI6IExlYWZSZW5kZXJPYmplY3QsIG9mZnNldDogbnVtYmVyLCBhYnNvbHV0ZVJlbmRlclJlY3Q6IFJlY3QgfSB8IG51bGwge1xuICAgICAgICBjb25zdCByb3dFbGUgPSByZW5kZXJPYmplY3QuZWxlbWVudCBhcyBUYWJsZVJvd0VsZW1lbnQ7XG4gICAgICAgIC8v6Leo6aG16YeN5aSN5pi+56S655qE5aS06KGM77yM5bGe5LqO5LiN5Y+v54K55Ye75Yy65Z+fXG4gICAgICAgIC8v5Y+q5pyJ6KGo56ys5LiA6aG16YOo5YiG5Y+v5Lul54K55Ye7XG4gICAgICAgIGlmIChyb3dFbGUucHJvcHMuaGVhZGVyUm93KSB7XG4gICAgICAgICAgICBpZiAocm93RWxlLnBhaW50UmVuZGVycy5pbmRleE9mKHJlbmRlck9iamVjdCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVuZGVyT2JqZWN0UmVjdDogUmVjdCA9IHtcbiAgICAgICAgICAgIHg6IHBhcmVudC54ICsgcmVuZGVyT2JqZWN0LnJlY3QueCxcbiAgICAgICAgICAgIHk6IHBhcmVudC55ICsgcmVuZGVyT2JqZWN0LnJlY3QueSxcbiAgICAgICAgICAgIHdpZHRoOiByZW5kZXJPYmplY3QucmVjdC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogcmVuZGVyT2JqZWN0LnJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgbWF4V2lkdGg6IDAsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJPYmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVuZGVyID0gcmVuZGVyT2JqZWN0LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRIaXRMZWFmUmVuZGVyKGNoaWxkUmVuZGVyLCB7eDogcmVuZGVyT2JqZWN0UmVjdC54LCB5OiByZW5kZXJPYmplY3RSZWN0Lnl9LCBwb3NpdGlvbik7XG4gICAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWmguaenOW9k+WJjeiMg+WbtOacquWHu+S4reS7u+S9leWFg+e0oO+8jOWImemcgOimgeWMuemFjeacgOi/keeahOWFg+e0oFxuICAgICAqIEBwYXJhbSByZW5kZXJPYmplY3RcbiAgICAgKiBAcGFyYW0gcGFyZW50XG4gICAgICogQHBhcmFtIHBvc2l0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRSZWNlbnRIaXRSZW5kZXIocmVuZGVyT2JqZWN0OiBCcmFuY2hSZW5kZXJPYmplY3QsIHBhcmVudDogUG9zaXRpb24sIHBvc2l0aW9uOiBQb3NpdGlvbik6IHsgcmVuZGVyOiBMZWFmUmVuZGVyT2JqZWN0LCBvZmZzZXQ6IG51bWJlciwgYWJzb2x1dGVSZW5kZXJSZWN0OiBSZWN0IH0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgY3VycmVudFJlbmRlclBvczogUG9zaXRpb24gPSB7eDogcmVuZGVyT2JqZWN0LnJlY3QueCArIHBhcmVudC54LCB5OiByZW5kZXJPYmplY3QucmVjdC55ICsgcGFyZW50Lnl9XG4gICAgICAgIGxldCBjaGlsZFJlbmRlcnMgPSBFbGVtZW50VXRpbC5nZXRBdmFpbEhpdFJlbmRlck9iamVjdHMocmVuZGVyT2JqZWN0LCBwYXJlbnQpO1xuICAgICAgICBjaGlsZFJlbmRlcnMgPSBjaGlsZFJlbmRlcnMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0ucmVuZGVyLmRpc2FibGVDbGljayk7XG4gICAgICAgIGxldCBjaGlsZHJlblJlbmRlck1hcCA9IGNoaWxkUmVuZGVycy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgICAgcmVjdDogaXRlbS5yZWN0LFxuICAgICAgICAgICAgZGlzdGFuY2U6IEVsZW1lbnRVdGlsLmdldERpc3RhbmNlVG9SZWN0KGl0ZW0ucmVjdCwgcG9zaXRpb24pLFxuICAgICAgICAgICAgcmVuZGVyOiBpdGVtLnJlbmRlclxuICAgICAgICB9KSlcbiAgICAgICAgLy9yZWN0cyA9IHJlY3RzLmNvbmNhdChjaGlsZFJlbmRlcnMubWFwKGl0ZW0gPT4gKHsgcmVjdDogaXRlbS5yZWN0LCBkaXN0YW5jZTogRWxlbWVudFV0aWwuZ2V0RGlzdGFuY2UoeyB4OiBpdGVtLnJlY3QueCArIGl0ZW0ucmVjdC53aWR0aCwgeTogaXRlbS5yZWN0LnkgfSwgcG9zaXRpb24pLCByZW5kZXI6IGl0ZW0ucmVuZGVyIH0pKSk7XG4gICAgICAgIGNoaWxkcmVuUmVuZGVyTWFwLnNvcnQoKGl0ZW0xLCBpdGVtMikgPT4gaXRlbTEuZGlzdGFuY2UgLSBpdGVtMi5kaXN0YW5jZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW5SZW5kZXJNYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGFkamFjZW50UmVuZGVyID0gY2hpbGRyZW5SZW5kZXJNYXBbMF07XG4gICAgICAgICAgICBpZiAoIWFkamFjZW50UmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWRqYWNlbnRSZW5kZXIucmVuZGVyIGluc3RhbmNlb2YgQnJhbmNoUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5nZXRSZWNlbnRIaXRSZW5kZXIoYWRqYWNlbnRSZW5kZXIucmVuZGVyLCBjdXJyZW50UmVuZGVyUG9zLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWRqYWNlbnRSZW5kZXIucmVuZGVyIGluc3RhbmNlb2YgTGVhZlJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgICAgIGxldCB4ID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoYWRqYWNlbnRSZW5kZXIucmVjdC54ID4gcG9zaXRpb24ueCkge1xuICAgICAgICAgICAgICAgICAgICB4ID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFkamFjZW50UmVuZGVyLnJlY3QueCArIGFkamFjZW50UmVuZGVyLnJlY3Qud2lkdGggPCBwb3NpdGlvbi54KSB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBhZGphY2VudFJlbmRlci5yZWN0LndpZHRoO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBwb3NpdGlvbi54IC0gYWRqYWNlbnRSZW5kZXIucmVjdC54O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBFbGVtZW50VXRpbC5nZXRIaXRSZW5kZXJPZmZzZXQoYWRqYWNlbnRSZW5kZXIucmVuZGVyLCB4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXI6IGFkamFjZW50UmVuZGVyLnJlbmRlcixcbiAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVSZW5kZXJSZWN0OiBhZGphY2VudFJlbmRlci5yZWN0LFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6I635Y+W54K55Ye755qEZG9jLXBhZ2VcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldEhpdERvY1BhZ2UoZXZ0OiBNb3VzZUVsZW1lbnRFdmVudCk6IHsgZG9jUmVuZGVyOiBEb2N1bWVudFJlbmRlck9iamVjdCwgcGFpbnRBYnNvbHV0ZVJlY3Q6IFBvc2l0aW9uLCBoaXRQYWdlUG9zOiBQb3NpdGlvbiwgZG9jSW5kZXg6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGhpdFBvczogUG9zaXRpb24gPSB7eDogZXZ0Lmdsb2JhbFgsIHk6IGV2dC5nbG9iYWxZfTtcbiAgICAgICAgY29uc3QgZG9jQ29udGFpbmVyID0gdGhpcy5kb2N1bWVudFBhaW50LmdldERvY0NvbnRhaW5lcigpO1xuICAgICAgICAvL2xldCB7IHgsIHkgfSA9IGRvY0NvbnRhaW5lci5yZWN0O1xuICAgICAgICAvL3kgLT0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZO1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoOyBpIDwgZG9jQ29udGFpbmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBkb2NDb250YWluZXIuZ2V0Q2hpbGQoaSkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBkb2NQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKGRvY1JlbmRlcik7XG4gICAgICAgICAgICBpZiAoQ29tbW9uVXRpbC5pc0luc2lkZVJlY3RCeVBvc2l0aW9uKHtcbiAgICAgICAgICAgICAgICB4OiBkb2NQb3MueCxcbiAgICAgICAgICAgICAgICB5OiBkb2NQb3MueSAtIHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWSxcbiAgICAgICAgICAgICAgICB3aWR0aDogZG9jUmVuZGVyLnJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBkb2NSZW5kZXIucmVjdC5oZWlnaHRcbiAgICAgICAgICAgIH0sIGhpdFBvcykpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpID0gaSA9PT0gZG9jQ29udGFpbmVyLmxlbmd0aCA/IGkgLSAxIDogaTtcbiAgICAgICAgY29uc3QgaGl0RG9jID0gZG9jQ29udGFpbmVyLmdldENoaWxkKGkpIGFzIERvY3VtZW50UmVuZGVyT2JqZWN0O1xuICAgICAgICBjb25zdCBkb2NQb3MgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UG9zKGhpdERvYyk7XG4gICAgICAgIC8vY29uc3QgZG9jUG9zID0geyB4OiBoaXREb2MucmVjdC54ICsgeCwgeTogaGl0RG9jLnJlY3QueSArIHkgfTtcbiAgICAgICAgY29uc3QgaGl0UGFnZVBvczogUG9zaXRpb24gPSB7eDogaGl0UG9zLnggLSBkb2NQb3MueCwgeTogaGl0UG9zLnkgLSBkb2NQb3MueSArIHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWX1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRvY1JlbmRlcjogaGl0RG9jLFxuICAgICAgICAgICAgcGFpbnRBYnNvbHV0ZVJlY3Q6IGRvY1BvcyxcbiAgICAgICAgICAgIGRvY0luZGV4OiBpLFxuICAgICAgICAgICAgaGl0UGFnZVBvc1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6Kem5Y+R5LqL5Lu2XG4gICAgICogQHBhcmFtIHR5cGVcbiAgICAgKiBAcGFyYW0gc291cmNlRWxlbWVudFxuICAgICAqIEBwYXJhbSBldmVudFxuICAgICAqIEBwYXJhbSBldmVudFN0YWdlXG4gICAgICogQHBhcmFtIGRvY0N0eFxuICAgICAqL1xuICAgIHN0YXRpYyBpbnZva2VFdmVudCh0eXBlOiBFdmVudFR5cGVzLCBzb3VyY2VFbGVtZW50OiBFbGVtZW50LCBldmVudDogRWxlbWVudEV2ZW50LCBldmVudFN0YWdlOiBFdmVudFN0YWdlLCBkb2NDdHg6IEVkaXRvckNvbnRleHQpOiBFbGVtZW50RXZlbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgcGFyZW50cyA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEVsZW1lbnRzKHNvdXJjZUVsZW1lbnQpO1xuICAgICAgICAvL+WFiOaJp+ihjOaNleiOt+mYtuautSzlnKjmiafooYzlhpLms6FcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhcmVudHMubGVuZ3RoIC0gMTsgaSA+IC1wYXJlbnRzLmxlbmd0aDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAoaSA+IDEgJiYgKGV2ZW50U3RhZ2UgIT09ICdDYXB0dXJlJyAmJiBldmVudFN0YWdlICE9PSAnQWxsJykpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpIDw9IDAgJiYgKGV2ZW50U3RhZ2UgIT09ICdCdWJibGluZycgJiYgZXZlbnRTdGFnZSAhPT0gJ0FsbCcpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjaGlsZCA9IHBhcmVudHNbTWF0aC5hYnMoaSldO1xuICAgICAgICAgICAgZXZlbnQuY3VycmVudEVsZW1lbnQgPSBjaGlsZDtcbiAgICAgICAgICAgIGV2ZW50LnNvdXJjZSA9IHNvdXJjZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB1c2VyQ2FwdHVyZSA9IGkgPiAwO1xuICAgICAgICAgICAgY2hpbGQuaW52b2tlRXZlbnQodHlwZSwgZXZlbnQsIHVzZXJDYXB0dXJlKTtcbiAgICAgICAgICAgIGlmIChldmVudC5pc0NhbmNlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBldmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvY0N0eC5pbnZva2VUeXBlSGFuZGxlcihjaGlsZCwgdHlwZSwgZXZlbnQsIHVzZXJDYXB0dXJlKTtcbiAgICAgICAgICAgIC8vIGlmIChldmVudC5pc0NhbmNlbCkge1xuICAgICAgICAgICAgLy8gICAgIHJldHVybiBldmVudDtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWPkeW4g+W9k+WJjeeahOeCueWHu+S/oeaBr1xuICAgICAqL1xuICAgIHByaXZhdGUgcHViSGl0SW5mbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXRJbmZvQ2hhbmdlZC5uZXh0KHtcbiAgICAgICAgICAgIHN0YXJ0SGl0SW5mbzogdGhpcy5zdGFydEhpdEluZm8gYXMgSGl0RXZlbnRJbmZvLFxuICAgICAgICAgICAgZW5kSGl0SW5mbzogdGhpcy5lbmRIaXRJbmZvIGFzIEhpdEV2ZW50SW5mb1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bpvKDmoIfmiYDlnKjnmoTmuLLmn5PlhYPntKDlr7nosaFcbiAgICAgKiBAcGFyYW0gcmVuZGVyT2JqZWN0XG4gICAgICogQHBhcmFtIHBhcmVudFxuICAgICAqIEBwYXJhbSBwb3NpdGlvblxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRNb3VzZW92ZXJSZW5kZXIocmVuZGVyT2JqZWN0OiBSZW5kZXJPYmplY3QsIHBhcmVudDogUG9zaXRpb24sIHBvc2l0aW9uOiBQb3NpdGlvbik6IHsgcmVuZGVyOiBSZW5kZXJPYmplY3QsIGFic29sdXRlUmVuZGVyUmVjdDogUmVjdCB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHJlbmRlck9iamVjdFJlY3Q6IFJlY3QgPSB7XG4gICAgICAgICAgICB4OiBwYXJlbnQueCArIHJlbmRlck9iamVjdC5yZWN0LngsXG4gICAgICAgICAgICB5OiBwYXJlbnQueSArIHJlbmRlck9iamVjdC5yZWN0LnksXG4gICAgICAgICAgICB3aWR0aDogcmVuZGVyT2JqZWN0LnJlY3Qud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlbmRlck9iamVjdC5yZWN0LmhlaWdodCxcbiAgICAgICAgICAgIG1heFdpZHRoOiAwLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBMZWFmUmVuZGVyT2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoQ29tbW9uVXRpbC5pc0luc2lkZVJlY3RCeVBvc2l0aW9uKHJlbmRlck9iamVjdFJlY3QsIHBvc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlcjogcmVuZGVyT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICBhYnNvbHV0ZVJlbmRlclJlY3Q6IHJlbmRlck9iamVjdFJlY3RcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlbmRlck9iamVjdCBpbnN0YW5jZW9mIEJyYW5jaFJlbmRlck9iamVjdCkge1xuICAgICAgICAgICAgaWYgKENvbW1vblV0aWwuaXNJbnNpZGVSZWN0QnlQb3NpdGlvbihyZW5kZXJPYmplY3RSZWN0LCBwb3NpdGlvbikpIHtcbiAgICAgICAgICAgICAgICAvL+W9k+WJjeS4uuihqOWNleWFg+agvO+8jOS9huaYr+ihqOagvOS4jeWtmOWcqOS4iuS4i3BhZGRpbmfvvIxcbiAgICAgICAgICAgICAgICAvL+WImeihqOagvOS4iui+ueahhuWSjOS4i+i+ueahhuWPr+iDveS8muWSjOWGheWuuShwYXJhZ3JhcGgp6YeN5Y+g77yMXG4gICAgICAgICAgICAgICAgLy/lvZPliY3lhYnmoIflnKh0YWJsZS1yZW5kZXLkuIrml7bvvIzlp4vnu4jml6Dms5Xojrflj5bliLB0YWJsZS1jZWxsLXJlbmRlclxuICAgICAgICAgICAgICAgIGlmIChyZW5kZXJPYmplY3QgaW5zdGFuY2VvZiBUYWJsZUNlbGxSZW5kZXJPYmplY3QgJiYgKENvbW1vblV0aWwuQXBwcm94bWF0ZVZhbHVlSW5SYW5nZShyZW5kZXJPYmplY3RSZWN0LnksIDEsIHBvc2l0aW9uLnkpIHx8IENvbW1vblV0aWwuQXBwcm94bWF0ZVZhbHVlSW5SYW5nZShyZW5kZXJPYmplY3RSZWN0LnkgKyByZW5kZXJPYmplY3RSZWN0LmhlaWdodCwgMSwgcG9zaXRpb24ueSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHJlbmRlck9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFic29sdXRlUmVuZGVyUmVjdDogcmVuZGVyT2JqZWN0UmVjdFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyT2JqZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVuZGVyID0gcmVuZGVyT2JqZWN0LmdldENoaWxkKGkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLmdldE1vdXNlb3ZlclJlbmRlcihjaGlsZFJlbmRlciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogcmVuZGVyT2JqZWN0UmVjdC54LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogcmVuZGVyT2JqZWN0UmVjdC55XG4gICAgICAgICAgICAgICAgICAgIH0sIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXI6IHJlbmRlck9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGVSZW5kZXJSZWN0OiByZW5kZXJPYmplY3RSZWN0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfmnKrlrp7njrAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnvKnmlL7lhYPntKBcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc2l6ZVJlbmRlcihlOiBNb3VzZUVsZW1lbnRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoKDxhbnk+dGhpcy5lZGdlUmVuZGVySW5mbz8ucmVuZGVyRWxlbWVudClbJ3Jlc2l6ZWFibGUnXSkge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVFbGVtZW50KGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZWRnZVJlbmRlckluZm8/LnJlbmRlckVsZW1lbnQgaW5zdGFuY2VvZiBUYWJsZUNlbGxFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVRhYmxlQ2VsbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog57yp5pS+6KGo5qC8XG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNpemVUYWJsZUNlbGwoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5lZGdlUmVuZGVySW5mbyB8fCAhdGhpcy5lZGdlUmVuZGVySW5mby5tb3VzZWRvd25Qb3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjZWxsRWxlbWVudCA9IHRoaXMuZ2V0UmVzaXplVGFibGVDZWxsKCk7XG4gICAgICAgIGNvbnN0IGJvcmRlciA9IHRoaXMuZWRnZVJlbmRlckluZm8uYm9yZGVyO1xuICAgICAgICBjb25zdCBtb3VzZWRvd25Qb3MgPSB0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcztcbiAgICAgICAgY29uc3QgbW92ZURpc3RhbmNlWCA9IHRoaXMuY3VycmVudFBvcy54IC0gbW91c2Vkb3duUG9zLng7XG4gICAgICAgIGNvbnN0IG1vdmVEaXN0YW5jZVkgPSB0aGlzLmN1cnJlbnRQb3MueSAtIG1vdXNlZG93blBvcy55O1xuICAgICAgICBjb25zdCByb3cgPSBjZWxsRWxlbWVudC5wYXJlbnQ7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gcm93Py5wYXJlbnQgYXMgVGFibGVFbGVtZW50O1xuICAgICAgICBpZiAoIXJvdyB8fCAhdGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncm93IHwgdGFibGUgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VsbEluZGV4ID0gcm93LmdldENoaWxkSW5kZXgoY2VsbEVsZW1lbnQpO1xuICAgICAgICBsZXQgY2VsbFdpZHRoID0gdGFibGUuZ2V0Q2VsbFdpZHRoKGNlbGxJbmRleCk7XG4gICAgICAgIGNvbnN0IGNvbHNDb3VudCA9IHRhYmxlLmdldENvbHNDb3VudCgpO1xuICAgICAgICBpZiAoWydsZWZ0JywgJ3JpZ2h0J10uaW5jbHVkZXMoYm9yZGVyKSkge1xuICAgICAgICAgICAgaWYgKGNlbGxJbmRleCA9PT0gMCAmJiBib3JkZXIgPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCByZXNpemVDb2xXaWR0aCA9IDA7XG4gICAgICAgICAgICBsZXQgcmVzaXplQ29sSW5kZXggPSAwO1xuICAgICAgICAgICAgaWYgKGJvcmRlciA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgcmVzaXplQ29sSW5kZXggPSBjZWxsSW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIHJlc2l6ZUNvbFdpZHRoID0gdGFibGUuZ2V0Q2VsbFdpZHRoKHJlc2l6ZUNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICByZXNpemVDb2xXaWR0aCArPSBtb3ZlRGlzdGFuY2VYO1xuICAgICAgICAgICAgICAgIGNlbGxXaWR0aCAtPSBtb3ZlRGlzdGFuY2VYO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChib3JkZXIgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgICAgICByZXNpemVDb2xJbmRleCA9IGNlbGxJbmRleCArIDE7XG4gICAgICAgICAgICAgICAgLy/np7vliqjmnIDlkI7kuIDliJfml7bvvIzlj7PkvqfmsqHmnInliJfkuobvvIxyZXNpemVDb2xXaWR0aOeahOWAvOS4ui0xXG4gICAgICAgICAgICAgICAgcmVzaXplQ29sV2lkdGggPSB0YWJsZS5nZXRDZWxsV2lkdGgocmVzaXplQ29sSW5kZXgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNpemVDb2xXaWR0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzaXplQ29sV2lkdGggLT0gbW92ZURpc3RhbmNlWDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2VsbFdpZHRoICs9IG1vdmVEaXN0YW5jZVg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHJlc2l6ZUNvbFdpZHRoICE9IC0xICYmIHJlc2l6ZUNvbFdpZHRoIDwgMjApIHx8IGNlbGxXaWR0aCA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0Q2VsbFdpZHRoKHJlc2l6ZUNvbEluZGV4LCByZXNpemVDb2xXaWR0aCk7XG4gICAgICAgICAgICB0YWJsZS5zZXRDZWxsV2lkdGgoY2VsbEluZGV4LCBjZWxsV2lkdGgpO1xuICAgICAgICAgICAgdGhpcy5lZGdlUmVuZGVySW5mby5tb3VzZWRvd25Qb3MgPSB0aGlzLmN1cnJlbnRQb3M7XG4gICAgICAgICAgICB0YWJsZS5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB9IGVsc2UgaWYgKFsnYm90dG9tJywgJ3RvcCddLmluY2x1ZGVzKGJvcmRlcikpIHtcbiAgICAgICAgICAgIGxldCByb3dJbmRleCA9IHJvdy5nZXRJbmRleCgpO1xuICAgICAgICAgICAgaWYgKHJvd0luZGV4ID09PSAwICYmIGJvcmRlciA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL+aMieeFp+enu+WKqOW6lei+ueiuoeeul1xuICAgICAgICAgICAgcm93SW5kZXggPSBib3JkZXIgPT09ICd0b3AnID8gcm93SW5kZXggLSAxIDogcm93SW5kZXg7XG4gICAgICAgICAgICBjb25zdCByZXNpemVSb3dFbGUgPSB0YWJsZS5nZXRDaGlsZChyb3dJbmRleCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICAgICAgbGV0IHJlc2l6ZVJvd1JlbmRlciA9IHJlc2l6ZVJvd0VsZS5tZWFzdXJlUmVuZGVyIGFzIFRhYmxlUm93UmVuZGVyT2JqZWN0O1xuICAgICAgICAgICAgaWYgKHJlc2l6ZVJvd1JlbmRlci5lbGVtZW50ICE9PSByZXNpemVSb3dFbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfnvKnmlL7ooajmoLzooYzpq5jluqblh7rnjrDplJnor68s57uY5Yi25YWD57Sg5ZKM6KGo5qC85a+56LGh5LiN5a+55bqUJylcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtaW5IZWlnaHQgPSByZXNpemVSb3dFbGUucHJvcHMubWluSGVpZ2h0ID8/IDA7XG4gICAgICAgICAgICAvL+W9k+WJjeihjOS4jeWtmOWcqOacgOWwj+mrmOW6puiuvue9ru+8jOW5tuS4lOe8qeaUvumrmOW6puS4uui0n+aVsFxuICAgICAgICAgICAgaWYgKG1pbkhlaWdodCA8PSAwICYmIG1vdmVEaXN0YW5jZVkgPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/lvZPliY3lhoXlrrnpq5jluqZcbiAgICAgICAgICAgIGxldCByZXNpemVSb3dSZW5kZXJDb250ZW50SGVpZ2h0ID0gRWxlbWVudFV0aWwuZ2V0VGFibGVSb3dSZW5kZXJDb250ZW50SGVpZ2h0KHJlc2l6ZVJvd1JlbmRlcik7XG4gICAgICAgICAgICBsZXQgcmVzaXplUm93TWluSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIGlmIChtaW5IZWlnaHQgPD0gMCkge1xuICAgICAgICAgICAgICAgIHJlc2l6ZVJvd01pbkhlaWdodCA9IHJlc2l6ZVJvd1JlbmRlckNvbnRlbnRIZWlnaHQgKyBtb3ZlRGlzdGFuY2VZO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNpemVSb3dNaW5IZWlnaHQgPSBtaW5IZWlnaHQgKyBtb3ZlRGlzdGFuY2VZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy/nvKnmlL7nmoTpq5jluqblsI/kuo7lhoXlrrnpq5jluqbvvIzliJnph43nva7ooYzmnIDlsI/pq5jluqZcbiAgICAgICAgICAgIGlmIChyZXNpemVSb3dNaW5IZWlnaHQgPD0gcmVzaXplUm93UmVuZGVyQ29udGVudEhlaWdodCkge1xuICAgICAgICAgICAgICAgIC8vcmVzaXplUm93RWxlLnRyUHJvcHMubWluSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICByZXNpemVSb3dNaW5IZWlnaHQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzaXplUm93RWxlLnByb3BzLm1pbkhlaWdodCA9IHJlc2l6ZVJvd01pbkhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8ubW91c2Vkb3duUG9zID0gdGhpcy5jdXJyZW50UG9zO1xuICAgICAgICAgICAgdGFibGUucHViT25DaGFuZ2UoJ3NlbGYnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVzaXplVGFibGVDZWxsKCk6IFRhYmxlQ2VsbEVsZW1lbnQge1xuICAgICAgICBpZiAoIXRoaXMuZWRnZVJlbmRlckluZm8pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZWRnZVJlbmRlckluZm8gaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VsbEVsZW1lbnQgPSB0aGlzLmVkZ2VSZW5kZXJJbmZvLnJlbmRlckVsZW1lbnQgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgY29uc3Qgcm93ID0gY2VsbEVsZW1lbnQucGFyZW50O1xuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb3cgaXMgbnVsbCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFibGUgPSByb3cucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY2VsbEluZGV4ID0gcm93LmdldENoaWxkSW5kZXgoY2VsbEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBib3JkZXIgPSB0aGlzLmVkZ2VSZW5kZXJJbmZvLmJvcmRlcjtcbiAgICAgICAgaWYgKGNlbGxFbGVtZW50LnByb3BzLmhNZXJnZSA9PT0gJ3Jlc3RhcnQnIHx8IGJvcmRlciA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNlbGxJbmRleCArIDE7IGkgPCB0YWJsZS5nZXRDb2xzQ291bnQoKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDaGlsZChpKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChjZWxsLnByb3BzLmhNZXJnZSAhPT0gJ2NvbnRpbnVlJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm93LmdldENoaWxkKGkgLSAxKSBhcyBUYWJsZUNlbGxFbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByb3cuZ2V0Q2hpbGQ8VGFibGVDZWxsRWxlbWVudD4odGFibGUuZ2V0Q29sc0NvdW50KCkgLSAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2VsbEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6LCD5pW05YWD57Sg5aSn5bCPXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNpemVFbGVtZW50KGU6IE1vdXNlRWxlbWVudEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5lZGdlUmVuZGVySW5mbyB8fCAhdGhpcy5lZGdlUmVuZGVySW5mby5tb3VzZWRvd25Qb3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbWdFbGVtZW50ID0gPHVua25vd24+dGhpcy5lZGdlUmVuZGVySW5mby5yZW5kZXJFbGVtZW50IGFzIHsgcHJvcHM6IHsgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfSB9O1xuICAgICAgICBjb25zdCBib3JkZXIgPSB0aGlzLmVkZ2VSZW5kZXJJbmZvLmJvcmRlcjtcbiAgICAgICAgY29uc3QgbW91c2Vkb3duUG9zID0gdGhpcy5lZGdlUmVuZGVySW5mby5tb3VzZWRvd25Qb3M7XG4gICAgICAgIGxldCBtb3ZlRGlzdGFuY2VYID0gdGhpcy5jdXJyZW50UG9zLnggLSBtb3VzZWRvd25Qb3MueDtcbiAgICAgICAgbGV0IG1vdmVEaXN0YW5jZVkgPSB0aGlzLmN1cnJlbnRQb3MueSAtIG1vdXNlZG93blBvcy55O1xuICAgICAgICBpZiAoWydsZWZ0LXRvcCcsICdsZWZ0LW1pZGRsZScsICdsZWZ0LWJvdHRvbScsICdyaWdodC10b3AnLCAncmlnaHQtbWlkZGxlJywgJ3JpZ2h0LWJvdHRvbScsICd0b3AtbWlkZGxlJywgJ2JvdHRvbS1taWRkbGUnXS5pbmRleE9mKGJvcmRlcikgPj0gMCkge1xuICAgICAgICAgICAgaWYgKFsnbGVmdC1taWRkbGUnLCAncmlnaHQtbWlkZGxlJ10uaW5kZXhPZihib3JkZXIpID49IDApIHtcbiAgICAgICAgICAgICAgICBtb3ZlRGlzdGFuY2VZID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChbJ3RvcC1taWRkbGUnLCAnYm90dG9tLW1pZGRsZSddLmluZGV4T2YoYm9yZGVyKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgbW92ZURpc3RhbmNlWCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL3NoaWZ06ZSu5oyJ5q+U5L6L57yp5pS+XG4gICAgICAgICAgICBpZiAoZS5zaGlmdCAmJiBbJ2xlZnQtdG9wJywgJ3JpZ2h0LXRvcCcsICdsZWZ0LWJvdHRvbScsICdyaWdodC1ib3R0b20nXS5pbmRleE9mKGJvcmRlcikgPj0gMCkge1xuICAgICAgICAgICAgICAgIGxldCBzY2FsZSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKG1vdmVEaXN0YW5jZVgpID4gTWF0aC5hYnMobW92ZURpc3RhbmNlWSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSBtb3ZlRGlzdGFuY2VYIC8gaW1nRWxlbWVudC5wcm9wcy53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgbW92ZURpc3RhbmNlWSA9IE1hdGguZmxvb3Ioc2NhbGUgKiBpbWdFbGVtZW50LnByb3BzLmhlaWdodCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSBtb3ZlRGlzdGFuY2VZIC8gaW1nRWxlbWVudC5wcm9wcy5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIG1vdmVEaXN0YW5jZVggPSBNYXRoLmZsb29yKHNjYWxlICogaW1nRWxlbWVudC5wcm9wcy53aWR0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW1nRWxlbWVudFtcInByb3BzXCJdLndpZHRoICs9IG1vdmVEaXN0YW5jZVg7XG4gICAgICAgICAgICBpbWdFbGVtZW50W1wicHJvcHNcIl0uaGVpZ2h0ICs9IG1vdmVEaXN0YW5jZVk7XG4gICAgICAgICAgICBpZiAoaW1nRWxlbWVudFtcInByb3BzXCJdLndpZHRoIDwgMTApIHtcbiAgICAgICAgICAgICAgICBpbWdFbGVtZW50W1wicHJvcHNcIl0ud2lkdGggPSAxMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbWdFbGVtZW50W1wicHJvcHNcIl0uaGVpZ2h0IDwgMTApIHtcbiAgICAgICAgICAgICAgICBpbWdFbGVtZW50W1wicHJvcHNcIl0uaGVpZ2h0ID0gMTA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvLm1vdXNlZG93blBvcyA9IHRoaXMuY3VycmVudFBvcztcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6YCJ5Lit5b2T5YmN5YWo6YOoIGN0cmwrQVxuICAgICAqL1xuICAgIHNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBjb25zdCByZWdpb25UYXJnZXQgPSBFbGVtZW50VXRpbC5nZXRFbGVtZW50UmVnaW9uVGFyZ2V0KHN0YXJ0Q29udHJvbCk7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sIHx8ICFyZWdpb25UYXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdExlYWYgPSBFbGVtZW50VXRpbC5nZXRGaXJzdExlYWZFbGVtZW50KHJlZ2lvblRhcmdldC50YXJnZXQpO1xuICAgICAgICBjb25zdCBsYXN0TGVhZiA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChyZWdpb25UYXJnZXQudGFyZ2V0KTtcbiAgICAgICAgaWYgKCFmaXJzdExlYWYgfHwgIWxhc3RMZWFmKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpcnN0TGVhZiBvciBsYXN0TGVhZiBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvblJhbmdlID0gbmV3IFNlbGVjdGlvblJhbmdlKCk7XG4gICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldFN0YXJ0KGZpcnN0TGVhZiwgMCk7XG4gICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldEVuZChsYXN0TGVhZiwgLTEpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmFkZFJhbmdlKG5ld1NlbGVjdGlvblJhbmdlKTtcbiAgICAgICAgLy9jb25zdCBkb2M9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDnp7vliqjlhYnmoIfliLDooYzpppZcbiAgICAgKi9cbiAgICBtb3ZlQ3Vyc29yVG9MaW5lU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW92ZUN1cnNvclRvSG9tZU9yRW5kKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog56e75Yqo5YWJ5qCH5Yiw6KGM5bC+XG4gICAgICovXG4gICAgbW92ZUN1cnNvclRvTGluZUVuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yVG9Ib21lT3JFbmQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWkhOeQhuenu+WKqOWFieagh+WIsOihjOWwvuaIluihjOmmllxuICAgICAqIEBwYXJhbSBob21lXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIG1vdmVDdXJzb3JUb0hvbWVPckVuZChob21lOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sIHx8ICF0aGlzLmRvY0N0eC5jdXJzb3JSZWN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZG9jQ3R4LmN1cnNvclJlY3Q7XG4gICAgICAgIGNvbnN0IGRvY0V2ZW50ID0gbmV3IE1vdXNlRWxlbWVudEV2ZW50KHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWCA9IHJlY3QueDtcbiAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWSA9IHJlY3QueSArIHJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgZG9jRXZlbnQuYnV0dG9ucyA9IDE7XG4gICAgICAgIGNvbnN0IGhpdEluZm8gPSB0aGlzLmdldEhpdEluZm8oZG9jRXZlbnQpO1xuICAgICAgICBpZiAoIWhpdEluZm8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhUmVuZGVyID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50UmVuZGVyKGhpdEluZm8ucmVuZGVyLCBQYXJhZ3JhcGhMaW5lUmVjdFJlbmRlck9iamVjdCkgYXMgUGFyYWdyYXBoTGluZVJlY3RSZW5kZXJPYmplY3RcbiAgICAgICAgY29uc3QgbGluZVBvc1JlY3QgPSBFbGVtZW50VXRpbC5nZXRSZW5kZXJBYnNvbHV0ZVBhaW50UmVjdChwYXJhUmVuZGVyKVxuICAgICAgICBkb2NFdmVudC5nbG9iYWxYID0gbGluZVBvc1JlY3QueCArIChob21lID8gMCA6IGxpbmVQb3NSZWN0LndpZHRoKTtcbiAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWSA9IGxpbmVQb3NSZWN0LnkgKyBsaW5lUG9zUmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICB0aGlzLm1vdXNlZG93blBvcyA9IHt4OiBkb2NFdmVudC5nbG9iYWxYLCB5OiBkb2NFdmVudC5nbG9iYWxZfTtcbiAgICAgICAgdGhpcy5tb3VzZWRvd25IYW5kbGUoZG9jRXZlbnQpO1xuICAgICAgICB0aGlzLmlzbW91c2Vkb3duID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZWRnZVJlbmRlckluZm8gPSBudWxsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5ZCR5bem56e75Yqo5YWJ5qCHXG4gICAgICovXG4gICAgbW92ZUN1cnNvclRvTGVmdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBvbGRSZWdpb24gPSBFbGVtZW50VXRpbC5nZXRFbGVtZW50UmVnaW9uKHN0YXJ0Q29udHJvbCk7XG4gICAgICAgICAgICBjb25zdCBwcmV2RWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KHN0YXJ0Q29udHJvbCwgZmFsc2UsIHRydWUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKHByZXZFbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdSZWdpb24gPSBFbGVtZW50VXRpbC5nZXRFbGVtZW50UmVnaW9uKHByZXZFbGUpO1xuICAgICAgICAgICAgICAgIGlmIChuZXdSZWdpb24gIT09IG9sZFJlZ2lvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwcmV2RWxlLCAtMSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2Uoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCAtIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2Uoc3RhcnRDb250cm9sLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQkeWPs+enu+WKqOWFieagh1xuICAgICAqL1xuICAgIG1vdmVDdXJzb3JUb1JpZ2h0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAodGhpcy5pc0xlYWZFbGVFbmRPZmZzZXQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFJlZ2lvbiA9IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRSZWdpb24oc3RhcnRDb250cm9sKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRFbGUgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQoc3RhcnRDb250cm9sLCBmYWxzZSwgdHJ1ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAobmV4dEVsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JlZ2lvbiA9IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRSZWdpb24obmV4dEVsZSk7XG4gICAgICAgICAgICAgICAgaWYgKG9sZFJlZ2lvbiAhPT0gbmV3UmVnaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKG5leHRFbGUsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzdGFydENvbnRyb2wgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQgKyAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHN0YXJ0Q29udHJvbCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkJHkuIrnp7vliqjlhYnmoIdcbiAgICAgKi9cbiAgICBtb3ZlQ3Vyc29yVG9VcE9yRG93bih1cDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvblN0YXRlLmN1cnNvclBvcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCB7eCwgeX0gPSB0aGlzLnNlbGVjdGlvblN0YXRlLmN1cnNvclBvcztcbiAgICAgICAgeSAtPSB0aGlzLnZpZXdPcHRpb25zLnRyYW5zbGF0ZVk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTA7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZG9jRXZlbnQgPSBuZXcgTW91c2VFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAgZG9jRXZlbnQuZ2xvYmFsWCA9IHg7XG4gICAgICAgICAgICBkb2NFdmVudC5nbG9iYWxZID0geSAtICh1cCA/IGkgKiAyIDogaSAqIC0yKTtcbiAgICAgICAgICAgIGRvY0V2ZW50LmJ1dHRvbnMgPSAxO1xuICAgICAgICAgICAgY29uc3QgaGl0SW5mbyA9IHRoaXMuZ2V0SGl0SW5mbyhkb2NFdmVudCk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBoaXRJbmZvPy5lbGVtZW50ID09PSB0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCAmJiBoaXRJbmZvLm9mZnNldCA9PT0gdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydE9mZnNldDtcbiAgICAgICAgICAgIGlmICghaGl0SW5mbykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3VzZWRvd25Qb3MgPSB7eDogeCwgeTogeX07XG4gICAgICAgICAgICAgICAgdGhpcy5tb3VzZWRvd25IYW5kbGUoZG9jRXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNtb3VzZWRvd24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVkZ2VSZW5kZXJJbmZvID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOW9k+WJjeWBj+enu+mHj+aYr+WQpuWkhOS6juW9k+WJjeWFg+e0oOeahOacq+WwvlxuICAgICAqIEBwYXJhbSBlbGVcbiAgICAgKiBAcGFyYW0gb2Zmc2V0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzTGVhZkVsZUVuZE9mZnNldChlbGU6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZS50ZXh0TWVhc3VyZXMubGVuZ3RoID09PSBvZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZWxlIGluc3RhbmNlb2YgUFN5bWJvbEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldCA9PT0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlueCueWHu+eahOaWh+aho+WMuuWfn1xuICAgICAqIEBwYXJhbSBkb2NSZW5kZXJcbiAgICAgKiBAcGFyYW0gcG9zXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXRIaXRSZWdpb24oZG9jRXZlbnQ6IE1vdXNlRWxlbWVudEV2ZW50KTogSGl0UmVnaW9uIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGhpdERvY0luZm8gPSB0aGlzLmdldEhpdERvY1BhZ2UoZG9jRXZlbnQpO1xuICAgICAgICBpZiAoIWhpdERvY0luZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtkb2NSZW5kZXIsIGhpdFBhZ2VQb3N9ID0gaGl0RG9jSW5mbztcbiAgICAgICAgY29uc3QgaGVhZGVyUmVuZGVyID0gRWxlbWVudFV0aWwuZmluZENoaWxkUmVuZGVyKGRvY1JlbmRlciwgKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEhlYWRlclJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRIZWFkZXJSZW5kZXJPYmplY3Q7XG4gICAgICAgIGNvbnN0IGZvb3RlclJlbmRlciA9IEVsZW1lbnRVdGlsLmZpbmRDaGlsZFJlbmRlcihkb2NSZW5kZXIsIChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRGb290ZXJSZW5kZXJPYmplY3QpIGFzIERvY3VtZW50Rm9vdGVyUmVuZGVyT2JqZWN0O1xuICAgICAgICBpZiAoIWhlYWRlclJlbmRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgaXMgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm9vdGVyUmVuZGVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Zvb3RlciBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVyTGluZSA9IGhlYWRlclJlbmRlci5yZWN0LnkgKyBoZWFkZXJSZW5kZXIucmVjdC5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IGZvb3RlckxpbmUgPSBmb290ZXJSZW5kZXIucmVjdC55O1xuICAgICAgICBpZiAoaGl0UGFnZVBvcy55IDw9IGhlYWRlckxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnaGVhZGVyJztcbiAgICAgICAgfSBlbHNlIGlmIChoaXRQYWdlUG9zLnkgPD0gZm9vdGVyTGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICdib2R5JztcbiAgICAgICAgfSBlbHNlIGlmIChoaXRQYWdlUG9zLnkgPiBmb290ZXJMaW5lICYmIGhpdFBhZ2VQb3MueSA8IGRvY1JlbmRlci5yZWN0LmhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuICdmb290ZXInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuXG4iLCJpbXBvcnQgeyBMZWFmRWxlbWVudCB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBLZXlib3JhZEVsZW1lbnRFdmVudCB9IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBEb2N1bWVudEV2ZW50IH0gZnJvbSBcIi4vZG9jdW1lbnQtZXZlbnRcIjtcbmltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tIFwiLi9ldmVudC1zdWJqZWN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBvc2l0aW9uU3RhcnRJbmZvIHtcbiAgICBlbGVtZW50OiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXJcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXREYXRhIHtcbiAgICBjb21wb3NpdGlvbj86IGJvb2xlYW47XG4gICAgLy/lvIDlkK/ovpPlhaXms5XlkI7nmoTlhYnmoIfnmoTotbfngrnkvY3nva5cbiAgICBjb21wb3NpdGlvblN0YXJ0SW5mbz86IElDb21wb3NpdGlvblN0YXJ0SW5mbztcbiAgICAvL+i+k+WFpeazleS5i+WJjei+k+WFpeeahOWGheWuuVxuICAgIHByZXZJbnB1dERhdGE/OiBzdHJpbmc7XG4gICAgZGF0YTogc3RyaW5nXG59XG5cbi8qKlxuICog6L6T5YWl5aSE55CGXG4gKi9cbmV4cG9ydCBjbGFzcyBEb2N1bWVudElucHV0IHtcbiAgICAvKipcbiAgICAgKiDlhYnmoIfpl6rng4HnirbmgIFcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jdXJzb3JCbGlua3NTdGF0ZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgY3Vyc29yQmxpbmtzSW50ZXJ2YWxJRDogYW55O1xuICAgIC8v5piv5ZCm5piv5byA5ZCv6L6T5YWl5rOV5LqGXG4gICAgcHJpdmF0ZSBjb21wb3NpdGlvblN0YXJ0ID0gZmFsc2U7XG4gICAgLy/lvIDlkK/ovpPlhaXms5XlkI7ovpPlhaXnmoTmloflrZdcbiAgICBwcml2YXRlIGNvbXBvc2l0aW9uUHJldkRhdGEhOiBzdHJpbmc7XG4gICAgLy/lvIDlkK/ovpPlhaXms5XlkI7nmoTnmoTlhYPntKBcbiAgICBwcml2YXRlIGNvbXBvc2l0aW9uU3RhcnRJbmZvITogSUNvbXBvc2l0aW9uU3RhcnRJbmZvIHwgbnVsbDtcbiAgICAvL+i+k+WFpeWGheWuueS6i+S7tlxuICAgIG9uSW5wdXRFdmVudDogU3ViamVjdDxJbnB1dERhdGE+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL2JhY2tzcGFjZSDplK7nm5jkuovku7ZcbiAgICBvbkJhY2tzcGFjZUV2ZW50OiBTdWJqZWN0PEtleWJvYXJkRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL2RlbGV0ZSDplK7nm5jkuovku7ZcbiAgICBvbkRlbGV0ZUV2ZW50OiBTdWJqZWN0PEtleWJvYXJkRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL2VudGVyIOmUruebmOS6i+S7tlxuICAgIG9uRW50ZXJFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/lt6bplK5cbiAgICBvbkxlZnRFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/lj7PplK5cbiAgICBvblJpZ2h0RXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v5aSN5Yi2XG4gICAgb25Db3B5RXZlbnQ6IFN1YmplY3Q8Q2xpcGJvYXJkRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+WJquWIh1xuICAgIG9uQ3V0RXZlbnQ6IFN1YmplY3Q8Q2xpcGJvYXJkRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL+eymOi0tFxuICAgIG9uUGFzdGVFdmVudDogU3ViamVjdDxDbGlwYm9hcmRFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v5o+S5YWl5o2i6KGM56ymXG4gICAgb25JbnNlcnRCcjogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy9jdHJsK0Eg5YWo6YCJ5LqL5Lu2XG4gICAgb25TZWxlY3RBbGxFdmVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy9ob21lIOS6i+S7tlxuICAgIG9uSG9tZUV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICAvL2VuZCDkuovku7ZcbiAgICBvbkVuZEV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBvblVwRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIG9uRG93bkV2ZW50OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVkaXRJbnB1dDogSFRNTElucHV0RWxlbWVudCwgcHJpdmF0ZSBlZGl0Q3Vyc29yOiBIVE1MU3BhbkVsZW1lbnQsIHByaXZhdGUgY3Vyc29yV3JhcHBlcjogSFRNTERpdkVsZW1lbnQsIHByaXZhdGUgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KSB7XG4gICAgICAgIGZyb21FdmVudCh0aGlzLmVkaXRJbnB1dCwgJ2JsdXInKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6L6T5YWl5qGGIGJsdXInKTtcbiAgICAgICAgfSlcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWRpdElucHV0LCAnZm9jdXMnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6L6T5YWl5qGGIGZvY3VzJyk7XG4gICAgICAgIH0pXG4gICAgICAgIGZyb21FdmVudCh0aGlzLmVkaXRJbnB1dCwgJ2lucHV0Jykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbXBvc2l0aW9uU3RhcnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuZWRpdElucHV0LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygn6L6T5YWl5paH5a2X5LqGJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29tcG9zaXRpb25TdGFydCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCB9ID0gdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5vbklucHV0RXZlbnQubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuZWRpdElucHV0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwcmV2SW5wdXREYXRhOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRpb25TdGFydEluZm86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHN0YXJ0Q29udHJvbCBhcyBMZWFmRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogc3RhcnRPZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdElucHV0LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnaW5wdXQnKTtcblxuICAgICAgICB9KVxuICAgICAgICBmcm9tRXZlbnQ8Q29tcG9zaXRpb25FdmVudD4odGhpcy5lZGl0SW5wdXQsICdjb21wb3NpdGlvbnN0YXJ0Jykuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25TdGFydCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNvbXBvc2l0aW9uUHJldkRhdGEgPSAnJztcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCB9ID0gdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCfovpPlhaXms5XlvIDlp4snKTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25TdGFydEluZm8gPSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudDogc3RhcnRDb250cm9sIGFzIExlYWZFbGVtZW50LFxuICAgICAgICAgICAgICAgIG9mZnNldDogc3RhcnRPZmZzZXRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBmcm9tRXZlbnQ8Q29tcG9zaXRpb25FdmVudD4odGhpcy5lZGl0SW5wdXQsICdjb21wb3NpdGlvbnVwZGF0ZScpLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXZ0LmRhdGEgPT09IHRoaXMuY29tcG9zaXRpb25QcmV2RGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ+i+k+WFpeS6hu+8micgKyBldnQuZGF0YSk7XG4gICAgICAgICAgICAvLyB0aGlzLm9uSW5wdXRFdmVudC5uZXh0KHtcbiAgICAgICAgICAgIC8vICAgICBkYXRhOiBldnQuZGF0YSxcbiAgICAgICAgICAgIC8vICAgICBjb21wb3NpdGlvblN0YXJ0SW5mbzogdGhpcy5jb21wb3NpdGlvblN0YXJ0SW5mbyBhcyBJQ29tcG9zaXRpb25TdGFydEluZm8sXG4gICAgICAgICAgICAvLyAgICAgY29tcG9zaXRpb246IHRydWUsXG4gICAgICAgICAgICAvLyAgICAgcHJldklucHV0RGF0YTogdGhpcy5jb21wb3NpdGlvblByZXZEYXRhXG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgIC8vIHRoaXMuY29tcG9zaXRpb25QcmV2RGF0YSA9IGV2dC5kYXRhO1xuICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PENvbXBvc2l0aW9uRXZlbnQ+KHRoaXMuZWRpdElucHV0LCAnY29tcG9zaXRpb25lbmQnKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnY29tcG9zaXRpb25lbmQnKVxuXG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRFdmVudC5uZXh0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmVkaXRJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgICAgICBwcmV2SW5wdXREYXRhOiAnJyxcbiAgICAgICAgICAgICAgICBjb21wb3NpdGlvblN0YXJ0SW5mbzogdGhpcy5jb21wb3NpdGlvblN0YXJ0SW5mbyBhcyBJQ29tcG9zaXRpb25TdGFydEluZm9cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmNvbXBvc2l0aW9uU3RhcnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZWRpdElucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRpb25QcmV2RGF0YSA9ICcnO1xuXG4gICAgICAgICAgICAvLyB0aGlzLm9uSW5wdXRFdmVudC5uZXh0KHtcbiAgICAgICAgICAgIC8vICAgICBkYXRhOiBldnQuZGF0YSxcbiAgICAgICAgICAgIC8vICAgICBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0OiB0aGlzLmNvbXBvc2l0aW9uU3RhcnRPZmZzZXQsXG4gICAgICAgICAgICAvLyAgICAgY29tcG9zaXRpb25SZWNvcmRDb250ZW50OiB0aGlzLmNvbXBvc2l0aW9uUmVjb3JkQ29udGVudFxuICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICAvLyB0aGlzLm9uSW5wdXRFdmVudC5uZXh0KHtcbiAgICAgICAgICAgIC8vICAgICBkYXRhOiBldnQuZGF0YSxcbiAgICAgICAgICAgIC8vICAgICBjb21wb3NpdGlvblN0YXJ0SW5mbzogdGhpcy5jb21wb3NpdGlvblN0YXJ0SW5mbyxcbiAgICAgICAgICAgIC8vICAgICBjb21wb3NpdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIC8vICAgICBwcmV2SW5wdXREYXRhOiAnJ1xuICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvc2l0aW9uU3RhcnRJbmZvID0gbnVsbDtcbiAgICAgICAgICAgIC8vdGhpcy5jb21wb3NpdGlvblJlY29yZENvbnRlbnQgPSAnJztcbiAgICAgICAgfSk7XG4gICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pih0aGlzLmVkaXRJbnB1dCwgJ2tleWRvd24nKS5zdWJzY3JpYmUoKGV2dCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5RXZlbnQgPSBuZXcgS2V5Ym9yYWRFbGVtZW50RXZlbnQodGhpcy5kb2NDdHgpO1xuICAgICAgICAgICAga2V5RXZlbnQuc291cmNlRXZlbnQgPSBldnQ7XG4gICAgICAgICAgICBpZiAoRG9jdW1lbnRFdmVudC5pbnZva2VFdmVudCgnRWxlbWVudEtleURvd24nLCB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wgYXMgTGVhZkVsZW1lbnQsIGtleUV2ZW50LCAnQ2FwdHVyZScsIHRoaXMuZG9jQ3R4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChldnQua2V5Q29kZSA9PT0gOCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25CYWNrc3BhY2VFdmVudC5uZXh0KGV2dCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSAxMyAmJiAhZXZ0LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVudGVyRXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gMzcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTGVmdEV2ZW50Lm5leHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDM5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJpZ2h0RXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldnQua2V5Q29kZSA9PT0gMzgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uVXBFdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSA0MCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25Eb3duRXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDkpIHtcbiAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDEzICYmIGV2dC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMub25JbnNlcnRCci5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSA0Nikge1xuICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGVFdmVudC5uZXh0KGV2dCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5jdHJsS2V5ICYmIGV2dC5rZXlDb2RlID09PSA2NSkge1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3RBbGxFdmVudC5uZXh0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2dC5rZXlDb2RlID09PSAzNikge1xuICAgICAgICAgICAgICAgIHRoaXMub25Ib21lRXZlbnQubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXZ0LmtleUNvZGUgPT09IDM1KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVuZEV2ZW50Lm5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4odGhpcy5lZGl0SW5wdXQsIFwiY29weVwiKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Db3B5RXZlbnQubmV4dChldnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pih0aGlzLmVkaXRJbnB1dCwgXCJwYXN0ZVwiKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIHRoaXMub25QYXN0ZUV2ZW50Lm5leHQoZXZ0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4odGhpcy5lZGl0SW5wdXQsIFwiY3V0XCIpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkN1dEV2ZW50Lm5leHQoZXZ0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmN1cnNvckJsaW5rc0ludGVydmFsSUQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWFieagh+mXqueDgVxuICAgICAqL1xuICAgIHNldEN1cnNvckJsaW5rcygpIHtcbiAgICAgICAgdGhpcy5lZGl0Q3Vyc29yLnN0eWxlLmJhY2tncm91bmQgPSB0aGlzLl9jdXJzb3JCbGlua3NTdGF0ZSA/ICd0cmFuc3BhcmVudCcgOiAnYmxhY2snO1xuICAgICAgICB0aGlzLl9jdXJzb3JCbGlua3NTdGF0ZSA9ICF0aGlzLl9jdXJzb3JCbGlua3NTdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lhYnmoIfkvY3nva5cbiAgICAgKiBAcGFyYW0gcG9zaXRpb25cbiAgICAgKi9cbiAgICBzZXRDdXJzb3JQb3NpdGlvbihwb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXI7IH0pIHtcbiAgICAgICAgdGhpcy5jdXJzb3JXcmFwcGVyLnN0eWxlLmxlZnQgPSBwb3NpdGlvbi54ICsgJ3B4JztcbiAgICAgICAgdGhpcy5jdXJzb3JXcmFwcGVyLnN0eWxlLnRvcCA9IHBvc2l0aW9uLnkgKyAncHgnO1xuICAgICAgICB0aGlzLmN1cnNvcldyYXBwZXIuc3R5bGUuaGVpZ2h0ID0gcG9zaXRpb24uaGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgdGhpcy5zZXRDdXJzb3JWaXNpYmlsaXR5KHRydWUpO1xuICAgICAgICAvL3RoaXMuc2V0Q3Vyc29ySW5wdXRTdGF0dXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7omZrmi5/lhYnmoIfnmoTlj6/op4HmgKdcbiAgICAgKiBAcGFyYW0gdmlzaWJpbGl0eVxuICAgICAqL1xuICAgIHNldEN1cnNvclZpc2liaWxpdHkodmlzaWJpbGl0eTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmN1cnNvcldyYXBwZXIuc3R5bGUuZGlzcGxheSA9IHZpc2liaWxpdHkgPyAnYmxvY2snIDogJ25vbmUnO1xuICAgICAgICBpZiAodmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dEZvY3VzKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u6L6T5YWl54q25oCBXG4gICAgICogQHBhcmFtIGZvY3VzIFxuICAgICAqL1xuICAgIHNldElucHV0Rm9jdXMoZm9jdXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRJbnB1dC5yZWFkT25seSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5lZGl0SW5wdXQuZm9jdXMoKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy90aGlzLmVkaXRJbnB1dC5ibHVyKCk7XG4gICAgICAgICAgICB0aGlzLmVkaXRJbnB1dC5yZWFkT25seSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZS5jdXJzb3JQb3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufSIsImltcG9ydCB7RG9jdW1lbnRJbnB1dCwgSUNvbXBvc2l0aW9uU3RhcnRJbmZvLCBJbnB1dERhdGF9IGZyb20gXCIuL2RvY3VtZW50LWlucHV0LWN1cnNvclwiO1xuaW1wb3J0IHtTZWxlY3Rpb25SYW5nZSwgU2VsZWN0aW9uU3RhdGV9IGZyb20gXCIuL2RvY3VtZW50LXNlbGVjdGlvblwiO1xuaW1wb3J0IHtFbGVtZW50VXRpbH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQge1xuICAgIEJsb2NrQ29udGFpbmVyRWxlbWVudCxcbiAgICBCbG9ja0NvbnRlbnRFbGVtZW50LFxuICAgIEJyYW5jaEVsZW1lbnQsXG4gICAgRG9jTW9kZSxcbiAgICBFbGVtZW50LFxuICAgIElubGluZUdyb3VwRWxlbWVudCxcbiAgICBMZWFmRWxlbWVudCxcbiAgICBTZWxlY3Rpb25Db250ZW50UmFuZ2UsXG4gICAgVmlld09wdGlvbnNcbn0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7VGV4dEdyb3VwRWxlbWVudH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtQU3ltYm9sRWxlbWVudH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtQYXJhZ3JhcGhFbGVtZW50fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge1JhbmdlVXRpbH0gZnJvbSBcIi4vcmFuZ2UtdXRpbFwiO1xuaW1wb3J0IHtUYWJsZUVsZW1lbnR9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7RG9jdW1lbnRFdmVudH0gZnJvbSBcIi4vZG9jdW1lbnQtZXZlbnRcIjtcbmltcG9ydCB7S2V5Ym9yYWRFbGVtZW50RXZlbnR9IGZyb20gXCIuL2VsZW1lbnQtZXZlbnQtZGVmaW5lXCI7XG5pbXBvcnQge0RhdGFFbGVCYXNlUHJvcHMsIFBhcmFncmFwaFByb3BzLCBUZXh0UHJvcHN9IGZyb20gXCIuL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7RWxlbWVudFNlcmlhbGl6ZX0gZnJvbSBcIi4vZWxlbWVudC1zZXJpYWxpemVcIjtcbmltcG9ydCB7RWxlbWVudFJlYWRlcn0gZnJvbSBcIi4vZWxlbWVudC1yZWFkZXJcIjtcbmltcG9ydCB7QnJlYWtFbGVtZW50fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge0RhdGFEZWNvcmF0ZUVsZW1lbnR9IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7RWRpdG9yQ29udGV4dH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHtcbiAgICBEYXRhRWxlbWVudElubGluZUdyb3VwLFxuICAgIElubGluZUdyb3VwSW5wdXRFbGVtZW50LFxuICAgIElzSW5TaWRlRGF0YUVsZW1lbnQsXG4gICAgSXNJblNpZGVJbmxpbmVHcm91cElucHV0RWxlbWVudFxufSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge0RvY3VtZW50Q29tbWVudH0gZnJvbSBcIi4vZG9jdW1lbnQtY29tbWVudFwiO1xuaW1wb3J0IHtDb21tZW50RWxlbWVudH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtuYW5vaWR9IGZyb20gXCJuYW5vaWRcIjtcbmltcG9ydCB7Q29tbUNvbnRlbnRFbGVtZW50fSBmcm9tIFwiLi9pbXBsXCI7XG5pbXBvcnQge1ZhbGlkYXRlRWxlbWVudH0gZnJvbSBcIi4vaW1wbFwiO1xuaW1wb3J0IHtDb21tb25VdGlsfSBmcm9tIFwiLi9jb21tb24tdXRpbFwiO1xuaW1wb3J0IHtUcmFja1J1bkVsZW1lbnQsIFRyYWNrUnVuVHlwZUVudW19IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7RG9jdW1lbnRCb2R5RWxlbWVudH0gZnJvbSBcIi4vaW1wbFwiO1xuXG4vKipcbiAqIOaWh+aho+WGheWuueaUueWPmFxuICovXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRDaGFuZ2Uge1xuICAgIHByaXZhdGUgc2VsZWN0aW9uU3RhdGU6IFNlbGVjdGlvblN0YXRlO1xuICAgIHByaXZhdGUgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVSZWFkZXI6IEVsZW1lbnRSZWFkZXIsIHByaXZhdGUgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LCBwcml2YXRlIGRvY0NvbW1lbnQ6IERvY3VtZW50Q29tbWVudCwgcHJpdmF0ZSBkb2N1bWVudElucHV0OiBEb2N1bWVudElucHV0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUgPSB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyA9IHRoaXMuZG9jQ3R4LnZpZXdPcHRpb25zO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25JbnB1dEV2ZW50LnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMubmV3SW5wdXQoZGF0YSlcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkJhY2tzcGFjZUV2ZW50LnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQmFja3NwYWNlKGV2dClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkVudGVyRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25FbnRlcigpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25Db3B5RXZlbnQuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Db3B5KGV2dClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkN1dEV2ZW50LnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ3V0KGV2dCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQub25QYXN0ZUV2ZW50LnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uUGFzdGUoZXZ0KVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudElucHV0Lm9uSW5zZXJ0QnIuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0U29mdEJyKClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5vbkRlbGV0ZUV2ZW50LnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uRGVsZXRlS2V5SGFuZGxlcihldnQpXG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgbmV3SW5wdXQoZGF0YTogSW5wdXREYXRhKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBjb2xsYXBzZWQsIGVuYWJsZVRyYWNrQ2hhbmdlc30gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgZGVidWdnZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25JbnB1dEJ5U2VsZWN0UmFuZ2UoZGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/liKTmlq3mmK/lkKbpnIDopoHliJvlu7rmlrDnmoTnlZnnl5XljLrln59cbiAgICAgICAgaWYgKGVuYWJsZVRyYWNrQ2hhbmdlcyAmJiAhdGhpcy5pc0luQ29ycmVjdFRyYWNrUmVnaW9uKHN0YXJ0Q29udHJvbCBhcyBFbGVtZW50LCBUcmFja1J1blR5cGVFbnVtLkluc2VydGVkKSkge1xuICAgICAgICAgICAgdGhpcy5uZXdJbnB1dFRyYWNrQ2hhbmdlcyhkYXRhLCBzdGFydENvbnRyb2wgYXMgTGVhZkVsZW1lbnQsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+W9k+WJjei+k+WFpeiKgueCueaYr+WcqOeVmeeXleWMuuWfn+S4re+8jOS9huaYr+W9k+WJjeWFs+mXreS6huWuoemYheaooeW8j++8jOmcgOimgeaLhuWIhueVmeeXleWMuuWfn++8jOWIm+W7uuaWsOi+k+WFpeiKgueCuVxuICAgICAgICBpZiAoIWVuYWJsZVRyYWNrQ2hhbmdlcyAmJiB0aGlzLmlzSW5UcmFja0Jsb2NrKHN0YXJ0Q29udHJvbCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0lucHV0ID0gdGhpcy5zcGxpdFRyYWNrRWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXAgPSBkYXRhLmNvbXBvc2l0aW9uU3RhcnRJbmZvIGFzIElDb21wb3NpdGlvblN0YXJ0SW5mbztcbiAgICAgICAgICAgIGNvbXAuZWxlbWVudCA9IG5ld0lucHV0O1xuICAgICAgICAgICAgY29tcC5vZmZzZXQgPSAwO1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHRHcm91cChuZXdJbnB1dCwgZGF0YSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoc3RhcnRDb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkpIHtcbiAgICAgICAgICAgIGlmICghZGF0YS5jb21wb3NpdGlvblN0YXJ0SW5mbykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY29tcG9zaXRpb25TdGFydEluZm8gaXMgbnVsbCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2libGluZ1RleHRFbGUgPSBzdGFydE9mZnNldCA9PT0gMSA/IEVsZW1lbnRVdGlsLmdldE5leHRTaWJsaW5nRWxlbWVudChzdGFydENvbnRyb2wpIDogRWxlbWVudFV0aWwuZ2V0UHJldlNpYmxpbmdFbGVtZW50KHN0YXJ0Q29udHJvbCk7XG4gICAgICAgICAgICBpZiAoc2libGluZ1RleHRFbGUgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZGF0YS5jb21wb3NpdGlvblN0YXJ0SW5mby5vZmZzZXQgPSBzdGFydE9mZnNldCA9PT0gMCA/IHNpYmxpbmdUZXh0RWxlLnRleHQubGVuZ3RoIDogMDtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0VGV4dEdyb3VwKHNpYmxpbmdUZXh0RWxlLCBkYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5wdXRUZXh0UHJvcHMgPSB0aGlzLmdldERlZmF1bHRUZXh0UHJvcHMoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VGV4dEdyb3VwID0gRWxlbWVudFV0aWwuZ2V0TmV3VGV4dEdyb3VwKGlucHV0VGV4dFByb3BzKTtcbiAgICAgICAgICAgICAgICBzdGFydENvbnRyb2wucGFyZW50LmFkZENoaWxkKG5ld1RleHRHcm91cCwgc3RhcnRDb250cm9sLmdldEluZGV4KCkgKyBzdGFydE9mZnNldCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dFRleHRHcm91cChuZXdUZXh0R3JvdXAsIGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0R3JvdXAoc3RhcnRDb250cm9sLCBkYXRhKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOmAieS4reWMuuWfn+WQjui/m+ihjOi+k+WFpVxuICAgICAqIOmcgOimgeWkhOeQhuWwhumAieS4reeahOWMuuWfn+WIoOmZpOWQju+8jOi/m+ihjOi+k+WFpeeahOaDheWGtVxuICAgICAqL1xuICAgIG9uSW5wdXRCeVNlbGVjdFJhbmdlKGRhdGE6IElucHV0RGF0YSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uUmFuZ2VEZWxldGUoKTtcbiAgICAgICAgY29uc3QgY2IgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZWRpdGFibGV9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgICAgIGlmICghZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wID0gZGF0YS5jb21wb3NpdGlvblN0YXJ0SW5mbyBhcyBJQ29tcG9zaXRpb25TdGFydEluZm87XG4gICAgICAgICAgICBjb21wLmVsZW1lbnQgPSBzdGFydENvbnRyb2w7XG4gICAgICAgICAgICBjb21wLm9mZnNldCA9IHN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgdGhpcy5uZXdJbnB1dChkYXRhKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8v5Yip55So5Zue6LCD5a6M5oiQ5ZCO57ut55qE6L6T5YWl5aSE55CGXG4gICAgICAgIHRoaXMuZG9jQ3R4LnNldFBhaW50ZWRDYWxsYmFjayhjYik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5b2T5YmN5YWD57Sg5piv5ZCm5Zyo5q2j56Gu55qE55WZ55eV5Yy65Z+fKGlucy1ydW7jgIFkZWwtcnVuKe+8jOaDheWGteWIhuS4uuS7peS4i+aDheWGtVxuICAgICAqIDEu55WZ55eV5Z2X57G75Z6L5Li65paw5aKe77yM5L2G5piv55WZ55eV5Z2X55qE5Yib5bu66ICF5Li65YW25LuW55So5oi377yM5q2k5pe26ZyA6KaB5ouG5YiG55WZ55eV5Yy65Z+fXG4gICAgICogMi7nlZnnl5XlnZfkuLrlvZPliY3nlKjmiLfliJvlu7rvvIzkvYbmmK/liJvlu7rml7bpl7TlpKfkuo7mnInmlYjnmoTml7bpl7TvvIzmraTml7bpnIDopoHmi4bliIbnlZnnl5XljLrln59cbiAgICAgKiBAcGFyYW0gc3RhcnRDb250cm9sXG4gICAgICogQHBhcmFtIHRyYWNrVHlwZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgaXNJbkNvcnJlY3RUcmFja1JlZ2lvbihzdGFydENvbnRyb2w6IEVsZW1lbnQsIHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBzdGFydENvbnRyb2wucGFyZW50O1xuICAgICAgICByZXR1cm4gcGFyZW50IGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50XG4gICAgICAgICAgICAmJiBwYXJlbnQucHJvcHMudXNlcklkID09PSB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkXG4gICAgICAgICAgICAmJiBwYXJlbnQudHlwZSA9PT0gdHJhY2tUeXBlXG4gICAgICAgICAgICAmJiBDb21tb25VdGlsLmdldE5vd0RpZmZTZWNvbmRzKHBhcmVudC5wcm9wcy5kYXRlKSA8PSB0aGlzLnZpZXdPcHRpb25zLnRyYWNrQ2hhbmdlUGVyaW9kO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOW9k+WJjeWFg+e0oOaYr+WQpuWcqOeVmeeXleWMuuWfnyhpbnMtcnVu44CBZGVsLXJ1binkuK1cbiAgICAgKiBAcGFyYW0gdGFyZ2V0XG4gICAgICogQHBhcmFtIHRyYWNrVHlwZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgaXNJblRyYWNrQmxvY2sodGFyZ2V0OiBFbGVtZW50LCB0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0gfCBudWxsID0gbnVsbCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGFyZ2V0LnBhcmVudCBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCAmJiAodHJhY2tUeXBlID09PSBudWxsIHx8IHRhcmdldC5wYXJlbnQudHlwZSA9PT0gdHJhY2tUeXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnlZnnl5XovpPlhaVcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqIEBwYXJhbSBzdGFydENvbnRyb2xcbiAgICAgKiBAcGFyYW0gc3RhcnRPZmZzZXRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIG5ld0lucHV0VHJhY2tDaGFuZ2VzKGRhdGE6IElucHV0RGF0YSwgc3RhcnRDb250cm9sOiBMZWFmRWxlbWVudCwgc3RhcnRPZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB1c2VySWQgPSB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkO1xuICAgICAgICBjb25zdCBjb21wSW5mbyA9IGRhdGEuY29tcG9zaXRpb25TdGFydEluZm8gYXMgSUNvbXBvc2l0aW9uU3RhcnRJbmZvO1xuICAgICAgICBpZiAodGhpcy5pc0luQ29ycmVjdFRyYWNrUmVnaW9uKHN0YXJ0Q29udHJvbCwgVHJhY2tSdW5UeXBlRW51bS5JbnNlcnRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0luVHJhY2tCbG9jayhzdGFydENvbnRyb2wpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdJbnB1dCA9IHRoaXMuY3JlYXRlTmV3VHJhY2tJbnB1dChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBUcmFja1J1blR5cGVFbnVtLkluc2VydGVkKTtcbiAgICAgICAgICAgIGNvbXBJbmZvLm9mZnNldCA9IDA7XG4gICAgICAgICAgICBjb21wSW5mby5lbGVtZW50ID0gbmV3SW5wdXQ7XG4gICAgICAgICAgICB0aGlzLmlucHV0VGV4dEdyb3VwKG5ld0lucHV0LCBkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICB0cmFja0VsZW1lbnQsXG4gICAgICAgICAgICAgICAgbmV3VGV4dEdyb3VwXG4gICAgICAgICAgICB9ID0gdGhpcy5jcmVhdGVUZXh0VHJhY2tFbGVtZW50KHN0YXJ0Q29udHJvbCwgbnVsbCwgVHJhY2tSdW5UeXBlRW51bS5JbnNlcnRlZCk7XG4gICAgICAgICAgICB0aGlzLmluc2VydEVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgW3RyYWNrRWxlbWVudF0pXG4gICAgICAgICAgICBjb21wSW5mby5vZmZzZXQgPSAwO1xuICAgICAgICAgICAgY29tcEluZm8uZWxlbWVudCA9IG5ld1RleHRHcm91cDtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0R3JvdXAobmV3VGV4dEdyb3VwLCBkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5Yib5bu65paw55qE55WZ55eV5Z2XLOW5tui/lOWbnueVmeeXleWdl+i+k+WFpeWumuS9jeaWh+acrFxuICAgICAqIEBwYXJhbSBzdGFydENvbnRyb2xcbiAgICAgKiBAcGFyYW0gc3RhcnRPZmZzZXRcbiAgICAgKiBAcGFyYW0gdHJhY2tUeXBlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBjcmVhdGVOZXdUcmFja0lucHV0KHN0YXJ0Q29udHJvbDogTGVhZkVsZW1lbnQsIHN0YXJ0T2Zmc2V0OiBudW1iZXIsIHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSk6IFRleHRHcm91cEVsZW1lbnQge1xuICAgICAgICBjb25zdCB0ZXh0UHJvcHMgPSB0aGlzLmdldERlZmF1bHRUZXh0UHJvcHMoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCk7XG4gICAgICAgIGNvbnN0IGN1cnJUcmFja0VsZSA9IHN0YXJ0Q29udHJvbC5wYXJlbnQgYXMgVHJhY2tSdW5FbGVtZW50O1xuICAgICAgICBpZiAoc3RhcnRDb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCAmJiBzdGFydE9mZnNldCA+IDAgJiYgc3RhcnRPZmZzZXQgPCBzdGFydENvbnRyb2wudGV4dE1lYXN1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRUZXh0ID0gc3RhcnRDb250cm9sLnNwbGljZVRleHQoc3RhcnRPZmZzZXQsIHN0YXJ0Q29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoLCB0cnVlKSBhcyBUZXh0R3JvdXBFbGVtZW50O1xuICAgICAgICAgICAgc3RhcnRDb250cm9sLnBhcmVudC5hZGRDaGlsZChzcGxpdFRleHQsIHN0YXJ0Q29udHJvbC5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHN0YXJ0Q29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQgPiAwID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc3RhcnRDb250cm9sLmdldEluZGV4KCkgKyBzdGFydE9mZnNldDtcbiAgICAgICAgLy/liIflibLnlZnnl5XlnZdcbiAgICAgICAgaWYgKGluZGV4ID4gMCAmJiBpbmRleCA8IGN1cnJUcmFja0VsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0VHJhY2sgPSBjdXJyVHJhY2tFbGUuc3BsaXQoc3RhcnRDb250cm9sLmdldEluZGV4KCkgKyBzdGFydE9mZnNldCkgYXMgVHJhY2tSdW5FbGVtZW50O1xuICAgICAgICAgICAgY3VyclRyYWNrRWxlLnBhcmVudC5hZGRDaGlsZChzcGxpdFRyYWNrLCBjdXJyVHJhY2tFbGUuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgY29uc3Qge3RyYWNrRWxlbWVudCwgbmV3VGV4dEdyb3VwfSA9IHRoaXMuY3JlYXRlVGV4dFRyYWNrRWxlbWVudChzdGFydENvbnRyb2wsIHRleHRQcm9wcywgdHJhY2tUeXBlKTtcbiAgICAgICAgICAgIGN1cnJUcmFja0VsZS5wYXJlbnQuYWRkQ2hpbGQodHJhY2tFbGVtZW50LCBjdXJyVHJhY2tFbGUuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1RleHRHcm91cDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHt0cmFja0VsZW1lbnQsIG5ld1RleHRHcm91cH0gPSB0aGlzLmNyZWF0ZVRleHRUcmFja0VsZW1lbnQoc3RhcnRDb250cm9sLCB0ZXh0UHJvcHMsIHRyYWNrVHlwZSk7XG4gICAgICAgICAgICBjdXJyVHJhY2tFbGUucGFyZW50LmFkZENoaWxkKHRyYWNrRWxlbWVudCwgY3VyclRyYWNrRWxlLmdldEluZGV4KCkgKyAoaW5kZXggPT09IDAgPyAwIDogMSkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1RleHRHcm91cDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluW9k+WJjei+k+WFpeiKgueCueeahOaWh+acrOWxnuaAp1xuICAgICAqIEBwYXJhbSBzdGFydENvbnRyb2xcbiAgICAgKiBAcGFyYW0gb2Zmc2V0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXREZWZhdWx0VGV4dFByb3BzKHN0YXJ0Q29udHJvbDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogVGV4dFByb3BzIHtcbiAgICAgICAgbGV0IHRleHRQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdFRleHRQcm9wc0J5T3B0aW9ucygpO1xuICAgICAgICBpZiAoc3RhcnRDb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgdGV4dFByb3BzID0gc3RhcnRDb250cm9sLnByb3BzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGFFbGUgPSBFbGVtZW50VXRpbC5nZXREYXRhRWxlbWVudChzdGFydENvbnRyb2wpIGFzIERhdGFFbGVtZW50SW5saW5lR3JvdXA7XG4gICAgICAgIGlmIChkYXRhRWxlICYmIElzSW5TaWRlRGF0YUVsZW1lbnQoc3RhcnRDb250cm9sLCBvZmZzZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YUVsZS5wcm9wcy52YWx1ZVRleHRQcm9wcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dFByb3BzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOagueaNrumAiemhuemFjee9rui/lOWbnuWIm+W7uuaWh+acrOeahOm7mOiupOaWh+acrOWxnuaAp1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXREZWZhdWx0VGV4dFByb3BzQnlPcHRpb25zKCk6IFRleHRQcm9wcyB7XG4gICAgICAgIGNvbnN0IHByb3BzID0gbmV3IFRleHRQcm9wcygpO1xuICAgICAgICBwcm9wcy5mb250TmFtZSA9IHRoaXMudmlld09wdGlvbnMuZGVmYXVsdEZvbnROYW1lO1xuICAgICAgICBwcm9wcy5mb250U2l6ZSA9IHRoaXMudmlld09wdGlvbnMuZGVmYXVsdEZvbnRTaXplO1xuICAgICAgICBwcm9wcy5jb2xvciA9IHRoaXMudmlld09wdGlvbnMuZGVmYXVsdENvbG9yO1xuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5b2T5YmN5YWD57Sg5L2N5LqO55WZ55eV5Yy65Z+f5YaF77yM5L2G5piv5b2T5YmN57yW6L6R5qih5byP5Li66Z2e55WZ55eV5qih5byP77yM6ZyA6KaB5bCG5b2T5YmN55WZ55eV5YWD57Sg5YiG5Ymy5byA5p2l77yM5o+S5YWl5paw5pmu6YCa5paH5pys5YWD57Sg5a+56LGhLOW5tui/lOWbnlxuICAgICAqIEBwYXJhbSBzdGFydENvbnRyb2xcbiAgICAgKiBAcGFyYW0gc3RhcnRPZmZzZXRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHNwbGl0VHJhY2tFbGVtZW50KHN0YXJ0Q29udHJvbDogTGVhZkVsZW1lbnQsIHN0YXJ0T2Zmc2V0OiBudW1iZXIpOiBUZXh0R3JvdXBFbGVtZW50IHtcbiAgICAgICAgaWYgKCEoc3RhcnRDb250cm9sLnBhcmVudCBpbnN0YW5jZW9mIFRyYWNrUnVuRWxlbWVudCkgJiYgc3RhcnRDb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0Q29udHJvbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXh0UHJvcHMgPSB0aGlzLmdldERlZmF1bHRUZXh0UHJvcHMoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCk7XG4gICAgICAgIGNvbnN0IGN1cnJUcmFja0VsZSA9IHN0YXJ0Q29udHJvbC5wYXJlbnQgYXMgVHJhY2tSdW5FbGVtZW50O1xuICAgICAgICBpZiAoc3RhcnRDb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCAmJiBzdGFydE9mZnNldCA+IDAgJiYgc3RhcnRPZmZzZXQgPCBzdGFydENvbnRyb2wudGV4dE1lYXN1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgc3BsaXRUZXh0ID0gc3RhcnRDb250cm9sLnNwbGljZVRleHQoc3RhcnRPZmZzZXQsIHN0YXJ0Q29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoLCB0cnVlKSBhcyBUZXh0R3JvdXBFbGVtZW50O1xuICAgICAgICAgICAgc3RhcnRDb250cm9sLnBhcmVudC5hZGRDaGlsZChzcGxpdFRleHQsIHN0YXJ0Q29udHJvbC5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICBzdGFydE9mZnNldCA9IHN0YXJ0Q29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQgPiAwID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc3RhcnRDb250cm9sLmdldEluZGV4KCkgKyBzdGFydE9mZnNldDtcbiAgICAgICAgaWYgKGluZGV4ID4gMCAmJiBpbmRleCA8IGN1cnJUcmFja0VsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0VHJhY2sgPSBjdXJyVHJhY2tFbGUuc3BsaXQoc3RhcnRDb250cm9sLmdldEluZGV4KCkgKyBzdGFydE9mZnNldCkgYXMgVHJhY2tSdW5FbGVtZW50O1xuICAgICAgICAgICAgY3VyclRyYWNrRWxlLnBhcmVudC5hZGRDaGlsZChzcGxpdFRyYWNrLCBjdXJyVHJhY2tFbGUuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgY29uc3QgbmV3SW5wdXQgPSBFbGVtZW50VXRpbC5nZXROZXdUZXh0R3JvdXAodGV4dFByb3BzKTtcbiAgICAgICAgICAgIGN1cnJUcmFja0VsZS5wYXJlbnQuYWRkQ2hpbGQobmV3SW5wdXQsIGN1cnJUcmFja0VsZS5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zcGxpdFRyYWNrRWxlbWVudChuZXdJbnB1dCwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuZXdJbnB1dCA9IEVsZW1lbnRVdGlsLmdldE5ld1RleHRHcm91cCh0ZXh0UHJvcHMpO1xuICAgICAgICAgICAgY3VyclRyYWNrRWxlLnBhcmVudC5hZGRDaGlsZChuZXdJbnB1dCwgY3VyclRyYWNrRWxlLmdldEluZGV4KCkgKyAoaW5kZXggPT09IDAgPyAwIDogMSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3BsaXRUcmFja0VsZW1lbnQobmV3SW5wdXQsIDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yib5bu65o+S5YWlKGlucy1ydW4pIOeVmeeXlSzlubbkuJTov5Tlm57nlZnnl5XnmoTmlofmnKzlhYPntKDlr7nosaFcbiAgICAgKiBAcGFyYW0gc3RhcnRDb250cm9sXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZVRleHRUcmFja0VsZW1lbnQoc3RhcnRDb250cm9sOiBFbGVtZW50LCB0ZXh0UHJvcHM6IFRleHRQcm9wcyB8IG51bGwsIHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSk6IHsgdHJhY2tFbGVtZW50OiBUcmFja1J1bkVsZW1lbnQsIG5ld1RleHRHcm91cDogVGV4dEdyb3VwRWxlbWVudCB9IHtcbiAgICAgICAgY29uc3QgcGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRyYWNrRWxlbWVudCA9IHRoaXMuY3JlYXRlVHJhY2tFbGVtZW50KHRyYWNrVHlwZSk7XG4gICAgICAgIHRleHRQcm9wcyA9IHRleHRQcm9wcyB8fCB0aGlzLmdldERlZmF1bHRUZXh0UHJvcHNCeU9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgbmV3VGV4dEdyb3VwID0gRWxlbWVudFV0aWwuZ2V0TmV3VGV4dEdyb3VwKHRleHRQcm9wcyk7XG4gICAgICAgIG5ld1RleHRHcm91cC5wcm9wcy5jb2xvciA9ICcnO1xuICAgICAgICAvL25ld1RleHRHcm91cC5wcm9wcy5jb2xvciA9ICcjZmY0ZDRmJztcbiAgICAgICAgdHJhY2tFbGVtZW50LmFkZENoaWxkKG5ld1RleHRHcm91cCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0cmFja0VsZW1lbnQsXG4gICAgICAgICAgICBuZXdUZXh0R3JvdXBcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUcmFja0VsZW1lbnQodHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKTogVHJhY2tSdW5FbGVtZW50IHtcbiAgICAgICAgY29uc3QgdHJhY2tFbGVtZW50ID0gbmV3IFRyYWNrUnVuRWxlbWVudCh0cmFja1R5cGUpO1xuICAgICAgICB0cmFja0VsZW1lbnQucHJvcHMudXNlcklkID0gdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlci5pZDtcbiAgICAgICAgdHJhY2tFbGVtZW50LnByb3BzLnVzZXJOYW1lID0gdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlci5uYW1lO1xuICAgICAgICB0cmFja0VsZW1lbnQucHJvcHMuZGF0ZSA9IENvbW1vblV0aWwuZm9ybWF0Tm93KCdZWVlZLU1NLUREIEhIOm1tOnNzJyk7XG4gICAgICAgIHRyYWNrRWxlbWVudC5wcm9wcy5pZCA9IG5hbm9pZCg1KTtcbiAgICAgICAgcmV0dXJuIHRyYWNrRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlucHV0VGV4dEdyb3VwKHRleHQ6IFRleHRHcm91cEVsZW1lbnQsIGRhdGE6IElucHV0RGF0YSk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2SW5wdXREYXRhID0gZGF0YS5wcmV2SW5wdXREYXRhIHx8ICcnO1xuICAgICAgICBjb25zdCBwcmV2SW5wdXREYXRhTGVuZ3RoID0gcHJldklucHV0RGF0YS5sZW5ndGg7XG4gICAgICAgIGlmICghZGF0YS5jb21wb3NpdGlvblN0YXJ0SW5mbykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb21wb3NpdGlvblN0YXJ0SW5mbyBpcyBudWxsJylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7ZWxlbWVudCwgb2Zmc2V0fSA9IGRhdGEuY29tcG9zaXRpb25TdGFydEluZm87XG4gICAgICAgIGxldCBzdGFydElucHV0T2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICAvL3N0YXJ0SW5wdXRPZmZzZXQgLT0gcHJldklucHV0RGF0YUxlbmd0aDtcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAvL+W9k+WJjemAieS4reWFg+e0oOS9jeS6jui+k+WFpeWFg+e0oOaYr+i1t+Wni+i/mOaYr+e7k+adn+S9jee9ru+8jOWmguaenOS9jeS6jui1t+Wni+S9jee9ru+8jOWImei+k+WFpeWBj+enu+mHj+S4ujAs5ZCm5YiZ5Li65pyq5Y+Y5pu05LmL5YmN55qE5YaF5a65bGVuZ3RoXG4gICAgICAgICAgICBpZiAoRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KGVsZW1lbnQpID09PSB0ZXh0KSB7XG4gICAgICAgICAgICAgICAgc3RhcnRJbnB1dE9mZnNldCA9IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5wdXRPZmZzZXQgPSB0ZXh0LnRleHRNZWFzdXJlcy5sZW5ndGggLSBwcmV2SW5wdXREYXRhTGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRleHQuc3BsaWNlKHN0YXJ0SW5wdXRPZmZzZXQsIHByZXZJbnB1dERhdGFMZW5ndGgsIGRhdGEuZGF0YSk7XG4gICAgICAgIC8v6L6T5YWl5ZCO5pKk6ZSA77yM5a+86Ie05paH5pys57uE5YaF5Li656m6XG4gICAgICAgIGlmICghdGV4dC50ZXh0Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eVRleHQodGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UodGV4dCwgc3RhcnRJbnB1dE9mZnNldCArIGRhdGEuZGF0YS5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBiYWNrc3BhY2Us5ZCR5YmN5Yig6ZmkXG4gICAgICovXG4gICAgb25CYWNrc3BhY2UoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBjb2xsYXBzZWR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnRDb250cm9sIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50RWxlbWVudCA9IG5ldyBLZXlib3JhZEVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIGV2ZW50RWxlbWVudC5rZXkgPSAnYmFja3NwYWNlJztcbiAgICAgICAgZXZlbnRFbGVtZW50LnNvdXJjZSA9IHN0YXJ0Q29udHJvbDtcbiAgICAgICAgZXZlbnRFbGVtZW50LnNvdXJjZUV2ZW50ID0gZXZ0O1xuICAgICAgICBldmVudEVsZW1lbnQuc291cmNlT2Zmc2V0ID0gc3RhcnRPZmZzZXQ7XG4gICAgICAgIGNvbnN0IHJlcyA9IERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0JhY2tzcGFjZUtleScsIHN0YXJ0Q29udHJvbCwgZXZlbnRFbGVtZW50LCAnQ2FwdHVyZScsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuaXNDYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY0NvbW1lbnQudXBkYXRlQ29tbWVudHMoKTtcbiAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5vbkJhY2tzcGFjZUVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uUmFuZ2VEZWxldGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlbGV0ZSzlkJHlkI7liKDpmaRcbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICovXG4gICAgb25EZWxldGVLZXlIYW5kbGVyKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgY29sbGFwc2VkfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IGV2ZW50RWxlbWVudCA9IG5ldyBLZXlib3JhZEVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIGV2ZW50RWxlbWVudC5rZXkgPSAnZGVsZXRlJztcbiAgICAgICAgZXZlbnRFbGVtZW50LnNvdXJjZSA9IHN0YXJ0Q29udHJvbDtcbiAgICAgICAgZXZlbnRFbGVtZW50LnNvdXJjZUV2ZW50ID0gZXZ0O1xuICAgICAgICBldmVudEVsZW1lbnQuc291cmNlT2Zmc2V0ID0gc3RhcnRPZmZzZXQ7XG4gICAgICAgIGNvbnN0IHJlcyA9IERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0RlbGV0ZUtleScsIHN0YXJ0Q29udHJvbCwgZXZlbnRFbGVtZW50LCAnQ2FwdHVyZScsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuaXNDYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5RGVsZXRlRWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25SYW5nZURlbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u6YCJ5oup6IyD5Zu05Yig6ZmkXG4gICAgICovXG4gICAgcHJpdmF0ZSBvblJhbmdlRGVsZXRlKCk6IHsgY3Vyc29yRWxlOiBFbGVtZW50LCBjdXJzb3JPZmZzZXQ6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3Qge3NlbGVjdGVkUmFuZ2V9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlbGVjdGlvblJhbmdlIGlzIG51bGwnKVxuICAgICAgICB9XG4gICAgICAgIC8v55So5LqO5Yi35paw5ZCO5a6a5L2N5YWJ5qCHXG4gICAgICAgIGxldCBzdGFydFBvaW50RWxlbWVudDogRWxlbWVudDtcbiAgICAgICAgbGV0IHN0YXJ0UG9pbnRPZmZzZXQgPSAwO1xuICAgICAgICBpZiAoc2VsZWN0ZWRSYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgLy/mn5DkuKrlrrnlmajnmoTlhoXlrrnooqvlhajpg6jpgInkuK1cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIEJsb2NrQ29udGFpbmVyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRFbGVtZW50ID0gc2VsZWN0ZWRSYW5nZS50YXJnZXQ7XG4gICAgICAgICAgICAgICAgc3RhcnRQb2ludE9mZnNldCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL+WGheWuueWdl+iiq+mAieS4rSzpnIDopoHlkJHkuIrlr7vmib7lhoXlrrnlnZflrrnlmahcbiAgICAgICAgICAgIGVsc2UgaWYgKHNlbGVjdGVkUmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgQmxvY2tDb250ZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbnRhaW5lciA9IEVsZW1lbnRVdGlsLmdldFBhcmVudChzZWxlY3RlZFJhbmdlLnRhcmdldCwgKGl0ZW0pID0+IGl0ZW0gaW5zdGFuY2VvZiBCbG9ja0NvbnRhaW5lckVsZW1lbnQpIGFzIEJsb2NrQ29udGFpbmVyRWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Q29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRFbGVtZW50ID0gcGFyZW50Q29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICBzdGFydFBvaW50T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquiDveWQkeS4iuWvu+aJvuWIsOWumuS9jeeahOWGheWuueWdl+WuueWZqCcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquefpeadoeS7tuWMuumXtCcpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydFJhbmdlID0gUmFuZ2VVdGlsLmdldFN0YXJ0UmFuZ2VUYXJnZXQoc2VsZWN0ZWRSYW5nZSkgYXMgU2VsZWN0aW9uQ29udGVudFJhbmdlO1xuICAgICAgICAgICAgY29uc3QgZW5kUmFuZ2UgPSBSYW5nZVV0aWwuZ2V0RW5kUmFuZ2VUYXJnZXQoc2VsZWN0ZWRSYW5nZSkgYXMgU2VsZWN0aW9uQ29udGVudFJhbmdlO1xuICAgICAgICAgICAgaWYgKHN0YXJ0UmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzdGFydFBvaW50RWxlbWVudCA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChzdGFydFJhbmdlLnRhcmdldCwgZmFsc2UsIHRydWUsIHRoaXMudmlld09wdGlvbnMpIGFzIExlYWZFbGVtZW50O1xuICAgICAgICAgICAgICAgIHN0YXJ0UG9pbnRPZmZzZXQgPSAtMTtcbiAgICAgICAgICAgICAgICAvL+WIpOaWree7k+adn+mAieWMuuWSjOW8gOWni+mAieWMuuaYr+WQpuWcqOS4gOS4quauteiQveS4re+8jOWwvemHj+iQveWcqOWQjOS4gOauteiQveS4rVxuICAgICAgICAgICAgICAgIGlmICghc3RhcnRQb2ludEVsZW1lbnQgfHwgRWxlbWVudFV0aWwuaXNJblNhbWVQYXJhZ3JhcGgoc3RhcnRSYW5nZS50YXJnZXQsIGVuZFJhbmdlLnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmRSYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb2ludEVsZW1lbnQgPSBlbmRSYW5nZS50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvaW50T2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhcnRQb2ludEVsZW1lbnQgPSBzdGFydFJhbmdlLnRhcmdldCBhcyBMZWFmRWxlbWVudDtcbiAgICAgICAgICAgICAgICBzdGFydFBvaW50T2Zmc2V0ID0gc3RhcnRSYW5nZS5zdGFydE9mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVJhbmdlSW5Gb3JtRWRpdChzZWxlY3RlZFJhbmdlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVSYW5nZShzZWxlY3RlZFJhbmdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2Uoc3RhcnRQb2ludEVsZW1lbnQsIHN0YXJ0UG9pbnRPZmZzZXQpO1xuICAgICAgICByZXR1cm4ge2N1cnNvckVsZTogc3RhcnRQb2ludEVsZW1lbnQsIGN1cnNvck9mZnNldDogc3RhcnRQb2ludE9mZnNldH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYmFja3NwYWNl5Yig6ZmkXG4gICAgICogQHBhcmFtIGNvbnRyb2xcbiAgICAgKiBAcGFyYW0gb2Zmc2V0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIG9uQmFja3NwYWNlRWxlbWVudChjb250cm9sOiBMZWFmRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICBpZiAob2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2RWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KGNvbnRyb2wsIGZhbHNlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIGlmICghcHJldkVsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShjb250cm9sLCAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoRWxlbWVudFV0aWwuaXNJblNhbWVQYXJhZ3JhcGgoY29udHJvbCwgcHJldkVsZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoRWxlbWVudFV0aWwuZ2V0UHJldlNpYmxpbmdFbGVtZW50KGNvbnRyb2wpID09PSBwcmV2RWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25CYWNrc3BhY2VFbGVtZW50KHByZXZFbGUsIEVsZW1lbnRVdGlsLmdldEVsZW1lbnRFbmRPZmZzZXQocHJldkVsZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwcmV2RWxlLCAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL+mcgOimgeWIpOaWreaYr+WQpuaYr+WFhOW8n+auteiQve+8jOWFhOW8n+auteiQve+8jOmcgOimgeWQiOW5tlxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZQYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKHByZXZFbGUsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VyclBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoY29udHJvbCwgUGFyYWdyYXBoRWxlbWVudCkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgICAgICAgICAvL+ihqOaYjuaYr+e0p+aMqOedgOeahOS4pOS4quauteiQve+8jOimgei/m+ihjOauteiQveWQiOW5tlxuICAgICAgICAgICAgICAgIGlmIChFbGVtZW50VXRpbC5nZXRQcmV2U2libGluZ0VsZW1lbnQoY3VyclBhcmEpID09PSBwcmV2UGFyYSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmFibGVUcmFja0NoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwcmV2RWxlLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21iaW5lUGFyYWdyYXBoKHByZXZQYXJhLCBjdXJyUGFyYSwgY29udHJvbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy/kuI3mmK/ntKfmjKjnnYDnmoTmrrXokL3vvIzliJnliY3kuIDkuKrmrrXokL3mmK/kvY3kuo7lj6bkuIDkuKrlrrnlmajph4zvvIzkvovlpoLvvJrlpITkuo7ljZXlhYPmoLzlhoXnmoTmrrXokL1cbiAgICAgICAgICAgICAgICAgICAgLy/liJnkuI3lkJHliY3lrprkvY1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGNvbnRyb2wsIG9mZnNldClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlVGV4dChjb250cm9sLCBvZmZzZXQgLSAxLCAxKTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2wudGV4dE1lYXN1cmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUVtcHR5VGV4dChjb250cm9sKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY29udHJvbCwgb2Zmc2V0IC0gMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5wYXJlbnQgaW5zdGFuY2VvZiBJbmxpbmVHcm91cElucHV0RWxlbWVudCAmJiBjb250cm9sIGluc3RhbmNlb2YgRGF0YURlY29yYXRlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhRWxlID0gY29udHJvbC5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIC8v56m65pWw5o2u5YWD77yM5bm25LiU5b2T5YmN5YWJ5qCH5aSE5LqO5pWw5o2u5YWD5byA5aeL5L2N572uXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhbkRlbGV0ZUlubGluZUdyb3VwKGRhdGFFbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEN1cm9zckZvckRlbGV0ZUFjdGlvbihkYXRhRWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFFbGUucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wuaXNQcmVmaXggJiYgdGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5qdW1wVG9QcmV2RGF0YUVsZW1lbnQoZGF0YUVsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wuaXNEZWNvcmF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQmFja3NwYWNlRWxlbWVudChjb250cm9sLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUVsZW1lbnQoY29udHJvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDot7PliLDkuIrkuIDkuKrmlbDmja7lhYPkuK1cbiAgICAgKiBAcGFyYW0gY3VyckVsZVxuICAgICAqL1xuICAgIHByaXZhdGUganVtcFRvUHJldkRhdGFFbGVtZW50KGN1cnJFbGU6IElubGluZUdyb3VwSW5wdXRFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgIT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2RWxlID0gRWxlbWVudFV0aWwuZ2V0UHJldkRhdGFFbGVtZW50KHRoaXMuZG9jQ3R4LCBjdXJyRWxlIGFzIERhdGFFbGVtZW50SW5saW5lR3JvdXApO1xuICAgICAgICBpZiAoIXByZXZFbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldkVsZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZFbGUuZW5kRGVjb3JhdGUsIDApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRlbGV0ZeWIoOmZpFxuICAgICAqIEBwYXJhbSBjb250cm9sXG4gICAgICogQHBhcmFtIG9mZnNldFxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSBvbktleURlbGV0ZUVsZW1lbnQoY29udHJvbDogTGVhZkVsZW1lbnQsIG9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gRWxlbWVudFV0aWwuZ2V0RWxlbWVudEVuZE9mZnNldChjb250cm9sKSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dEVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChjb250cm9sLCBmYWxzZSwgdHJ1ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoIW5leHRFbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY29udHJvbCwgLTEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChFbGVtZW50VXRpbC5pc0luU2FtZVBhcmFncmFwaChjb250cm9sLCBuZXh0RWxlKSkge1xuICAgICAgICAgICAgICAgIGlmIChFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ0VsZW1lbnQoY29udHJvbCkgPT09IG5leHRFbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbktleURlbGV0ZUVsZW1lbnQobmV4dEVsZSwgMCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKG5leHRFbGUsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy/pnIDopoHliKTmlq3mmK/lkKbmmK/lhYTlvJ/mrrXokL3vvIzlhYTlvJ/mrrXokL3vvIzpnIDopoHlkIjlubZcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0UGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShuZXh0RWxlLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJQYXJhID0gRWxlbWVudFV0aWwuZ2V0UGFyZW50QnlUeXBlKGNvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgLy/ooajmmI7mmK/ntKfmjKjnnYDnmoTkuKTkuKrmrrXokL3vvIzopoHov5vooYzmrrXokL3lkIjlubZcbiAgICAgICAgICAgICAgICBpZiAoRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KGN1cnJQYXJhKSA9PT0gbmV4dFBhcmEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhdGUuZW5hYmxlVHJhY2tDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UobmV4dEVsZSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21iaW5lUGFyYWdyYXBoKG5leHRQYXJhLCBjdXJyUGFyYSwgY29udHJvbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy/kuI3mmK/ntKfmjKjnnYDnmoTmrrXokL3vvIzliJnliY3kuIDkuKrmrrXokL3mmK/kvY3kuo7lj6bkuIDkuKrlrrnlmajph4zvvIzkvovlpoLvvJrlpITkuo7ljZXlhYPmoLzlhoXnmoTmrrXokL1cbiAgICAgICAgICAgICAgICAgICAgLy/liJnkuI3lkJHliY3lrprkvY1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGNvbnRyb2wsIG9mZnNldClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlVGV4dChjb250cm9sLCBvZmZzZXQsIDEpO1xuICAgICAgICAgICAgICAgIGlmICghY29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlUZXh0KGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShjb250cm9sLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wucGFyZW50IGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCAmJiBjb250cm9sIGluc3RhbmNlb2YgRGF0YURlY29yYXRlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhRWxlID0gY29udHJvbC5wYXJlbnQgYXMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cDtcbiAgICAgICAgICAgICAgICAgICAgLy/nqbrmlbDmja7lhYPvvIzlubbkuJTlvZPliY3lhYnmoIflpITkuo7mlbDmja7lhYPlvIDlp4vkvY3nva5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wuaXNQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhbkRlbGV0ZUlubGluZUdyb3VwKGRhdGFFbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDdXJvc3JGb3JEZWxldGVBY3Rpb24oZGF0YUVsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGNvbnRyb2wsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghY29udHJvbC5pc1ByZWZpeCAmJiBkYXRhRWxlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGRhdGFFbGUuZW5kRGVjb3JhdGUsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5pc0RlY29yYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhpcy5vbktleURlbGV0ZUVsZW1lbnQoY29udHJvbCwgLTEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudChjb250cm9sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIpOaWreaYr+WQpuWPr+S7peWIoOmZpOaVsOaNrue7hFxuICAgICAqIEBwYXJhbSBkYXRhRWxlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNhbkRlbGV0ZUlubGluZUdyb3VwKGRhdGFFbGU6IElubGluZUdyb3VwSW5wdXRFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YUVsZS5sZW5ndGggPT09IDI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRlbGV0ZVRleHQodGV4dDogVGV4dEdyb3VwRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIsIGxlbjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblN0YXRlLmVuYWJsZVRyYWNrQ2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEZWxldGVkVHJhY2tUZXh0KHRleHQsIG9mZnNldCwgbGVuKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGV4dC5zcGxpY2Uob2Zmc2V0LCBsZW4pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGVsZXRlSXRlbShpdGVtOiBMZWFmRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TdGF0ZS5lbmFibGVUcmFja0NoYW5nZXMpIHtcbiAgICAgICAgICAgIC8v5Yig6Zmk56ym5Y+35LiN6L+b6KGM55WZ55eVXG4gICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSAncHN5bScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25UcmFja0RlbGV0ZUVsZW1lbnQoaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtLnJlbW92ZSgpO1xuICAgICAgICAgICAgaXRlbS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOW9k+WJjeWFg+e0oOaYr+WQpuWcqOeVmeeXleWFg+e0oOWGhVxuICAgICAqIEBwYXJhbSB0YXJnZXRcbiAgICAgKiBAcGFyYW0gdHJhY2tUeXBlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzSW5DdXJyZW50VXNlclRyYWNrKHRhcmdldDogRWxlbWVudCwgdHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0YXJnZXQucGFyZW50IGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50ICYmIHRhcmdldC5wYXJlbnQudHlwZSA9PT0gdHJhY2tUeXBlICYmIHRhcmdldC5wYXJlbnQucHJvcHMudXNlcklkID09PSB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyLmlkO1xuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0luVHJhY2tFbGVtZW50KHRhcmdldDogRWxlbWVudCwgdHJhY2tUeXBlOiBUcmFja1J1blR5cGVFbnVtKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0YXJnZXQucGFyZW50IGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50ICYmIHRhcmdldC5wYXJlbnQudHlwZSA9PT0gdHJhY2tUeXBlO1xuXG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDnlZnnl5XpmaTmlofmnKzku6XlpJbnmoTlhbbku5blhYPntKBcbiAgICAgKiBAcGFyYW0gdGFyZ2V0XG4gICAgICovXG4gICAgcHJpdmF0ZSBvblRyYWNrRGVsZXRlRWxlbWVudCh0YXJnZXQ6IExlYWZFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRhcmdldC5wYXJlbnQ7XG4gICAgICAgIGlmICh0aGlzLmlzSW5UcmFja0VsZW1lbnQodGFyZ2V0LCBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/lvZPliY3nlKjmiLflop7liqDnmoTlhoXlrrnvvIzlhoXlrrnnm7TmjqXliKDpmaTkuI3pnIDopoHnlZnnl5VcbiAgICAgICAgaWYgKHRoaXMuaXNJbkN1cnJlbnRVc2VyVHJhY2sodGFyZ2V0LCBUcmFja1J1blR5cGVFbnVtLkluc2VydGVkKSkge1xuICAgICAgICAgICAgdGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXRweUlubGluZUJsb2NrKHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy90YXJnZXQucmVtb3ZlKCk7XG4gICAgICAgIGNvbnN0IHRyYWNrRWxlID0gdGhpcy5nZXROZXh0VHJhY2tFbGVtZW50KHRhcmdldCwgVHJhY2tSdW5UeXBlRW51bS5EZWxldGVkKTtcbiAgICAgICAgdHJhY2tFbGUuYWRkQ2hpbGQodGFyZ2V0LmNsb25lKHRydWUpLCAwKTtcbiAgICAgICAgdGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnJlbW92ZUVtdHB5SW5saW5lQmxvY2socGFyZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmm7TmlrDmlofmnKzliKDpmaTnlZnnl5VcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZURlbGV0ZWRUcmFja1RleHQodGFyZ2V0OiBUZXh0R3JvdXBFbGVtZW50LCBvZmZzZXQ6IG51bWJlciwgbGVuOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJblRyYWNrRWxlbWVudCh0YXJnZXQsIFRyYWNrUnVuVHlwZUVudW0uRGVsZXRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+W9k+WJjeeUqOaIt+WinuWKoOeahOWGheWuue+8jOW9k+WJjeeUqOaIt+WIoOmZpOaXtuS4jemcgOimgeeVmeeXlVxuICAgICAgICBpZiAodGhpcy5pc0luQ3VycmVudFVzZXJUcmFjayh0YXJnZXQsIFRyYWNrUnVuVHlwZUVudW0uSW5zZXJ0ZWQpKSB7XG4gICAgICAgICAgICB0YXJnZXQuc3BsaWNlKG9mZnNldCwgbGVuKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+WFqOmDqOiiq+WIoOmZpFxuICAgICAgICBpZiAob2Zmc2V0ID09PSAwICYmIGxlbiA9PT0gdGFyZ2V0LnRleHRNZWFzdXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNrSW5wdXRUZXh0ID0gdGhpcy5nZXROZXh0VHJhY2tJbnB1dEVsZW1lbnQodGFyZ2V0LCBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQpO1xuICAgICAgICAgICAgdHJhY2tJbnB1dFRleHQudGV4dCA9IHRhcmdldC50ZXh0ICsgdHJhY2tJbnB1dFRleHQudGV4dDtcbiAgICAgICAgICAgIHRhcmdldC5zcGxpY2UoMCwgbGVuKTtcbiAgICAgICAgICAgIC8vdGFyZ2V0LnJlbW92ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHtsZWZ0RWxlbWVudH0gPSB0aGlzLnNwbGl0VGV4dCh0YXJnZXQsIG9mZnNldCArIGxlbik7XG4gICAgICAgIHRhcmdldCA9IGxlZnRFbGVtZW50IGFzIG5ldmVyO1xuICAgICAgICBsZXQgdHJhY2tUZXh0OiBUZXh0R3JvdXBFbGVtZW50ID0gdGhpcy5nZXROZXh0VHJhY2tJbnB1dEVsZW1lbnQodGFyZ2V0LCBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQpO1xuICAgICAgICBjb25zdCBzcFRleHQgPSB0YXJnZXQuc3BsaWNlVGV4dCh0YXJnZXQudGV4dE1lYXN1cmVzLmxlbmd0aCAtIGxlbiwgdGFyZ2V0LnRleHRNZWFzdXJlcy5sZW5ndGgsIHRydWUpO1xuICAgICAgICB0cmFja1RleHQuc3BsaWNlKDAsIDAsIHNwVGV4dD8udGV4dCk7XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGdldE5leHRUcmFja0lucHV0RWxlbWVudCh0YXJnZXQ6IEVsZW1lbnQsIHRyYWNrVHlwZTogVHJhY2tSdW5UeXBlRW51bSk6IFRleHRHcm91cEVsZW1lbnQge1xuICAgICAgICBjb25zdCB0cmFja0VsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXROZXh0U2libGluZ1RyYWNrRWxlbWVudCh0YXJnZXQsIHRyYWNrVHlwZSwgdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlci5pZClcbiAgICAgICAgaWYgKHRyYWNrRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RFbGUgPSB0cmFja0VsZW1lbnQuZ2V0Q2hpbGQoMCk7XG4gICAgICAgICAgICBpZiAoZmlyc3RFbGUgJiYgZmlyc3RFbGUgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0RWxlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJbnB1dCA9IG5ldyBUZXh0R3JvdXBFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgdHJhY2tFbGVtZW50LmFkZENoaWxkKG5ld0lucHV0LCAwKTtcbiAgICAgICAgICAgICAgICB0YXJnZXQucHJvcHMuY2xvbmUobmV3SW5wdXQucHJvcHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdJbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICB0cmFja0VsZW1lbnQsXG4gICAgICAgICAgICAgICAgbmV3VGV4dEdyb3VwXG4gICAgICAgICAgICB9ID0gdGhpcy5jcmVhdGVUZXh0VHJhY2tFbGVtZW50KHRhcmdldCwgdGFyZ2V0LnByb3BzLCBUcmFja1J1blR5cGVFbnVtLkRlbGV0ZWQpO1xuICAgICAgICAgICAgdGFyZ2V0LnBhcmVudC5hZGRDaGlsZCh0cmFja0VsZW1lbnQsIHRhcmdldC5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3VGV4dEdyb3VwO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBwcml2YXRlIGdldE5leHRUcmFja0VsZW1lbnQodGFyZ2V0OiBFbGVtZW50LCB0cmFja1R5cGU6IFRyYWNrUnVuVHlwZUVudW0pOiBUcmFja1J1bkVsZW1lbnQge1xuICAgICAgICBsZXQgdHJhY2tFbGVtZW50ID0gRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdUcmFja0VsZW1lbnQodGFyZ2V0LCB0cmFja1R5cGUsIHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIuaWQpXG4gICAgICAgIGlmICghdHJhY2tFbGVtZW50KSB7XG4gICAgICAgICAgICB0cmFja0VsZW1lbnQgPSB0aGlzLmNyZWF0ZVRyYWNrRWxlbWVudCh0cmFja1R5cGUpO1xuICAgICAgICAgICAgdGFyZ2V0LnBhcmVudC5hZGRDaGlsZCh0cmFja0VsZW1lbnQsIHRhcmdldC5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYWNrRWxlbWVudDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWIoOmZpOWFg+e0oOW5tuWumuS9jeWFieagh1xuICAgICAqIEBwYXJhbSBjb250cm9sXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZUVsZW1lbnQoY29udHJvbDogTGVhZkVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldkVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChjb250cm9sLCBmYWxzZSwgdHJ1ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgIGlmICghcHJldkVsZSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dEVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChjb250cm9sLCB0cnVlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgICAgIGlmIChuZXh0RWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKG5leHRFbGUsIDApO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGNvbnRyb2wsIDApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChFbGVtZW50VXRpbC5pc0luU2FtZVBhcmFncmFwaChjb250cm9sLCBwcmV2RWxlKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKHByZXZFbGUsIC0xKTtcbiAgICAgICAgICAgIGNvbnRyb2wucmVtb3ZlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0RWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uTmV4dFNpYmxpbmdFbGVtZW50KGNvbnRyb2wsIHRydWUsIHRydWUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKG5leHRFbGUgJiYgRWxlbWVudFV0aWwuZ2V0UHJldlNpYmxpbmdFbGVtZW50KG5leHRFbGUpID09PSBjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKG5leHRFbGUsIDApO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocHJldkVsZSwgLTEpO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlm57ovabkuovku7ZcbiAgICAgKi9cbiAgICBvbkVudGVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGJyZWFrUGFyYSA9IHRoaXMuc3BsaXRDdXJyZW50UGFyYWdyYXBoKCk7XG4gICAgICAgIC8v6YCJ5Lit55qE5piv5LiA5Liq5YWD57SgXG4gICAgICAgIGlmIChicmVha1BhcmEgPT09IHBhcmFncmFwaCkge1xuICAgICAgICAgICAgY29uc3QgY2xvbmVQYXJhID0gcGFyYWdyYXBoLmNsb25lKGZhbHNlKTtcbiAgICAgICAgICAgIGJyZWFrUGFyYS5wYXJlbnQuYWRkQ2hpbGQoY2xvbmVQYXJhLCBicmVha1BhcmEuZ2V0SW5kZXgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGJyZWFrUGFyYSwgMCk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmj5LlhaXooajmoLxcbiAgICAgKiBAcGFyYW0gdGJcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGluc2VydFRhYmxlKHRiOiBUYWJsZUVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYnJlYWtQYXJhID0gdGhpcy5zcGxpdEN1cnJlbnRQYXJhZ3JhcGgoKTtcbiAgICAgICAgYnJlYWtQYXJhLnBhcmVudC5hZGRDaGlsZCh0YiwgYnJlYWtQYXJhLmdldEluZGV4KCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UodGIsIDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIhuWJsuW9k+WJjeauteiQveeUqOS6juaPkuWFpeihqOagvOaIluiAheeymOi0tOeahOWGheWuuVxuICAgICAqIEBwYXJhbSBpbnNlcnRJdGVtcyDliIblibLlkI7mj5LlhaXnmoTlhoXlrrnvvIzlhoXlrrnpnIDopoHmmK9ibG9ja+aIluiAheihqOagvOWvueixoVxuICAgICAqL1xuICAgIHByaXZhdGUgc3BsaXRDdXJyZW50UGFyYWdyYXBoKCk6IFBhcmFncmFwaEVsZW1lbnQge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGggPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3RhcnRDb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICBjb25zdCBwYXJhQ29udGFpbmVyID0gcGFyYWdyYXBoLnBhcmVudDtcbiAgICAgICAgLy/lpoLmnpzpgInkuK3nmoTmmK/mrrXokL3nrKzkuIDkuKrlhYPntKBcbiAgICAgICAgY29uc3QgZmlyc3RMZWFmID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChwYXJhZ3JhcGgpO1xuICAgICAgICBpZiAoKHN0YXJ0Q29udHJvbCA9PT0gZmlyc3RMZWFmICYmIHN0YXJ0T2Zmc2V0ID09PSAwKSB8fCAoc3RhcnRDb250cm9sID09PSBmaXJzdExlYWYgJiYgc3RhcnRDb250cm9sIGluc3RhbmNlb2YgUFN5bWJvbEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAvL3RoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwYXJhZ3JhcGgsIDApO1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFncmFwaDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXN0ID0gRWxlbWVudFV0aWwuZ2V0TGFzdExlYWZFbGVtZW50KHBhcmFncmFwaCkgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUGFyYVJhbmdlID0gUmFuZ2VVdGlsLmdldFNlbGN0aW9uUmFuZ2Uoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgbGFzdCwgMSwgcGFyYWdyYXBoKTtcbiAgICAgICAgc2VsZWN0ZWRQYXJhUmFuZ2UuaXNGdWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgYnJlYWtQYXJhID0gRWxlbWVudFV0aWwuY2xvbmVSYW5nZShzZWxlY3RlZFBhcmFSYW5nZSwgdHJ1ZSkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgRWxlbWVudFV0aWwuZml4UGFyYWdyYXBoQ29udGVudChwYXJhZ3JhcGgpO1xuICAgICAgICBFbGVtZW50VXRpbC5maXhQYXJhZ3JhcGhDb250ZW50KGJyZWFrUGFyYSk7XG4gICAgICAgIHBhcmFDb250YWluZXIuYWRkQ2hpbGQoYnJlYWtQYXJhLCBwYXJhZ3JhcGguZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAvL3BhcmFDb250YWluZXIuYWRkQ2hpbGQodGIsIGJyZWFrUGFyYS5nZXRJbmRleCgpKTtcbiAgICAgICAgLy90aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoYnJlYWtQYXJhLCAwKTtcbiAgICAgICAgcmV0dXJuIGJyZWFrUGFyYTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkIjlubbmrrXokL1cbiAgICAgKi9cbiAgICBjb21iaW5lUGFyYWdyYXBoKHByZXZQYXJhOiBQYXJhZ3JhcGhFbGVtZW50LCBjdXJyUGFyYTogUGFyYWdyYXBoRWxlbWVudCwgY3VyckVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldlBhcmFMZW5ndGggPSBwcmV2UGFyYS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VyclBhcmEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY3VyclBhcmEuZ2V0Q2hpbGQoaSkuY2xvbmUodHJ1ZSk7XG4gICAgICAgICAgICBwcmV2UGFyYS5hZGRDaGlsZChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy9jdXJyUGFyYS5yZW1vdmUoKTtcbiAgICAgICAgY29uc3QgY3VyclBhcmFDb250YWluZXIgPSBjdXJyUGFyYS5wYXJlbnQ7XG4gICAgICAgIGN1cnJQYXJhLmRlc3Ryb3koKTtcbiAgICAgICAgY3VyclBhcmFDb250YWluZXIucmVtb3ZlQ2hpbGQoY3VyclBhcmEpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UocHJldlBhcmEuZ2V0Q2hpbGQocHJldlBhcmFMZW5ndGgpLCAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliKDpmaTpgInkuK3nmoTljLrln5/lhoXlrrlcbiAgICAgKiBAcGFyYW0gcmFuZ2VcbiAgICAgKi9cbiAgICBkZWxldGVSYW5nZShyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtzZWxlY3RlZENoaWxkcmVufSA9IHJhbmdlO1xuICAgICAgICBmb3IgKGxldCBpID0gc2VsZWN0ZWRDaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRSYW5nZSA9IHNlbGVjdGVkQ2hpbGRyZW5baV07XG4gICAgICAgICAgICBjb25zdCB7dGFyZ2V0OiBjaGlsZFRhcmdldCwgaXNGdWxsU2VsZWN0ZWQ6IGNoaWxkRnVsbFNlbGVjdGVkfSA9IGNoaWxkUmFuZ2U7XG4gICAgICAgICAgICBpZiAoY2hpbGRUYXJnZXQgaW5zdGFuY2VvZiBMZWFmRWxlbWVudCAmJiAhY2hpbGRUYXJnZXQuaXNEZWNvcmF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZEZ1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlSXRlbShjaGlsZFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZFRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge3N0YXJ0T2Zmc2V0LCBlbmRPZmZzZXR9ID0gY2hpbGRSYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRlbGV0ZVRleHQoY2hpbGRUYXJnZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZFRhcmdldCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAvL+eVmeeXleaooeW8j1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblN0YXRlLmVuYWJsZVRyYWNrQ2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVJhbmdlKGNoaWxkUmFuZ2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8v6KGo5qC85YWo6YCJ54q25oCB5pe277yM5omn6KGM5Yig6Zmk5pON5L2cXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFRhcmdldCBpbnN0YW5jZW9mIFRhYmxlRWxlbWVudCAmJiBjaGlsZEZ1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRUYXJnZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFRhcmdldC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy/mrrXokL3lhajpgInnirbmgIHml7bvvIzmiafooYzliKDpmaTmk43kvZxcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGRUYXJnZXQgaW5zdGFuY2VvZiBCbG9ja0NvbnRlbnRFbGVtZW50ICYmIGNoaWxkRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFRhcmdldC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVGFyZ2V0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZFRhcmdldCBpbnN0YW5jZW9mIElubGluZUdyb3VwRWxlbWVudCAmJiBjaGlsZEZ1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRUYXJnZXQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFRhcmdldC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZVJhbmdlKGNoaWxkUmFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDooajljZXljLrln5/liKDpmaTlpITnkIZcbiAgICAgKiBAcGFyYW0gcmFuZ2VcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgZGVsZXRlUmFuZ2VJbkZvcm1FZGl0KHJhbmdlOiBTZWxlY3Rpb25Db250ZW50UmFuZ2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZW1lbnQgPSBFbGVtZW50VXRpbC5nZXREYXRhRWxlbWVudChyYW5nZS50YXJnZXQpO1xuICAgICAgICAvL+WcqOaVsOaNruWFg+WGheWIoOmZpO+8jOiwg+eUqOaZrumAmueahOWIoOmZpOWkhOeQhlxuICAgICAgICBpZiAoZGF0YUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlUmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8v5Zyo5pWw5o2u5YWD5aSW5Yig6ZmkXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb29wRm9yRGVsRGF0YUVsZVJhbmdlKHJhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOihqOWNleaooeW8jzrliKDpmaTpgInkuK3nmoTljLrln5/lhoXlrrlcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvb3BGb3JEZWxEYXRhRWxlUmFuZ2UocmFuZ2U6IFNlbGVjdGlvbkNvbnRlbnRSYW5nZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c2VsZWN0ZWRDaGlsZHJlbn0gPSByYW5nZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkUmFuZ2UgPSBzZWxlY3RlZENoaWxkcmVuW2ldO1xuICAgICAgICAgICAgY29uc3Qge3RhcmdldDogY2hpbGRUYXJnZXR9ID0gY2hpbGRSYW5nZTtcbiAgICAgICAgICAgIGlmIChjaGlsZFRhcmdldCBpbnN0YW5jZW9mIEJyYW5jaEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRUYXJnZXQgaW5zdGFuY2VvZiBEYXRhRWxlbWVudElubGluZUdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFFbGVQcm9wcyA9IGNoaWxkVGFyZ2V0LnByb3BzIGFzIERhdGFFbGVCYXNlUHJvcHM7XG4gICAgICAgICAgICAgICAgICAgIC8v5pWw5o2u5YWD5Y+v57yW6L6RXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhRWxlUHJvcHMuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlUmFuZ2UoY2hpbGRSYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvb3BGb3JEZWxEYXRhRWxlUmFuZ2UoY2hpbGRSYW5nZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWQkeebruagh+enu+WKqOWFg+e0oFxuICAgICAqIEBwYXJhbSB0YXJnZXRFbGVtZW50XG4gICAgICogQHBhcmFtIHRhcmdldE9mZnNldFxuICAgICAqIEBwYXJhbSBtb3ZlRWxlbWVudFxuICAgICAqIEBwYXJhbSBtb3ZlT2Zmc2V0XG4gICAgICogQHBhcmFtIHNzXG4gICAgICovXG4gICAgbW92ZUVsZW1lbnQodGFyZ2V0RWxlbWVudDogRWxlbWVudCwgdGFyZ2V0T2Zmc2V0OiBudW1iZXIsIG1vdmVFbGVtZW50OiBFbGVtZW50LCBtb3ZlT2Zmc2V0OiBudW1iZXIsIHNzOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBtb3ZlRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7bGVmdEVsZW1lbnQsIHJpZ2h0RWxlbWVudH0gPSB0aGlzLnNwbGl0VGV4dCh0YXJnZXRFbGVtZW50LCB0YXJnZXRPZmZzZXQpO1xuICAgICAgICAgICAgaWYgKGxlZnRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgbGVmdEVsZW1lbnQucGFyZW50LmFkZENoaWxkKG1vdmVFbGVtZW50LCBsZWZ0RWxlbWVudC5nZXRJbmRleCgpICsgMSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmlnaHRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmlnaHRFbGVtZW50LnBhcmVudC5hZGRDaGlsZChtb3ZlRWxlbWVudCwgcmlnaHRFbGVtZW50LmdldEluZGV4KCkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRFbGVtZW50LnBhcmVudC5hZGRDaGlsZChtb3ZlRWxlbWVudCwgdGFyZ2V0RWxlbWVudC5nZXRJbmRleCgpICsgdGFyZ2V0T2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICBzcy5yZXNldFJhbmdlKG1vdmVFbGVtZW50LCBtb3ZlT2Zmc2V0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlkJHmjIflrprnmoTnm67moIfmj5LlhaXlhYPntKBcbiAgICAgKiBAcGFyYW0gdGFyZ2V0RWxlbWVudFxuICAgICAqIEBwYXJhbSB0YXJnZXRPZmZzZXRcbiAgICAgKiBAcGFyYW0gZGVzdEVsZUFycmF5XG4gICAgICovXG4gICAgaW5zZXJ0RWxlbWVudCh0YXJnZXRFbGVtZW50OiBFbGVtZW50LCB0YXJnZXRPZmZzZXQ6IG51bWJlciwgZGVzdEVsZUFycmF5OiBBcnJheTxFbGVtZW50Pik6IEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgbGV0IGxhc3RFbGUhOiBFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7bGVmdEVsZW1lbnQsIHJpZ2h0RWxlbWVudH0gPSB0aGlzLnNwbGl0VGV4dCh0YXJnZXRFbGVtZW50LCB0YXJnZXRPZmZzZXQpO1xuICAgICAgICAgICAgaWYgKGxlZnRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXN0RWxlQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdEVsZSA9IGRlc3RFbGVBcnJheVtpXTtcbiAgICAgICAgICAgICAgICAgICAgbGVmdEVsZW1lbnQucGFyZW50LmFkZENoaWxkKGxhc3RFbGUsIGxlZnRFbGVtZW50LmdldEluZGV4KCkgKyAxICsgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChyaWdodEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRlc3RFbGVBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsYXN0RWxlID0gZGVzdEVsZUFycmF5W2ldXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQobGFzdEVsZSwgcmlnaHRFbGVtZW50LmdldEluZGV4KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGVzdEVsZUFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGFzdEVsZSA9IGRlc3RFbGVBcnJheVtpXVxuICAgICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQucGFyZW50LmFkZENoaWxkKGxhc3RFbGUsIHRhcmdldEVsZW1lbnQuZ2V0SW5kZXgoKSArIHRhcmdldE9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhc3RFbGU7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDmoLnmja7lvIDlp4vkvY3nva7lkoznu5PmnZ/kvY3nva7vvIzlsIblrZfnrKbliIflibLmiJDmjIflrprnmoTljLrpl7RcbiAgICAgKiBAcGFyYW0gc3BsaXRUZXh0VW5pdFxuICAgICAqIEBwYXJhbSBzdGFydFxuICAgICAqIEBwYXJhbSBlbmRcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHN0YXRpYyBzcGxpdFRleHRHcm91cEJ5UmFuZ2UodGV4dDogVGV4dEdyb3VwRWxlbWVudCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBUZXh0R3JvdXBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGVuZCA9IGVuZCA9PT0gLTEgPyB0ZXh0LnRleHRNZWFzdXJlcy5sZW5ndGggOiBlbmQ7XG4gICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSB0ZXh0LnRleHRNZWFzdXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydCA9PT0gdGV4dC50ZXh0TWVhc3VyZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGFzdFRleHRHcm91cCA9IHRleHQuc3BsaWNlVGV4dChlbmQsIC0xLCB0cnVlKTtcbiAgICAgICAgbGV0IG1pZGRsZVRleHRHcm91cCA9IHRleHQuc3BsaWNlVGV4dChzdGFydCwgLTEsIHRydWUpO1xuICAgICAgICBpZiAobGFzdFRleHRHcm91cCkge1xuICAgICAgICAgICAgdGV4dC5wYXJlbnQuYWRkQ2hpbGQobGFzdFRleHRHcm91cCwgdGV4dC5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtaWRkbGVUZXh0R3JvdXApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlkZGxlVGV4dCBpcyBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGV4dC5wYXJlbnQuYWRkQ2hpbGQobWlkZGxlVGV4dEdyb3VwLCB0ZXh0LmdldEluZGV4KCkgKyAxKTtcblxuICAgICAgICBpZiAodGV4dC50ZXh0TWVhc3VyZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0ZXh0LnJlbW92ZSgpO1xuICAgICAgICAgICAgdGV4dC5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pZGRsZVRleHRHcm91cDtcbiAgICB9XG5cbiAgICBzcGxpdFRleHQodGV4dDogVGV4dEdyb3VwRWxlbWVudCwgb2Zmc2V0OiBudW1iZXIpOiB7IGxlZnRFbGVtZW50OiBUZXh0R3JvdXBFbGVtZW50IHwgbnVsbCwgcmlnaHRFbGVtZW50OiBUZXh0R3JvdXBFbGVtZW50IHwgbnVsbCB9IHtcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0ID09IC0xID8gdGV4dC50ZXh0TWVhc3VyZXMubGVuZ3RoIDogb2Zmc2V0O1xuICAgICAgICBpZiAob2Zmc2V0ID09PSB0ZXh0LnRleHRNZWFzdXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbGVmdEVsZW1lbnQ6IHRleHQsXG4gICAgICAgICAgICAgICAgcmlnaHRFbGVtZW50OiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBsZWZ0RWxlbWVudDogbnVsbCxcbiAgICAgICAgICAgICAgICByaWdodEVsZW1lbnQ6IHRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByaWdodFRleHQgPSB0ZXh0LnNwbGljZVRleHQob2Zmc2V0LCAtMSwgdHJ1ZSk7XG4gICAgICAgIGlmIChyaWdodFRleHQpIHtcbiAgICAgICAgICAgIHRleHQucGFyZW50LmFkZENoaWxkKHJpZ2h0VGV4dCwgdGV4dC5nZXRJbmRleCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxlZnRUZXh0OiBUZXh0R3JvdXBFbGVtZW50IHwgbnVsbCA9IHRleHQ7XG4gICAgICAgIGlmICh0ZXh0LnRleHRNZWFzdXJlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRleHQucmVtb3ZlKCk7XG4gICAgICAgICAgICBsZWZ0VGV4dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxlZnRFbGVtZW50OiBsZWZ0VGV4dCxcbiAgICAgICAgICAgIHJpZ2h0RWxlbWVudDogcmlnaHRUZXh0XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7pgInkuK3nmoTmlofmnKzmoLflvI9cbiAgICAgKiBAcGFyYW0gc3NcbiAgICAgKiBAcGFyYW0gc2V0dGVyRnVuY1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgc3RhdGljIHNldFRleHRTdHlsZShzczogU2VsZWN0aW9uU3RhdGUsIHNldHRlckZ1bmM6ICh0ZXh0OiBUZXh0R3JvdXBFbGVtZW50KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gc3Muc2VsZWN0ZWRSYW5nZTtcbiAgICAgICAgaWYgKCFyYW5nZSB8fCBzcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb25SYW5nZSA9IG5ldyBTZWxlY3Rpb25SYW5nZSgpO1xuICAgICAgICBjb25zdCBzdGFydFJhbmdlID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RTZWxlY3RlZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgY29uc3QgZW5kUmFuZ2UgPSBFbGVtZW50VXRpbC5nZXRMYXN0U2VsZWN0ZWRSYW5nZShyYW5nZSk7XG4gICAgICAgIHRoaXMucmVjdXJzaW9uU2V0UmFuZ2VUZXh0U3R5bGUocmFuZ2UsIHNldHRlckZ1bmMpO1xuICAgICAgICBpZiAoc3RhcnRSYW5nZSA9PT0gZW5kUmFuZ2UpIHtcbiAgICAgICAgICAgIGlmIChzdGFydFJhbmdlLmlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoc3RhcnRSYW5nZS50YXJnZXQsIDApO1xuICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldEVuZChzdGFydFJhbmdlLnRhcmdldCwgLTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXJ0UmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0U2VsZWN0ZWRPZmZzZXQgPSBzcy5zdGFydE9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRTZWxlY3RlZE9mZnNldCA9IHNzLmVuZE9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBtaWRkbGVFbGVtZW50ID0gdGhpcy5zcGxpdFRleHRHcm91cEJ5UmFuZ2Uoc3RhcnRSYW5nZS50YXJnZXQsIHN0YXJ0U2VsZWN0ZWRPZmZzZXQsIGVuZFNlbGVjdGVkT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBpZiAobWlkZGxlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBzZXR0ZXJGdW5jKG1pZGRsZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChtaWRkbGVFbGVtZW50LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0RW5kKG1pZGRsZUVsZW1lbnQsIC0xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3RhcnRSYW5nZS5pc0Z1bGxTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldFN0YXJ0KHN0YXJ0UmFuZ2UudGFyZ2V0LCAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0UmFuZ2UudGFyZ2V0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaWRkbGVFbGVtZW50ID0gdGhpcy5zcGxpdFRleHRHcm91cEJ5UmFuZ2Uoc3RhcnRSYW5nZS50YXJnZXQsIHN0YXJ0UmFuZ2Uuc3RhcnRPZmZzZXQsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1pZGRsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlckZ1bmMobWlkZGxlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRTdGFydChtaWRkbGVFbGVtZW50LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldFN0YXJ0KHN0YXJ0UmFuZ2UudGFyZ2V0LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldFN0YXJ0KHN0YXJ0UmFuZ2UudGFyZ2V0LCBzdGFydFJhbmdlLnN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZW5kUmFuZ2UuaXNGdWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBuZXdTZWxlY3Rpb25SYW5nZS5zZXRFbmQoZW5kUmFuZ2UudGFyZ2V0LCAtMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChlbmRSYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBUZXh0R3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZUVsZW1lbnQgPSB0aGlzLnNwbGl0VGV4dEdyb3VwQnlSYW5nZShlbmRSYW5nZS50YXJnZXQsIDAsIGVuZFJhbmdlLmVuZE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaWRkbGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJGdW5jKG1pZGRsZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2VsZWN0aW9uUmFuZ2Uuc2V0RW5kKG1pZGRsZUVsZW1lbnQsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldFN0YXJ0KGVuZFJhbmdlLnRhcmdldCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblJhbmdlLnNldEVuZChlbmRSYW5nZS50YXJnZXQsIGVuZFJhbmdlLmVuZE9mZnNldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNzLmFkZFJhbmdlKG5ld1NlbGVjdGlvblJhbmdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZWN1cnNpb25TZXRSYW5nZVRleHRTdHlsZShyYW5nZTogU2VsZWN0aW9uQ29udGVudFJhbmdlLCBzZXR0ZXJGdW5jOiAodGV4dDogVGV4dEdyb3VwRWxlbWVudCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBSYW5nZVV0aWwucmVjdXJzaW9uVHJhdmVyc2FsUmFuZ2VIYW5kbGVyKHJhbmdlLCAoaXRlbVJhbmdlKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbVJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQgJiYgaXRlbVJhbmdlLmlzRnVsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgc2V0dGVyRnVuYyhpdGVtUmFuZ2UudGFyZ2V0KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cblxuXG4gICAgc3RhdGljIHNldFBhcmFBbGlnbihzczogU2VsZWN0aW9uU3RhdGUsIHNldHRlckZ1bmM6ICh0cDogUGFyYWdyYXBoUHJvcHMpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHNzLmNvbGxhcHNlZCAmJiBzcy5zdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc3Muc3RhcnRDb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChwYXJhKSB7XG4gICAgICAgICAgICAgICAgc2V0dGVyRnVuYyhwYXJhLnByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gc3Muc2VsZWN0ZWRSYW5nZTtcbiAgICAgICAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBSYW5nZVV0aWwucmVjdXJzaW9uVHJhdmVyc2FsUmFuZ2VIYW5kbGVyKHJhbmdlLCAoaXRlbVJhbmdlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1SYW5nZS50YXJnZXQgaW5zdGFuY2VvZiBQYXJhZ3JhcGhFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldHRlckZ1bmMoaXRlbVJhbmdlLnRhcmdldC5wcm9wcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiDlpI3liLZcbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBvbkNvcHkoZXZ0OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgY29weVNlcmlhbGl6ZVN0ciA9IEVsZW1lbnRTZXJpYWxpemUuZ2V0U2VsZWN0ZWRKU09OKHRoaXMuc2VsZWN0aW9uU3RhdGUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICBpZiAoIWNvcHlTZXJpYWxpemVTdHIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldnQuY2xpcGJvYXJkRGF0YT8uc2V0RGF0YSgnZG9jL3BsYWluJywgY29weVNlcmlhbGl6ZVN0cik7XG4gICAgICAgIGNvbnN0IGNvcHlTdHIgPSBFbGVtZW50U2VyaWFsaXplLmdldFNlbGVjdGVkVGV4dCh0aGlzLnNlbGVjdGlvblN0YXRlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgZXZ0LmNsaXBib2FyZERhdGE/LnNldERhdGEoJ3RleHQvcGxhaW4nLCBjb3B5U3RyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliarliIdcbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICovXG4gICAgb25DdXQoZXZ0OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ29weShldnQpO1xuICAgICAgICB0aGlzLm9uUmFuZ2VEZWxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnspjotLRcbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBvblBhc3RlKGV2dDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGxldCBwYXN0ZVRleHQgPSBldnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dC9wbGFpbicpO1xuICAgICAgICBjb25zdCBwYXN0ZURhdGEgPSBldnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgnZG9jL3BsYWluJyk7XG4gICAgICAgIGlmICghcGFzdGVEYXRhKSB7XG4gICAgICAgICAgICBpZiAocGFzdGVUZXh0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXN0ZVBsYWluVGV4dChwYXN0ZVRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhc3RlRWxlbWVudCA9IHRoaXMuZWxlUmVhZGVyLnJlYWRFbGVtZW50KEpTT04ucGFyc2UocGFzdGVEYXRhKSk7XG4gICAgICAgIGlmICghcGFzdGVFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygn57KY6LS05Y+N5bqP5YiX5YyW5pWw5o2u5aSx6LSlJywgcGFzdGVEYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7Y29sbGFwc2VkfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGxldCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIWNvbGxhcHNlZCkge1xuICAgICAgICAgICAgLy9UT0RPOuWmguaenOS4gOS4quWuueWZqOWGheeahOWFg+e0oOiiq+WFqOmDqOWIoOmZpO+8jOWImei/lOWbniBudWxsXG4gICAgICAgICAgICAvLyBjb25zdCB7IGN1cnNvckVsZSwgY3Vyc29yT2Zmc2V0IH0gPSB0aGlzLm9uUmFuZ2VEZWxldGUoKTtcbiAgICAgICAgICAgIC8vIHN0YXJ0Q29udHJvbCA9IGN1cnNvckVsZTtcbiAgICAgICAgICAgIC8vIHN0YXJ0T2Zmc2V0ID0gY3Vyc29yT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy/ooajljZXmqKHlvI865aaC5p6c5aSN5Yi255qE5piv5Y2V5qC85byP55qE5paH5pys77yM6ZyA6KaB5bqP5YiX5YyW5Li657qv5paH5pys5aSE55CGXG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRm9ybUVkaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhc3RlU3RyaW5nID0gRWxlbWVudFNlcmlhbGl6ZS5zZXJpYWxpemVTdHJpbmcocGFzdGVFbGVtZW50LCB7YWxsOiBmYWxzZX0pO1xuICAgICAgICAgICAgaWYgKHBhc3RlU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXN0ZVBsYWluVGV4dChwYXN0ZVN0cmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhc3RlRWxlbWVudCBpbnN0YW5jZW9mIFBhcmFncmFwaEVsZW1lbnQgfHwgcGFzdGVFbGVtZW50IGluc3RhbmNlb2YgSW5saW5lR3JvdXBFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbjogQXJyYXk8RWxlbWVudD4gPSBbXTtcbiAgICAgICAgICAgIGlmIChwYXN0ZUVsZW1lbnQgaW5zdGFuY2VvZiBQYXJhZ3JhcGhFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCguLi5FbGVtZW50VXRpbC5nZXRDaGlsZHJlbkVsZW1lbnRzKHBhc3RlRWxlbWVudCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXN0ZUVsZW1lbnQgaW5zdGFuY2VvZiBJbmxpbmVHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAvL+W9k+WJjeeymOi0tOeahOWFg+e0oOS4uuaVsOaNruWFg++8jOW5tuS4lOWcqOaVsOaNruWFg+WGhemDqOeymOi0tFxuICAgICAgICAgICAgICAgIGlmIChJc0luU2lkZURhdGFFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQpICYmIHBhc3RlRWxlbWVudCBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVDaGlsZHJlbiA9IHBhc3RlRWxlbWVudC5nZXRJbm5lckl0ZW1zKCkubWFwKGl0ZW0gPT4gaXRlbS5jbG9uZSh0cnVlKSlcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaCguLi5wYXN0ZUNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gocGFzdGVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign5q616JC95a2Q5YWD57Sg5Li656m6Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsYXN0RWxlID0gdGhpcy5pbnNlcnRFbGVtZW50KHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGNoaWxkcmVuKSBhcyBFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGxhc3RFbGUsIC0xKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygn57KY6LS0OicgKyBwYXN0ZURhdGEpO1xuICAgIH1cblxuICAgIGluc2VydFNvZnRCcigpOiB2b2lkIHtcbiAgICAgICAgbGV0IHtzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0fSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGNvbnN0IGxhc3RFbGUgPSB0aGlzLmluc2VydEVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgW25ldyBCcmVha0VsZW1lbnQoKV0pIGFzIEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvY3VzRWxlID0gRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KGxhc3RFbGUpO1xuICAgICAgICBpZiAoZm9jdXNFbGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShmb2N1c0VsZSwgMCk7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWkhOeQhum7j+i0tOeahOe6r+aWh+acrFxuICAgICAqIEBwYXJhbSB0ZXh0XG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXN0ZVBsYWluVGV4dCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGV4dEl0ZW1zID0gdGV4dC5zcGxpdCgvXFxyP1xcbi8pO1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0IHx8IHRleHRJdGVtcy5sZW5ndGggPT09IDEgfHwgSXNJblNpZGVJbmxpbmVHcm91cElucHV0RWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0KSkge1xuICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvW1xcblxccl0vZywgJycpO1xuICAgICAgICAgICAgdGhpcy5uZXdJbnB1dCh7XG4gICAgICAgICAgICAgICAgZGF0YTogdGV4dCxcbiAgICAgICAgICAgICAgICBjb21wb3NpdGlvblN0YXJ0SW5mbzoge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBzdGFydENvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogc3RhcnRPZmZzZXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYnJlYWtQYXJhID0gdGhpcy5zcGxpdEN1cnJlbnRQYXJhZ3JhcGgoKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UGFyYSA9IGJyZWFrUGFyYS5jbG9uZShmYWxzZSkgYXMgUGFyYWdyYXBoRWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFRleHRQcm9wcyA9IHRoaXMuZ2V0RGVmYXVsdFRleHRQcm9wc0J5T3B0aW9ucygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RleHRFbGUgPSBFbGVtZW50VXRpbC5nZXROZXdUZXh0R3JvdXAoaW5wdXRUZXh0UHJvcHMpO1xuICAgICAgICAgICAgICAgIG5ld1RleHRFbGUudGV4dCA9IHRleHRJdGVtc1tpXTtcbiAgICAgICAgICAgICAgICBuZXdQYXJhLmFkZENoaWxkKG5ld1RleHRFbGUsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrUGFyYS5wYXJlbnQuYWRkQ2hpbGQobmV3UGFyYSwgYnJlYWtQYXJhLmdldEluZGV4KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5yZXNldFJhbmdlKGJyZWFrUGFyYSwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lvZPliY3mrrXokL3pobnnm67nrKblj7fnsbvlnotcbiAgICAgKi9cbiAgICBzZXRQYXJhZ3JhcGhOdW1iZXJUeXBlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpIGFzIFBhcmFncmFwaEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGZvcm1hdDogUGFydGlhbDxQYXJhZ3JhcGhQcm9wcz4gPSB7fTtcbiAgICAgICAgaWYgKHBhcmEucHJvcHMubnVtYmVyVHlwZSA+PSAwKSB7XG4gICAgICAgICAgICBmb3JtYXQubnVtYmVyVHlwZSA9IC0xO1xuICAgICAgICAgICAgZm9ybWF0LmluZGVudCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQubnVtYmVyVHlwZSA9IDA7XG4gICAgICAgICAgICBmb3JtYXQuaW5kZW50ID0gMTU7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYS5zZXRGb3JtYXQoZm9ybWF0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmj5LlhaXmibnms6hcbiAgICAgKi9cbiAgICBpbnNlcnRDb21tZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldCwgZW5kQ29udHJvbCwgZW5kT2Zmc2V0LCBjb2xsYXBzZWR9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKGNvbGxhcHNlZCB8fCAhc3RhcnRDb250cm9sIHx8ICFlbmRDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSBuYW5vaWQoNSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29tbU1hcmsgPSBuZXcgQ29tbWVudEVsZW1lbnQoKTtcbiAgICAgICAgc3RhcnRDb21tTWFyay5wcm9wcy5pZCA9IGlkO1xuICAgICAgICBzdGFydENvbW1NYXJrLnByb3BzLm1hcmtUeXBlID0gJ3N0YXJ0JztcblxuICAgICAgICBjb25zdCBlbmRDb21tTWFyayA9IG5ldyBDb21tZW50RWxlbWVudCgpO1xuICAgICAgICBlbmRDb21tTWFyay5wcm9wcy5pZCA9IGlkO1xuICAgICAgICBlbmRDb21tTWFyay5wcm9wcy5tYXJrVHlwZSA9ICdlbmQnO1xuXG4gICAgICAgIHRoaXMuaW5zZXJ0RWxlbWVudChlbmRDb250cm9sLCBlbmRPZmZzZXQsIFtlbmRDb21tTWFya10pXG4gICAgICAgIHRoaXMuaW5zZXJ0RWxlbWVudChzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBbc3RhcnRDb21tTWFya10pXG5cbiAgICAgICAgY29uc3QgY29tbUNvbnRlbnQgPSBuZXcgQ29tbUNvbnRlbnRFbGVtZW50KCk7XG4gICAgICAgIGNvbW1Db250ZW50LnByb3BzLmlkID0gaWQ7XG4gICAgICAgIGNvbW1Db250ZW50LnByb3BzLmNyZWF0ZUlkID0gdGhpcy52aWV3T3B0aW9ucy5lZGl0VXNlci5pZDtcbiAgICAgICAgY29tbUNvbnRlbnQucHJvcHMuY3JlYXRlTmFtZSA9IHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIubmFtZTtcbiAgICAgICAgY29tbUNvbnRlbnQucHJvcHMuY3JlYXRlRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZG9jQ29tbWVudC5nZXRDb21tTWFya0luZGV4KHN0YXJ0Q29tbU1hcmspO1xuICAgICAgICBpZiAocG9zIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfojrflj5bmj5LlhaXnmoTmibnms6jkvY3nva7kuI3mraPnoa4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQuYWRkQ2hpbGQoY29tbUNvbnRlbnQsIHBvcyk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcblxuICAgICAgICB0aGlzLmRvY0NvbW1lbnQuYWZ0ZXJDb21tZW50c0NoYW5nZWQoKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZUxpc3QgPSB0aGlzLmRvY0N0eC5kb2N1bWVudC50cmVlRmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXApIGFzIEFycmF5PERhdGFFbGVtZW50SW5saW5lR3JvdXA+O1xuICAgICAgICBjb25zdCBlcnJvckVsZUxpc3QgPSBkYXRhRWxlTGlzdC5tYXAoaXRlbSA9PiAoe2Vycm9yOiBpdGVtLnZhbGlkYXRlKCksIGVsZTogaXRlbX0pKS5maWx0ZXIoaXRlbSA9PiBpdGVtLmVycm9yKTtcbiAgICAgICAgaWYgKCFlcnJvckVsZUxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlcnJvckVsZUxpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gbmFub2lkKDUpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRDb21tTWFyayA9IG5ldyBDb21tZW50RWxlbWVudCgpO1xuICAgICAgICAgICAgc3RhcnRDb21tTWFyay5wcm9wcy5pZCA9IGlkO1xuICAgICAgICAgICAgc3RhcnRDb21tTWFyay5wcm9wcy5tYXJrVHlwZSA9ICdzdGFydCc7XG5cbiAgICAgICAgICAgIGNvbnN0IGVuZENvbW1NYXJrID0gbmV3IENvbW1lbnRFbGVtZW50KCk7XG4gICAgICAgICAgICBlbmRDb21tTWFyay5wcm9wcy5pZCA9IGlkO1xuICAgICAgICAgICAgZW5kQ29tbU1hcmsucHJvcHMubWFya1R5cGUgPSAnZW5kJztcblxuICAgICAgICAgICAgaXRlbS5lbGUuYWRkQ2hpbGQoc3RhcnRDb21tTWFyaywgMCk7XG4gICAgICAgICAgICBpdGVtLmVsZS5hZGRDaGlsZChlbmRDb21tTWFyaywgaXRlbS5lbGUubGVuZ3RoKVxuICAgICAgICAgICAgY29uc3QgY2FwdGlvbiA9IENvbW1vblV0aWwubnVsbFRvU3RyaW5nKGl0ZW0uZWxlLnByb3BzLmNhcHRpb24pO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVFbGVtZW50ID0gbmV3IFZhbGlkYXRlRWxlbWVudCgpO1xuICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50LnByb3BzLnRpdGxlID0gY2FwdGlvbiArICfpqozor4EnO1xuICAgICAgICAgICAgdmFsaWRhdGVFbGVtZW50LnByb3BzLmlkID0gaWQ7XG4gICAgICAgICAgICB2YWxpZGF0ZUVsZW1lbnQuc2V0Q29udGVudChpdGVtLmVycm9yKTtcblxuICAgICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5kb2NDb21tZW50LmdldENvbW1NYXJrSW5kZXgoc3RhcnRDb21tTWFyayk7XG4gICAgICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC5jb21tZW50c0NvbnRhaW5lckVsZW1lbnQuYWRkQ2hpbGQodmFsaWRhdGVFbGVtZW50LCBwb3MpO1xuXG5cbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5kb2NDb21tZW50LmFmdGVyQ29tbWVudHNDaGFuZ2VkKCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOenu+mZpOepuuWtl+espuS4slxuICAgICAqIEBwYXJhbSB0ZXh0XG4gICAgICovXG4gICAgcmVtb3ZlRW1wdHlUZXh0KHRleHQ6IFRleHRHcm91cEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgLy9jb25zdCBuZXh0TGVhZkVsZW1lbnRJblBhcmEgPSBFbGVtZW50VXRpbC5nZXRSZWN1cnNpb25OZXh0U2libGluZ0VsZW1lbnQodGV4dCwgdHJ1ZSwgdHJ1ZSk7IGdldENvbXB1dGVkU3R5bGVcbiAgICAgICAgdGhpcy5zZXRDdXJvc3JGb3JEZWxldGVBY3Rpb24odGV4dCk7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRleHQucGFyZW50O1xuICAgICAgICB0ZXh0LnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnJlbW92ZUVtdHB5SW5saW5lQmxvY2socGFyZW50KTtcbiAgICB9XG5cbiAgICBzZXRDdXJvc3JGb3JEZWxldGVBY3Rpb24oY29udHJvbDogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJzb3JJbmZvID0gdGhpcy5nZXRDdXJzb3JFbGVtZW50QnlEZWxldGVBY3Rpb24oY29udHJvbCk7XG4gICAgICAgIGlmIChjdXJzb3JJbmZvKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UoY3Vyc29ySW5mby5lbGUsIGN1cnNvckluZm8ub2Zmc2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEN1cnNvckVsZW1lbnRCeURlbGV0ZUFjdGlvbihjb250cm9sOiBFbGVtZW50KTogeyBlbGU6IExlYWZFbGVtZW50LCBvZmZzZXQ6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHByZXZMZWFmRWxlbWVudEluUGFyYSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvblByZXZTaWJsaW5nRWxlbWVudChjb250cm9sLCBmYWxzZSwgdHJ1ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgIC8v5Yik5pat5piv5ZCm5Li65ZCM5LiA5q616JC9XG4gICAgICAgIGlmIChwcmV2TGVhZkVsZW1lbnRJblBhcmEgJiYgRWxlbWVudFV0aWwuaXNJblNhbWVQYXJhZ3JhcGgocHJldkxlYWZFbGVtZW50SW5QYXJhLCBjb250cm9sKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlbGU6IHByZXZMZWFmRWxlbWVudEluUGFyYSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRFbmRPZmZzZXQocHJldkxlYWZFbGVtZW50SW5QYXJhKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8v5ZCM5LiA5q616JC95YW25LuW5YWD57SgXG4gICAgICAgIGNvbnN0IG5leHRMZWFmRWxlbWVudEluUGFyYSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChjb250cm9sLCB0cnVlLCB0cnVlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICAgICAgaWYgKG5leHRMZWFmRWxlbWVudEluUGFyYSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlbGU6IG5leHRMZWFmRWxlbWVudEluUGFyYSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL+S4iuS4gOauteiQvVxuICAgICAgICBpZiAocHJldkxlYWZFbGVtZW50SW5QYXJhKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVsZTogcHJldkxlYWZFbGVtZW50SW5QYXJhLFxuICAgICAgICAgICAgICAgIG9mZnNldDogcHJldkxlYWZFbGVtZW50SW5QYXJhIGluc3RhbmNlb2YgUFN5bWJvbEVsZW1lbnQgPyAwIDogRWxlbWVudFV0aWwuZ2V0RWxlbWVudEVuZE9mZnNldChwcmV2TGVhZkVsZW1lbnRJblBhcmEpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog56e76Zmk56m66KGM5YaF5qCH562+XG4gICAgICogQHBhcmFtIGVsZVxuICAgICAqL1xuICAgIHJlbW92ZUVtdHB5SW5saW5lQmxvY2soZWxlOiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChlbGUgaW5zdGFuY2VvZiBJbmxpbmVHcm91cEVsZW1lbnQgJiYgZWxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlLnBhcmVudDtcbiAgICAgICAgICAgIGVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRW10cHlJbmxpbmVCbG9jayhwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o+S5YWl5by65Yi25o2i6aG156ym5Y+3XG4gICAgICovXG4gICAgaW5zZXJ0UGFnZUJyZWFrUGFyYSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBjb25zdCBjdXJyUGFyYSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudEJ5VHlwZShzdGFydENvbnRyb2wsIFBhcmFncmFwaEVsZW1lbnQpXG4gICAgICAgIGlmICghY3VyclBhcmEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VyclBhcmEucGFyZW50IGluc3RhbmNlb2YgRG9jdW1lbnRCb2R5RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgcGFnZUJyZWFrID0gbmV3IFBhcmFncmFwaEVsZW1lbnQoKTtcbiAgICAgICAgICAgIHBhZ2VCcmVhay5wcm9wcy5wYWdlQnJlYWsgPSB0cnVlO1xuICAgICAgICAgICAgcGFnZUJyZWFrLnByb3BzLnRleHRBbGlnbiA9ICdjZW50ZXInO1xuICAgICAgICAgICAgcGFnZUJyZWFrLnBhcmVudC5hZGRDaGlsZChwYWdlQnJlYWspO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbiIsImltcG9ydCB7RWRpdG9yQ29udGV4dH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHtTZWxlY3Rpb25TdGF0ZX0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQge09yaWVudFR5cGUsIFBhZ2VPcHRpb25zLCBWaWV3T3B0aW9uc30gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7RWxlbWVudFBhaW50fSBmcm9tIFwiLi9lbGVtZW50LXBhaW50XCI7XG5pbXBvcnQge0VsZW1lbnRVdGlsfSBmcm9tIFwiLi9lbGVtZW50LXV0aWxcIjtcbmltcG9ydCB7RG9jdW1lbnRSZW5kZXJPYmplY3R9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWltcGxcIjtcbmltcG9ydCB7UGFpbnRDb250ZW50LCBSZW5kZXJDb250ZXh0fSBmcm9tIFwiLi9yZW5kZXItY29udGV4dFwiO1xuXG5leHBvcnQgY2xhc3MgZG9jdW1lbnRQcmludCB7XG4gICAgc3RhdGljIHByaW50KHNzOiBTZWxlY3Rpb25TdGF0ZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHByaW50UmFuZ2VzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVuZGVyQ2FudmFzTm9kZXMgPSB0aGlzLmdldFJlbmRlckNhbnZhc05vZGVzKHNzLCB2aWV3T3B0aW9ucywgZG9jQ3R4LCBwcmludFJhbmdlcyk7XG4gICAgICAgIGlmICghcmVuZGVyQ2FudmFzTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ+aXoOWPr+aJk+WNsOiKgueCuScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHByaW50Tm9kZXMocmVuZGVyQ2FudmFzTm9kZXMsIHsgLi4uZG9jQ3R4LmRvY3VtZW50LnByb3BzIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlue7mOWItueahGNhbnZhc+iKgueCuVxuICAgICAqIEBwYXJhbSBzcyBcbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMgXG4gICAgICogQHBhcmFtIGRvY0N0eCBcbiAgICAgKiBAcGFyYW0gcHJpbnRSYW5nZXMgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0UmVuZGVyQ2FudmFzTm9kZXMoc3M6IFNlbGVjdGlvblN0YXRlLCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIGRvY0N0eDogRWRpdG9yQ29udGV4dCwgcHJpbnRSYW5nZXM6IEFycmF5PG51bWJlcj4gfCBudWxsID0gbnVsbCk6IEFycmF5PEhUTUxDYW52YXNFbGVtZW50PiB7XG4gICAgICAgIGNvbnN0IHsgc2NhbGUsZG9jUGFnZVNldHRpbmdzOnt3aWR0aCwgaGVpZ2h0IH19ID0gdmlld09wdGlvbnM7XG4gICAgICAgIGNvbnN0IGRjID0gc3MucmVuZGVyQ29udGFpbmVyO1xuICAgICAgICBjb25zdCBjYW52YXNMaXN0OiBBcnJheTxIVE1MQ2FudmFzRWxlbWVudD4gPSBbXTtcbiAgICAgICAgY29uc3QgcHJpbnRQYWdlczogQXJyYXk8RG9jdW1lbnRSZW5kZXJPYmplY3Q+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghcHJpbnRSYW5nZXMgfHwgcHJpbnRSYW5nZXMuc29tZShwYWdlSW5kZXggPT4gcGFnZUluZGV4ID09PSBpKSkge1xuICAgICAgICAgICAgICAgIHByaW50UGFnZXMucHVzaCg8RG9jdW1lbnRSZW5kZXJPYmplY3Q+ZGMuZ2V0Q2hpbGQoaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJpbnRQYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2FudmFzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgY2FudmFzTm9kZS5zdHlsZS5jdXJzb3IgPSAndGV4dCc7XG4gICAgICAgICAgICBjYW52YXNOb2RlLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgICAgICAgICAgY2FudmFzTm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzTm9kZS5nZXRDb250ZXh0KCcyZCcpIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICAgICAgICAgIEVsZW1lbnRVdGlsLnNldENhbnZhc1Byb3BzKGNhbnZhc05vZGUsIGN0eCwgdmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckN0eCA9IG5ldyBSZW5kZXJDb250ZXh0KG5ldyBQYWludENvbnRlbnQoY3R4KSk7XG4gICAgICAgICAgICByZW5kZXJDdHguaW5pdCh7d2lkdGgsaGVpZ2h0LHNjYWxlfSk7XG4gICAgICAgICAgICByZW5kZXJDdHguZHJhd01vZGUgPSAncHJpbnQnO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gcHJpbnRQYWdlc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHRtcCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChkb2MucmVjdCk7XG4gICAgICAgICAgICBkb2MucmVjdC54ID0gMDtcbiAgICAgICAgICAgIGRvYy5yZWN0LnkgPSAwO1xuICAgICAgICAgICAgRWxlbWVudFBhaW50LmRyYXdQYWdlKHJlbmRlckN0eCxkb2NDdHgsIGRvYywgeyB4OiAwLCB5OiAwIH0pO1xuICAgICAgICAgICAgcmVuZGVyQ3R4Lm92ZXJsYXlzQ29udGV4dC5jbGVhcigpO1xuICAgICAgICAgICAgcmVuZGVyQ3R4Lm1haW5Db250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQsICd3aGl0ZScpO1xuICAgICAgICAgICAgcmVuZGVyQ3R4LmNvbW1pdCh7d2lkdGgsaGVpZ2h0LHNjYWxlfSk7XG4gICAgICAgICAgICBkb2MucmVjdCA9IHRtcDtcbiAgICAgICAgICAgIGNhbnZhc0xpc3QucHVzaChjYW52YXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FudmFzTGlzdFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWvvOWHumJhc2U2NFxuICAgICAqIEBwYXJhbSBzcyBcbiAgICAgKiBAcGFyYW0gdmlld09wdGlvbnMgXG4gICAgICogQHBhcmFtIGRvY0N0eCBcbiAgICAgKiBAcGFyYW0gcHJpbnRSYW5nZXMgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgc3RhdGljIGV4cG9ydENhbnZhc05vZGVzKHNzOiBTZWxlY3Rpb25TdGF0ZSwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHByaW50UmFuZ2VzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGwpOiBBcnJheTxIVE1MQ2FudmFzRWxlbWVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJDYW52YXNOb2Rlcyhzcywgdmlld09wdGlvbnMsIGRvY0N0eCwgcHJpbnRSYW5nZXMpO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5b2T5YmN5b2T5YmN6aG1XG4gICAgICogQHBhcmFtIHNzIFxuICAgICAqIEBwYXJhbSB2aWV3T3B0aW9ucyBcbiAgICAgKi9cbiAgICBzdGF0aWMgcHJpbnRDdXJyUGFnZShzczogU2VsZWN0aW9uU3RhdGUsIHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucywgZG9jQ3R4OiBFZGl0b3JDb250ZXh0LCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHN0YXJ0SGl0SW5mbyB9ID0gc3M7XG4gICAgICAgIGlmICghc3RhcnRIaXRJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jUGFnZSA9IEVsZW1lbnRVdGlsLmdldFBhcmVudFJlbmRlcihzdGFydEhpdEluZm8ucmVuZGVyLCBEb2N1bWVudFJlbmRlck9iamVjdCk7XG4gICAgICAgIGlmICghZG9jUGFnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJpbnQoc3MsIHZpZXdPcHRpb25zLCBkb2NDdHgsIFtkb2NQYWdlLmdldEluZGV4KCldKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByaW50VGVtcGxhdGUoeyB3aWR0aCwgaGVpZ2h0LCBvcmllbnQgfTogUGFnZU9wdGlvbnMpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXG4gICAgPCFET0NUWVBFIGh0bWw+XG4gICAgPGh0bWwgbGFuZz1cInpoXCI+XG4gICAgPGhlYWQ+XG4gICAgICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgICAgIDx0aXRsZT48L3RpdGxlPlxuICAgICAgPHN0eWxlID5cbiAgICAgIGh0bWwsXG4gICAgICBib2R5IHtcbiAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgIH1cbiAgICAgICoge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgfVxuICAgICAgQHBhZ2Uge1xuICAgICAgICAgIHNpemU6ICR7b3JpZW50fTtcbiAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG4gICAgICBkaXYge1xuICAgICAgICAgIHdpZHRoOiAke3dpZHRofW1tO1xuICAgICAgICAgIG1pbi1oZWlnaHQ6ICR7aGVpZ2h0fW1tO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMDtcbiAgICAgIH1cbiAgICAgIEBtZWRpYSBwcmludCB7XG4gICAgICAgICAgaHRtbCxcbiAgICAgICAgICBib2R5IHtcbiAgICAgICAgICAgICAgd2lkdGg6ICR7d2lkdGh9bW07XG4gICAgICAgICAgICAgIGhlaWdodDogJHtoZWlnaHR9bW07XG4gICAgICAgICAgfVxuICAgICAgICAgIGRpdiB7XG4gICAgICAgICAgICAgIHdpZHRoOiBpbml0aWFsO1xuICAgICAgICAgICAgICBtaW4taGVpZ2h0OiBpbml0aWFsO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIDwvc3R5bGU+XG4gICAgPC9oZWFkPlxuICAgIDxib2R5PjwvYm9keT5cbiAgICA8L2h0bWw+XG4gICAgYC5yZXBsYWNlKC9cXG4vZywgJycpLnJlcGxhY2UoL1xccysvZywgJyAnKS5yZXBsYWNlKC8nL2csICdcXFxcXFwnJyk7XG59XG5cblxudHlwZSBQcmludFBhcGVyT3B0aW9ucyA9IHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIG9yaWVudDogT3JpZW50VHlwZTtcbn07XG5cbi8qKlxuICog5omT5Y2wRE9NXG4gKiBAcGFyYW0gcHJpbnROb2RlcyBcbiAqIEBwYXJhbSBvcHRpb25zIFxuICogQHJldHVybnMgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludE5vZGVzKHByaW50Tm9kZXM6IEFycmF5PE5vZGU+LCBvcHRpb25zOiBQcmludFBhcGVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IHByaW50SUZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKSBhcyBIVE1MSUZyYW1lRWxlbWVudDtcbiAgICBwcmludElGcmFtZS5zcmMgPSAnYWJvdXQ6YmxhbmsnO1xuICAgIHByaW50SUZyYW1lLnN0eWxlLmJvcmRlcldpZHRoID0gJzAnO1xuICAgIHByaW50SUZyYW1lLnN0eWxlLmhlaWdodCA9IFwiMFwiO1xuICAgIHByaW50SUZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwcmludElGcmFtZSk7XG4gICAgcHJpbnRJRnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQub3BlbihcInRleHQvaHRtbFwiLCBcInByaW50ZXJcIik7XG4gICAgaWYgKCFwcmludE5vZGVzLmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ+aXoOWPr+aJk+WNsOiKgueCuScpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByaW50U2l6ZTogUGFnZU9wdGlvbnMgPSBuZXcgUGFnZU9wdGlvbnMob3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHQsIG9wdGlvbnMub3JpZW50KTtcbiAgICBjb25zdCBpZnJhbWVIVE1MID0gY3JlYXRlUHJpbnRUZW1wbGF0ZShwcmludFNpemUpO1xuICAgIHByaW50SUZyYW1lLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50LndyaXRlKGlmcmFtZUhUTUwpO1xuICAgIHByaW50SUZyYW1lLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50LmNsb3NlKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmludE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBwcmludE5vZGVzW2ldO1xuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKGl0ZW0pO1xuICAgICAgICBwcmludElGcmFtZS5jb250ZW50V2luZG93Py5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdilcbiAgICB9XG4gICAgcHJpbnRJRnJhbWUuY29udGVudFdpbmRvdz8uZG9jdW1lbnQuYm9keS5mb2N1cygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBwcmludElGcmFtZS5jb250ZW50V2luZG93Py5wcmludCgpO1xuICAgICAgICBwcmludElGcmFtZS5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChwcmludElGcmFtZSk7XG4gICAgfSwgMCk7XG59XG5cbi8qKlxuICogY2FudmFz6IqC54K55a+85Ye65YiwUERGXG4gKiBAcGFyYW0gZmlsZU5hbWUgXG4gKiBAcGFyYW0gbm9kZXMgXG4gKiBAcGFyYW0gb3B0aW9ucyBcbiAqL1xuLy8gZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydENhbnZhc1RvUERGKGZpbGVOYW1lOiBzdHJpbmcsIG5vZGVzOiBBcnJheTxIVE1MQ2FudmFzRWxlbWVudD4sIG9wdGlvbnM6IFByaW50UGFwZXJPcHRpb25zKTogdm9pZCB7XG4vLyAgICAgaWYgKCFmaWxlTmFtZSkge1xuLy8gICAgICAgICBmaWxlTmFtZSA9ICdkb2N1bWVudC5wZGYnO1xuLy8gICAgIH0gZWxzZSB7XG4vLyAgICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvW1xcL1xcXFw6Kj9cIjw+fF0vZywgJ18nKTtcbi8vICAgICAgICAgaWYgKCFmaWxlTmFtZS5lbmRzV2l0aCgnLnBkZicpKSB7XG4vLyAgICAgICAgICAgICBmaWxlTmFtZSArPSAnLnBkZic7XG4vLyAgICAgICAgIH1cbi8vICAgICB9XG4vLyAgICAgY29uc3QgcGRmID0gbmV3IGpzUERGKG9wdGlvbnMub3JpZW50LCAncHgnLCBbb3B0aW9ucy53aWR0aCwgb3B0aW9ucy5oZWlnaHRdKTtcbi8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4vLyAgICAgICAgIGNvbnN0IGNhbnZhcyA9IG5vZGVzW2ldO1xuLy8gICAgICAgICBjb25zdCBpbWdEYXRhID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIDEuMCk7XG4vLyAgICAgICAgIHBkZi5hZGRJbWFnZShpbWdEYXRhLCAnSlBFRycsIDAsIDAsIG9wdGlvbnMud2lkdGgsIG9wdGlvbnMuaGVpZ2h0KTtcbi8vICAgICAgICAgaWYgKGkgPCBub2Rlcy5sZW5ndGggLSAxKSB7XG4vLyAgICAgICAgICAgICBwZGYuYWRkUGFnZSgpO1xuLy8gICAgICAgICB9XG4vLyAgICAgfVxuLy8gICAgIHBkZi5zYXZlKGZpbGVOYW1lKTtcbi8vIH0iLCJpbXBvcnQgeyBQYWRkaW5nUHJvcHMgfSBmcm9tIFwiLi9lbGVtZW50LWRlZmluZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRQcm9wcyB9IGZyb20gXCIuL2VsZW1lbnQtcHJvcHNcIjtcbmltcG9ydCB7IERvY3VtZW50Qm9keUVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50Rm9vdGVyRWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWZvb3Rlci1pbXBsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEhlYWRlckVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1oZWFkZXItaW1wbFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRUZW1wbGF0ZSB7XG4gICAgc3RhdGljIGNyZWF0ZUE0RG9jKCk6IERvY3VtZW50RWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGRvYyA9IG5ldyBEb2N1bWVudEVsZW1lbnQoKTtcbiAgICAgICAgZG9jLnByb3BzID0gbmV3IERvY3VtZW50UHJvcHMoKTtcbiAgICAgICAgZG9jLnByb3BzLndpZHRoID0gMjEwO1xuICAgICAgICBkb2MucHJvcHMuaGVpZ2h0ID0gMjk3O1xuICAgICAgICBkb2MucHJvcHMucGFkZGluZyA9IG5ldyBQYWRkaW5nUHJvcHMoMjUuNCwgMjUuNCwgMTkuMSwgMTkuMSk7XG4gICAgICAgIGRvYy5hZGRDaGlsZChuZXcgRG9jdW1lbnRIZWFkZXJFbGVtZW50KCkpO1xuICAgICAgICBkb2MuYWRkQ2hpbGQobmV3IERvY3VtZW50Qm9keUVsZW1lbnQoKSk7XG4gICAgICAgIGRvYy5hZGRDaGlsZChuZXcgRG9jdW1lbnRGb290ZXJFbGVtZW50KCkpO1xuICAgICAgICByZXR1cm4gZG9jO1xuICAgIH1cbn0iLCJpbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRFdmFsRnVuYyB7XG4gICAgY29uc3RydWN0b3IocHVibGljIGRvY0N0eDogRWRpdG9yQ29udGV4dCkge1xuXG4gICAgfVxuICAgIHNjcmlwdHNGdW5jITogKCgpID0+IHZvaWQpIHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIOWunuS+i+WMluWKqOaAgeiEmuacrFxuICAgICAqL1xuICAgIGluaXRTY3JpcHRzKHNjcmlwdHM6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3lTY3JpcHRzKCk7XG4gICAgICAgIGlmIChzY3JpcHRzKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmMgPSBuZXcgRnVuY3Rpb24oXCJkb2NDdHhcIiwgc2NyaXB0cylcbiAgICAgICAgICAgICAgICB0aGlzLnNjcmlwdHNGdW5jID0gZnVuYyh0aGlzLmRvY0N0eCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIuiHquWumuS5ieagh+acrOino+aekOmUmeivr1wiLCBlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnN0IGZ1bmMgPSAoZG9jQ3R4OiBEb2N1bWVudENvbnRleHQpID0+IHtcbiAgICAgICAgLy8gICAgIGNvbnN0IHNleEVMZSA9IGRvY0N0eC5nZXRDb250cm9sQnlJZCgnTnFvWUknKVxuICAgICAgICAvLyAgICAgY29uc3QgZHlFbGUgPSBkb2NDdHguZ2V0Q29udHJvbEJ5SWQoJ2dUdUJJJyk7XG4gICAgICAgIC8vICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgIGlmIChzZXhFTGUgJiYgZHlFbGUpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3Qgc2V4VmFsdWUgPSBzZXhFTGUuZ2V0VmFsdWUoKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgZHlWYWx1ZSA9IHNleFZhbHVlID09PSAnMScgPyAn55S355qE5ZCXJyA6IHNleFZhbHVlID09PSAnMicgPyAn5aWz55qE5ZCXJyA6ICfpmr7pgZPmmK/kurrlppblkJcnO1xuICAgICAgICAvLyAgICAgICAgICAgICBkeUVsZS5zZXRWYWx1ZShkeVZhbHVlKTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9O1xuICAgICAgICAvLyB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmUgOavgeWKqOaAgeiEmuacrOWunuS+i1xuICAgICAqL1xuICAgIGRlc3Ryb3lTY3JpcHRzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zY3JpcHRzRnVuYykge1xuICAgICAgICAgICAgdGhpcy5zY3JpcHRzRnVuYyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDop6blj5HliqjmgIHohJrmnKxcbiAgICAgKi9cbiAgICBpbnZva2VkU2NyaXB0cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JpcHRzRnVuYz8uKCk7XG4gICAgfVxuXG5cbn1cbiIsImltcG9ydCB7IElJbWFnZUxvYWRlciwgSW1hZ2VTb3VyY2VJdGVtIH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHsgSW1nTG9hZFN0YXR1cyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERvY3VtZW50SW1hZ2VzQmFzZUxvYWRlciBpbXBsZW1lbnRzIElJbWFnZUxvYWRlciB7XG4gICAgaW1hZ2VzOiBBcnJheTxJbWFnZVNvdXJjZUl0ZW0+ID0gW107XG5cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbWFnZXMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICBsb2FkSW1hZ2Uoc3JjOiBzdHJpbmcsIG9uQ2FsbGJhY2s6IChzdGF0dXM6IEltZ0xvYWRTdGF0dXMpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFzcmMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvL+W3sue7j+WtmOWcqOeahOi1hOa6kOS4jemcgOimgemHjeaWsOWKoOi9vVxuICAgICAgICBsZXQgbWF0Y2hJdGVtID0gdGhpcy5pbWFnZXMuZmluZChpdGVtID0+IGl0ZW0uc3JjID09PSBzcmMpO1xuICAgICAgICBpZiAobWF0Y2hJdGVtKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hJdGVtLmxvYWRTdGF0dXMgPT09ICdubycpIHtcbiAgICAgICAgICAgICAgICBtYXRjaEl0ZW0uY2JzLnB1c2gob25DYWxsYmFjayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9uQ2FsbGJhY2sobWF0Y2hJdGVtLmxvYWRTdGF0dXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhc2sgPSB0aGlzLmNyZWF0ZVJlcXVlc3RJbWFnZShzcmMpO1xuICAgICAgICBjb25zdCBpbWdJdGVtOiBJbWFnZVNvdXJjZUl0ZW0gPSB7XG4gICAgICAgICAgICBlbGU6IHVuZGVmaW5lZCBhcyBhbnksXG4gICAgICAgICAgICBzcmMsXG4gICAgICAgICAgICBjYnM6IFtvbkNhbGxiYWNrXSxcbiAgICAgICAgICAgIGxvYWRTdGF0dXM6ICdubycsXG4gICAgICAgICAgICB0YXNrXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW1hZ2VzLnB1c2goaW1nSXRlbSlcbiAgICAgICAgLy8gaWYgKHRoaXMudmlld09wdGlvbnMucmVzb3VyY2VNb2RlID09PSAnaW1tZWRpYXRlJykge1xuICAgICAgICAvLyAgICAgZWxlLm9ubG9hZCA9IChlKSA9PiB7IHRoaXMuaW52b2tlSW1nTG9hZChzcmMsICdjb21wbGV0ZWQnKTsgfTtcbiAgICAgICAgLy8gICAgIGVsZS5vbmVycm9yID0gKGUpID0+IHsgdGhpcy5pbnZva2VJbWdMb2FkKHNyYywgJ2Vycm9yJyk7IH07XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBhYnN0cmFjdCBjcmVhdGVSZXF1ZXN0SW1hZ2UodXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgaW52b2tlSW1nTG9hZChzcmM6IHN0cmluZywgc3RhdHVzOiBJbWdMb2FkU3RhdHVzLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW1nID0gdGhpcy5pbWFnZXMuZmluZChpdGVtID0+IGl0ZW0uc3JjID09PSBzcmMpO1xuICAgICAgICBpZiAoaW1nKSB7XG4gICAgICAgICAgICBpbWcubG9hZFN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgICAgIGltZy5jYnMuZm9yRWFjaChjYiA9PiBjYihzdGF0dXMpKTtcbiAgICAgICAgICAgIGltZy5lbGUgPSBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TG9hZFRhc2tzKCk6IEFycmF5PFByb21pc2U8dm9pZD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzLm1hcChpdGVtID0+IGl0ZW0udGFzayk7XG4gICAgfVxuXG5cbiAgICBnZXRJbWFnZShzcmM6IHN0cmluZyk6IEhUTUxJbWFnZUVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBpbWcgPSB0aGlzLmltYWdlcy5maW5kKGl0ZW0gPT4gaXRlbS5zcmMgPT09IHNyYyk7XG4gICAgICAgIHJldHVybiBpbWc/LmVsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDliKTmlq3lm77niYfmmK/lkKbpg73lt7Lnu4/liqDovb3lrozmr5VcbiAgICAgKiDnlKjkuo7miZPljbDml7bliKTmlq3vvIzlpoLmnpzlvZPliY3lm77niYfmsqHmnInliqDovb3lrozmr5XlsLHmiZPljbDvvIzlm77niYfmmK/miZPljbDkuI3lh7rmnaVcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBpbWFnZXNMb2FkQ29tcGxldGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5pbWFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbWFnZXMuZXZlcnkoaXRlbSA9PiBbJ2NvbXBsZXRlZCcsICdlcnJvciddLmluY2x1ZGVzKGl0ZW0ubG9hZFN0YXR1cykpXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRJbWFnZXNMb2FkZXIgZXh0ZW5kcyBEb2N1bWVudEltYWdlc0Jhc2VMb2FkZXIge1xuICAgIGNyZWF0ZVJlcXVlc3RJbWFnZSh1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBlbGUgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgZWxlLnNyYyA9IHVybDtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyLCBpKSA9PiB7XG4gICAgICAgICAgICBlbGUub25sb2FkID0gKGUpID0+IHsgdGhpcy5pbnZva2VJbWdMb2FkKHVybCwgJ2NvbXBsZXRlZCcsIGVsZSk7IHIoKTsgfTtcbiAgICAgICAgICAgIGVsZS5vbmVycm9yID0gKGUpID0+IHsgdGhpcy5pbnZva2VJbWdMb2FkKHVybCwgJ2Vycm9yJywgZWxlKTsgcigpOyB9O1xuICAgICAgICB9KTtcblxuICAgIH1cblxufSIsImltcG9ydCB7RG9jdW1lbnRFdmFsRnVuY30gZnJvbSBcIi4vZG9jdW1lbnQtZXZhbC1mdW5jXCI7XG5pbXBvcnQge0RvY3VtZW50SW1hZ2VzTG9hZGVyfSBmcm9tIFwiLi9kb2N1bWVudC1pbWFnZXMtbG9hZGVyXCI7XG5pbXBvcnQge1NlbGVjdGlvblN0YXRlfSBmcm9tIFwiLi9kb2N1bWVudC1zZWxlY3Rpb25cIjtcbmltcG9ydCB7XG4gICAgQnJhbmNoRWxlbWVudCxcbiAgICBFbGVtZW50LFxuICAgIEVsZW1lbnRIYW5kbGVyLFxuICAgIGVsZW1lbnRUeXBlRXZlbnRIYW5kbGVyLFxuICAgIEltZ0xvYWRTdGF0dXMsXG4gICAgTW9kaWZ5RmxhZyxcbiAgICBSZWN0LFxuICAgIFJlZnJlc2hUeXBlLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQge0VsZW1lbnRFdmVudCwgRXZlbnRUeXBlc30gZnJvbSBcIi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7RGF0YUVsZW1lbnRWYWx1ZVN0cnVjdCwgRWxlbWVudFNlcmlhbGl6ZX0gZnJvbSBcIi4vZWxlbWVudC1zZXJpYWxpemVcIjtcbmltcG9ydCB7XG4gICAgRGF0YUVsZW1lbnRDaGVjayxcbiAgICBEYXRhRWxlbWVudElubGluZUdyb3VwLFxuICAgIERhdGFFbGVtZW50TGVhZixcbiAgICBEb2N1bWVudEJvZHlQYXJ0RWxlbWVudCxcbiAgICBEb2N1bWVudEVsZW1lbnQsXG4gICAgVHJhY2tSdW5FbGVtZW50LFxuICAgIFRyYWNrUnVuVHlwZUVudW0sXG4gICAgdmFsaWRhdGVEYXRhRWxlXG59IGZyb20gXCIuL2ltcGxcIjtcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHtEb2N1bWVudENoYW5nZX0gZnJvbSBcIi4vZG9jdW1lbnQtY2hhbmdlXCI7XG5pbXBvcnQge0NvbW1vblV0aWx9IGZyb20gXCIuL2NvbW1vbi11dGlsXCI7XG5cbmludGVyZmFjZSBSZWdpc3RlclR5cGVIYW5kbGVyUHJvcHM8VCBleHRlbmRzIEVsZW1lbnQ+IHtcbiAgICBlbGVtZW50VHlwZTogeyBuZXcoLi4uYXJnczogYW55KTogVCB9LFxuICAgIGV2ZW50TmFtZTogRXZlbnRUeXBlcyxcbiAgICBoYW5kbGVyOiA8RSBleHRlbmRzIEVsZW1lbnRFdmVudD4oZTogRSkgPT4gdm9pZCxcbiAgICB1c2VDYXB0dXJlOiBib29sZWFuXG59XG5cbi8qKlxuICog5b2T5YmN5omT5byA55qE5paH5qGj55qE5LiK5LiL5paH5L+h5oGv77yM5b2T5YmN5paH5qGj5omA5pyJ55qE5bGe5oCn6K6+572u6YO95pq06Zyy5Zyo5LiK5LiL5paH5LitXG4gKi9cbmV4cG9ydCBjbGFzcyBFZGl0b3JDb250ZXh0IHtcbiAgICBpc0RpcnR5OiBib29sZWFuID0gZmFsc2U7XG4gICAgY3Vyc29yUmVjdCE6IFJlY3QgfCBudWxsO1xuICAgIHByaXZhdGUgX2RvY3VtZW50ITogRG9jdW1lbnRFbGVtZW50O1xuICAgIC8v5paH5qGj5Yi35paw55qE6K6i6ZiF5LqL5Lu2XG4gICAgLy9yZWZTdWIhOiBTdWJzY3JpcHRpb247XG4gICAgc3luY1JlZnJlc2ghOiAoKSA9PiB2b2lkO1xuICAgIGltYWdlTG9hZGVyOiBJSW1hZ2VMb2FkZXI7XG4gICAgZHluYW1pY0Z1bmM6IERvY3VtZW50RXZhbEZ1bmM7XG4gICAgZG9jQ2hhbmdlITogRG9jdW1lbnRDaGFuZ2U7XG4gICAgY2xlYXJQcmV2RG9jQ2IhOiAoKCkgPT4gdm9pZCkgfCBudWxsO1xuICAgIC8v57uY5Yi257uT5p2f5LmL5ZCO5Zue6LCD5Ye95pWwXG4gICAgcGFpbnRlZENhbGxiYWNrITogKCgpID0+IHZvaWQpIHwgbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb25TdGF0ZTogU2VsZWN0aW9uU3RhdGUsIHB1YmxpYyByZWFkb25seSB2aWV3T3B0aW9uczogVmlld09wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5keW5hbWljRnVuYyA9IG5ldyBEb2N1bWVudEV2YWxGdW5jKHRoaXMpO1xuICAgICAgICB0aGlzLmltYWdlTG9hZGVyID0gbmV3IERvY3VtZW50SW1hZ2VzTG9hZGVyKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUub25DaGFuZ2VkRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3luY1JlZnJlc2g/LigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGFpbnRlZENhbGxiYWNrKGNiOiAoKCkgPT4gdm9pZCkgfCBudWxsKSB7XG4gICAgICAgIHRoaXMucGFpbnRlZENhbGxiYWNrID0gY2I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkb2N1bWVudCgpOiBEb2N1bWVudEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBkb2N1bWVudCh2YWx1ZTogRG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuY2xlYXJQcmV2RG9jQ2I/LigpO1xuICAgICAgICB0aGlzLl9kb2N1bWVudCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmluaXRTY3JpcHRzKCk7XG4gICAgICAgIC8vIHRoaXMucmVmU3ViID0gdGhpcy5fZG9jdW1lbnQucmVmcmVzaFN1YmplY3Quc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgIC8vICAgICBkYXRhID0gZGF0YSA/PyAnY29udGVudCc7XG4gICAgICAgIC8vICAgICB0aGlzLmlzRGlydHkgPSB0aGlzLmlzRGlydHkgfHwgZGF0YSA9PT0gJ2NvbnRlbnQnO1xuICAgICAgICAvLyAgICAgdGhpcy5zeW5jUmVmcmVzaD8uKGRhdGEpO1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgY29uc3QgZG9jUmVmcmVzaFN1YiA9IHRoaXMuX2RvY3VtZW50LnJlZnJlc2hTdWJqZWN0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN5bmNSZWZyZXNoPy4oKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRvY0NoYW5nZWRTdWIgPSB0aGlzLl9kb2N1bWVudC5vbkNoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3luY1JlZnJlc2g/LigpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zeW5jUmVmcmVzaCgpO1xuICAgICAgICB0aGlzLmNsZWFyUHJldkRvY0NiID0gKCkgPT4ge1xuICAgICAgICAgICAgZG9jUmVmcmVzaFN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgZG9jQ2hhbmdlZFN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RvY3VtZW50KSB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlPy5yZW5kZXJDb250YWluZXI/LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jbGVhclByZXZEb2NDYiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICB0aGlzLmltYWdlTG9hZGVyLmNsZWFyKCk7XG4gICAgICAgIDtcbiAgICAgICAgdGhpcy5keW5hbWljRnVuYy5kZXN0cm95U2NyaXB0cygpO1xuICAgICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdEN0eCgpOiBEb2N1bWVudENvbnRleHQge1xuICAgICAgICByZXR1cm4gbmV3IERvY3VtZW50Q29udGV4dCh0aGlzLl9kb2N1bWVudCwgdGhpcy5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudEN0eChlbGU6IEVsZW1lbnQpOiBEb2N1bWVudENvbnRleHQge1xuICAgICAgICBjb25zdCBwYXJlbnRDdHggPSBFbGVtZW50VXRpbC5nZXRQYXJlbnQoZWxlLCAoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50RWxlbWVudCB8fCBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQpIGFzIEJyYW5jaEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBuZXcgRG9jdW1lbnRDb250ZXh0KHBhcmVudEN0eCwgdGhpcy5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5qC55o2u5b2T5YmN6YCJ5Yy677yM6L+U5Zue5omA5Zyo55qE5LiK5LiL5paH5YWD57Sg77yM6L+U5Zue57G75Z6L5Li6RG9jdW1lbnRFbGVtZW50fERvY3VtZW50Qm9keVBhcnRFbGVtZW50XG4gICAgICovXG4gICAgZ2V0Q3VycmVudEVsZUN0eCgpOiBCcmFuY2hFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHtzdGFydENvbnRyb2x9ID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBFbGVtZW50VXRpbC5nZXRQYXJlbnQoc3RhcnRDb250cm9sLCAoaXRlbSkgPT4gaXRlbSBpbnN0YW5jZW9mIERvY3VtZW50RWxlbWVudCB8fCBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRCb2R5UGFydEVsZW1lbnQpIGFzIEJyYW5jaEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0Q3R4KGVsZTogQnJhbmNoRWxlbWVudCk6IERvY3VtZW50Q29udGV4dCB7XG4gICAgICAgIHJldHVybiBuZXcgRG9jdW1lbnRDb250ZXh0KGVsZSwgdGhpcy5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgfVxuXG5cbiAgICByZWdpc3RlclR5cGVIYW5kbGVyczxUIGV4dGVuZHMgRWxlbWVudCA9IEVsZW1lbnQsIEYgZXh0ZW5kcyBFbGVtZW50RXZlbnQgPSBFbGVtZW50RXZlbnQ+KGVsZW1lbnRUeXBlOiBhbnksIGV2ZW50TmFtZTogRXZlbnRUeXBlcywgaGFuZGxlcjogRWxlbWVudEhhbmRsZXI8Rj4sIHVzZUNhcHR1cmU6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBpZiAoZWxlbWVudFR5cGVFdmVudEhhbmRsZXIuZmluZChpdGVtID0+IGl0ZW0uY3R4ID09PSB0aGlzICYmIGl0ZW0uZWxlbWVudFR5cGUgPT09IGVsZW1lbnRUeXBlICYmIGl0ZW0uZXZlbnROYW1lID09PSBldmVudE5hbWUgJiYgaXRlbS51c2VDYXB0dXJlID09PSB1c2VDYXB0dXJlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRlbXAgPSBoYW5kbGVyIGFzIEVsZW1lbnRIYW5kbGVyPEVsZW1lbnRFdmVudD47XG4gICAgICAgIGVsZW1lbnRUeXBlRXZlbnRIYW5kbGVyLnB1c2goe1xuICAgICAgICAgICAgZWxlbWVudFR5cGUsXG4gICAgICAgICAgICBldmVudE5hbWUsXG4gICAgICAgICAgICBoYW5kbGVyOiB0ZW1wLFxuICAgICAgICAgICAgdXNlQ2FwdHVyZSxcbiAgICAgICAgICAgIGN0eDogdGhpc1xuICAgICAgICB9KVxuICAgIH1cblxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmRvY3VtZW50LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5jbGVhclByZXZEb2NDYj8uKCk7XG4gICAgICAgIC8vdGhpcy5lbGVfdHlwZXNfaGFuZGxlcnMubGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5pbWFnZUxvYWRlci5jbGVhcigpO1xuICAgICAgICA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5YiH5o2i6KGM5omT5Y2w5qih5byPXG4gICAgICovXG4gICAgc3dpdGNoVGV4dGxpbmVNb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY3VtZW50LnZpZXdPcHRpb25zLnRleHRSb3dMaW5lTW9kZSA9ICF0aGlzLmRvY3VtZW50LnZpZXdPcHRpb25zLnRleHRSb3dMaW5lTW9kZTtcbiAgICAgICAgdGhpcy5zeW5jUmVmcmVzaCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWunuS+i+WMluWKqOaAgeiEmuacrFxuICAgICAqL1xuICAgIHByaXZhdGUgaW5pdFNjcmlwdHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZHluYW1pY0Z1bmMuaW5pdFNjcmlwdHModGhpcy5kb2N1bWVudC5wcm9wcy5zY3JpcHRzKTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOabv+aNouaVsOaNruWFg1xuICAgICAqL1xuICAgIHJlcGxhY2VEYXRhRWxlbWVudChvbGREYXRhRWxlbWVudDogRGF0YUVsZW1lbnRMZWFmIHwgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCwgbmV3RWxlbWVudDogRGF0YUVsZW1lbnRMZWFmIHwgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCwgc3M6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIC8v5riF6Zmk5YWJ5qCHXG4gICAgICAgIHNzLmNsZWFyKCk7XG4gICAgICAgIC8v5omn6KGM5Yi35pawXG4gICAgICAgIC8v5o+S5YWl5paw5a+56LGh5Yiw5pen5a+56LGh5LmL5YmNXG4gICAgICAgIG9sZERhdGFFbGVtZW50LnBhcmVudC5hZGRDaGlsZChuZXdFbGVtZW50LCBvbGREYXRhRWxlbWVudC5nZXRJbmRleCgpKTtcbiAgICAgICAgLy/liKDpmaTml6foioLngrlcbiAgICAgICAgb2xkRGF0YUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgfVxuXG4gICAgZ2V0IHJlZnJlc2hUeXBlKCk6IFJlZnJlc2hUeXBlIHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5fZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5tb2RpZnlGbGFnID09PSBNb2RpZnlGbGFnLk5vbmUgPyAnYXBwZWFyYW5jZScgOiAnY29udGVudCdcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VTb3VyY2VJdGVtIHtcbiAgICBzcmM6IHN0cmluZyxcbiAgICB0YXNrOiBQcm9taXNlPHZvaWQ+O1xuICAgIGNiczogQXJyYXk8KHN0YXR1czogSW1nTG9hZFN0YXR1cykgPT4gdm9pZD47XG4gICAgZWxlOiBIVE1MSW1hZ2VFbGVtZW50LFxuICAgIGxvYWRTdGF0dXM6IEltZ0xvYWRTdGF0dXNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSW1hZ2VMb2FkZXIge1xuICAgIGNsZWFyKCk6IHZvaWQ7XG5cbiAgICBsb2FkSW1hZ2Uoc3JjOiBzdHJpbmcsIG9uQ2FsbGJhY2s6IChzdGF0dXM6IEltZ0xvYWRTdGF0dXMpID0+IHZvaWQpOiB2b2lkO1xuXG4gICAgZ2V0SW1hZ2Uoc3JjOiBzdHJpbmcpOiBIVE1MSW1hZ2VFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG4gICAgaW1hZ2VzTG9hZENvbXBsZXRlZCgpOiBib29sZWFuO1xuXG4gICAgZ2V0TG9hZFRhc2tzKCk6IEFycmF5PFByb21pc2U8dm9pZD4+O1xufVxuXG4vKipcbiAqIOaWh+aho+S4iuS4i+aWh1xuICovXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRDb250ZXh0IHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgY3R4OiBCcmFuY2hFbGVtZW50LCBwcml2YXRlIHNzOiBTZWxlY3Rpb25TdGF0ZSkge1xuICAgIH1cblxuICAgIGdldENvbnRyb2xJRExpc3QoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGVMaXN0ID0gPHVua25vd24+dGhpcy5jdHgudHJlZUZpbHRlcihpdGVtID0+IHZhbGlkYXRlRGF0YUVsZShpdGVtKSkgYXMgQXJyYXk8eyBwcm9wczogeyBpZDogc3RyaW5nIH0gfT47XG4gICAgICAgIHJldHVybiBkYXRhRWxlTGlzdC5tYXAoaXRlbSA9PiBpdGVtLnByb3BzLmlkKTtcbiAgICB9XG5cbiAgICBnZXRDb250cm9sSW5zdGFuY2VMaXN0KCk6IEFycmF5PERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWY+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4LnRyZWVGaWx0ZXIoaXRlbSA9PiB2YWxpZGF0ZURhdGFFbGUoaXRlbSkpIGFzIEFycmF5PERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWY+O1xuICAgIH1cblxuICAgIGdldENvbnRyb2xCeUlkKGlkOiBzdHJpbmcpOiBEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4LnRyZWVGaW5kKGl0ZW0gPT4gdmFsaWRhdGVEYXRhRWxlKGl0ZW0pICYmICg8YW55Pml0ZW0pWydwcm9wcyddWydpZCddID09PSBpZCkgYXMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZjtcbiAgICB9XG5cbiAgICBnZXRDb250cm9sQnlOYW1lKG5hbWU6IHN0cmluZyk6IERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWYge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHgudHJlZUZpbmQoaXRlbSA9PiB2YWxpZGF0ZURhdGFFbGUoaXRlbSkgJiYgKDxhbnk+aXRlbSlbJ3Byb3BzJ11bJ25hbWUnXSA9PT0gbmFtZSkgYXMgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCB8IERhdGFFbGVtZW50TGVhZjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bmlbDmja7lhYPlgLzpm4blkIhcbiAgICAgKi9cbiAgICBnZXREYXRhRWxlbWVudFZhbHVlcygpOiBBcnJheTxEYXRhRWxlbWVudFZhbHVlU3RydWN0PiB7XG4gICAgICAgIGNvbnN0IHN0cnVjdExpc3QgPSB0aGlzLmdldERhdGFFbGVtZW50TW9kZWxMaXN0KCk7XG4gICAgICAgIHJldHVybiBzdHJ1Y3RMaXN0Lm1hcDxEYXRhRWxlbWVudFZhbHVlU3RydWN0PihpdGVtID0+ICh7XG4gICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLmdldFZhbHVlKClcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaVsOaNruWFg+e7k+aehOS7peWPimdldFxcc2V06Zet5YyF6LCD55So5Ye95pWwXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXREYXRhRWxlbWVudE1vZGVsTGlzdCgpOiBBcnJheTxEYXRhQ2hlY2tFbGVNb2RlbCB8IERhdGFJbnB1dEVsZU1vZGVsIHwgRGF0YUxlYWZFbGVNb2RlbD4ge1xuICAgICAgICBjb25zdCBkYXRhRWxlTGlzdCA9IHRoaXMuY3R4LnRyZWVGaWx0ZXIoaXRlbSA9PiB2YWxpZGF0ZURhdGFFbGUoaXRlbSkgfHwgaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50SW5saW5lR3JvdXApIGFzIEFycmF5PERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWY+O1xuXG4gICAgICAgIGNvbnN0IGRhdGFJbmxpbmVHcm91cHMgPSBkYXRhRWxlTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRJbmxpbmVHcm91cCkgYXMgQXJyYXk8RGF0YUVsZW1lbnRJbmxpbmVHcm91cD47XG4gICAgICAgIGNvbnN0IGRhdGFMZWFmcyA9IGRhdGFFbGVMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEYXRhRWxlbWVudExlYWYpIGFzIEFycmF5PERhdGFFbGVtZW50TGVhZj47XG5cbiAgICAgICAgLy/lpI3pgInmoYbmlbDmja7lhYNcbiAgICAgICAgY29uc3QgZGF0YUNoZWNrTGlzdCA9IGRhdGFMZWFmcy5maWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRDaGVjaykgYXMgQXJyYXk8RGF0YUVsZW1lbnRDaGVjaz47XG4gICAgICAgIC8v6Zmk5aSN6YCJ5qGG5LmL5aSW55qETGVhZkRhdGFFbGVtZW50XG4gICAgICAgIGNvbnN0IGRhdGFPdGhlckxlYWZWYWx1ZXMgPSBDb21tb25VdGlsLnJlbW92ZVVuaW9uU2V0KGRhdGFMZWFmcywgZGF0YUNoZWNrTGlzdCkubWFwPERhdGFMZWFmRWxlTW9kZWw+KGl0ZW0gPT4gKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBpdGVtLnByb3BzLmlkIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLnByb3BzLm5hbWUgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogaXRlbS5wcm9wcy5maWVsZCBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBnZXRWYWx1ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5nZXRWYWx1ZSgpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZTogKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldFZhbHVlKHZhbClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIGNvbnN0IGRhdGFJbmxpbmVTdHJ1Y3RMaXN0ID0gZGF0YUlubGluZUdyb3Vwcy5tYXA8RGF0YUlucHV0RWxlTW9kZWw+KGl0ZW0gPT4gKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBpdGVtLnByb3BzLmlkLCBuYW1lOiBpdGVtLnByb3BzLm5hbWUsIGZpZWxkTmFtZTogaXRlbS5wcm9wcy5maWVsZE5hbWUsIGl0ZW0sIGdldFZhbHVlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldFZhbHVlKClcbiAgICAgICAgICAgICAgICB9LCBzZXRWYWx1ZTogKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnNldFZhbHVlKHZhbClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIC8v5aSN6YCJ5qGG5YiX6KGoXG4gICAgICAgIGNvbnN0IGRhdGFDaGVja1N0cnVjdExpc3QgPSB0aGlzLmdldERhdGFDaGVja01vZGVsTGlzdChkYXRhQ2hlY2tMaXN0KTtcbiAgICAgICAgcmV0dXJuIFsuLi5kYXRhSW5saW5lU3RydWN0TGlzdCwgLi4uZGF0YUNoZWNrU3RydWN0TGlzdCwgLi4uZGF0YU90aGVyTGVhZlZhbHVlc107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W5aSN6YCJ5qGG5pWw5o2u5YWD57uT5p6E5YiX6KGoXG4gICAgICogQHBhcmFtIGRhdGFDaGVja0xpc3RcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RGF0YUNoZWNrTW9kZWxMaXN0KGRhdGFDaGVja0xpc3Q6IEFycmF5PERhdGFFbGVtZW50Q2hlY2s+KTogQXJyYXk8RGF0YUNoZWNrRWxlTW9kZWwgfCBEYXRhTGVhZkVsZU1vZGVsPiB7XG4gICAgICAgIC8v5LiN5a2Y5ZyoZ3JvdXBOYW1l55qE5aSN6YCJ5qGGXG4gICAgICAgIGNvbnN0IHNpbmdsZUNoZWNrTGlzdCA9IGRhdGFDaGVja0xpc3QuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0ucHJvcHMuZ3JvdXBOYW1lKTtcbiAgICAgICAgLy/lrZjlnKhncm91cE5hbWXnmoTlpI3pgInmoYZcbiAgICAgICAgY29uc3QgZ3JvdXBOYW1lcyA9IEFycmF5LmZyb20obmV3IFNldChkYXRhQ2hlY2tMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMuZ3JvdXBOYW1lKS5tYXAoaXRlbSA9PiBpdGVtLnByb3BzLmdyb3VwTmFtZSkpKTtcbiAgICAgICAgY29uc3QgZ3JvdXBDaGVja0xpc3RWYWx1ZXMgPSBncm91cE5hbWVzLm1hcDxEYXRhQ2hlY2tFbGVNb2RlbD4oKGdyb3VwTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBDaGVja0l0ZW1zID0gZGF0YUNoZWNrTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLmdyb3VwTmFtZSA9PT0gZ3JvdXBOYW1lKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWQ6IGdyb3VwTmFtZSxcbiAgICAgICAgICAgICAgICBuYW1lOiBncm91cENoZWNrSXRlbXNbMF0ucHJvcHMubmFtZSxcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWU6IGdyb3VwQ2hlY2tJdGVtc1swXS5wcm9wcy5maWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgbXVsdGlTZWxlY3Q6IGdyb3VwQ2hlY2tJdGVtc1swXS5wcm9wcy5tdWx0aVNlbGVjdCxcbiAgICAgICAgICAgICAgICBpdGVtOiBncm91cENoZWNrSXRlbXMsXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrZWRWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXBDaGVja0l0ZW1zWzBdLnByb3BzLm11bHRpU2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkVmFsdWUgPSBncm91cENoZWNrSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wcy5jaGVja2VkKS5tYXAoaXRlbSA9PiBpdGVtLmdldFZhbHVlKCkgKyAnJykuam9pbignOycpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hlY2tlZFNpbmdsZUl0ZW0gPSBncm91cENoZWNrSXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucHJvcHMuY2hlY2tlZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja2VkU2luZ2xlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWRWYWx1ZSA9IGNoZWNrZWRTaW5nbGVJdGVtLnByb3BzLmNoZWNrZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGVja2VkVmFsdWU7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZTogKHZhbDogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvL+S4um51bGzml7ZcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDaGVja0l0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLnByb3BzLmNoZWNrZWQgPSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwQ2hlY2tJdGVtc1swXS5wcm9wcy5tdWx0aVNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsSXRlbXMgPSB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IHZhbC5zcGxpdCgnOycpIDogdmFsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cENoZWNrSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnByb3BzLmNoZWNrZWQgPSB2YWxJdGVtcy5pbmRleE9mKGl0ZW0ucHJvcHMuY2hlY2tlZFZhbHVlICsgJycpID49IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwQ2hlY2tJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ucHJvcHMuY2hlY2tlZCA9IGl0ZW0ucHJvcHMuY2hlY2tlZFZhbHVlID09PSB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBzaW5nbGVDaGVja0xpc3RWYWx1ZXMgPSBzaW5nbGVDaGVja0xpc3QubWFwPERhdGFMZWFmRWxlTW9kZWw+KGl0ZW0gPT4gKHtcbiAgICAgICAgICAgIGlkOiBpdGVtLnByb3BzLmlkLFxuICAgICAgICAgICAgbmFtZTogaXRlbS5wcm9wcy5uYW1lLFxuICAgICAgICAgICAgZmllbGROYW1lOiBpdGVtLnByb3BzLmZpZWxkTmFtZSxcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICBnZXRWYWx1ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldFZhbHVlKClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRWYWx1ZTogKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW0uc2V0VmFsdWUodmFsKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiBbLi4uc2luZ2xlQ2hlY2tMaXN0VmFsdWVzLCAuLi5ncm91cENoZWNrTGlzdFZhbHVlc107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6I635Y+W55WZ55eV5Z2X5YWD57Sg5YiX6KGoXG4gICAgICovXG4gICAgZ2V0VHJhY2tFbGVtZW50cygpOiBBcnJheTxUcmFja1J1bkVsZW1lbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3R4LnRyZWVGaWx0ZXIoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50KSBhcyBBcnJheTxUcmFja1J1bkVsZW1lbnQ+O1xuICAgIH1cblxuICAgIGdldFRyYWNrRWxtZWVudEJ5SWQoaWQ6IHN0cmluZyk6IFRyYWNrUnVuRWxlbWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5jdHgudHJlZUZpbmQoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgVHJhY2tSdW5FbGVtZW50ICYmIGl0ZW0ucHJvcHMuaWQgPT09IGlkKSBhcyBUcmFja1J1bkVsZW1lbnQgfCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlueVmeeXleWdl+WGheaVsOaNrlxuICAgICAqL1xuICAgIGdldFRyYWNrc0RhdGEoKTogQXJyYXk8VHJhY2tCbG9ja0RhdGE+IHtcbiAgICAgICAgY29uc3QgdHJhY2tFbGVtZW50cyA9IHRoaXMuZ2V0VHJhY2tFbGVtZW50cygpO1xuICAgICAgICByZXR1cm4gdHJhY2tFbGVtZW50cy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0cmFja1J1biA9IGl0ZW0gYXMgVHJhY2tSdW5FbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IEVsZW1lbnRTZXJpYWxpemUuc2VyaWFsaXplU3RyaW5nKHRyYWNrUnVuLCB7YWxsOiB0cnVlfSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC8v55So5oi3aWRcbiAgICAgICAgICAgICAgICB1c2VySWQ6IHRyYWNrUnVuLnByb3BzLnVzZXJJZCxcbiAgICAgICAgICAgICAgICAvL+eUqOaIt+WQjeensFxuICAgICAgICAgICAgICAgIHVzZXJOYW1lOiB0cmFja1J1bi5wcm9wcy51c2VyTmFtZSxcbiAgICAgICAgICAgICAgICAvL+aXpeacn1xuICAgICAgICAgICAgICAgIGRhdGU6IHRyYWNrUnVuLnByb3BzLmRhdGUsXG4gICAgICAgICAgICAgICAgLy/nsbvlnovvvIxpbnMtcnVu77ya5o+S5YWl77yMZGVsLXJ1bu+8muWIoOmZpFxuICAgICAgICAgICAgICAgIHR5cGU6IHRyYWNrUnVuLnR5cGUgYXMgVHJhY2tSdW5UeXBlRW51bSxcbiAgICAgICAgICAgICAgICAvL+eVmeeXleWdl2lkXG4gICAgICAgICAgICAgICAgaWQ6IHRyYWNrUnVuLnByb3BzLmlkLFxuICAgICAgICAgICAgICAgIC8v5YaF5a65XG4gICAgICAgICAgICAgICAgY29udGVudFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRDb250cm9sVmFsdWUoaWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhRWxlID0gdGhpcy5nZXRDb250cm9sQnlJZChpZCk7XG4gICAgICAgIGlmIChkYXRhRWxlKSB7XG4gICAgICAgICAgICBkYXRhRWxlLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgc2V0Q29udHJvbFZhbHVlQnlOYW1lKG5hbWU6IHN0cmluZywgdmFsOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0YUVsZSA9IHRoaXMuZ2V0Q29udHJvbEJ5TmFtZShuYW1lKVxuICAgICAgICBkYXRhRWxlLnNldFZhbHVlKHZhbClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blpI3pgInmoYbpgInkuK3nmoTlgLxcbiAgICAgKi9cbiAgICBnZXRDaGVja0JveFZhbHVlcyhncm91cE5hbWU6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICBjb25zdCBja2JzID0gdGhpcy5nZXRDaGVja0JveExpc3QoZ3JvdXBOYW1lKTtcbiAgICAgICAgcmV0dXJuIGNrYnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wcy5jaGVja2VkKS5tYXAoaXRlbSA9PiBpdGVtLnByb3BzLmNoZWNrZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0Q2hlY2tCb3hMaXN0KGdyb3VwTmFtZTogc3RyaW5nKTogQXJyYXk8RGF0YUVsZW1lbnRDaGVjaz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb250cm9sSW5zdGFuY2VMaXN0KCkuZmlsdGVyKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERhdGFFbGVtZW50Q2hlY2sgJiYgaXRlbS5wcm9wcy5ncm91cE5hbWUgPT09IGdyb3VwTmFtZSkgYXMgQXJyYXk8RGF0YUVsZW1lbnRDaGVjaz47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5b2T5YmN5LiK5LiL5paH5omn6KGM6buY6K6k57uR5a6aXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICBiaW5kRGF0YVZhbHVlcyhkYXRhOiBzdHJpbmcgfCBPYmplY3QgfCBBcnJheTx7IGtleTogc3RyaW5nLCB2YWx1ZTogYW55IH0+LCBwcmVkaWNhdGVLZXk6ICdpZCcgfCAnbmFtZScgfCAnZmllbGROYW1lJyA9ICdmaWVsZE5hbWUnKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3MuY2xlYXIoKTtcbiAgICAgICAgbGV0IGJpbmREYXRhID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkYXRhKSBhcyBPYmplY3QgOiBkYXRhO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShiaW5kRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgICAgICAgYmluZERhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBvYmpbaXRlbS5rZXldID0gaXRlbS52YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBiaW5kRGF0YSA9IG9iajtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhTGlzdCA9IHRoaXMuZ2V0RGF0YUVsZW1lbnRNb2RlbExpc3QoKTtcbiAgICAgICAgZGF0YUxpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9iaktleSA9IGl0ZW1bcHJlZGljYXRlS2V5XTtcbiAgICAgICAgICAgIGlmIChiaW5kRGF0YS5oYXNPd25Qcm9wZXJ0eShvYmpLZXkpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGJpbmRWYWx1ZSA9IGJpbmREYXRhW29iaktleV07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiaW5kVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZSA9IGJpbmRWYWx1ZS5yZXBsYWNlKC9bXFxuXFxyXS9nLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0uc2V0VmFsdWUoYmluZERhdGFbb2JqS2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuXG5pbnRlcmZhY2UgRGF0YUVsZUJhc2VNb2RlbCB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZmllbGROYW1lOiBzdHJpbmc7XG4gICAgZ2V0VmFsdWU6ICgpID0+IGFueTtcbiAgICBzZXRWYWx1ZTogKHZhbDogYW55KSA9PiB2b2lkO1xufVxuXG5pbnRlcmZhY2UgRGF0YUNoZWNrRWxlTW9kZWwgZXh0ZW5kcyBEYXRhRWxlQmFzZU1vZGVsIHtcbiAgICBpdGVtOiBBcnJheTxEYXRhRWxlbWVudENoZWNrPjtcbiAgICBtdWx0aVNlbGVjdDogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIERhdGFJbnB1dEVsZU1vZGVsIGV4dGVuZHMgRGF0YUVsZUJhc2VNb2RlbCB7XG4gICAgaXRlbTogRGF0YUVsZW1lbnRJbmxpbmVHcm91cFxufVxuXG5pbnRlcmZhY2UgRGF0YUxlYWZFbGVNb2RlbCBleHRlbmRzIERhdGFFbGVCYXNlTW9kZWwge1xuICAgIGl0ZW06IERhdGFFbGVtZW50TGVhZjtcbn1cblxuLyoqXG4gKiDnlZnnl5XlnZfnu5PmnoTljJbmlbDmja5cbiAqL1xuaW50ZXJmYWNlIFRyYWNrQmxvY2tEYXRhIHtcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICB1c2VyTmFtZTogc3RyaW5nO1xuICAgIGRhdGU6IHN0cmluZztcbiAgICB0eXBlOiBUcmFja1J1blR5cGVFbnVtLFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nO1xufSIsImltcG9ydCB7IEVkaXRvckNvbnRleHQgfSBmcm9tIFwiLi9kb2N1bWVudC1jb250ZXh0XCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgQ29tbUNvbnRlbnRCYXNlRWxlbWVudCwgQ29tbUNvbnRlbnRFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9jb21tZW50cy9jb21tZW50LWNvbnRlbnQtaW1wbFwiO1xuaW1wb3J0IHsgQ29tbWVudEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2NvbW1lbnRzL2NvbW1lbnQtZWxlbWVudC1pbXBsXCI7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC90ZXh0L3RleHQtaW1wbFwiO1xuaW1wb3J0IHsgUmFuZ2VVdGlsIH0gZnJvbSBcIi4vcmFuZ2UtdXRpbFwiO1xuXG4vKipcbiAqIOWkhOeQhuaWh+aho+aJueazqFxuICovXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRDb21tZW50IHtcbiAgICBjb21tTWFya0xpc3Q6IEFycmF5PENvbW1lbnRFbGVtZW50PiA9IFtdO1xuICAgIGNvbW1Db250ZW50TGlzdDogQXJyYXk8Q29tbUNvbnRlbnRCYXNlRWxlbWVudD4gPSBbXTtcbiAgICBpc0RpcnR5OiBib29sZWFuID0gdHJ1ZTtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZG9jQ3R4OiBFZGl0b3JDb250ZXh0KSB7IH1cblxuICAgIC8qKlxuICAgICog6K+75Y+W5a6h6ZiF5qCH6K6w56ym5Y+3XG4gICAgKi9cbiAgICByZWFkQ29tbWVudHMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0RpcnR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tbUxpc3QgPSB0aGlzLmRvY0N0eC5kb2N1bWVudC50cmVlRmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnY29tbScpIGFzIEFycmF5PENvbW1lbnRFbGVtZW50PjtcbiAgICAgICAgY29uc3Qgc3RhcnRDb21tTGlzdCA9IGNvbW1MaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvcHMubWFya1R5cGUgPT09IFwic3RhcnRcIik7XG4gICAgICAgIGNvbnN0IGVuZENvbW1MaXN0ID0gY29tbUxpc3QuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wcm9wcy5tYXJrVHlwZSA9PT0gXCJlbmRcIik7XG4gICAgICAgIGNvbnN0IGNvbW1NYXBzID0gc3RhcnRDb21tTGlzdC5tYXAoc3RhcnRJdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IGVuZENvbW1MaXN0LmZpbmQoZW5kSXRlbSA9PiBlbmRJdGVtLnByb3BzLmlkID09PSBzdGFydEl0ZW0ucHJvcHMuaWQpO1xuICAgICAgICAgICAgaWYgKCFlbmQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOWMuemFjeeahOe7k+adn+WuoemYheespuWPtycpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBzdGFydDogc3RhcnRJdGVtLCBlbmQgfVxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBjb21tQ29udGVudExpc3Q6IEFycmF5PENvbW1Db250ZW50QmFzZUVsZW1lbnQ+ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb2NDdHguZG9jdW1lbnQuY29tbWVudHNDb250YWluZXJFbGVtZW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tQ29udGVudCA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LmNvbW1lbnRzQ29udGFpbmVyRWxlbWVudC5nZXRDaGlsZChpKSBhcyBDb21tQ29udGVudEJhc2VFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgY29tbU1hcCA9IGNvbW1NYXBzLmZpbmQoaXRlbSA9PiBpdGVtLnN0YXJ0LnByb3BzLmlkID09PSBjb21tQ29udGVudC5wcm9wcy5pZCk7XG4gICAgICAgICAgICBpZiAoIWNvbW1NYXApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsOWuoemYheWGheWuueWvueW6lOeahOWuoemYheespuWPtycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tbUNvbnRlbnQuc3RhcnRNYXJrID0gY29tbU1hcC5zdGFydDtcbiAgICAgICAgICAgIGNvbW1Db250ZW50LmVuZE1hcmsgPSBjb21tTWFwLmVuZDtcbiAgICAgICAgICAgIGNvbW1Db250ZW50TGlzdC5wdXNoKGNvbW1Db250ZW50KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tbU1hcmtMaXN0ID0gY29tbUxpc3Q7XG4gICAgICAgIHRoaXMuY29tbUNvbnRlbnRMaXN0ID0gY29tbUNvbnRlbnRMaXN0O1xuICAgICAgICB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucy5zaG93UmV2aWV3V2luZG93ID0gdGhpcy5jb21tQ29udGVudExpc3QubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5omn6KGM5Yig6Zmk5YmN77yM6ZyA6KaB5pu05paw5om55rOo6IqC54K55L2N572uXG4gICAgICovXG4gICAgdXBkYXRlQ29tbWVudHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhdGUgfSA9IHRoaXMuZG9jQ3R4O1xuICAgICAgICBjb25zdCB7IHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGNvbGxhcHNlZCwgc2VsZWN0ZWRSYW5nZSB9ID0gc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmIChjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGlmIChzdGFydE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5leHRTaWJsaW5nRWxlID0gRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdFbGVtZW50KHN0YXJ0Q29udHJvbCk7XG4gICAgICAgICAgICAvL+e0p+aMqOedgOeahOWFg+e0oFxuICAgICAgICAgICAgaWYgKG5leHRTaWJsaW5nRWxlIGluc3RhbmNlb2YgQ29tbWVudEVsZW1lbnQgJiYgbmV4dFNpYmxpbmdFbGUucHJvcHMubWFya1R5cGUgPT09ICdlbmQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q29udHJvbC50ZXh0TWVhc3VyZXMubGVuZ3RoID09PSBzdGFydE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tZW50KG5leHRTaWJsaW5nRWxlLnByb3BzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29tbWVudChuZXh0U2libGluZ0VsZS5wcm9wcy5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy/lpoLmnpzlvIDlp4vmibnms6jooqvpgInkuK3vvIzliJnpnIDopoHnp7vliqjlvIDlp4vmibnms6jlhYPntKDliLDpgInljLrmnKvlsL5cbiAgICAgICAgICAgIC8v5aaC5p6c57uT5p2f5om55rOo6KKr6YCJ5Lit77yM5YiZ6ZyA6KaB5Yig6Zmk5b2T5YmN5om55rOoXG4gICAgICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVuZFJhbmdlID0gUmFuZ2VVdGlsLmdldEVuZFJhbmdlVGFyZ2V0KHNlbGVjdGVkUmFuZ2UpO1xuICAgICAgICAgICAgaWYgKCFlbmRSYW5nZSkge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tbVBhaXJzOiBBcnJheTxDb21tTWFya1NlbGVjdGVkU3RhdHVzPiA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbW1Db250ZW50TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRNYXJrLCBlbmRNYXJrIH0gPSB0aGlzLmNvbW1Db250ZW50TGlzdFtpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tUGFpcjogQ29tbU1hcmtTZWxlY3RlZFN0YXR1cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRNYXJrLFxuICAgICAgICAgICAgICAgICAgICBlbmRNYXJrLFxuICAgICAgICAgICAgICAgICAgICBzdGFydE1hcmtTdGF0dXM6IFJhbmdlVXRpbC5jaGVja0VsZW1lbnRGdWxsSW5SYW5nZShzZWxlY3RlZFJhbmdlLCBzdGFydE1hcmspLFxuICAgICAgICAgICAgICAgICAgICBlbmRNYXJrU3RhdHVzOiBSYW5nZVV0aWwuY2hlY2tFbGVtZW50RnVsbEluUmFuZ2Uoc2VsZWN0ZWRSYW5nZSwgZW5kTWFyayksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb21tUGFpcnMucHVzaChjb21tUGFpcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21tUGFpcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tUGFpciA9IGNvbW1QYWlyc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoY29tbVBhaXIuZW5kTWFya1N0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNvbW1lbnQoY29tbVBhaXIuZW5kTWFyay5wcm9wcy5pZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb21tUGFpci5zdGFydE1hcmtTdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgbmV3U3RhcnRNYXJrID0gbmV3IENvbW1lbnRFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIG5ld1N0YXJ0TWFyay5wcm9wcy5pZCA9IGNvbW1QYWlyLnN0YXJ0TWFyay5wcm9wcy5pZDtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tbVBhaXIuc3RhcnRNYXJrLmlzRGVjb3JhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRG9jdW1lbnRDaGFuZ2UuaW5zZXJ0RWxlbWVudChlbmRSYW5nZS50YXJnZXQsIGVuZFJhbmdlLmVuZE9mZnNldCwgW25ld1N0YXJ0TWFya10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog5Yig6Zmk5om55rOoXG4gICAgICogQHBhcmFtIGlkIFxuICAgICAqL1xuICAgIHJlbW92ZUNvbW1lbnQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb21tZW50TWFya3MgPSB0aGlzLmNvbW1NYXJrTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLmlkID09PSBpZCk7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRDb250ZW50ID0gdGhpcy5jb21tQ29udGVudExpc3QuZmluZChpdGVtID0+IGl0ZW0ucHJvcHMuaWQgPT09IGlkKTtcbiAgICAgICAgY29tbWVudE1hcmtzLmZvckVhY2goaXRlbSA9PiBpdGVtLnJlbW92ZSgpKVxuICAgICAgICBjb21tZW50Q29udGVudD8ucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJDb21tZW50c0NoYW5nZWQoKTtcbiAgICB9XG5cbiAgICBnZXRDb21tTWFya0luZGV4KGNvbW1NYXJrOiBDb21tZW50RWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG1hcmtUeXBlID0gY29tbU1hcmsucHJvcHMubWFya1R5cGU7XG4gICAgICAgIGNvbnN0IGNvbW1MaXN0ID0gdGhpcy5kb2NDdHguZG9jdW1lbnQudHJlZUZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2NvbW0nKSBhcyBBcnJheTxDb21tZW50RWxlbWVudD47XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29tbUxpc3QgPSBjb21tTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnByb3BzLm1hcmtUeXBlID09PSBtYXJrVHlwZSk7XG4gICAgICAgIHJldHVybiBzdGFydENvbW1MaXN0LmluZGV4T2YoY29tbU1hcmspO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOa4hemZpOaJgOacieaJueazqFxuICAgICAqL1xuICAgIGNsZWFyQWxsQ29tbWVudHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVhZENvbW1lbnRzKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb21tQ29udGVudExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29tbWVudCh0aGlzLmNvbW1Db250ZW50TGlzdFtpXS5wcm9wcy5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NDdHguc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmuIXpmaTmiYDmnInnmoTpqozor4Hmibnms6hcbiAgICAgKi9cbiAgICBjbGVhckFsbFZhbGlkYXRlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQudHJlZUZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3ZhbGlkYXRlJykuZm9yRWFjaChpdGVtID0+IHsgdGhpcy5yZW1vdmVDb21tZW50KGl0ZW0ucHJvcHMuaWQpIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5om55rOo5L+u5pS55ZCO5LqL5Lu2XG4gICAgICog55So5LqO5qCH5rOo5b2T5YmN5paH5qGj55qE5om55rOo5Y+R55Sf5pu05pS55LqG77yM5LiN5YaN6YeN5aSN6K+75Y+W5om55rOo77yM5o+Q6auY5oCn6IO9XG4gICAgICovXG4gICAgYWZ0ZXJDb21tZW50c0NoYW5nZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gICAgfVxuXG5cbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1NYXJrU2VsZWN0ZWRTdGF0dXMge1xuICAgIHN0YXJ0TWFyazogQ29tbWVudEVsZW1lbnQsXG4gICAgZW5kTWFyazogQ29tbWVudEVsZW1lbnQsXG4gICAgc3RhcnRNYXJrU3RhdHVzOiBib29sZWFuLFxuICAgIGVuZE1hcmtTdGF0dXM6IGJvb2xlYW5cbn1cbiIsImltcG9ydCB7IEVsZW1lbnQsIExlYWZFbGVtZW50IH0gZnJvbSBcIi4vZWxlbWVudC1kZWZpbmVcIjtcbmltcG9ydCB7IFRleHRHcm91cEVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL3RleHQvdGV4dC1pbXBsXCI7XG5pbXBvcnQgeyBFbGVtZW50VXRpbCB9IGZyb20gXCIuL2VsZW1lbnQtdXRpbFwiO1xuaW1wb3J0IHsgU2VsZWN0aW9uUmFuZ2UsIFNlbGVjdGlvblN0YXRlIH0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5cbmRlY2xhcmUgbmFtZXNwYWNlIEludGwge1xuXG4gICAgdHlwZSBCQ1A0N0xhbmd1YWdlVGFnID0gc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IHdpdGggc29tZSBvciBhbGwgcHJvcGVydGllcyBvZiB0aGUgYEludGwuU2VnbWVudGVyYCBjb25zdHJ1Y3RvciBgb3B0aW9uc2AgcGFyYW1ldGVyLlxuICAgICAqXG4gICAgICogW01ETl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9TZWdtZW50ZXIvU2VnbWVudGVyI3BhcmFtZXRlcnMpXG4gICAgICovXG4gICAgaW50ZXJmYWNlIFNlZ21lbnRlck9wdGlvbnMge1xuICAgICAgICAvKiogVGhlIGxvY2FsZSBtYXRjaGluZyBhbGdvcml0aG0gdG8gdXNlLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBvcHRpb24sIHNlZSBbSW50bCBwYWdlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsI0xvY2FsZV9uZWdvdGlhdGlvbikuICovXG4gICAgICAgIGxvY2FsZU1hdGNoZXI/OiBcImJlc3QgZml0XCIgfCBcImxvb2t1cFwiIHwgdW5kZWZpbmVkO1xuICAgICAgICAvKiogVGhlIHR5cGUgb2YgaW5wdXQgdG8gYmUgc3BsaXQgKi9cbiAgICAgICAgZ3JhbnVsYXJpdHk/OiBcImdyYXBoZW1lXCIgfCBcIndvcmRcIiB8IFwic2VudGVuY2VcIiB8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpbnRlcmZhY2UgU2VnbWVudGVyIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYFNlZ21lbnRzYCBvYmplY3QgY29udGFpbmluZyB0aGUgc2VnbWVudHMgb2YgdGhlIGlucHV0IHN0cmluZywgdXNpbmcgdGhlIHNlZ21lbnRlcidzIGxvY2FsZSBhbmQgZ3JhbnVsYXJpdHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBpbnB1dCAtIFRoZSB0ZXh0IHRvIGJlIHNlZ21lbnRlZCBhcyBhIGBzdHJpbmdgLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcmV0dXJucyBBIG5ldyBpdGVyYWJsZSBTZWdtZW50cyBvYmplY3QgY29udGFpbmluZyB0aGUgc2VnbWVudHMgb2YgdGhlIGlucHV0IHN0cmluZywgdXNpbmcgdGhlIHNlZ21lbnRlcidzIGxvY2FsZSBhbmQgZ3JhbnVsYXJpdHkuXG4gICAgICAgICAqL1xuICAgICAgICBzZWdtZW50KGlucHV0OiBzdHJpbmcpOiBTZWdtZW50cztcblxuICAgICAgICByZXNvbHZlZE9wdGlvbnMoKTogUmVzb2x2ZWRTZWdtZW50ZXJPcHRpb25zO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBSZXNvbHZlZFNlZ21lbnRlck9wdGlvbnMge1xuICAgICAgICBsb2NhbGU6IHN0cmluZztcbiAgICAgICAgZ3JhbnVsYXJpdHk6IFwiZ3JhcGhlbWVcIiB8IFwid29yZFwiIHwgXCJzZW50ZW5jZVwiO1xuICAgIH1cblxuICAgIGludGVyZmFjZSBTZWdtZW50cyB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGFuIG9iamVjdCBkZXNjcmliaW5nIHRoZSBzZWdtZW50IGluIHRoZSBvcmlnaW5hbCBzdHJpbmcgdGhhdCBpbmNsdWRlcyB0aGUgY29kZSB1bml0IGF0IGEgc3BlY2lmaWVkIGluZGV4LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gY29kZVVuaXRJbmRleCAtIEEgbnVtYmVyIHNwZWNpZnlpbmcgdGhlIGluZGV4IG9mIHRoZSBjb2RlIHVuaXQgaW4gdGhlIG9yaWdpbmFsIGlucHV0IHN0cmluZy4gSWYgdGhlIHZhbHVlIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGAwYC5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnRhaW5pbmcoY29kZVVuaXRJbmRleD86IG51bWJlcik6IFNlZ21lbnREYXRhO1xuXG4gICAgICAgIC8qKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIGl0ZXJhdGUgb3ZlciB0aGUgc2VnbWVudHMuICovXG4gICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8U2VnbWVudERhdGE+O1xuICAgIH1cblxuICAgIGludGVyZmFjZSBTZWdtZW50RGF0YSB7XG4gICAgICAgIC8qKiBBIHN0cmluZyBjb250YWluaW5nIHRoZSBzZWdtZW50IGV4dHJhY3RlZCBmcm9tIHRoZSBvcmlnaW5hbCBpbnB1dCBzdHJpbmcuICovXG4gICAgICAgIHNlZ21lbnQ6IHN0cmluZztcbiAgICAgICAgLyoqIFRoZSBjb2RlIHVuaXQgaW5kZXggaW4gdGhlIG9yaWdpbmFsIGlucHV0IHN0cmluZyBhdCB3aGljaCB0aGUgc2VnbWVudCBiZWdpbnMuICovXG4gICAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICAgIC8qKiBUaGUgY29tcGxldGUgaW5wdXQgc3RyaW5nIHRoYXQgd2FzIHNlZ21lbnRlZC4gKi9cbiAgICAgICAgaW5wdXQ6IHN0cmluZztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgYm9vbGVhbiB2YWx1ZSBvbmx5IGlmIGdyYW51bGFyaXR5IGlzIFwid29yZFwiOyBvdGhlcndpc2UsIHVuZGVmaW5lZC5cbiAgICAgICAgICogSWYgZ3JhbnVsYXJpdHkgaXMgXCJ3b3JkXCIsIHRoZW4gaXNXb3JkTGlrZSBpcyB0cnVlIHdoZW4gdGhlIHNlZ21lbnQgaXMgd29yZC1saWtlIChpLmUuLCBjb25zaXN0cyBvZiBsZXR0ZXJzL251bWJlcnMvaWRlb2dyYXBocy9ldGMuKTsgb3RoZXJ3aXNlLCBmYWxzZS5cbiAgICAgICAgICovXG4gICAgICAgIGlzV29yZExpa2U/OiBib29sZWFuO1xuICAgIH1cblxuICAgIGNvbnN0IFNlZ21lbnRlcjoge1xuICAgICAgICBwcm90b3R5cGU6IFNlZ21lbnRlcjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBgSW50bC5TZWdtZW50ZXJgIG9iamVjdC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIGxvY2FsZXMgLSBBIHN0cmluZyB3aXRoIGEgW0JDUCA0NyBsYW5ndWFnZSB0YWddKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU2NDYpLCBvciBhbiBhcnJheSBvZiBzdWNoIHN0cmluZ3MuXG4gICAgICAgICAqICBGb3IgdGhlIGdlbmVyYWwgZm9ybSBhbmQgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGBsb2NhbGVzYCBhcmd1bWVudCxcbiAgICAgICAgICogIHNlZSB0aGUgW2BJbnRsYCBwYWdlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsI0xvY2FsZV9pZGVudGlmaWNhdGlvbl9hbmRfbmVnb3RpYXRpb24pLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFuIFtvYmplY3RdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvU2VnbWVudGVyL1NlZ21lbnRlciNwYXJhbWV0ZXJzKVxuICAgICAgICAgKiAgd2l0aCBzb21lIG9yIGFsbCBvcHRpb25zIG9mIGBTZWdtZW50ZXJPcHRpb25zYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHJldHVybnMgW0ludGwuU2VnbWVudGVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL1NlZ21lbnRzKSBvYmplY3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIFtNRE5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvU2VnbWVudGVyKS5cbiAgICAgICAgICovXG4gICAgICAgIG5ldyhsb2NhbGVzPzogQkNQNDdMYW5ndWFnZVRhZyB8IEJDUDQ3TGFuZ3VhZ2VUYWdbXSwgb3B0aW9ucz86IFNlZ21lbnRlck9wdGlvbnMpOiBTZWdtZW50ZXI7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aG9zZSBvZiB0aGUgcHJvdmlkZWQgbG9jYWxlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgd2l0aG91dCBoYXZpbmcgdG8gZmFsbCBiYWNrIHRvIHRoZSBydW50aW1lJ3MgZGVmYXVsdCBsb2NhbGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSBsb2NhbGVzIC0gQSBzdHJpbmcgd2l0aCBhIFtCQ1AgNDcgbGFuZ3VhZ2UgdGFnXShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1NjQ2KSwgb3IgYW4gYXJyYXkgb2Ygc3VjaCBzdHJpbmdzLlxuICAgICAgICAgKiAgRm9yIHRoZSBnZW5lcmFsIGZvcm0gYW5kIGludGVycHJldGF0aW9uIG9mIHRoZSBgbG9jYWxlc2AgYXJndW1lbnQsXG4gICAgICAgICAqICBzZWUgdGhlIFtgSW50bGAgcGFnZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bCNMb2NhbGVfaWRlbnRpZmljYXRpb25fYW5kX25lZ290aWF0aW9uKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgQW4gW29iamVjdF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvSW50bC9TZWdtZW50ZXIvc3VwcG9ydGVkTG9jYWxlc09mI3BhcmFtZXRlcnMpLlxuICAgICAgICAgKiAgd2l0aCBzb21lIG9yIGFsbCBwb3NzaWJsZSBvcHRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBbTUROXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9JbnRsL1NlZ21lbnRlci9zdXBwb3J0ZWRMb2NhbGVzT2YpXG4gICAgICAgICAqL1xuICAgICAgICBzdXBwb3J0ZWRMb2NhbGVzT2YobG9jYWxlczogQkNQNDdMYW5ndWFnZVRhZyB8IEJDUDQ3TGFuZ3VhZ2VUYWdbXSwgb3B0aW9ucz86IFBpY2s8U2VnbWVudGVyT3B0aW9ucywgXCJsb2NhbGVNYXRjaGVyXCI+KTogQkNQNDdMYW5ndWFnZVRhZ1tdO1xuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2N1c1RleHRTZWdtZW50KHNlbGVjdGlvbjogU2VsZWN0aW9uU3RhdGUpOiBib29sZWFuIHtcbiAgICBsZXQgeyBzdGFydENvbnRyb2w6IGVsZW1lbnQsIHN0YXJ0T2Zmc2V0OiBvZmZzZXQgfSA9IHNlbGVjdGlvbjtcbiAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXN1cHBvcnRTZWdtZW50KCkpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBmb2N1c0VsZSA9IGVsZW1lbnQgYXMgVGV4dEdyb3VwRWxlbWVudDtcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyAxO1xuICAgIG9mZnNldCA9IG9mZnNldCA+IGZvY3VzRWxlLnRleHRNZWFzdXJlcy5sZW5ndGggPyBmb2N1c0VsZS50ZXh0TWVhc3VyZXMubGVuZ3RoIDogb2Zmc2V0O1xuICAgIC8v6I635Y+W6L+e57ut55qE5a2X56ymXG4gICAgY29uc3QgaXRlbXMgPSBbLi4uZ2V0Q29uc2VjdXRpdmVUZXh0c0J5RGlyZWN0aW9uKGVsZW1lbnQpLCBlbGVtZW50LCAuLi5nZXRDb25zZWN1dGl2ZVRleHRzQnlEaXJlY3Rpb24oZWxlbWVudCwgZmFsc2UpXTtcbiAgICBjb25zdCBzb3J0SXRlbXMgPSBnZXRUZXh0U29ydERhdGEoaXRlbXMpO1xuICAgIGNvbnN0IHsgaW5kZXgsIHRleHQgfSA9IHNvcnRJdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgcHJldi50ZXh0ICs9IGN1cnIudGV4dDtcbiAgICAgICAgaWYgKHByZXYuY29tcGxldGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3Vyci5pdGVtID09PSBmb2N1c0VsZSkge1xuICAgICAgICAgICAgcHJldi5pbmRleCArPSBvZmZzZXQ7XG4gICAgICAgICAgICBwcmV2LmNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmV2LmluZGV4ICs9IGN1cnIuaXRlbS50ZXh0TWVhc3VyZXMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2XG4gICAgfSwgeyBjb21wbGV0ZWQ6IGZhbHNlLCBpbmRleDogMCwgdGV4dDogJycgfSk7XG4gICAgY29uc3QgeyBpbmRleDogaGl0SW5kZXgsIGxlbjogaGl0TGVuIH0gPSBnZXRIaXRTZWdtZW50KHRleHQsIGluZGV4KTtcbiAgICBjb25zdCBtYXRjaFNlZ21lbnQgPSBzb3J0SXRlbXMuZmlsdGVyKGl0ZW0gPT4gKGl0ZW0uaW5kZXggPD0gaGl0SW5kZXggJiYgaXRlbS5lbmRJbmRleCA+IGhpdEluZGV4KSB8fCAoaXRlbS5pbmRleCA8PSBoaXRJbmRleCArIGhpdExlbiAmJiBpdGVtLmVuZEluZGV4ID4gaGl0SW5kZXggKyBoaXRMZW4pKTtcbiAgICBjb25zdCBzdGFydFNlZ21lbnQgPSBtYXRjaFNlZ21lbnRbMF07XG4gICAgY29uc3QgZW5kU2VnbWVudCA9IG1hdGNoU2VnbWVudFttYXRjaFNlZ21lbnQubGVuZ3RoIC0gMV07XG4gICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBoaXRJbmRleCAtIHN0YXJ0U2VnbWVudC5pbmRleDtcbiAgICBjb25zdCBlbmRPZmZzZXQgPSBoaXRJbmRleCArIGhpdExlbiAtIGVuZFNlZ21lbnQuaW5kZXg7XG4gICAgY29uc3QgbmV3UmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICBuZXdSYW5nZS5zZXRTdGFydChzdGFydFNlZ21lbnQuaXRlbSwgc3RhcnRPZmZzZXQpO1xuICAgIG5ld1JhbmdlLnNldEVuZChlbmRTZWdtZW50Lml0ZW0sIGVuZE9mZnNldCk7XG4gICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuaW50ZXJmYWNlIFRleHRTZWdtZW50RGF0YSB7XG4gICAgaXRlbTogVGV4dEdyb3VwRWxlbWVudCxcbiAgICBsZW46IG51bWJlcixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGVuZEluZGV4OiBudW1iZXIsXG4gICAgdGV4dDogc3RyaW5nXG59XG5cbi8qKlxuICog6L+b6KGM5YiG6K+NXG4gKiBAcGFyYW0gdGV4dFxuICogQHBhcmFtIGZvY3VzT2Zmc2V0XG4gKi9cbmZ1bmN0aW9uIGdldEhpdFNlZ21lbnQodGV4dDogc3RyaW5nLCBmb2N1c09mZnNldDpudW1iZXIpOiB7IGluZGV4OiBudW1iZXIsIGxlbjogbnVtYmVyIH0ge1xuICAgIGNvbnN0IHNlZ21lbnRlciA9IG5ldyBJbnRsLlNlZ21lbnRlcihcInpoLUNOXCIsIHsgZ3JhbnVsYXJpdHk6IFwid29yZFwiIH0pO1xuICAgIGNvbnN0IGl0ZXJhdG9yMSA9IHNlZ21lbnRlci5zZWdtZW50KHRleHQpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICBjb25zdCBzZWdJdGVtcyA9IEFycmF5LmZyb20oaXRlcmF0b3IxKTtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnSXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc2VnSXRlbSA9IHNlZ0l0ZW1zW2ldO1xuICAgICAgICBjb25zdCBjdXJySW5kZXggPSBzZWdJdGVtLmluZGV4O1xuICAgICAgICBjb25zdCBjdXJyTGVuID0gc2VnSXRlbS5zZWdtZW50Lmxlbmd0aDtcbiAgICAgICAgaWYgKGZvY3VzT2Zmc2V0ID4gY3VyckluZGV4ICYmIGZvY3VzT2Zmc2V0IDw9IGN1cnJMZW4gKyBjdXJySW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgbGVuOiBjdXJyTGVuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggKz0gY3VyckxlbjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCfmnKrojrflj5bliLDlr7nlupTnmoTliIbor43or43nu4QnKTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydFNlZ21lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBJbnRsLlNlZ21lbnRlciA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiDmoLnmja7liY3lkI7pobrluo/moIfor4bntKLlvJXkvY1cbiAqIEBwYXJhbSB0ZXh0c1xuICovXG5mdW5jdGlvbiBnZXRUZXh0U29ydERhdGEodGV4dHM6IEFycmF5PFRleHRHcm91cEVsZW1lbnQ+KTogQXJyYXk8VGV4dFNlZ21lbnREYXRhPiB7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBjb25zdCBzb3J0SXRlbXM6IEFycmF5PFRleHRTZWdtZW50RGF0YT4gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0ZXh0c1tpXTtcbiAgICAgICAgY29uc3Qgc29ydERhdGEgPSB7XG4gICAgICAgICAgICBsZW46IGl0ZW0udGV4dE1lYXN1cmVzLmxlbmd0aCxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZW5kSW5kZXg6IGluZGV4ICsgaXRlbS50ZXh0TWVhc3VyZXMubGVuZ3RoLFxuICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dFxuICAgICAgICB9O1xuICAgICAgICBzb3J0SXRlbXMucHVzaChzb3J0RGF0YSk7XG4gICAgICAgIGluZGV4ICs9IHNvcnREYXRhLmxlbjtcbiAgICB9XG4gICAgcmV0dXJuIHNvcnRJdGVtcztcbn1cblxuLyoqXG4gKiDojrflj5bmjIflrprmlrnlkJHkuIrov57nu63nmoTlrZfnrKZcbiAqIEBwYXJhbSBlbGVtZW50XG4gKiBAcGFyYW0gcHJldlxuICovXG5mdW5jdGlvbiBnZXRDb25zZWN1dGl2ZVRleHRzQnlEaXJlY3Rpb24oZWxlbWVudDogVGV4dEdyb3VwRWxlbWVudCwgcHJldiA9IHRydWUpOiBBcnJheTxUZXh0R3JvdXBFbGVtZW50PiB7XG4gICAgbGV0IHByZXZUZXh0OiBFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG4gICAgY29uc3QgcHJldlRleHRzOiBBcnJheTxUZXh0R3JvdXBFbGVtZW50PiA9IFtdO1xuICAgIGNvbnN0IGZ1bmMgPSBwcmV2ID8gRWxlbWVudFV0aWwuZ2V0UHJldlNpYmxpbmdFbGVtZW50IDogRWxlbWVudFV0aWwuZ2V0TmV4dFNpYmxpbmdFbGVtZW50O1xuICAgIGNvbnN0IGFkZEl0ZW0gPSBwcmV2ID8gcHJldlRleHRzLnVuc2hpZnQgOiBwcmV2VGV4dHMucHVzaDtcbiAgICB3aGlsZSAoKHByZXZUZXh0ID0gZnVuYyhwcmV2VGV4dCkpICYmIHByZXZUZXh0IGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAvL2FkZEl0ZW0ocHJldlRleHQpO1xuICAgICAgICBhZGRJdGVtLmFwcGx5KHByZXZUZXh0cywgW3ByZXZUZXh0XSk7XG4gICAgfVxuICAgIHJldHVybiBwcmV2VGV4dHM7XG59XG4iLCJpbXBvcnQgeyBDb21tb25VdGlsIH0gZnJvbSAnLi9jb21tb24tdXRpbCc7XG5pbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi9kb2N1bWVudC1jb250ZXh0J1xuaW1wb3J0IHsgU2VsZWN0aW9uUmFuZ2UgfSBmcm9tICcuL2RvY3VtZW50LXNlbGVjdGlvbic7XG5pbXBvcnQgeyBCcmFuY2hFbGVtZW50LCBFbGVtZW50IH0gZnJvbSAnLi9lbGVtZW50LWRlZmluZSc7XG5pbXBvcnQgeyBFbGVtZW50UmVhZGVyIH0gZnJvbSAnLi9lbGVtZW50LXJlYWRlcic7XG5pbXBvcnQge1xuICAgIERlbGV0ZUVsZU9wc0RlbHRhLFxuICAgIERlbGV0ZVRleHRPcHNEZWx0YSxcbiAgICBGb3JtYXRPcHNEZWx0YSxcbiAgICBnZW5lcmF0ZVBhdGNoLFxuICAgIEluc2VydE9wc0RlbHRhLFxuICAgIEluc2VydFRleHRPcHNEZWx0YSxcbiAgICBvcHNUcmFja01vZGVsLFxuICAgIHN1cHByZXNzVHJhY2tpbmdcbn0gZnJvbSAnLi9lbGVtZW50LXRyYWNlLXRyYWNraW5nJ1xuaW1wb3J0IHsgRWxlbWVudFV0aWwgfSBmcm9tICcuL2VsZW1lbnQtdXRpbCc7XG5pbXBvcnQgeyBUZXh0R3JvdXBFbGVtZW50IH0gZnJvbSAnLi9pbXBsJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuXG50eXBlIEhpc3RvcnlDb21tYW5kID0gJ3VuZG8nIHwgJ3JlZG8nO1xudHlwZSBIaXN0b3J5Q2hhbmdlcyA9IHsgZGF0ZTogRGF0ZSwgb3BzOiBBcnJheTxvcHNUcmFja01vZGVsPiwgYmVmb3JlU2VsZWN0aW9uOiBTZWxlY3Rpb25Mb2cgfCBudWxsLCBhZnRlclNlbGVjdGlvbjogU2VsZWN0aW9uTG9nIHwgbnVsbCB9XG5cbi8qKlxuICog5aSE55CG5pKk6ZSA5Zue5rua562J6KGM5Li6XG4gKi9cbmV4cG9ydCBjbGFzcyBFbGVtZW50VHJhY2tNYW5hZ2Uge1xuXG4gICAgYWN0aW9uczogQXJyYXk8SGlzdG9yeUNoYW5nZXM+ID0gW107XG4gICAgaW5kZXg6IG51bWJlciA9IDA7XG4gICAgLy/kuIDml6blj5HnlJ/lj5jmm7TvvIzlsLHplIHlrprlvZPliY3pgInljLrnmoTmlbDmja5cbiAgICAvL2xvZ0xvY2tTdGF0ZTogYm9vbGVhbiA9IHRydWU7XG4gICAgc2VsZWN0aW9uTG9nITogU2VsZWN0aW9uTG9nIHwgbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBkb2NDdHg6IEVkaXRvckNvbnRleHQsIHB1YmxpYyByZWFkZXI6IEVsZW1lbnRSZWFkZXIpIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnlJ/miJDlj5jmm7TkuYvliY3nmoTpgInljLrmlbDmja5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZVNlbGVjdGlvbkxvZygpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgKCF0aGlzLmxvZ0xvY2tTdGF0ZSkge1xuICAgICAgICAvLyAgICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTG9nID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbmRleCA9IDA7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkxvZyA9IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog55Sf5oiQ5Y6G5Y+y5pON5L2c5L+h5oGvXG4gICAgICovXG4gICAgZ2VuZXJhdGVUcmFjaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvY0N0eC52aWV3T3B0aW9ucy5lbmFibGVUcmFja0hpc3RvcnkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHMgPSBnZW5lcmF0ZVBhdGNoKHRoaXMuZG9jQ3R4LmRvY3VtZW50KTtcbiAgICAgICAgaWYgKCFvcHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWVyZ2VPcHMob3BzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aW9ucy5zcGxpY2UodGhpcy5pbmRleCk7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBvcHMsXG4gICAgICAgICAgICBiZWZvcmVTZWxlY3Rpb246IHRoaXMuc2VsZWN0aW9uTG9nLFxuICAgICAgICAgICAgYWZ0ZXJTZWxlY3Rpb246IHRoaXMuZ2V0U2VsZWN0aW9uKClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPiB0aGlzLmRvY0N0eC52aWV3T3B0aW9ucy50cmFja0hpc3RvcnlNYXhMZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9ucy5zcGxpY2UodGhpcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZW5lcmF0ZVNlbGVjdGlvbkxvZygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWQiOW5tuaTjeS9nCxcbiAgICAgKiDlkIjlubbovpPlhaXjgIHliKDpmaTmloflrZflnKjkuIDlrprlkajmnJ/lhoXnmoTmm7TmlLlcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgbWVyZ2VPcHMob3BzOiBvcHNUcmFja01vZGVsW10pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvL+mXrumimOWcqOS6ju+8mlxuICAgICAgICAvLzEu5paw6L6T5YWl55qE5a2X56ym5Liy77yMc2VsZWN0U3RhdGXnmoRzdGFydE9mZnNldOOAgWVuZE9mZnNldD0xLOWQjui+k+WFpeeahOWtl+espuS4sueahGVuZE9mZnNldOi/m+ihjOe0r+WKoFxuICAgICAgICAvLzIu5pKk6ZSA5ZCO6YeN5YGa77yM6YCJ5Yy66IyD5Zu05ZyoMS0yLOiLseWbveaYrzAtMizlm6DkuLrkuYvliY3lnKjliJvlu7rmlofmnKzlr7nosaHlkI7vvIzpgInljLrnmoTnu5PmnZ/kvY3kuLoxXG4gICAgICAgIC8vIGlmIChvcHMubGVuZ3RoID4gMSkge1xuICAgICAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGNvbnN0IGxhc3RPcHMgPSB0aGlzLmFjdGlvbnNbdGhpcy5hY3Rpb25zLmxlbmd0aCAtIDFdO1xuICAgICAgICAvLyBpZiAoIWxhc3RPcHMpIHtcbiAgICAgICAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyAvL2lmKGxhc3RPcHMub3BzW2xhc3RPcHMub3BzLmxlbmd0aC0xXSlcbiAgICAgICAgLy8gLy/otoXov4cxMOenkueahOaTjeS9nOS4jeWQiOW5tlxuICAgICAgICAvLyBpZiAobW9tZW50KCkuZGlmZihtb21lbnQobGFzdE9wcy5kYXRlKSwgJ3NlY29uZHMnKSA+IDEwKSB7XG4gICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gY29uc3QgcHJldk9wID0gbGFzdE9wcy5vcHNbbGFzdE9wcy5vcHMubGVuZ3RoIC0gMV07XG4gICAgICAgIC8vIGNvbnN0IGN1cnJPcCA9IG9wc1swXTtcbiAgICAgICAgLy8gY29uc3QgcHJldkFmdGVyU2VsZWN0aW9uID0gbGFzdE9wcy5hZnRlclNlbGVjdGlvbjtcbiAgICAgICAgLy8gLy/mk43kvZznsbvlnovnm7jlkIxcbiAgICAgICAgLy8gaWYgKCdpbnNUZXh0JyBpbiBjdXJyT3Aub3BzICYmICdpbnNUZXh0JyBpbiBwcmV2T3Aub3BzICYmIGN1cnJPcC5pbmRleCA9PT0gcHJldk9wLmluZGV4KSB7XG4gICAgICAgIC8vICAgICBpZiAoIXByZXZBZnRlclNlbGVjdGlvbikge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIC8v6YCJ5Yy65b+F6aG76Zet5ZCIXG4gICAgICAgIC8vICAgICBpZiAoIXByZXZBZnRlclNlbGVjdGlvbi5jb2xsYXBzZWQpIHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICAvL+WJjeWQjuaYr+i/nue7reeahOaTjeS9nFxuICAgICAgICAvLyAgICAgY29uc3QgeyBpbmRleCwgbGVuZ3RoIH0gPSBwcmV2T3Aub3BzLmluc1RleHQ7XG4gICAgICAgIC8vICAgICBpZiAoaW5kZXggKyBsZW5ndGggPT09IGN1cnJPcC5vcHMuaW5zVGV4dC5pbmRleCkge1xuICAgICAgICAvLyAgICAgICAgIGlmIChwcmV2QWZ0ZXJTZWxlY3Rpb24uZW5kT2Zmc2V0ID09PSBpbmRleCArIGxlbmd0aCkge1xuICAgICAgICAvLyAgICAgICAgICAgICBwcmV2T3Aub3BzLmNvbnRlbnQgKz0gY3Vyck9wLm9wcy5jb250ZW50O1xuICAgICAgICAvLyAgICAgICAgICAgICBwcmV2T3Aub3BzLmluc1RleHQubGVuZ3RoICs9IGN1cnJPcC5vcHMuaW5zVGV4dC5sZW5ndGg7XG4gICAgICAgIC8vICAgICAgICAgICAgIGxhc3RPcHMuZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIC8vICAgICAgICAgICAgIHByZXZBZnRlclNlbGVjdGlvbi5lbmRPZmZzZXQgKz0gY3Vyck9wLm9wcy5pbnNUZXh0Lmxlbmd0aDtcbiAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgLy90aGlzLmNvbW1hbmRGb3JJbnNlcnRUZXh0T3AoY29tbWFuZCwgb3AgYXMgb3BzVHJhY2tNb2RlbDxJbnNlcnRUZXh0T3BzRGVsdGE+KVxuICAgICAgICAvLyB9IGVsc2UgaWYgKCdkZWxUZXh0JyBpbiBjdXJyT3Aub3BzICYmICdkZWxUZXh0JyBpbiBwcmV2T3Aub3BzICYmIGN1cnJPcC5pbmRleCA9PT0gcHJldk9wLmluZGV4KSB7XG4gICAgICAgIC8vICAgICBpZiAocHJldk9wLm9wcy5kZWxUZXh0LmluZGV4ID09PSBjdXJyT3Aub3BzLmRlbFRleHQuaW5kZXggKyBjdXJyT3Aub3BzLmRlbFRleHQubGVuZ3RoKSB7XG4gICAgICAgIC8vICAgICAgICAgcHJldk9wLm9wcy5kZWxUZXh0Lmxlbmd0aCArPSBjdXJyT3Aub3BzLmRlbFRleHQubGVuZ3RoO1xuICAgICAgICAvLyAgICAgICAgIHByZXZPcC5vcHMuY29udGVudCA9IGN1cnJPcC5vcHMuY29udGVudDtcbiAgICAgICAgLy8gICAgICAgICBsYXN0T3BzLmRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyAgICAgLy90aGlzLmNvbW1hbmRGb3JEZWxldGVUZXh0T3AoY29tbWFuZCwgb3AgYXMgb3BzVHJhY2tNb2RlbDxEZWxldGVUZXh0T3BzRGVsdGE+KVxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGlvbigpOiBTZWxlY3Rpb25Mb2cgfCBudWxsIHtcbiAgICAgICAgY29uc3QgeyBzdGFydENvbnRyb2wsIHN0YXJ0T2Zmc2V0LCBlbmRDb250cm9sLCBlbmRPZmZzZXQsIGVkaXRhYmxlIH0gPSB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKCFzdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBFbGVtZW50VXRpbC5nZXRDb250cm9sSW5kZXgoc3RhcnRDb250cm9sLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnRDb250cm9sID09PSBlbmRDb250cm9sID8gc3RhcnRJbmRleCA6IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChlbmRDb250cm9sLCBmYWxzZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQsXG4gICAgICAgICAgICBlbmRJbmRleCxcbiAgICAgICAgICAgIGVuZE9mZnNldCxcbiAgICAgICAgICAgIGVkaXRhYmxlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmiafooYzmkqTplIBcbiAgICAgKi9cbiAgICB1bmRvKCk6IHZvaWQge1xuICAgICAgICBzdXBwcmVzc1RyYWNraW5nKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXgtLTtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUNvbW1hbmQoJ3VuZG8nKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5Y+v5Lul5pKk6ZSAXG4gICAgICovXG4gICAgZ2V0IGNhblVuZG8oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ID4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblj6/ku6Xph43lgZpcbiAgICAgKi9cbiAgICBnZXQgY2FuUmVkbygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPCB0aGlzLmFjdGlvbnMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaJp+ihjOmHjeWBmlxuICAgICAqL1xuICAgIHJlZG8oKTogdm9pZCB7XG4gICAgICAgIHN1cHByZXNzVHJhY2tpbmcoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlQ29tbWFuZCgncmVkbycpO1xuICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgZXhlY3V0ZUNvbW1hbmQoY29tbWFuZDogSGlzdG9yeUNvbW1hbmQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5hY3Rpb25zW3RoaXMuaW5kZXhdO1xuICAgICAgICBpZiAoIWFjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNzID0gY29tbWFuZCA9PT0gJ3VuZG8nID8gYWN0aW9uLmJlZm9yZVNlbGVjdGlvbiA6IGFjdGlvbi5hZnRlclNlbGVjdGlvbjtcbiAgICAgICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uKHNzKTtcbiAgICAgICAgY29uc3Qgb3BzID0gY29tbWFuZCA9PT0gJ3VuZG8nID8gWy4uLmFjdGlvbi5vcHNdLnJldmVyc2UoKSA6IGFjdGlvbi5vcHM7XG4gICAgICAgIG9wcy5mb3JFYWNoKG9wID0+IHtcbiAgICAgICAgICAgIGlmICgnaW5zZXJ0JyBpbiBvcC5vcHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1hbmRGb3JJbnNlcnRFbGVPcChjb21tYW5kLCBvcCBhcyBvcHNUcmFja01vZGVsPEluc2VydE9wc0RlbHRhPik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCdkZWxldGUnIGluIG9wLm9wcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZEZvckRlbGV0ZUVsZU9wKGNvbW1hbmQsIG9wIGFzIG9wc1RyYWNrTW9kZWw8RGVsZXRlRWxlT3BzRGVsdGE+KVxuICAgICAgICAgICAgfSBlbHNlIGlmICgnaW5zVGV4dCcgaW4gb3Aub3BzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tYW5kRm9ySW5zZXJ0VGV4dE9wKGNvbW1hbmQsIG9wIGFzIG9wc1RyYWNrTW9kZWw8SW5zZXJ0VGV4dE9wc0RlbHRhPilcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJ2RlbFRleHQnIGluIG9wLm9wcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZEZvckRlbGV0ZVRleHRPcChjb21tYW5kLCBvcCBhcyBvcHNUcmFja01vZGVsPERlbGV0ZVRleHRPcHNEZWx0YT4pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCdmb3JtYXQnIGluIG9wLm9wcykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbWFuZEZvckVsZUZvcm1hdChjb21tYW5kLCBvcCBhcyBvcHNUcmFja01vZGVsPEZvcm1hdE9wc0RlbHRhPik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICog6L+Y5Y6f5YWJ5qCHXG4gICAgICogQHBhcmFtIHNzTG9nXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICByZXN0b3JlU2VsZWN0aW9uKHNzTG9nOiBTZWxlY3Rpb25Mb2cgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jQ3R4LnNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgIGlmICghc3NMb2cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY0N0eC5zZXRQYWludGVkQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydEluZGV4LCBzdGFydE9mZnNldCwgZW5kSW5kZXgsIGVuZE9mZnNldCwgZWRpdGFibGUgfSA9IHNzTG9nO1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBuZXcgU2VsZWN0aW9uUmFuZ2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHNjID0gdGhpcy5nZXRDb250cm9sKHN0YXJ0SW5kZXgsIGZhbHNlKSBhcyBFbGVtZW50O1xuXG4gICAgICAgICAgICBjb25zdCBlYyA9IHN0YXJ0SW5kZXggPT09IGVuZEluZGV4ID8gc2MgOiB0aGlzLmdldENvbnRyb2woZW5kSW5kZXgsIGZhbHNlKSBhcyBFbGVtZW50O1xuICAgICAgICAgICAgcmFuZ2Uuc2V0U3RhcnQoc2MsIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgIHJhbmdlLnNldEVuZChlYywgZW5kT2Zmc2V0KTtcbiAgICAgICAgICAgIHJhbmdlLmVkaXRhYmxlID0gZWRpdGFibGU7XG4gICAgICAgICAgICB0aGlzLmRvY0N0eC5zZWxlY3Rpb25TdGF0ZS5hZGRSYW5nZShyYW5nZSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pKk6ZSA5paH5pys6L6T5YWl5pON5L2cXG4gICAgICovXG4gICAgY29tbWFuZEZvckluc2VydFRleHRPcChjb21tYW5kOiBIaXN0b3J5Q29tbWFuZCwgZGF0YTogb3BzVHJhY2tNb2RlbDxJbnNlcnRUZXh0T3BzRGVsdGE+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdlID0gdGhpcy5nZXRDb250cm9sPFRleHRHcm91cEVsZW1lbnQ+KGRhdGEuaW5kZXgpO1xuICAgICAgICBjb25zdCB7IGNvbnRlbnQsIGluc1RleHQ6IHsgaW5kZXgsIGxlbmd0aCB9IH0gPSBkYXRhLm9wcztcbiAgICAgICAgY29tbWFuZCA9PT0gJ3VuZG8nID8gdGFyZ2Uuc3BsaWNlKGluZGV4LCBsZW5ndGgpIDogdGFyZ2Uuc3BsaWNlKGluZGV4LCAwLCBjb250ZW50KTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaSpOmUgOaWh+acrOWIoOmZpOaTjeS9nFxuICAgICAqIEBwYXJhbSBjb21tYW5kXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICBjb21tYW5kRm9yRGVsZXRlVGV4dE9wKGNvbW1hbmQ6IEhpc3RvcnlDb21tYW5kLCBkYXRhOiBvcHNUcmFja01vZGVsPERlbGV0ZVRleHRPcHNEZWx0YT4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5nZXRDb250cm9sPFRleHRHcm91cEVsZW1lbnQ+KGRhdGEuaW5kZXgpO1xuICAgICAgICBjb25zdCB7IGNvbnRlbnQsIGRlbFRleHQ6IHsgaW5kZXgsIGxlbmd0aCB9IH0gPSBkYXRhLm9wcztcbiAgICAgICAgY29tbWFuZCA9PT0gJ3VuZG8nID8gdGFyZ2V0LnNwbGljZShpbmRleCwgMCwgY29udGVudCkgOiB0YXJnZXQuc3BsaWNlKGluZGV4LCBsZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaSpOmUgOWFg+e0oOWxnuaAp+S/ruaUueaTjeS9nFxuICAgICAqL1xuICAgIGNvbW1hbmRGb3JFbGVGb3JtYXQoY29tbWFuZDogSGlzdG9yeUNvbW1hbmQsIGRhdGE6IG9wc1RyYWNrTW9kZWw8Rm9ybWF0T3BzRGVsdGE+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZ2V0Q29udHJvbDxFbGVtZW50PihkYXRhLmluZGV4KTtcbiAgICAgICAgY29uc3QgYXBwbHlQcm9wcyA9IHt9O1xuICAgICAgICBjb25zdCBnZXR0ZXJGaWVsZCA9IGNvbW1hbmQgPT09ICd1bmRvJyA/ICdvbGRWYWx1ZScgOiAnbmV3VmFsdWUnO1xuICAgICAgICAvL+iOt+WPluS/ruaUueS5i+WJjeeahOWAvOWvueixoVxuICAgICAgICBPYmplY3Qua2V5cyhkYXRhLm9wcy5mb3JtYXQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGFwcGx5UHJvcHNba2V5XSA9IGRhdGEub3BzLmZvcm1hdFtrZXldW2dldHRlckZpZWxkXTtcbiAgICAgICAgfSlcbiAgICAgICAgLy/mm7TmlrDliLDkuYvliY3nmoTlgLxcbiAgICAgICAgdGhpcy51cGRhdGVQcm9wcyh0YXJnZXQucHJvcHMsIGFwcGx5UHJvcHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaSpOmUgOWIoOmZpOWFg+e0oOeahOaTjeS9nFxuICAgICAqIEBwYXJhbSBjb21tYW5kXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICBjb21tYW5kRm9yRGVsZXRlRWxlT3AoY29tbWFuZDogSGlzdG9yeUNvbW1hbmQsIGRhdGE6IG9wc1RyYWNrTW9kZWw8RGVsZXRlRWxlT3BzRGVsdGE+KTogdm9pZCB7XG4gICAgICAgIGlmIChjb21tYW5kID09PSAndW5kbycpIHtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZVRvSW5zZXJ0KGRhdGEuaW5kZXgsIGRhdGEucGFyZW50SW5kZXgsIGRhdGEucHJldkluZGV4LCBkYXRhLm9wcy5kZWxldGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZWxlID0gdGhpcy5nZXRDb250cm9sKGRhdGEuaW5kZXgpO1xuICAgICAgICAgICAgZWxlLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pKk6ZSA5o+S5YWl55qE5YWD57SgXG4gICAgICogQHBhcmFtIGNvbW1hbmRcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqL1xuICAgIGNvbW1hbmRGb3JJbnNlcnRFbGVPcChjb21tYW5kOiBIaXN0b3J5Q29tbWFuZCwgZGF0YTogb3BzVHJhY2tNb2RlbDxJbnNlcnRPcHNEZWx0YT4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbW1hbmQgPT09ICd1bmRvJykge1xuICAgICAgICAgICAgY29uc3QgZWxlID0gdGhpcy5nZXRDb250cm9sKGRhdGEuaW5kZXgpO1xuICAgICAgICAgICAgZWxlLnJlbW92ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXN0b3JlVG9JbnNlcnQoZGF0YS5pbmRleCwgZGF0YS5wYXJlbnRJbmRleCwgZGF0YS5wcmV2SW5kZXgsIGRhdGEub3BzLmluc2VydCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc3RvcmVUb0luc2VydChpbmRleDogbnVtYmVyLCBwYXJlbnRJbmRleDogbnVtYmVyLCBwcmV2SW5kZXg6IG51bWJlciwgZGF0YTogRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2U2libGluZ0VsZSA9IHByZXZJbmRleCAhPT0gLTEgPyB0aGlzLmdldENvbnRyb2wocHJldkluZGV4KSA6IG51bGw7XG4gICAgICAgIC8v6I635Y+W5o+S5YWl5L2N572u5LmL5YmN55qE5YWD57Sg77yM54S25ZCO5ZCR5ZCO5o+S5YWl55uu5qCH5YWD57SgXG4gICAgICAgIGNvbnN0IGVsZSA9IHRoaXMuZ2V0Q29udHJvbChpbmRleCAtIDEpO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBkYXRhLmNsb25lKHRydWUpO1xuICAgICAgICBpZiAocHJldlNpYmxpbmdFbGUpIHtcbiAgICAgICAgICAgIHByZXZTaWJsaW5nRWxlLnBhcmVudC5hZGRDaGlsZCh0YXJnZXQsIHByZXZTaWJsaW5nRWxlLmdldEluZGV4KCkgKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vZWxl6I635Y+W55qE5Li654i25a655ZmoXG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IHBhcmVudEluZGV4ICsgMSkge1xuICAgICAgICAgICAgICAgIGlmIChlbGUgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZS5hZGRDaGlsZCh0YXJnZXQsIDApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfniLbnuqfnsbvlnovkuI3mraPnoa4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGUucGFyZW50LmFkZENoaWxkKHRhcmdldCwgZWxlLmdldEluZGV4KCkgKyAxKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pu05paw5bGe5oCnXG4gICAgICogQHBhcmFtIGN1cnJQcm9wc1xuICAgICAqIEBwYXJhbSBuZXdQcm9wc1xuICAgICAqL1xuICAgIHVwZGF0ZVByb3BzKGN1cnJQcm9wczogb2JqZWN0LCBuZXdQcm9wczogb2JqZWN0KTogdm9pZCB7XG4gICAgICAgIE9iamVjdC5rZXlzKG5ld1Byb3BzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBjdXJyUHJvcHNba2V5XSA9IENvbW1vblV0aWwuY2xvbmVWYWx1ZShuZXdQcm9wc1trZXldKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXRDb250cm9sPFQgZXh0ZW5kcyBFbGVtZW50PihpbmRleDogbnVtYmVyLCBwdXJlOiBib29sZWFuID0gdHJ1ZSk6IFQge1xuICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEJ5SW5kZXgodGhpcy5kb2NDdHguZG9jdW1lbnQsIHsgY3VyckluZGV4OiAtMSwgaW5kZXg6IGluZGV4IH0sIHB1cmUpIGFzIFQ7XG4gICAgfVxufVxuXG5pbnRlcmZhY2UgU2VsZWN0aW9uTG9nIHtcbiAgICBzdGFydEluZGV4OiBudW1iZXI7XG4gICAgc3RhcnRPZmZzZXQ6IG51bWJlcjtcbiAgICBlbmRJbmRleDogbnVtYmVyO1xuICAgIGVuZE9mZnNldDogbnVtYmVyO1xuICAgIGVkaXRhYmxlOiBib29sZWFuO1xufSIsImltcG9ydCB7UGFpbnRDb250ZW50LCBSZW5kZXJDb250ZXh0fSBmcm9tICcuL2ZyYW1ld29yay9yZW5kZXItY29udGV4dCc7XG5pbXBvcnQge0NvbnRlbnRNZW51SXRlbSwgQ29udGV4dE1lbnVFbGVtZW50RXZlbnQsIEV2ZW50TWFwLCBIaXRFdmVudEluZm99IGZyb20gJy4vZnJhbWV3b3JrL2VsZW1lbnQtZXZlbnQtZGVmaW5lJztcbmltcG9ydCB7RG9jdW1lbnRQYWludH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtcGFpbnQnO1xuaW1wb3J0IHtFbGVtZW50UmVhZGVyfSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LXJlYWRlcic7XG5pbXBvcnQge0RvY3VtZW50RXZlbnR9IGZyb20gJy4vZnJhbWV3b3JrL2RvY3VtZW50LWV2ZW50JztcbmltcG9ydCB7RG9jdW1lbnRJbnB1dH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtaW5wdXQtY3Vyc29yJztcbmltcG9ydCB7RG9jdW1lbnRDdXJzb3IsIERvY3VtZW50U2VsZWN0aW9uLCBTZWxlY3Rpb25TdGF0ZX0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtc2VsZWN0aW9uJztcbmltcG9ydCB7RWxlbWVudFV0aWx9IGZyb20gJy4vZnJhbWV3b3JrL2VsZW1lbnQtdXRpbCc7XG5pbXBvcnQge0RvY3VtZW50Q2hhbmdlfSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1jaGFuZ2UnO1xuaW1wb3J0IHtDdXJzb3JUeXBlfSBmcm9tICcuL2ZyYW1ld29yay9yZW5kZXItZGVmaW5lJztcbmltcG9ydCB7U2VsZWN0aW9uT3ZlcmxheXN9IGZyb20gJy4vZnJhbWV3b3JrL3NlbGVjdGlvbi1vdmVybGF5cyc7XG5pbXBvcnQge1xuICAgIEJyYW5jaEVsZW1lbnQsXG4gICAgRG9jTW9kZSxcbiAgICBFbGVtZW50LFxuICAgIElDYW5jZWxUb2tlbkZuLFxuICAgIExlYWZFbGVtZW50LFxuICAgIE1hcmdpblByb3BzLFxuICAgIE9yaWVudFR5cGUsIFBhZ2VMYXlvdXRNb2RlLFxuICAgIFBhZ2VPcHRpb25zLFxuICAgIFBvc2l0aW9uLFxuICAgIFJlY3QsXG4gICAgVGV4dEFsaWduLFxuICAgIFZpZXdPcHRpb25zXG59IGZyb20gJy4vZnJhbWV3b3JrL2VsZW1lbnQtZGVmaW5lJztcbmltcG9ydCB7RWxlbWVudFNlcmlhbGl6ZX0gZnJvbSAnLi9mcmFtZXdvcmsvZWxlbWVudC1zZXJpYWxpemUnO1xuaW1wb3J0IHtcbiAgICBDb21tQ29udGVudEJhc2VFbGVtZW50LCBEYXRhRWxlbWVudEdyb3VwRWxlbWVudCxcbiAgICBEYXRhRWxlbWVudElubGluZUdyb3VwLFxuICAgIERhdGFFbGVtZW50TGVhZiwgRGF0YUVsZW1lbnRUZXh0LFxuICAgIERvY3VtZW50Qm9keUVsZW1lbnQsXG4gICAgRG9jdW1lbnRFbGVtZW50LFxuICAgIERvY3VtZW50UmVuZGVyT2JqZWN0LFxuICAgIElzSW5TaWRlRGF0YUVsZW1lbnQsXG4gICAgUGFyYWdyYXBoRWxlbWVudCxcbiAgICBQU3ltYm9sRWxlbWVudCxcbiAgICBUYWJsZUVsZW1lbnQsXG4gICAgVGFibGVSb3dFbGVtZW50LFxuICAgIFRhYmxlVXRpbCxcbiAgICBUZXh0R3JvdXBFbGVtZW50LFxuICAgIHZhbGlkYXRlRGF0YUVsZVxufSBmcm9tICcuL2ZyYW1ld29yay9pbXBsJztcbmltcG9ydCB7ZG9jdW1lbnRQcmludH0gZnJvbSAnLi9mcmFtZXdvcmsvZG9jdW1lbnQtcHJpbnQnO1xuaW1wb3J0IHtEb2N1bWVudFRlbXBsYXRlfSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC10ZW1wbGF0ZSc7XG5pbXBvcnQge0RvY1J1bGV9IGZyb20gJy4vZG9jLXJ1bGVyJztcbmltcG9ydCB7RGF0YUVsZUJhc2VUZXh0UHJvcHMsIFBhcmFncmFwaFByb3BzLCBUZXh0UHJvcHN9IGZyb20gJy4vZnJhbWV3b3JrL2VsZW1lbnQtcHJvcHMnO1xuaW1wb3J0IHtFZGl0b3JDb250ZXh0fSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1jb250ZXh0JztcbmltcG9ydCB7RG9jdW1lbnRDb21tZW50fSBmcm9tICcuL2ZyYW1ld29yay9kb2N1bWVudC1jb21tZW50JztcbmltcG9ydCB7Z2V0Rm9jdXNUZXh0U2VnbWVudH0gZnJvbSBcIi4vZnJhbWV3b3JrL2RvY3VtZW50LXNlZ21lbnRlclwiO1xuaW1wb3J0ICogYXMgVHJhY2sgZnJvbSAnLi9mcmFtZXdvcmsvZWxlbWVudC10cmFjZS10cmFja2luZydcbmltcG9ydCB7RWxlbWVudFRyYWNrTWFuYWdlfSBmcm9tICcuL2ZyYW1ld29yay9lbGVtZW50LXRyYWNlLW1hbmFnZSc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJy4vZnJhbWV3b3JrL2V2ZW50LXN1YmplY3QnO1xuXG5cbmV4cG9ydCBjbGFzcyBDYW52YXNUZXh0RWRpdG9yIHtcbiAgICBwcml2YXRlIGNvbnRlbnRDdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgICB2aWV3T3B0aW9uczogVmlld09wdGlvbnM7XG4gICAgZG9jQ3R4OiBFZGl0b3JDb250ZXh0O1xuICAgIHByaXZhdGUgZG9jQ29tbWVudDogRG9jdW1lbnRDb21tZW50O1xuICAgIHByaXZhdGUgcmVuZGVyQ29udGV4dDogUmVuZGVyQ29udGV4dDtcbiAgICBwcml2YXRlIGRvY3VtZW50UGFpbnQ6IERvY3VtZW50UGFpbnQ7XG4gICAgZWxlbWVudFJlYWRlcjogRWxlbWVudFJlYWRlcjtcbiAgICBwcml2YXRlIGRvY3VtZW50RXZlbnQ6IERvY3VtZW50RXZlbnQ7XG4gICAgcHJpdmF0ZSBkb2N1bWVudFNlbGVjdGlvbjogRG9jdW1lbnRTZWxlY3Rpb247XG4gICAgcHJpdmF0ZSBkb2N1bWVudElucHV0OiBEb2N1bWVudElucHV0O1xuICAgIHByaXZhdGUgZG9jdW1lbnRDaGFuZ2U6IERvY3VtZW50Q2hhbmdlO1xuICAgIHByaXZhdGUgc2VsZWN0aW9uT3ZlcmxheXM6IFNlbGVjdGlvbk92ZXJsYXlzO1xuICAgIHByaXZhdGUgZG9jUnVsZTogRG9jUnVsZTtcbiAgICBwcml2YXRlIGV2ZW50TWFwOiBFdmVudE1hcCA9IG5ldyBFdmVudE1hcCgpO1xuICAgIGhpc3RvcnlNYW5nZTogRWxlbWVudFRyYWNrTWFuYWdlO1xuICAgIHNlbGVjdGlvbkNoYW5nZWQ6IFN1YmplY3Q8U2VsZWN0aW9uU3RhdGU+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBiZWZvcmVSZW5kZXJTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBhZnRlclJlbmRlclN1YmplY3Q6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHNlbGVjdGlvblN0YXRlOiBTZWxlY3Rpb25TdGF0ZTtcbiAgICAvL+aYvuekuuWPs+mUruiPnOWNlVxuICAgIG9uQ29udGV4dE1lbnVJdGVtQ2hhbmdlZDogU3ViamVjdDxFZGl0b3JDb250ZW54dFByb3BzPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgb25EYmxDbGlja0V2ZW50OiBTdWJqZWN0PEV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgb25DbGlja0V2ZW50OiBTdWJqZWN0PEV2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgb25TY3JvbGxWaWV3RXZlbnQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgLy/mlofmoaPmlLnlj5jkuovku7Y65YaF5a655Y+K5qC35byP77yM5Lia5Yqh5qih5Z2X6ZyA6KaB5qC55o2u5q2k5LqL5Lu277yM5p2l6L+96Liq5b2T5YmN5paH5qGj5piv5ZCm5pS55Y+Y55qE54q25oCBXG4gICAgb25Eb2NDaGFuZ2VkRXZlbnQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIC8v5omn6KGMZmx1c2hUYXNrLHJlZnJlc2hEb2PkuYvliY3vvIzmraTml7blj6/ku6XlnKjmlofmoaPorqHnrpfmjpLniYjkuYvliY3mlLnlj5jlhoXlrrlcbiAgICBvbkJlZm9yZVJlZnJlc2hEb2N1bWVudDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkb2NTY3JvbGw6IEhUTUxEaXZFbGVtZW50LCBwcml2YXRlIGhvbGRTcGFjZTogSFRNTERpdkVsZW1lbnQsIHByaXZhdGUgcnVsZUNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIHByaXZhdGUgZWRpdENhbnZhc0NvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQsIHByaXZhdGUgZWRpdENhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGVkaXRJbnB1dDogSFRNTElucHV0RWxlbWVudCwgZWRpdEN1cnNvcjogSFRNTFNwYW5FbGVtZW50LCBwcml2YXRlIGN1cnNvcldyYXBwZXI6IEhUTUxEaXZFbGVtZW50KSB7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMgPSBuZXcgVmlld09wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFNlbGVjdGlvbiA9IG5ldyBEb2N1bWVudFNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLmRvY0N0eCA9IG5ldyBFZGl0b3JDb250ZXh0KHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUsIHRoaXMudmlld09wdGlvbnMpO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmNvcHlSaWdodEluZm8gPSAn5LiH6L6+5L+h5oGv55S15a2Q55eF5Y6G57yW6L6R5ZmoLHd3dy53b25kZXJzZ3JvdXAuY29tJztcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kcmF3Q2hhclJlY3RDb2xvciA9ICdncmVlbic7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuc2hvd0xpbmVSZWN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5kb2NTcGFjZSA9IDIwO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnJldmlld1dpbmRvd1dpZHRoID0gMjAwO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRlZmF1bHRGb250TmFtZSA9ICflrovkvZMnXG4gICAgICAgIC8vdGhpcy52aWV3T3B0aW9ucy5zY2FsZSA9IDI7XG4gICAgICAgIC8v5pW05Liq55S75biD55qE5bC65a+4XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzID0ge1xuICAgICAgICAgICAgd2lkdGg6IDEwMDAsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuZ2V0Q29udGFpbmVySGVpZ2h0KCkuaGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZWRpdFVzZXIgPSB7XG4gICAgICAgICAgICBpZDogJzY2NjYnLFxuICAgICAgICAgICAgbmFtZTogJ+euoeeQhuWRmCdcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5mdWxsUGFnZVZpZXcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jcmVhdGVEb2NWaWV3ZXIoKTtcbiAgICAgICAgdGhpcy5kb2NDb21tZW50ID0gbmV3IERvY3VtZW50Q29tbWVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuY29udGVudEN0eCA9IGVkaXRDYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XG4gICAgICAgIHRoaXMucmVuZGVyQ29udGV4dCA9IG5ldyBSZW5kZXJDb250ZXh0KG5ldyBQYWludENvbnRlbnQodGhpcy5jb250ZW50Q3R4KSk7XG4gICAgICAgIHRoaXMucmVuZGVyQ29udGV4dC5pbml0KHt3aWR0aDogNTAwLCBoZWlnaHQ6IDUwMCwgc2NhbGU6IDF9KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZSA9IHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uT3ZlcmxheXMgPSBuZXcgU2VsZWN0aW9uT3ZlcmxheXModGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRQYWludCA9IG5ldyBEb2N1bWVudFBhaW50KHRoaXMucmVuZGVyQ29udGV4dCwgdGhpcy5kb2NDdHgsIHRoaXMuc2VsZWN0aW9uT3ZlcmxheXMuc2VsZWN0ZWRTZXRzKTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVhZGVyID0gbmV3IEVsZW1lbnRSZWFkZXIodGhpcy5kb2NDdHgsIHRoaXMucmVuZGVyQ29udGV4dCk7XG4gICAgICAgIHRoaXMuZG9jUnVsZSA9IG5ldyBEb2NSdWxlKHRoaXMucnVsZUNhbnZhcywgdGhpcy5kb2NDdHgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQgPSBuZXcgRG9jdW1lbnRJbnB1dChlZGl0SW5wdXQsIGVkaXRDdXJzb3IsIGN1cnNvcldyYXBwZXIsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudENoYW5nZSA9IG5ldyBEb2N1bWVudENoYW5nZSh0aGlzLmVsZW1lbnRSZWFkZXIsIHRoaXMuZG9jQ3R4LCB0aGlzLmRvY0NvbW1lbnQsIHRoaXMuZG9jdW1lbnRJbnB1dCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudCA9IG5ldyBEb2N1bWVudEV2ZW50KGVkaXRDYW52YXMsIHRoaXMuZG9jdW1lbnRQYWludCwgdGhpcy5kb2NDdHgsIHRoaXMuZG9jdW1lbnRJbnB1dCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeU1hbmdlID0gbmV3IEVsZW1lbnRUcmFja01hbmFnZSh0aGlzLmRvY0N0eCwgdGhpcy5lbGVtZW50UmVhZGVyKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50LmhpdEluZm9DaGFuZ2VkLnN1YnNjcmliZSgoaGl0SW5mbykgPT4ge1xuICAgICAgICAgICAgdGhpcy5oaXRJbmZvQ2hhbmdlZChoaXRJbmZvKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50LmNsaWNrRXZlbnQuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZG9jQ2xpY2tIYW5kbGUoZXZ0KVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50LmRibENsaWNrRXZlbnQuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZG9jRGJsQ2xpY2tIYW5kbGUoZXZ0KVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50LmNoYW5nZUN1cnNvci5zdWJzY3JpYmUoKGN1cnNvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VDdXJzb3IoY3Vyc29yKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50LmNvbnRleHRNZW51LnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNvbnRleHRNZW51KGV2dClcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC50cmFja1RpcHNDaGFuZ2VkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kb2NDdHguZG9jQ2hhbmdlID0gdGhpcy5kb2N1bWVudENoYW5nZTtcbiAgICAgICAgdGhpcy5saXN0ZW5Db250YWluZXJIZWlnaHQoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoRG9jUnVsZSgpO1xuICAgICAgICB0aGlzLmRvY0N0eC5zeW5jUmVmcmVzaCA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmx1c2hUb1NjaGVkdWxlKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5vbkNoYW5nZS5zdWJzY3JpYmUoKHR5cGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRWaWV3ZXIodHlwZSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5qCH5bC6XG4gICAgICovXG4gICAgcmVmcmVzaERvY1J1bGUoKTogdm9pZCB7XG4gICAgICAgIGxldCBkb2NMZWZ0ID0gMC8vQ29tbW9uVXRpbC5nZXRPZmZzZXRYKHRoaXMuZWRpdENhbnZhcy5wYXJlbnRFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KTtcbiAgICAgICAgbGV0IHBhZ2VQTCA9IDAsIHBhZ2VQUiA9IDA7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50UGFpbnQuZG9jQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBkb2NMZWZ0ICs9IHRoaXMuZG9jdW1lbnRQYWludC5kb2NDb250YWluZXIucmVjdC54O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRvY0N0eC5kb2N1bWVudD8ucHJvcHM/LnBhZGRpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IHtsZWZ0LCByaWdodH0gPSB0aGlzLmRvY0N0eC5kb2N1bWVudC5wcm9wcy5wYWRkaW5nO1xuICAgICAgICAgICAgcGFnZVBMID0gbGVmdDtcbiAgICAgICAgICAgIHBhZ2VQUiA9IHJpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jUnVsZS5zZXRSdWxlT3B0aW9ucyh7d2lkdGg6IHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzLndpZHRoLCBwYWdlUEwsIHBhZ2VQUiwgZG9jTGVmdH0pO1xuICAgICAgICB0aGlzLmRvY1J1bGUucmVmcmVzaFJ1bGUoKTtcbiAgICB9XG5cbiAgICBjcmVhdGVEb2NWaWV3ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvID0gdGhpcy5tZWFzdXJlTU1Ub1BpeHMoKTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLmZsb29yKDIxMCAqIHRoaXMudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5mbG9vcigyOTcgKiB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzID0gbmV3IFBhZ2VPcHRpb25zKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmRvY1Njcm9sbC5vbnNjcm9sbCA9IChldnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVmlldyhldnQpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG1lYXN1cmVNTVRvUGl4cygpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZGl2LnN0eWxlLndpZHRoID0gJzEwMG1tJztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IGRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpO1xuICAgICAgICByZXR1cm4gd2lkdGggLyAxMDA7XG4gICAgfVxuXG4gICAgZmx1c2hUYXNrITogKCgpID0+IHZvaWQpIHwgbnVsbDtcbiAgICAvL+aYr+WQpueUqOS6jui3n+i4quS/ruaUueeKtuaAge+8jOWcqOWIneWni+WMluOAgeaVsOaNruWFg+i1i+WAvOetieaDheWGteS4jemcgOimgei3n+i4quS/ruaUueagh+W/l1xuICAgIHByaXZhdGUgdHJhY2tDaGFuZ2VTdGF0ZSA9IHRydWU7XG5cbiAgICBmbHVzaFRvU2NoZWR1bGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRvY0N0eC5yZWZyZXNoVHlwZSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICAgICAgICAvL+inpuWPkeWKqOaAgeiEmuacrFxuICAgICAgICAgICAgdGhpcy5kb2NDdHguZHluYW1pY0Z1bmMuaW52b2tlZFNjcmlwdHMoKTtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckRvY0NoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZsdXNoVGFzaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmx1c2hUYXNrID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRG9jdW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuZmx1c2hUYXNrID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBjYiA9IHRoaXMuZG9jQ3R4LnBhaW50ZWRDYWxsYmFjaztcbiAgICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgICAgIHRoaXMuZG9jQ3R4LnNldFBhaW50ZWRDYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeU1hbmdlLmdlbmVyYXRlVHJhY2soKTtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeU1hbmdlLmdlbmVyYXRlU2VsZWN0aW9uTG9nKCk7XG4gICAgICAgIH07XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmx1c2hUYXNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mbHVzaFRhc2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6Kem5Y+R5paH5qGj5pS55Y+Y5LqL5Lu2XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICB0cmlnZ2VyRG9jQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudHJhY2tDaGFuZ2VTdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Eb2NDaGFuZ2VkRXZlbnQubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGZu5Ye95pWw5omn6KGM5pe277yM5LiN6Kem5Y+Rb25Eb2NDaGFuZ2VcbiAgICAgKiBAcGFyYW0gZm5cbiAgICAgKi9cbiAgICBub0VmZmVjdENoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwcmV2ID0gdGhpcy50cmFja0NoYW5nZVN0YXRlO1xuICAgICAgICB0aGlzLnRyYWNrQ2hhbmdlU3RhdGUgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmFja0NoYW5nZVN0YXRlID0gcHJldjtcbiAgICB9XG5cblxuICAgIGxvYWREb2MoZGF0YTogYW55IHwgRG9jdW1lbnRFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIFRyYWNrLnN1cHByZXNzVHJhY2tpbmcoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVhZGVyLnJlYWQoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hEb2N1bWVudCgpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRG9jUnVsZSgpO1xuICAgICAgICAgICAgdGhpcy5oaXN0b3J5TWFuZ2UuY2xlYXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pu05paw5rua5Yqo6auY5bqmXG4gICAgICogMS7mlofmoaPlhoXlrrnpq5jluqZcbiAgICAgKiAyLuaWh+aho+e8qeaUvuWAvFxuICAgICAqL1xuICAgIHNldFNjcm9sbFNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG9sZFNwYWNlLnN0eWxlLmhlaWdodCA9IHRoaXMuZG9jdW1lbnRQYWludC5nZXREb2N1bWVudENvbnRhaW5lckhlaWdodCgpICsgJ3B4JztcbiAgICB9XG5cbiAgICBzY3JvbGxWaWV3KGV2dDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZ0LnRhcmdldCBhcyBIVE1MRGl2RWxlbWVudDtcbiAgICAgICAgY29uc3QgdG9wID0gTWF0aC5mbG9vcih0YXJnZXQuc2Nyb2xsVG9wKTtcbiAgICAgICAgdGhpcy5lZGl0Q2FudmFzQ29udGFpbmVyLnN0eWxlLnRvcCA9IHRvcCArICdweCc7XG4gICAgICAgIHRoaXMuY3Vyc29yV3JhcHBlci5zdHlsZS50cmFuc2Zvcm0gPSBcInRyYW5zbGF0ZSgwLC1cIiArIHRvcCArIFwicHgpXCI7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWSA9IHRvcCAvIHRoaXMudmlld09wdGlvbnMuc2NhbGU7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRQYWludC5yZWZyZXNoVmlldygpO1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQub25TY3JvbGxWaWV3KCk7XG4gICAgICAgIHRoaXMub25TY3JvbGxWaWV3RXZlbnQubmV4dCh0b3ApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIt+aWsOaWh+aho++8jOmHjeaWsOa1i+mHj+W5tuiuvue9ruWFieagh+etiVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWZyZXNoRG9jdW1lbnQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRvY0N0eC5yZWZyZXNoVHlwZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZVBhaW50ID0gdGhpcy5kb2NDdHgucmVmcmVzaFR5cGUgPT09ICdjb250ZW50JztcbiAgICAgICAgaWYgKHJlUGFpbnQpIHtcbiAgICAgICAgICAgIHRoaXMub25CZWZvcmVSZWZyZXNoRG9jdW1lbnQubmV4dCgpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFNlbGVjdGlvbi5jbGVhclNuYXBzaG90KCk7XG4gICAgICAgICAgICB0aGlzLmRvY0NvbW1lbnQucmVhZENvbW1lbnRzKCk7XG4gICAgICAgICAgICBUcmFjay5zdXBwcmVzc1RyYWNraW5nKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50UGFpbnQucmVQYWdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmJlZm9yZVJlbmRlclN1YmplY3QubmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmcmVzaFZpZXcocmVQYWludCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yi35paw57uY5Yi25paH5qGjXG4gICAgICogVE9ETzrpgInljLrmlLnlj5jml7bvvIznm7TmjqXosIPnlKjor6Xmlrnms5VcbiAgICAgKiBAcGFyYW0gcmVQYWludFxuICAgICAqL1xuICAgIHByaXZhdGUgcmVmcmVzaFZpZXcocmVQYWludDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBzc0NoYW5nZWQgPSB0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnVwZGF0ZVNlbGVjdGlvblN0YXRlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uT3ZlcmxheXMuZ2V0U2VsZWN0aW9uVHJlZURhdGEoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFBhaW50LnJlZnJlc2hWaWV3KHJlUGFpbnQpO1xuICAgICAgICB0aGlzLnNldFNjcm9sbFNpemUoKTtcbiAgICAgICAgdGhpcy5zZXRDdXJzb3IoKTtcbiAgICAgICAgc3NDaGFuZ2VkICYmIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUpO1xuICAgICAgICB0aGlzLmRvY1J1bGUucmVmcmVzaFJ1bGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpdEluZm9DaGFuZ2VkKGhpdEluZm86IHsgc3RhcnRIaXRJbmZvOiBIaXRFdmVudEluZm8sIGVuZEhpdEluZm86IEhpdEV2ZW50SW5mbyB9KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2V0U2VsZWN0aW9uU3RhdGUoaGl0SW5mbyk7XG4gICAgICAgIHRoaXMucmVmcmVzaERvY3VtZW50KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5uZXh0KHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruWFieagh1xuICAgICAqL1xuICAgIHByaXZhdGUgc2V0Q3Vyc29yKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sLCBzdGFydE9mZnNldH0gPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXRoaXMuY2FuU2V0Q3Vyc29yKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuZWRpdGFibGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5zZXRDdXJzb3JWaXNpYmlsaXR5KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7c3RhcnRSZWdpb24sIGhpdERvY0luZGV4fSA9IHRoaXMuZG9jdW1lbnRFdmVudC5zdGFydEhpdEluZm8gYXMgSGl0RXZlbnRJbmZvO1xuICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSBEb2N1bWVudEN1cnNvci5nZXRFbGVtZW50Q3Vyc29yUG9zKHN0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIHN0YXJ0UmVnaW9uLCBoaXREb2NJbmRleCk7XG4gICAgICAgIHRoaXMuZG9jQ3R4LmN1cnNvclJlY3QgPSBFbGVtZW50VXRpbC5jbG9uZVJlY3QoY3Vyc29yUG9zLnJlY3QpO1xuICAgICAgICBjb25zdCBhYlBvcyA9IHRoaXMudHJhbnNUb0Fic29sdXRlUG9zKEVsZW1lbnRVdGlsLmNsb25lUmVjdChjdXJzb3JQb3MucmVjdCkpO1xuICAgICAgICB0aGlzLmRvY3VtZW50SW5wdXQuc2V0Q3Vyc29yUG9zaXRpb24oYWJQb3MpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlLmN1cnNvclBvcyA9IGN1cnNvclBvcy5yZWN0O1xuICAgICAgICB0aGlzLmRvY3VtZW50RXZlbnQuaW52b2tlQ3Vyc29yKHN0YXJ0Q29udHJvbCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWwhuebuOWvueWdkOagh+S9jee9rui9rOaNouS4uue7neWvueWdkOagh+S9jVxuICAgICAqIOeUseS6jue8qeaUvu+8jOWvvOiHtOe7neWvueS9jee9rj3nm7jlr7nkvY3nva4qc2NhbGVcbiAgICAgKiBAcGFyYW0gcG9zXG4gICAgICovXG4gICAgdHJhbnNUb0Fic29sdXRlUG9zPFQgZXh0ZW5kcyBQb3NpdGlvbiB8IFJlY3Q+KHBvczogVCk6IFQge1xuICAgICAgICBjb25zdCB7c2NhbGV9ID0gdGhpcy52aWV3T3B0aW9ucztcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IHRoaXMuZG9jdW1lbnRQYWludC5kb2NDb250YWluZXIucmVjdC54O1xuICAgICAgICBjb25zdCBvZmZzZXRZID0gdGhpcy5kb2N1bWVudFBhaW50LmRvY0NvbnRhaW5lci5yZWN0Lnk7XG4gICAgICAgIHBvcy54ID0gcG9zLnggKiBzY2FsZTtcbiAgICAgICAgcG9zLnkgPSBwb3MueSAqIHNjYWxlO1xuICAgICAgICBpZiAoJ2hlaWdodCcgaW4gcG9zKSB7XG4gICAgICAgICAgICBwb3MuaGVpZ2h0ID0gcG9zLmhlaWdodCAqIHNjYWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5Yik5pat5piv5ZCm5YWJ5qCH5Y+v5Lul6K6+572u5o6l5Y+X57yW6L6RXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGNhblNldEN1cnNvcigpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbCwgc3RhcnRPZmZzZXQsIGVkaXRhYmxlfSA9IHRoaXMuc2VsZWN0aW9uU3RhdGU7XG4gICAgICAgIGlmICghc3RhcnRDb250cm9sIHx8ICFlZGl0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLmRvY01vZGUgPT09IERvY01vZGUuRGVzaWduKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvL+a1j+iniOaooeW8j1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLlZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvL+ihqOWNleaooeW8j+S4i++8jOWmguaenOS4jeWcqOaVsOaNruWFg+e0oOS4re+8jOWImeS4jeaYvuekuuWFieagh1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0KSB7XG4gICAgICAgICAgICBpZiAoIUlzSW5TaWRlRGF0YUVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFFbGVtZW50VXRpbC52ZXJpZnlIaXRhYmxlKHN0YXJ0Q29udHJvbCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvL+ihqOWNleaooeW8j+S4i++8jOaVsOaNruWFg+S4jeWPr+e8lui+kVxuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5kb2NNb2RlID09PSBEb2NNb2RlLkZvcm1FZGl0ICYmIElzSW5TaWRlRGF0YUVsZW1lbnQoc3RhcnRDb250cm9sLCBzdGFydE9mZnNldCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFFbGUgPSBFbGVtZW50VXRpbC5nZXREYXRhRWxlbWVudChzdGFydENvbnRyb2wpO1xuICAgICAgICAgICAgaWYgKGRhdGFFbGUgJiYgIWRhdGFFbGUucHJvcHMuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5L+u5pS55YWJ5qCHXG4gICAgICogQHBhcmFtIG5ld0N1cnNvclxuICAgICAqL1xuICAgIHByaXZhdGUgY2hhbmdlQ3Vyc29yKG5ld0N1cnNvcjogQ3Vyc29yVHlwZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRDYW52YXMuc3R5bGUuY3Vyc29yID0gbmV3Q3Vyc29yO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmN1cnNvciA9IG5ld0N1cnNvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmlofmoaPngrnlh7vkuovku7ZcbiAgICAgKi9cbiAgICBwcml2YXRlIGRvY0NsaWNrSGFuZGxlKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldEN1cnNvcigpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbk92ZXJsYXlzLmdldFNlbGVjdGlvblRyZWVEYXRhKCk7XG4gICAgICAgIHRoaXMub25DbGlja0V2ZW50Lm5leHQoZXZ0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmlofmoaPlj4zlh7vkuovku7ZcbiAgICAgKiDlpITnkIblhajpgInlvZPliY3mrrXokL1cbiAgICAgKi9cbiAgICBwcml2YXRlIGRvY0RibENsaWNrSGFuZGxlKGV2dDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXMgPSBnZXRGb2N1c1RleHRTZWdtZW50KHRoaXMuc2VsZWN0aW9uU3RhdGUpO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hEb2N1bWVudCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25EYmxDbGlja0V2ZW50Lm5leHQoZXZ0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5blvZPliY3lhYnmoIfmiYDlnKjnmoTmlbDmja7lhYNcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGdldEN1cnJlbnREYXRhRWxlbWVudCgpOiBEYXRhRWxlbWVudElubGluZUdyb3VwIHwgRGF0YUVsZW1lbnRMZWFmIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXRlID0gdGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3Qge3N0YXJ0Q29udHJvbH0gPSBzZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgaWYgKHN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgaWYgKCFFbGVtZW50VXRpbC52ZXJpZnlIaXRhYmxlKHN0YXJ0Q29udHJvbCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBFbGVtZW50VXRpbC5nZXRQYXJlbnQoc3RhcnRDb250cm9sLCB2YWxpZGF0ZURhdGFFbGUpIGFzIERhdGFFbGVtZW50SW5saW5lR3JvdXAgfCBEYXRhRWxlbWVudExlYWY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5b2T5YmN5YWJ5qCH5omA5Zyo55qE5pWw5o2u5YWD55qE5YC8XG4gICAgICogQHBhcmFtIHZhbFxuICAgICAqL1xuICAgIHNldEN1cnJlbnREYXRhRWxlbWVudFZhbHVlKHZhbDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGFFbGUgPSB0aGlzLmdldEN1cnJlbnREYXRhRWxlbWVudCgpO1xuICAgICAgICBpZiAoZGF0YUVsZSkge1xuICAgICAgICAgICAgZGF0YUVsZT8uc2V0VmFsdWUodmFsKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaVsOaNruWFg+S9jee9rlxuICAgICAqIEBwYXJhbSBlbGVtZW50XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXREYXRhRWxlbWVudFBvc2l0aW9uKGVsZW1lbnQ6IExlYWZFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGVjb3JhdGVSZW5kZXIgPSBlbGVtZW50LnBhaW50UmVuZGVyc1swXVxuICAgICAgICBpZiAoIXN0YXJ0RGVjb3JhdGVSZW5kZXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+acquaJvuWIsOaVsOaNruWFg+W8gOWni+a4suafk+WFg+e0oCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHt4LCBoZWlnaHQsIHksIHdpZHRofSA9IHN0YXJ0RGVjb3JhdGVSZW5kZXIucmVjdDtcbiAgICAgICAgY29uc3QgcG9zID0gRWxlbWVudFV0aWwuZ2V0UmVuZGVyQWJzb2x1dGVQYWludFBvcyhzdGFydERlY29yYXRlUmVuZGVyKVxuICAgICAgICByZXR1cm4ge3g6IHBvcy54ICsgd2lkdGgsIHk6IHBvcy55ICsgaGVpZ2h0ICsgNSwgdHJhbnNsYXRlWTogdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiOt+WPluaWh+aho+aooeWei1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0RG9jU2NoZW1hKCk6IGFueSB7XG4gICAgICAgIHJldHVybiBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZSh0aGlzLmRvY0N0eC5kb2N1bWVudCwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgZ2V0RG9jU2NoZW1hSlNPTigpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCByZXMgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmdldERvY1NjaGVtYSgpKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDlj7PplK7oj5zljZVcbiAgICAgKiBAcGFyYW0gZXZ0XG4gICAgICovXG4gICAgb25Db250ZXh0TWVudShldnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHtzZWxlY3Rpb25TdGF0ZX0gPSB0aGlzLmRvY3VtZW50U2VsZWN0aW9uO1xuICAgICAgICBjb25zdCB7c3RhcnRDb250cm9sfSA9IHNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnRFdmVudCA9IG5ldyBDb250ZXh0TWVudUVsZW1lbnRFdmVudCh0aGlzLmRvY0N0eCk7XG4gICAgICAgIGVsZW1lbnRFdmVudC5zb3VyY2UgPSBzdGFydENvbnRyb2w7XG4gICAgICAgIERvY3VtZW50RXZlbnQuaW52b2tlRXZlbnQoJ0VsZW1lbnRDb250ZXh0TWVudScsIHN0YXJ0Q29udHJvbCwgZWxlbWVudEV2ZW50LCAnQWxsJywgdGhpcy5kb2NDdHgpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHt4OiBldnQub2Zmc2V0WCArIDEwLCB5OiBldnQub2Zmc2V0WSwgdHJhbnNsYXRlWTogdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZfTtcbiAgICAgICAgdGhpcy5vbkNvbnRleHRNZW51SXRlbUNoYW5nZWQubmV4dCh7cG9zOiBwb3NpdGlvbiwgbWVudXM6IGVsZW1lbnRFdmVudC5tZW51c30pXG4gICAgfVxuXG4gICAgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBsaXN0ZW5Db250YWluZXJIZWlnaHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEb2NIZWlnaHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuZG9jU2Nyb2xsKTtcbiAgICAgICAgdGhpcy51cGRhdGVEb2NIZWlnaHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZURvY0hlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge3dpZHRoLCBoZWlnaHR9ID0gdGhpcy5nZXRDb250YWluZXJIZWlnaHQoKTtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3Mud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3MuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICBpZiAod2lkdGggPCB0aGlzLnZpZXdPcHRpb25zLkNvbnRlbnRXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3Mud2lkdGggPSB0aGlzLnZpZXdPcHRpb25zLkNvbnRlbnRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICAvL+mAguW6lOmhteWuveaooeW8j1xuICAgICAgICBpZiAodGhpcy52aWV3T3B0aW9ucy5wYWdlTGF5b3V0TW9kZSA9PT0gJ2ZpdC1wYWdlJykge1xuICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSAodGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3Mud2lkdGggLSA4MCkgLyB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy53aWR0aDtcbiAgICAgICAgICAgIHRoaXMuX3NjYWxlVmlldyhzY2FsZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNldFZpZXdlcigpO1xuICAgIH1cblxuICAgIHJlc2V0Vmlld2VyKHR5cGU6ICdkZW1hbmQnIHwgJ2ZvcmNlJyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWZyZXNoVHlwZSA9IHR5cGUgPT09ICdmb3JjZScgPyAnY29udGVudCcgOiAnYXBwZWFyYW5jZSc7XG4gICAgICAgIGlmIChyZWZyZXNoVHlwZSA9PT0gJ2NvbnRlbnQnKSB7XG4gICAgICAgICAgICB0aGlzLmRvY0N0eC5kb2N1bWVudC5wdWJPbkNoYW5nZSgnc2VsZicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlUmVuZGVyQ3R4KCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRQYWludC5sYXlvdXRQYWdlcygpO1xuICAgICAgICB0aGlzLnJlZnJlc2hEb2N1bWVudCgpO1xuICAgICAgICB0aGlzLnJlZnJlc2hEb2NSdWxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog57yp5pS+6KeG5Zu+XG4gICAgICogQHBhcmFtIHNjYWxlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBzY2FsZShzY2FsZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8v6Ieq6YCC5bqU6aG15a695qih5byP5pe277yM5aaC5p6c5omL5Yqo6LCD5pW057yp5pS+5q+U5L6L77yM5YiZ6L2s5Y+Y5Li65Y2V6aG15qih5byPXG4gICAgICAgIGlmICh0aGlzLnZpZXdPcHRpb25zLnBhZ2VMYXlvdXRNb2RlID09PSAnZml0LXBhZ2UnKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnBhZ2VMYXlvdXRNb2RlID0gJ3NpbmdsZVBhZ2UnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NjYWxlVmlldyhzY2FsZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog57yp5pS+6KeG5Zu+XG4gICAgICogQHBhcmFtIHNjYWxlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zY2FsZVZpZXcoc2NhbGU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHNjYWxlID0gc2NhbGUgPCAwLjUgPyAwLjUgOiBzY2FsZTtcbiAgICAgICAgc2NhbGUgPSBzY2FsZSA+IDIgPyAyIDogc2NhbGU7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgdGhpcy51cGRhdGVSZW5kZXJDdHgoKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoRG9jUnVsZSgpO1xuICAgICAgICB0aGlzLmZsdXNoVG9TY2hlZHVsZSgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50UGFpbnQubGF5b3V0UGFnZXMoKTtcbiAgICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUmVuZGVyQ3R4KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7c2NhbGUsIHZpZXdTZXR0aW5nczoge3dpZHRoLCBoZWlnaHR9fSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIHRoaXMucmVuZGVyQ29udGV4dC51cGRhdGUoe3dpZHRoLCBoZWlnaHQsIHNjYWxlfSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udGFpbmVySGVpZ2h0KCk6IHsgaGVpZ2h0OiBudW1iZXIsIHdpZHRoOiBudW1iZXIgfSB7XG4gICAgICAgIGxldCB7aGVpZ2h0LCB3aWR0aH0gPSB0aGlzLmRvY1Njcm9sbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgcmV0dXJuIHtoZWlnaHQ6IE1hdGguZmxvb3IoaGVpZ2h0KSwgd2lkdGg6IE1hdGguZmxvb3Iod2lkdGgpfTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOWcqOW9k+WJjeS9jee9ruaPkuWFpeihqOagvFxuICAgICAqIEBwYXJhbSByb3dzXG4gICAgICogQHBhcmFtIGNvbHNcbiAgICAgKi9cbiAgICBpbnNlcnRUYWJsZShyb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCB0YiA9IFRhYmxlRWxlbWVudC5jcmVhdGVUYWJsZShyb3dzLCBjb2xzKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudENoYW5nZS5pbnNlcnRUYWJsZSh0Yik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5omT5Y2w5omA5pyJ5paH5qGjXG4gICAgICovXG4gICAgcHJpbnRBbGxQYWdlcygpOiB2b2lkIHtcbiAgICAgICAgZG9jdW1lbnRQcmludC5wcmludCh0aGlzLmRvY3VtZW50U2VsZWN0aW9uLnNlbGVjdGlvblN0YXRlLCB0aGlzLnZpZXdPcHRpb25zLCB0aGlzLmRvY0N0eClcbiAgICB9XG5cbiAgICBnZXRQcmludE5vZGVzKCk6IEFycmF5PEhUTUxDYW52YXNFbGVtZW50PiB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudFByaW50LmV4cG9ydENhbnZhc05vZGVzKHRoaXMuZG9jdW1lbnRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhdGUsIHRoaXMudmlld09wdGlvbnMsIHRoaXMuZG9jQ3R4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmuIXpmaTmlofmoaNcbiAgICAgKi9cbiAgICBjbGVhckRvYygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jQ3R4LmRvY3VtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmhpc3RvcnlNYW5nZS5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFNlbGVjdGlvbi5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudEV2ZW50LmNsZWFySGl0SW5mbygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jQ3R4LmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5paw5bu65paH5qGjXG4gICAgICogQHBhcmFtIGRvY1xuICAgICAqL1xuICAgIGNyZWF0ZU5ld0RvYyhkb2M6IERvY3VtZW50RWxlbWVudCB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIC8vdGhpcy5kb2NDdHguY2xlYXIoKTtcbiAgICAgICAgY29uc3QgbmV3RG9jID0gZG9jID8/IERvY3VtZW50VGVtcGxhdGUuY3JlYXRlQTREb2MoKTtcbiAgICAgICAgLy8gdGhpcy5lbGVtZW50UmVhZGVyLnNldERvY3VtZW50KG5ld0RvYyk7XG4gICAgICAgIC8vIHRoaXMucmVmcmVzaERvY3VtZW50KCdjb250ZW50Jyk7XG4gICAgICAgIHRoaXMubG9hZERvYyhFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZShuZXdEb2MsIHRoaXMudmlld09wdGlvbnMpKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0N0eC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRFdmVudC5jbGVhclN1YkV2ZW50KCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRJbnB1dC5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZmx1c2hUYXNrID0gbnVsbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOiOt+WPlumAieWMuuaWh+acrOWxnuaAp1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgZ2V0U2VsZWN0aW9uVGV4dEdyb3VwUHJvcHMoKTogVGV4dFByb3BzIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXRlID0gdGhpcy5zZWxlY3Rpb25TdGF0ZTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb25TdGF0ZS5zZWxlY3RlZFJhbmdlO1xuICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbC5wcm9wcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydFJhbmdlID0gRWxlbWVudFV0aWwuZ2V0Rmlyc3RTZWxlY3RlZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgY29uc3QgZW5kUmFuZ2UgPSBFbGVtZW50VXRpbC5nZXRMYXN0U2VsZWN0ZWRSYW5nZShyYW5nZSk7XG4gICAgICAgIGlmIChzdGFydFJhbmdlLnRhcmdldCBpbnN0YW5jZW9mIFRleHRHcm91cEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFydFJhbmdlLnRhcmdldC5wcm9wcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3Rpb25QYXJhUHJvcHMoKTogUGFyYWdyYXBoUHJvcHMgfCBudWxsIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhdGUgPSB0aGlzLnNlbGVjdGlvblN0YXRlO1xuICAgICAgICBpZiAoIXNlbGVjdGlvblN0YXRlIHx8ICFzZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmEgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUoc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sLCBQYXJhZ3JhcGhFbGVtZW50KSBhcyBQYXJhZ3JhcGhFbGVtZW50O1xuICAgICAgICByZXR1cm4gcGFyYS5wcm9wcztcbiAgICB9XG5cblxuICAgIHNldFRleHRGb3JtYXQobmV3UHJvcHM6IFBhcnRpYWw8VGV4dFByb3BzPik6IHZvaWQge1xuICAgICAgICBEb2N1bWVudENoYW5nZS5zZXRUZXh0U3R5bGUodGhpcy5zZWxlY3Rpb25TdGF0ZSwgKHQpID0+IHtcbiAgICAgICAgICAgIHQuc2V0Rm9ybWF0KG5ld1Byb3BzKTtcbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIOW8gOWQr+agvOW8j+WIt1xuICAgICAqL1xuICAgIGVuYWJsZUZvcm1hdEJydXNoKCk6IElDYW5jZWxUb2tlbkZuIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0Q29udHJvbCA9IHRoaXMuc2VsZWN0aW9uU3RhdGUuc3RhcnRDb250cm9sO1xuICAgICAgICBpZiAoc3RhcnRDb250cm9sIGluc3RhbmNlb2YgVGV4dEdyb3VwRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdHlsZSA9IHN0YXJ0Q29udHJvbC5wcm9wcy5jbG9uZShudWxsKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbk92ZXJsYXlDb2xvciA9IHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uT3ZlcmxheXNDb2xvcjtcbiAgICAgICAgICAgIHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uT3ZlcmxheXNDb2xvciA9IFwicmdiYSgwLDU4LDE0MCwwLjgpXCI7XG5cbiAgICAgICAgICAgIGNvbnN0IGNhbmNlbFRva2VuOiBJQ2FuY2VsVG9rZW5GbiA9IHt9O1xuICAgICAgICAgICAgY29uc3Qgc3ViID0gdGhpcy5vbkNsaWNrRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRleHRGb3JtYXQoc2VsZWN0ZWRTdHlsZSk7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5zZWxlY3Rpb25PdmVybGF5c0NvbG9yID0gc2VsZWN0aW9uT3ZlcmxheUNvbG9yO1xuICAgICAgICAgICAgICAgIGlmIChjYW5jZWxUb2tlbi5vbkZpbmlzaCkge1xuICAgICAgICAgICAgICAgICAgICBjYW5jZWxUb2tlbi5vbkZpbmlzaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2FuY2VsVG9rZW4uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMudmlld09wdGlvbnMuc2VsZWN0aW9uT3ZlcmxheXNDb2xvciA9IHNlbGVjdGlvbk92ZXJsYXlDb2xvcjtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gY2FuY2VsVG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572u5q616JC95a+56b2QXG4gICAgICogQHBhcmFtIGFsaWduXG4gICAgICovXG4gICAgc3dpdGNoUGFyYUFsaWduKGFsaWduOiBUZXh0QWxpZ24pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2V0dGVyRnVuYyA9IChwYXJhUHJvcHM6IFBhcmFncmFwaFByb3BzKSA9PiB7XG4gICAgICAgICAgICBwYXJhUHJvcHMudGV4dEFsaWduID0gYWxpZ247XG4gICAgICAgIH07XG4gICAgICAgIERvY3VtZW50Q2hhbmdlLnNldFBhcmFBbGlnbih0aGlzLnNlbGVjdGlvblN0YXRlLCBzZXR0ZXJGdW5jKTtcbiAgICB9XG5cblxuICAgIGNvbWJpbmVDZWxsKCk6IHZvaWQge1xuICAgICAgICBUYWJsZVV0aWwubWVyZ2VDZWxscyh0aGlzLnNlbGVjdGlvblN0YXRlKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIh+aNouW9k+WJjeauteiQvemhueebruespuWPt+eKtuaAgVxuICAgICAqL1xuICAgIHNldFBhcmFncmFwaE51bWJlclR5cGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRDaGFuZ2Uuc2V0UGFyYWdyYXBoTnVtYmVyVHlwZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIoOmZpOW9k+WJjeaJueazqFxuICAgICAqIEBwYXJhbSBpZFxuICAgICAqL1xuICAgIHJlbW92ZUNvbW1lbnQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY0NvbW1lbnQucmVtb3ZlQ29tbWVudChpZCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDnp7vpmaTnhKbngrnmiYDlnKjnmoTmibnms6hcbiAgICAgKi9cbiAgICByZW1vdmVDdXJyZW50Q29tbWVudCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29tbWVudCA9IEVsZW1lbnRVdGlsLmdldFBhcmVudCh0aGlzLnNlbGVjdGlvblN0YXRlLnN0YXJ0Q29udHJvbCwgKGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIENvbW1Db250ZW50QmFzZUVsZW1lbnQpKSBhcyBDb21tQ29udGVudEJhc2VFbGVtZW50O1xuICAgICAgICBpZiAoY29tbWVudCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDb21tZW50KGNvbW1lbnQucHJvcHMuaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o+S5YWl5om55rOoXG4gICAgICovXG4gICAgaW5zZXJ0Q29tbWVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudENoYW5nZS5pbnNlcnRDb21tZW50KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5riF6Zmk5omA5pyJ5om55rOoXG4gICAgICovXG4gICAgY2xlYXJBbGxDb21tZW50cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NDb21tZW50LmNsZWFyQWxsQ29tbWVudHMoKTtcbiAgICB9XG5cblxuICAgIGN1dFRhYmxlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByb3cgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRCeVR5cGUodGhpcy5zZWxlY3Rpb25TdGF0ZS5zdGFydENvbnRyb2wsIFRhYmxlUm93RWxlbWVudCkgYXMgVGFibGVSb3dFbGVtZW50O1xuICAgICAgICBjb25zdCB0YiA9IHJvdz8ucGFyZW50IGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgVGFibGVVdGlsLmN1dFRhYmxlKHRiLCByb3cuZ2V0SW5kZXgoKSk7XG4gICAgICAgIGNvbnN0IHBhcmEgPSBuZXcgUGFyYWdyYXBoRWxlbWVudCgpO1xuICAgICAgICB0Yi5wYXJlbnQuYWRkQ2hpbGQocGFyYSwgdGIuZ2V0SW5kZXgoKSArIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOWIneWni+WMluW9k+WJjeaWh+aho+WIm+W7uueUqOaIt+S/oeaBr1xuICAgICAqIOS4gOS7veaWh+aho+WPqumcgOimgeiuvue9ruS4gOasoVxuICAgICAqL1xuICAgIGluaXRDdXJyZW50RG9jVXNlcih1c2VySWQ6IHN0cmluZywgdXNlck5hbWU6IHN0cmluZywgZGF0ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIFRyYWNrLnN1cHByZXNzVHJhY2tpbmcoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5kb2NDdHguZG9jdW1lbnQ7XG4gICAgICAgICAgICBkb2MucHJvcHMuY3JlYXRlVXNlcklkID0gdXNlcklkO1xuICAgICAgICAgICAgZG9jLnByb3BzLmNyZWF0ZVVzZXJOYW1lID0gdXNlck5hbWU7XG4gICAgICAgICAgICBkb2MucHJvcHMuY3JlYXRlRGF0ZSA9IGRhdGU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOmqjOivgeaWh+aho+WGheWuuVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHRoaXMuZG9jQ29tbWVudC5jbGVhckFsbFZhbGlkYXRlcygpO1xuICAgICAgICByZXR1cm4gdGhpcy5kb2N1bWVudENoYW5nZS52YWxpZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaSpOmUgFxuICAgICAqL1xuICAgIHVuZG8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlzdG9yeU1hbmdlLnVuZG8oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmgaLlpI1cbiAgICAgKi9cbiAgICByZWRvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnlNYW5nZS5yZWRvKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5Y+v5Lul5pKk6ZSAXG4gICAgICovXG4gICAgY2FuVW5kbygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeU1hbmdlLmNhblVuZG87XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5Y+v5Lul5oGi5aSNXG4gICAgICovXG4gICAgY2FuUmVkbygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeU1hbmdlLmNhblJlZG87XG4gICAgfVxuXG4gICAgc3dpdGNoVHJhY2tDaGFuZ2VzKGVsZUN0eDogQnJhbmNoRWxlbWVudCB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgICAgIGVsZUN0eCA9IGVsZUN0eCB8fCB0aGlzLmRvY0N0eC5kb2N1bWVudDtcbiAgICAgICAgY29uc3QgYm9keSA9IGVsZUN0eC50cmVlRmluZChpdGVtID0+IGl0ZW0gaW5zdGFuY2VvZiBEb2N1bWVudEJvZHlFbGVtZW50KSBhcyBEb2N1bWVudEJvZHlFbGVtZW50O1xuICAgICAgICBpZiAoYm9keSkge1xuICAgICAgICAgICAgYm9keS50cmFja0NoYW5nZXMgPSAhYm9keS50cmFja0NoYW5nZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+acquaJvuWIsGRvYy1ib2R5Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdHJhY2tUaXBzQ2hhbmdlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRFdmVudC50cmFja1RpcHNDaGFuZ2VkO1xuICAgIH1cblxuICAgIHN3aXRjaEZ1bGxWaWV3UGFnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5mdWxsUGFnZVZpZXcgPSAhdGhpcy52aWV3T3B0aW9ucy5mdWxsUGFnZVZpZXc7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRKU09OKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBFbGVtZW50U2VyaWFsaXplLmdldFNlbGVjdGVkSlNPTih0aGlzLnNlbGVjdGlvblN0YXRlLCB0aGlzLnZpZXdPcHRpb25zKTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgY29weVNlcmlhbGl6ZVN0ciA9IEVsZW1lbnRTZXJpYWxpemUuZ2V0U2VsZWN0ZWRTdHJ1Y3QodGhpcy5zZWxlY3Rpb25TdGF0ZSwgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBFbGVtZW50U2VyaWFsaXplLnNlcmlhbGl6ZVN0cmluZyhjb3B5U2VyaWFsaXplU3RyIGFzIEJyYW5jaEVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9rue6uOW8oOaWueWQkVxuICAgICAqIEBwYXJhbSBvcmllbnRhdGlvblxuICAgICAqL1xuICAgIHNldFBhcGVyT3JpZW50KG9yaWVudGF0aW9uOiBPcmllbnRUeXBlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jQ3R4LmRvY3VtZW50LnByb3BzLm9yaWVudCA9IG9yaWVudGF0aW9uO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmRvY1BhZ2VTZXR0aW5ncy5vcmllbnQgPSBvcmllbnRhdGlvbjtcbiAgICAgICAgdGhpcy5yZXNldFZpZXdlcignZm9yY2UnKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9rue6uOW8oOWkp+WwjyzljZXkvY3kuLrmr6vnsbMobW0pXG4gICAgICogQHBhcmFtIHdpZHRoXG4gICAgICogQHBhcmFtIGhlaWdodFxuICAgICAqL1xuICAgIHNldFBhcGVyU2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBkb2NQcm9wcyA9IHRoaXMuZG9jQ3R4LmRvY3VtZW50LnByb3BzO1xuICAgICAgICBkb2NQcm9wcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBkb2NQcm9wcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHdpZHRoID0gTWF0aC5mbG9vcih3aWR0aCAqIHRoaXMudmlld09wdGlvbnMubW1Ub1BpeGVsc1JhdGlvKTtcbiAgICAgICAgaGVpZ2h0ID0gTWF0aC5mbG9vcihoZWlnaHQgKiB0aGlzLnZpZXdPcHRpb25zLm1tVG9QaXhlbHNSYXRpbyk7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzID0gbmV3IFBhZ2VPcHRpb25zKHdpZHRoLCBoZWlnaHQsIGRvY1Byb3BzLm9yaWVudCk7XG4gICAgICAgIHRoaXMucmVzZXRWaWV3ZXIoJ2ZvcmNlJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5o+S5YWl5by65Yi25o2i6aG156ymXG4gICAgICovXG4gICAgaW5zZXJ0UGFnZUJyZWFrUGFyYSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudENoYW5nZS5pbnNlcnRQYWdlQnJlYWtQYXJhKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5pi+56S65b2T5YmN5YWD57Sg5Yiw6KeG5Zu+5LitXG4gICAgICogQHBhcmFtIGVsZW1lbnRcbiAgICAgKi9cbiAgICBicmluZ1RvVmlldyhlbGVtZW50OiBFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZSA9IGVsZW1lbnQgaW5zdGFuY2VvZiBCcmFuY2hFbGVtZW50ID8gRWxlbWVudFV0aWwuZ2V0Rmlyc3RMZWFmRWxlbWVudChlbGVtZW50KSA6IGVsZW1lbnQgYXMgTGVhZkVsZW1lbnQ7XG4gICAgICAgIGlmIChlbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZ2lvbiA9IEVsZW1lbnRVdGlsLmdldEVsZW1lbnRSZWdpb24oZWxlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlck9iaiA9IGVsZS5wYWludFJlbmRlcnNbMF07XG4gICAgICAgICAgICBjb25zdCBkb2NSZW5kZXIgPSBFbGVtZW50VXRpbC5nZXRQYXJlbnRSZW5kZXIocmVuZGVyT2JqLCBEb2N1bWVudFJlbmRlck9iamVjdCkgYXMgRG9jdW1lbnRSZW5kZXJPYmplY3Q7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGRvY1JlbmRlci5nZXRJbmRleCgpO1xuICAgICAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gRG9jdW1lbnRDdXJzb3IuZ2V0RWxlbWVudEN1cnNvclBvcyhlbGUsIDAsIHJlZ2lvbiwgaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGF0ZS5zdXJyb3VuZChlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChjdXJzb3JQb3MucmVjdC55IC0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZID4gMCAmJiBjdXJzb3JQb3MucmVjdC55IC0gdGhpcy52aWV3T3B0aW9ucy50cmFuc2xhdGVZIDwgdGhpcy52aWV3T3B0aW9ucy52aWV3U2V0dGluZ3MuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kb2NTY3JvbGwuc2Nyb2xsVG8oY3Vyc29yUG9zLnJlY3QueCwgY3Vyc29yUG9zLnJlY3QueSAtIHRoaXMudmlld09wdGlvbnMudHJhbnNsYXRlWSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lvZPliY3mlofmoaPpobXovrnot51cbiAgICAgKi9cbiAgICBzZXREb2N1bWVudE1hcmdpbihwYWdlTWFyZ2luOiBQYXJ0aWFsPE1hcmdpblByb3BzPik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZG9jQ3R4LmRvY3VtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb2NDdHguZG9jdW1lbnQudXBkYXRlTWFyZ2luKHBhZ2VNYXJnaW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaPkuWFpeWFg+e0oFxuICAgICAqIEBwYXJhbSB0YXJnZXRFbGVtZW50XG4gICAgICogQHBhcmFtIHRhcmdldE9mZnNldFxuICAgICAqIEBwYXJhbSBkZXN0RWxlQXJyYXlcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGluc2VydEVsZW1lbnQodGFyZ2V0RWxlbWVudDogRWxlbWVudCwgdGFyZ2V0T2Zmc2V0OiBudW1iZXIsIGRlc3RFbGVBcnJheTogQXJyYXk8RWxlbWVudD4pOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb25TdGF0ZS5lZGl0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRDaGFuZ2UuaW5zZXJ0RWxlbWVudCh0YXJnZXRFbGVtZW50LCB0YXJnZXRPZmZzZXQsIGRlc3RFbGVBcnJheSk7XG4gICAgfVxuXG4gICAgc2hvd0hpc3RvcnkoKTogdm9pZCB7XG4gICAgICAgIC8vY29uc29sZS5sb2coSGlzdG9yeS5vcHMpO1xuICAgICAgICBjb25zdCBuZXdQYXJhID0gbmV3IFBhcmFncmFwaEVsZW1lbnQoKTtcbiAgICAgICAgY29uc3QgcFN5bWJvbCA9IG5ldyBQU3ltYm9sRWxlbWVudCgpO1xuICAgICAgICBuZXdQYXJhLmFkZENoaWxkKG5ldyBUZXh0R3JvdXBFbGVtZW50KCkpO1xuICAgICAgICBuZXdQYXJhLmFkZENoaWxkKHBTeW1ib2wpO1xuICAgICAgICBjb25zdCBpbmRleCA9IEVsZW1lbnRVdGlsLmdldENvbnRyb2xJbmRleChwU3ltYm9sKTtcbiAgICAgICAgY29uc29sZS5sb2coaW5kZXgpXG4gICAgICAgIGNvbnNvbGUubG9nKEVsZW1lbnRVdGlsLmdldENvbnRyb2xCeUluZGV4KG5ld1BhcmEsIHtjdXJySW5kZXg6IC0xLCBpbmRleH0pKTtcbiAgICB9XG5cbiAgICBnZXRDb250cm9sQnlJZChpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBFbGVtZW50VXRpbC5nZXRDb250cm9sQnlJbmRleCh0aGlzLmRvY0N0eC5kb2N1bWVudCwge2N1cnJJbmRleDogLTEsIGluZGV4fSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udHJvbElkKGVsZTogRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gRWxlbWVudFV0aWwuZ2V0Q29udHJvbEluZGV4KGVsZSk7XG4gICAgfVxuXG4gICAgc3dpdGNoUGFnZUxheW91dChtb2RlOiBQYWdlTGF5b3V0TW9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnBhZ2VMYXlvdXRNb2RlID0gbW9kZTtcbiAgICAgICAgaWYgKG1vZGUgPT09ICdmaXQtcGFnZScpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRG9jSGVpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mbHVzaFRvU2NoZWR1bGUoKTtcbiAgICB9XG5cblxuICAgIHRlc3QyKCk6IHZvaWQge1xuICAgICAgICAvL+iOt+WPluaWh+aho+S4iuS4i+aWh1xuICAgICAgICBjb25zdCBkb2NFbGVDdHggPSB0aGlzLmRvY0N0eC5nZXRDdHgodGhpcy5kb2NDdHguZG9jdW1lbnQpO1xuICAgICAgICAvL+iOt+WPluW5tOm+hOaVsOaNruWFg1xuICAgICAgICBjb25zdCBkYXRhRWxlID0gZG9jRWxlQ3R4LmdldENvbnRyb2xCeUlkKCcxNDkzNDc3NzEyMTM0NjcyMzg2JykgYXMgRGF0YUVsZW1lbnRUZXh0O1xuICAgICAgICAvL+iOt+WPluimgemakOiXj+eahOaVsOaNrue7hFxuICAgICAgICBjb25zdCBkYXRhR3JvdXAgPSBkb2NFbGVDdHguY3R4LnRyZWVGaW5kKChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRGF0YUVsZW1lbnRHcm91cEVsZW1lbnQpIGFzIERhdGFFbGVtZW50R3JvdXBFbGVtZW50O1xuICAgICAgICAvL+S+puWQrOaVsOaNruWFg+abtOaUueaXtumXtFxuICAgICAgICBkYXRhRWxlLm9uQ2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgIC8v5Zyo5paH5qGj6YeN5paw5o6S54mI44CB57uY5Yi25YmN77yM6I635Y+W5pyA57uI55qE5oyH5a6a6IqC54K555qE5YaF5a65XG4gICAgICAgICAgICBjb25zdCBiZWZvcmVSZWZyZXNoU3ViID0gdGhpcy5vbkJlZm9yZVJlZnJlc2hEb2N1bWVudC5zdWJzY3JpYmUoKGUyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ+WGheWuueWPkeeUn+aUueWPmO+8jOmakOiXj+aVsOaNrue7hCcpO1xuICAgICAgICAgICAgICAgIC8v6I635Y+W5bm06b6E5pWw5o2u5YWD6L6T5YWl55qE5YC8XG4gICAgICAgICAgICAgICAgY29uc3QgYWdlID0gTnVtYmVyLnBhcnNlSW50KGRhdGFFbGUuZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgLy/lubTpvoTlpKfkuo4yMO+8jOmakOiXj+aVsOaNruWFg1xuICAgICAgICAgICAgICAgIGRhdGFHcm91cC5wcm9wcy5oaWRkZW4gPSBhZ2UgPiAyMDtcbiAgICAgICAgICAgICAgICAvL+WPlua2iOiuoumYheS6i+S7tlxuICAgICAgICAgICAgICAgIGJlZm9yZVJlZnJlc2hTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuXG5leHBvcnQgdHlwZSBFZGl0b3JDdXJyZW50UG9zID0ge1xuICAgIHBvczogUG9zaXRpb25cbn07XG5cbmV4cG9ydCB0eXBlIEVkaXRvckNvbnRlbnh0UHJvcHMgPSB7XG4gICAgbWVudXM6IEFycmF5PENvbnRlbnRNZW51SXRlbT5cbn0gJiBFZGl0b3JDdXJyZW50UG9zXG5cbmV4cG9ydCB0eXBlIEVkaXRvclBhbmVsUHJvcHMgPSB7XG4gICAgdHlwZTogc3RyaW5nO1xufSAmIEVkaXRvckN1cnJlbnRQb3M7XG5cbiIsImltcG9ydCB7IERvY3VtZW50Qm9keUVsZW1lbnQgfSBmcm9tIFwiLi9pbXBsL2RvY3VtZW50L2RvYy1ib2R5LWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50Qm9keVBhcnRFbGVtZW50IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtYm9keS1wYXJ0LWltcGxcIjtcbmltcG9ydCB7IERvY3VtZW50RWxlbWVudCB9IGZyb20gXCIuL2ltcGwvZG9jdW1lbnQvZG9jLWltcGxcIjtcblxuLyoqXG4gKiDmlofmoaPlkIjlubZcbiAqL1xuZXhwb3J0IGNsYXNzIERvY3VtZW50Q29tYmluZSB7XG4gICAgLyoqXG4gICAgICog5ZCI5bm25qih5p2/5paH5qGjXG4gICAgICog55So5LqO6K6+572u5ZCI5bm25ZCO77yM6aG155yJ6aG16ISa562J57uf5LiA6YOo5YiGXG4gICAgICovXG4gICAgbWFpblRlbXBsYXRlITogRG9jdW1lbnRFbGVtZW50XG5cbiAgICBkb2NQYXJ0czogQXJyYXk8eyBkb2M6IERvY3VtZW50RWxlbWVudCwgZG9jSWQ6IHN0cmluZyB9PiA9IFtdO1xuICAgIC8qKlxuICAgICAqIOa3u+WKoOmcgOimgeWQiOW5tueahOaWh+aho+mDqOWIhlxuICAgICAqL1xuICAgIGFkZChkb2NQYXJ0OiBEb2N1bWVudEVsZW1lbnQsIGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kb2NQYXJ0cy5wdXNoKHsgZG9jOiBkb2NQYXJ0LCBkb2NJZDogaWQgfSlcbiAgICB9XG5cbiAgICBkaXNwb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRvY1BhcnRzLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog55So5LqO5ZCI5bm25paH5qGj6K6h566XXG4gICAgICovXG4gICAgbG9hZCgpOiBEb2N1bWVudEVsZW1lbnQge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMubWFpblRlbXBsYXRlLmNsb25lKCk7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB0ZW1wbGF0ZS5maW5kKChpdGVtKSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRCb2R5RWxlbWVudCkgYXMgRG9jdW1lbnRCb2R5RWxlbWVudDtcbiAgICAgICAgYm9keS5jbGVhckl0ZW1zKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb2NQYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFydCA9IHRoaXMuZG9jUGFydHNbaV07XG4gICAgICAgICAgICBjb25zdCBkb2NQYXJ0Q29udGFpbmVyID0gbmV3IERvY3VtZW50Qm9keVBhcnRFbGVtZW50KCk7XG4gICAgICAgICAgICBkb2NQYXJ0Q29udGFpbmVyLnByb3BzLnBhcnRJZCA9IHBhcnQuZG9jSWQ7XG4gICAgICAgICAgICBjb25zdCBkb2NQYXJ0Qm9keSA9IHBhcnQuZG9jLmZpbmQoaXRlbSA9PiBpdGVtIGluc3RhbmNlb2YgRG9jdW1lbnRCb2R5RWxlbWVudCkgYXMgRG9jdW1lbnRCb2R5RWxlbWVudFxuICAgICAgICAgICAgZG9jUGFydENvbnRhaW5lci5hZGRDaGlsZChkb2NQYXJ0Qm9keS5jbG9uZSh0cnVlKSk7XG4gICAgICAgICAgICBib2R5LmFkZENoaWxkKGRvY1BhcnRDb250YWluZXIpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgIH1cbn0iLCJpbXBvcnQgeyBFZGl0b3JDb250ZXh0IH0gZnJvbSBcIi4vZG9jdW1lbnQtY29udGV4dFwiO1xuaW1wb3J0IHsgRG9jdW1lbnRQYWludCB9IGZyb20gXCIuL2RvY3VtZW50LXBhaW50XCI7XG5pbXBvcnQgeyBwcmludE5vZGVzIH0gZnJvbSBcIi4vZG9jdW1lbnQtcHJpbnRcIjtcbmltcG9ydCB7IFNlbGVjdGlvblN0YXRlIH0gZnJvbSBcIi4vZG9jdW1lbnQtc2VsZWN0aW9uXCI7XG5pbXBvcnQgeyBWaWV3T3B0aW9ucyB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBFbGVtZW50UGFpbnQgfSBmcm9tIFwiLi9lbGVtZW50LXBhaW50XCI7XG5pbXBvcnQgeyBFbGVtZW50UmVhZGVyIH0gZnJvbSBcIi4vZWxlbWVudC1yZWFkZXJcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBEb2N1bWVudEVsZW1lbnQsIERvY3VtZW50UmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4vaW1wbC9kb2N1bWVudC9kb2MtaW1wbFwiO1xuaW1wb3J0IHsgUGFpbnRDb250ZW50LCBSZW5kZXJDb250ZXh0LCBSZW5kZXJDb250ZXh0VHlwZSB9IGZyb20gXCIuL3JlbmRlci1jb250ZXh0XCI7XG5cbi8qKlxuICog56a75bGP5omT5Y2wXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEb2N1bWVudFByaW50T2Zmc2NyZWVuQmFzZSB7XG4gICAgZG9jdW1lbnRQYWludDogRG9jdW1lbnRQYWludDtcbiAgICB2aWV3T3B0aW9uczogVmlld09wdGlvbnM7XG4gICAgZG9jQ3R4OiBFZGl0b3JDb250ZXh0O1xuICAgIHJlbmRlckN0eDogUmVuZGVyQ29udGV4dFR5cGU7XG4gICAgZWxlbWVudFJlYWRlcjogRWxlbWVudFJlYWRlcjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zID0gbmV3IFZpZXdPcHRpb25zKCk7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuY29weVJpZ2h0SW5mbyA9ICfkuIfovr7kv6Hmga/nlLXlrZDnl4XljobnvJbovpHlmagsd3d3LndvbmRlcnNncm91cC5jb20nO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnNob3dDaGFyUmVjdCA9IHRydWU7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZHJhd0NoYXJSZWN0Q29sb3IgPSAnZ3JlZW4nO1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLnNob3dMaW5lUmVjdCA9IHRydWU7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMuZG9jU3BhY2UgPSAyMDtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5yZXZpZXdXaW5kb3dXaWR0aCA9IDIwMDtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucy5tbVRvUGl4ZWxzUmF0aW8gPSAzLjc3OTUwMDEyMjA3MDMxMjY7XG4gICAgICAgIC8v5pW05Liq55S75biD55qE5bC65a+4XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMudmlld1NldHRpbmdzID0ge1xuICAgICAgICAgICAgd2lkdGg6IDEwMDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDgwMFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnZpZXdPcHRpb25zLmVkaXRVc2VyID0ge1xuICAgICAgICAgICAgaWQ6ICc2NjY2JyxcbiAgICAgICAgICAgIG5hbWU6ICfnrqHnkIblkZgnXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgY2FudmFzLCBjdHggfSA9IHRoaXMuY3JlYXRlQ2FudmFzKDIwMCwgMjAwKTtcbiAgICAgICAgY29uc3Qgc3MgPSBuZXcgU2VsZWN0aW9uU3RhdGUoKTtcbiAgICAgICAgdGhpcy5kb2NDdHggPSBuZXcgRWRpdG9yQ29udGV4dChzcywgdGhpcy52aWV3T3B0aW9ucyk7XG4gICAgICAgIHRoaXMucmVuZGVyQ3R4ID0gdGhpcy5jcmVhdGVSZW5kZXJDdHgoY3R4LCB0aGlzLnZpZXdPcHRpb25zLCB0aGlzLmRvY0N0eCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRQYWludCA9IG5ldyBEb2N1bWVudFBhaW50KHRoaXMucmVuZGVyQ3R4LCB0aGlzLmRvY0N0eCwgbmV3IE1hcCgpKTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVhZGVyID0gbmV3IEVsZW1lbnRSZWFkZXIodGhpcy5kb2NDdHgsIHRoaXMucmVuZGVyQ3R4KTtcbiAgICAgICAgdGhpcy5kb2NDdHguc3luY1JlZnJlc2ggPSAoKSA9PiB7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYXN5bmMgcHJpbnQoZGF0YTogYW55IHwgRG9jdW1lbnRFbGVtZW50LCByYW5nZXM6IEFycmF5PG51bWJlcj4gfCBudWxsID0gbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmUoZGF0YSk7XG4gICAgICAgIGNvbnN0IGNhbnZhc05vZGVzID0gdGhpcy5nZXRDYW52YXNOb2Rlcyh0aGlzLmRvY3VtZW50UGFpbnQuZG9jUGFnZXMsIHJhbmdlcyk7XG4gICAgICAgIGlmICghY2FudmFzTm9kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ+aXoOWPr+aJk+WNsOmhtScpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jUHJvcHMgPSB0aGlzLmRvY0N0eC5kb2N1bWVudC5wcm9wcztcbiAgICAgICAgcHJpbnROb2RlcyhjYW52YXNOb2RlcywgeyAuLi5kb2NQcm9wcyB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDojrflj5bnu5jliLbnmoTlm77niYfvvIzmoLzlvI/kuLpCYXNlNjTnvJbnoIFcbiAgICAgKi9cbiAgICBhc3luYyBnZXRJbWFnZXNDb250ZW50KGRhdGE6IGFueSB8IERvY3VtZW50RWxlbWVudCwgcmFuZ2VzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGwpOiBQcm9taXNlPEFycmF5PHN0cmluZz4+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVwYXJlKGRhdGEpO1xuICAgICAgICBjb25zdCBjYW52YXNOb2RlcyA9IHRoaXMuZ2V0Q2FudmFzTm9kZXModGhpcy5kb2N1bWVudFBhaW50LmRvY1BhZ2VzLCByYW5nZXMpO1xuICAgICAgICBpZiAoIWNhbnZhc05vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCfml6Dlj6/lr7zlh7rpobUnKVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW52YXNOb2Rlcy5tYXAobm9kZSA9PiBub2RlLnRvRGF0YVVSTCgpKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRQcmludE5vZGVzKGRhdGE6IGFueSB8IERvY3VtZW50RWxlbWVudCwgcmFuZ2VzOiBBcnJheTxudW1iZXI+IHwgbnVsbCA9IG51bGwpOiBQcm9taXNlPEFycmF5PGFueT4+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVwYXJlKGRhdGEpO1xuICAgICAgICBjb25zdCBjYW52YXNOb2RlcyA9IHRoaXMuZ2V0Q2FudmFzTm9kZXModGhpcy5kb2N1bWVudFBhaW50LmRvY1BhZ2VzLCByYW5nZXMpO1xuICAgICAgICByZXR1cm4gY2FudmFzTm9kZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K+75Y+W5pWw5o2u77yM5o6S54mIXG4gICAgICogQHBhcmFtIGRhdGFcbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIHByZXBhcmUoZGF0YTogYW55IHwgRG9jdW1lbnRFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlYWRlci5yZWFkKGRhdGEpO1xuICAgICAgICB0aGlzLmRvY3VtZW50UGFpbnQucmVQYWdlcygpO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmRvY0N0eC5pbWFnZUxvYWRlci5nZXRMb2FkVGFza3MoKSk7XG4gICAgICAgIGNvbnN0IHsgc2NhbGUsIGRvY1BhZ2VTZXR0aW5nczogeyB3aWR0aCwgaGVpZ2h0IH0gfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIHRoaXMucmVuZGVyQ3R4LnVwZGF0ZSh7IHNjYWxlLCB3aWR0aCwgaGVpZ2h0IH0pO1xuICAgIH1cblxuICAgIGdldENhbnZhc05vZGVzKHByaW50UGFnZXM6IEFycmF5PERvY3VtZW50UmVuZGVyT2JqZWN0PiwgcHJpbnRSYW5nZXM6IEFycmF5PG51bWJlcj4gfCBudWxsID0gbnVsbCk6IEFycmF5PEhUTUxDYW52YXNFbGVtZW50PiB7XG4gICAgICAgIGNvbnN0IHsgc2NhbGUsIGRvY1BhZ2VTZXR0aW5nczogeyB3aWR0aCwgaGVpZ2h0IH0gfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIGNvbnN0IGNhbnZhc0xpc3Q6IEFycmF5PEhUTUxDYW52YXNFbGVtZW50PiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByaW50UGFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChwcmludFJhbmdlcyAmJiBwcmludFJhbmdlcy5pbmRleE9mKGkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBjYW52YXM6IGNhbnZhc05vZGUsIGN0eCB9ID0gdGhpcy5jcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJDdHggPSB0aGlzLmNyZWF0ZVJlbmRlckN0eChjdHgsIHRoaXMudmlld09wdGlvbnMsIHRoaXMuZG9jQ3R4KTtcbiAgICAgICAgICAgIHJlbmRlckN0eC5pbml0KHsgd2lkdGgsIGhlaWdodCwgc2NhbGUgfSk7XG4gICAgICAgICAgICByZW5kZXJDdHguZHJhd01vZGUgPSAncHJpbnQnO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gcHJpbnRQYWdlc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHRtcCA9IEVsZW1lbnRVdGlsLmNsb25lUmVjdChkb2MucmVjdCk7XG4gICAgICAgICAgICBkb2MucmVjdC54ID0gMDtcbiAgICAgICAgICAgIGRvYy5yZWN0LnkgPSAwO1xuICAgICAgICAgICAgRWxlbWVudFBhaW50LmRyYXdQYWdlKHJlbmRlckN0eCwgdGhpcy5kb2NDdHgsIGRvYywgeyB4OiAwLCB5OiAwIH0pO1xuICAgICAgICAgICAgcmVuZGVyQ3R4Lm92ZXJsYXlzQ29udGV4dC5jbGVhcigpO1xuICAgICAgICAgICAgcmVuZGVyQ3R4Lm1haW5Db250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQsICd3aGl0ZScpO1xuICAgICAgICAgICAgcmVuZGVyQ3R4LmNvbW1pdCh7IHdpZHRoLCBoZWlnaHQsIHNjYWxlIH0pO1xuICAgICAgICAgICAgZG9jLnJlY3QgPSB0bXA7XG4gICAgICAgICAgICBjYW52YXNMaXN0LnB1c2goY2FudmFzTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbnZhc0xpc3Q7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgY3JlYXRlQ2FudmFzKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogeyBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB9O1xuXG4gICAgYWJzdHJhY3QgY3JlYXRlUmVuZGVyQ3R4KG1haW5DdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zLCBkb2NDdHg6IEVkaXRvckNvbnRleHQpOiBSZW5kZXJDb250ZXh0VHlwZTtcbn1cblxuXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRQcmludE9mZnNjcmVlbiBleHRlbmRzIERvY3VtZW50UHJpbnRPZmZzY3JlZW5CYXNlIHtcbiAgICBjcmVhdGVSZW5kZXJDdHgobWFpbkN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMsIGRvY0N0eDogRWRpdG9yQ29udGV4dCk6IFJlbmRlckNvbnRleHRUeXBlIHtcbiAgICAgICAgY29uc3QgcmVuZGVyQ3R4ID0gbmV3IFJlbmRlckNvbnRleHQobmV3IFBhaW50Q29udGVudChtYWluQ3R4KSk7XG4gICAgICAgIGNvbnN0IHsgc2NhbGUsIGRvY1BhZ2VTZXR0aW5nczogeyB3aWR0aCwgaGVpZ2h0IH0gfSA9IHRoaXMudmlld09wdGlvbnM7XG4gICAgICAgIHJlbmRlckN0eC5pbml0KHsgc2NhbGUsIHdpZHRoLCBoZWlnaHQgfSk7XG4gICAgICAgIHJldHVybiByZW5kZXJDdHg7XG4gICAgfVxuXG4gICAgY3JlYXRlQ2FudmFzKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogeyBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB9IHtcbiAgICAgICAgY29uc3QgY2FudmFzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjYW52YXNOb2RlLnN0eWxlLmN1cnNvciA9ICd0ZXh0JztcbiAgICAgICAgY2FudmFzTm9kZS5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcbiAgICAgICAgY2FudmFzTm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICAgICAgICBjb25zdCBjdHggPSBjYW52YXNOb2RlLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICAgICAgICBFbGVtZW50VXRpbC5zZXRDYW52YXNQcm9wcyhjYW52YXNOb2RlLCBjdHgsIHRoaXMudmlld09wdGlvbnMuZG9jUGFnZVNldHRpbmdzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNhbnZhczogY2FudmFzTm9kZSwgY3R4XG4gICAgICAgIH1cbiAgICB9XG59IiwiaW1wb3J0IHtDb250ZW50TWVudUl0ZW0sIENvbnRleHRNZW51RWxlbWVudEV2ZW50LCBLZXlib3JhZEVsZW1lbnRFdmVudH0gZnJvbSBcIi4vZWxlbWVudC1ldmVudC1kZWZpbmVcIjtcbmltcG9ydCB7IEVsZW1lbnRVdGlsIH0gZnJvbSBcIi4vZWxlbWVudC11dGlsXCI7XG5pbXBvcnQgeyBFbGVtZW50SGFuZGxlciB9IGZyb20gXCIuL2VsZW1lbnQtZGVmaW5lXCI7XG5pbXBvcnQgeyBkb2N1bWVudFByaW50IH0gZnJvbSBcIi4vZG9jdW1lbnQtcHJpbnRcIjtcbmltcG9ydCB7UGFyYWdyYXBoRWxlbWVudCwgVGFibGVTcGxpdENlbGwsIFRhYmxlVXRpbH0gZnJvbSBcIi4vaW1wbFwiO1xuXG4vKipcbiAqIOWIoOmZpOW9k+WJjeauteiQvVxuICogQHBhcmFtIGV2dFxuICovXG5leHBvcnQgY29uc3QgZGVsZXRlQ3VycmVudFBhcmFncmFwaDogRWxlbWVudEhhbmRsZXI8Q29udGV4dE1lbnVFbGVtZW50RXZlbnQ+ID0gKGV2dCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhdGUsIGN0eDogeyB2aWV3T3B0aW9ucyB9LCBjdXJyZW50RWxlbWVudCB9ID0gZXZ0O1xuICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgaWNvbjogJ0RlbGV0ZVRhYmxlJywgY2FwdGlvbjogJ+WIoOmZpOauteiQvScsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICBvbkNsaWNrOiAoY2V2dCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHN5bWJvbCA9IEVsZW1lbnRVdGlsLmdldExhc3RMZWFmRWxlbWVudChjdXJyZW50RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEZvY3VzYWJsZUVsZSA9IEVsZW1lbnRVdGlsLmdldFJlY3Vyc2lvbk5leHRTaWJsaW5nRWxlbWVudChwc3ltYm9sLCBmYWxzZSwgdHJ1ZSwgdmlld09wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChuZXh0Rm9jdXNhYmxlRWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlLnJlc2V0UmFuZ2UobmV4dEZvY3VzYWJsZUVsZSwgMCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICog5paH5qGj5omT5Y2wXG4gKiBAcGFyYW0gY2V2dCBcbiAqL1xuZXhwb3J0IGNvbnN0IHByaW50RG9jT25Db250ZXh0bWVudTogRWxlbWVudEhhbmRsZXI8Q29udGV4dE1lbnVFbGVtZW50RXZlbnQ+ID0gKGNldnQpOiB2b2lkID0+IHtcbiAgICBjZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICBpY29uOiAnUHJpbnQnLCBjYXB0aW9uOiAn5omT5Y2w5omA5pyJ6aG1JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgIG9uQ2xpY2s6IChldnQpID0+IHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudFByaW50LnByaW50KGNldnQuc2VsZWN0aW9uU3RhdGUsIGNldnQuY3R4LnZpZXdPcHRpb25zLCBjZXZ0LmN0eClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNldnQubWVudXMucHVzaCh7XG4gICAgICAgIGljb246ICdQcmludCcsIGNhcHRpb246ICfmiZPljbDlvZPliY3pobUnLCBldmVudE9iajoge1xuICAgICAgICAgICAgb25DbGljazogKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50UHJpbnQucHJpbnRDdXJyUGFnZShjZXZ0LnNlbGVjdGlvblN0YXRlLCBjZXZ0LmN0eC52aWV3T3B0aW9ucywgY2V2dC5jdHgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXREYXRhRWxlbWVudFByb3BzOkVsZW1lbnRIYW5kbGVyPENvbnRleHRNZW51RWxlbWVudEV2ZW50Pj0oZXZ0KTp2b2lkID0+e1xuICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgaWNvbjogJ1NldHRpbmdzJywgY2FwdGlvbjogJ+WGheWuueaOp+WItuiuvue9ricsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICBvbkNsaWNrOihlKT0+e1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCfngrnlh7vkuoYnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3Qgb25UYWJsZUNvbnRleHRtZW51OkVsZW1lbnRIYW5kbGVyPENvbnRleHRNZW51RWxlbWVudEV2ZW50Pj0oZXZ0KTp2b2lkID0+e1xuICAgIGNvbnN0IHtzZWxlY3Rpb25TdGF0ZSwgY3R4OiB7dmlld09wdGlvbnN9LGN1cnJlbnRFbGVtZW50fSA9IGV2dDtcbiAgICBpZiAoVGFibGVVdGlsLmNhbkRlbGV0ZVRhYmxlKHNlbGVjdGlvblN0YXRlKSkge1xuICAgICAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgICAgICBpY29uOiAnRGVsZXRlVGFibGUnLCBjYXB0aW9uOiAn5Yig6Zmk6KGo5qC8JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoY2V2dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZS5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2RWxlID0gRWxlbWVudFV0aWwuZ2V0UmVjdXJzaW9uUHJldlNpYmxpbmdFbGVtZW50KGN1cnJlbnRFbGVtZW50LCBmYWxzZSwgdHJ1ZSwgdmlld09wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldkVsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUucmVzZXRSYW5nZShwcmV2RWxlLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoVGFibGVVdGlsLmNhbk1lcmdlQ2VsbHMoc2VsZWN0aW9uU3RhdGUpKSB7XG4gICAgICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgICAgIGljb246ICdNZXJnZUR1cGxpY2F0ZScsIGNhcHRpb246ICflkIjlubbljZXlhYPmoLwnLCBldmVudE9iajoge1xuICAgICAgICAgICAgICAgIG9uQ2xpY2s6IChjZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIFRhYmxlVXRpbC5tZXJnZUNlbGxzKHNlbGVjdGlvblN0YXRlKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChUYWJsZVV0aWwuY2FuU3BsaXRDZWxsKHNlbGVjdGlvblN0YXRlKSkge1xuICAgICAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgICAgICBpY29uOiAnU3BsaXQnLCBjYXB0aW9uOiAn5ouG5YiG5Y2V5YWD5qC8JywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoY2V2dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBUYWJsZVNwbGl0Q2VsbC5zcGxpdENlbGwoc2VsZWN0aW9uU3RhdGUsIDAsIDIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZXZ0Lm1lbnVzLnB1c2goe1xuICAgICAgICAgICAgaWNvbjogJ0NvbWJpbmUnLCBjYXB0aW9uOiAn5ZCI5bm25Y2V5YWD5qC86L+Y5Y6fJywgZXZlbnRPYmo6IHtcbiAgICAgICAgICAgICAgICBvbkNsaWNrOiAoY2V2dCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBUYWJsZVV0aWwucmVzdG9yZUNlbGwoc2VsZWN0aW9uU3RhdGUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cbiAgICBldnQubWVudXMucHVzaCh7XG4gICAgICAgIGljb246IFwiSW5zZXJ0XCIsIGNhcHRpb246ICfkuIrmlrnmj5LlhaXmrrXokL0nLCBldmVudE9iajoge1xuICAgICAgICAgICAgb25DbGljazogKGNldnQpID0+IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5wYXJlbnQuYWRkQ2hpbGQoUGFyYWdyYXBoRWxlbWVudC5jcmVhdGVFbGVtZW50KCksIGN1cnJlbnRFbGVtZW50LmdldEluZGV4KCkpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnJlZnJlc2hWaWV3KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGV2dC5tZW51cy5wdXNoKHtcbiAgICAgICAgaWNvbjogXCJJbnNlcnRcIiwgY2FwdGlvbjogJ+S4i+aWueaPkuWFpeauteiQvScsIGV2ZW50T2JqOiB7XG4gICAgICAgICAgICBvbkNsaWNrOiAoY2V2dCkgPT4ge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnBhcmVudC5hZGRDaGlsZChQYXJhZ3JhcGhFbGVtZW50LmNyZWF0ZUVsZW1lbnQoKSwgY3VycmVudEVsZW1lbnQuZ2V0SW5kZXgoKSArIDEpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnJlZnJlc2hWaWV3KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGV2dC5tZW51cyA9IHJlbW92ZUR1cGxpY2F0ZXNFdmVudChldnQubWVudXMpO1xufTtcblxuZnVuY3Rpb24gcmVtb3ZlRHVwbGljYXRlc0V2ZW50KGV2ZW50czogQ29udGVudE1lbnVJdGVtW10pOiBDb250ZW50TWVudUl0ZW1bXSB7XG4gICAgbGV0IGFycjogQ29udGVudE1lbnVJdGVtW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gZXZlbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGxldCBrZXlzID0gYXJyLm1hcChpdGVtID0+IGl0ZW0uY2FwdGlvbik7XG4gICAgICAgIGlmICgha2V5cy5pbmNsdWRlcyhldmVudHNbaV0uY2FwdGlvbikpIHtcbiAgICAgICAgICAgIGFyci51bnNoaWZ0KGV2ZW50c1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycjtcbn0iXSwibmFtZXMiOlsiSGlzdG9yeS5sb2dVcGRhdGVFbGVQcm9wcyIsIkhpc3RvcnkuaW5zZXJ0RWxlIiwiSGlzdG9yeS5yZW1vdmVFbGUiLCJIaXN0b3J5LmZvcm1hdEVsZSIsIkhpc3RvcnkucmVtb3ZlVGV4dCIsIkhpc3RvcnkuaW5wdXRUZXh0IiwiVHJhY2suc3VwcHJlc3NUcmFja2luZyJdLCJtYXBwaW5ncyI6Ijs7OztBQXdCQTs7QUFFRztNQUNVLFlBQVksQ0FBQTtBQUNGLElBQUEsR0FBQSxDQUFBO0FBQW5CLElBQUEsV0FBQSxDQUFtQixHQUFrQixFQUFBO1FBQWxCLElBQUcsQ0FBQSxHQUFBLEdBQUgsR0FBRyxDQUFlO0tBQUs7QUFDMUM7O0FBRUc7QUFDSCxJQUFBLE1BQU0sQ0FBVztBQUNqQixJQUFBLFlBQVksQ0FBVTtBQUN0QixJQUFBLFlBQVksQ0FBZ0I7QUFDNUI7O0FBRUc7QUFDSCxJQUFBLGNBQWMsQ0FBVztBQUN6QixJQUFBLG9CQUFvQixDQUFVO0FBQzlCLElBQUEsb0JBQW9CLENBQVU7O0FBRTlCLElBQUEsUUFBUSxDQUFXO0FBQ25CLElBQUEsT0FBTyxDQUFVO0FBQ2pCLElBQUEsT0FBTyxDQUFVO0FBQ2pCLElBQUEsS0FBSyxDQUFVO0FBQ2YsSUFBQSxLQUFLLENBQVU7QUFDZixJQUFBLEtBQUssQ0FBVztBQUNoQixJQUFBLElBQUksQ0FBVztBQUNmLElBQUEsT0FBTyxDQUFVO0FBQ2pCLElBQUEsSUFBSSxjQUFjLEdBQUE7QUFDZCxRQUFBLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7S0FDbEM7QUFDSixDQUFBO01BS1ksZUFBZSxDQUFBO0FBQ3hCLElBQUEsSUFBSSxDQUFVO0FBQ2QsSUFBQSxPQUFPLENBQVU7QUFDakIsSUFBQSxRQUFRLENBQWdCO0lBQ3hCLFFBQVEsR0FBNEIsRUFBRSxDQUFDO0FBQzFDLENBQUE7QUFDRDs7QUFFRztBQUNHLE1BQU8saUJBQWtCLFNBQVEsWUFBWSxDQUFBO0FBQUksQ0FBQTtBQUVqRCxNQUFPLHFCQUFz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QUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsZ0JBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxhQUFBO0FBQ0osU0FBQTtBQUFNLGFBQUEsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7QUFDN0MsU0FBQTtLQUNKO0lBRUQsUUFBUSxHQUFBO1FBQ0osTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFBLEVBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFJLENBQUEsRUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUEsRUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBRSxDQUFDO0tBQzlKO0lBRUQsa0JBQWtCLENBQUMsT0FBb0IsRUFBRSxTQUE0QixFQUFBO0FBQ2pFLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNqRSxRQUFBLElBQUksT0FBTyxFQUFFO1lBQ1QsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3ZDLFNBQUE7QUFDRCxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0FBRUQsSUFBQSxTQUFTLENBQUMsV0FBd0IsRUFBQTtRQUM5QixPQUFPO1lBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDO1NBQ25ELENBQUE7S0FDSjtBQUVELElBQUEsS0FBSyxDQUFDLElBQWEsRUFBQTtBQUNmLFFBQUEsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEMsUUFBQSxPQUFPLE9BQU8sQ0FBQztLQUNsQjtJQUVELG9CQUFvQixHQUFBO1FBQ2hCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDckM7QUFFSixDQUFBO0FBU0QsTUFBTSxhQUFhLEdBQXdCO0FBQ3ZDLElBQUE7UUFDSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7UUFDbEMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO1FBQ25DLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtRQUMxQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDNUMsS0FBQTtBQUNELElBQUE7UUFDSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7UUFDbEMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO1FBQ3RDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtRQUMxQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDekMsS0FBQTtBQUNELElBQUE7UUFDSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7UUFDdkMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO1FBQ25DLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtRQUMxQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDNUMsS0FBQTtBQUNELElBQUE7UUFDSSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7UUFDbEMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1FBQ3RDLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVB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QUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlFLFlBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxZQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELFlBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDckQsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEYsU0FBQTtLQUNKO0FBRU8sSUFBQSxnQkFBZ0IsQ0FBQyxHQUFzQixFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUE7QUFDakUsUUFBQSxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztBQUN6QyxRQUFBLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0QixTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNELFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN0QixTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDcEI7QUFDSixDQUFBO0FBR0ssTUFBTyxjQUFlLFNBQVEsY0FBNEIsQ0FBQTtBQUM1RCxJQUFBLEtBQUssQ0FBQyxJQUFZLEVBQUE7UUFDZCxPQUFPLElBQUksS0FBSyxLQUFLLENBQUM7S0FDekI7SUFFRCxhQUFhLENBQUMsSUFBUyxFQUFFLFNBQTRCLEVBQUE7QUFDakQsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBcUIsQ0FBQztBQUN6QyxRQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7QUFDakMsUUFBQSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQzNCLFFBQUEsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQzdCLFFBQUEsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQy9CLFFBQUEsUUFBUSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ3pCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDeEMsUUFBQSxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDN0IsUUFBQSxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztBQUNyQixRQUFBLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7QUFDSjs7QUNySkssTUFBTyxlQUFnQixTQUFRLFdBQTBCLENBQUE7O0FBRTNELElBQUEsV0FBQSxHQUFBO1FBQ0ksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1osUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7O0FBRWpDLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUE7UUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLEtBQUk7WUFDbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBQ3RCLFNBQUMsQ0FBQyxDQUFDO0tBQ047SUFFRCxrQkFBa0IsR0FBQTtBQUNkLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QyxRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztBQUNyQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0lBRUQsV0FBVyxHQUFBO0FBQ1AsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDVCxZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtBQUNwQyxTQUFBO0FBQ0QsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFlBQUEsSUFBSSxLQUFLLFlBQVksZUFBZSxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7QUFDcEQsZ0JBQUEsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ2pDLGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7S0FDL0I7SUFFRCxTQUFTLEdBQUE7UUFDTCxPQUFPO0FBQ0gsWUFBQSxJQUFJLEVBQUUsSUFBSTtBQUNWLFlBQUEsS0FBSyxFQUFFO2dCQUNILEdBQUcsSUFBSSxDQUFDLEtBQUs7QUFDaEIsYUFBQTtTQUNKLENBQUE7S0FDSjtJQUVELEtBQUssR0FBQTtBQUNELFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtBQUNKLENBQUE7QUFFSyxNQUFPLGVBQWdCLFNBQVEsY0FBNkIsQ0FBQTtBQUM5RCxJQUFBLEtBQUssQ0FBQyxJQUFZLEVBQUE7UUFDZCxPQUFPLElBQUksS0FBSyxJQUFJLENBQUM7S0FDeEI7SUFFRCxhQUFhLENBQUMsSUFBUyxFQUFFLFNBQTRCLEVBQUE7QUFDakQsUUFBQSxNQUFNLFNBQVMsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO0FBQ3hDLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQXNCLENBQUM7QUFDMUMsUUFBQSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDakMsUUFBQSxRQUFRLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDckMsUUFBQSxTQUFTLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztBQUMzQixRQUFBLE9BQU8sU0FBUyxDQUFDO0tBQ3BCO0FBQ0osQ0FBQTtBQUVLLE1BQU8sb0JBQXFCLFNBQVEsZ0JBQWlDLENBQUE7QUFFdkUsSUFBQSxNQUFNLENBQUMsQ0FBYyxFQUFBO0FBQ2pCLFFBQUEsTUFBTSxFQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsUUFBQSxNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDbEo7SUFFRCxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksRUFBQTtRQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxLQUFLLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFFSjs7QUM5RUssTUFBTyxZQUFhLFNBQVEsV0FBVyxDQUFBO0FBQ3pDLElBQUEsU0FBUyxDQUFZO0FBRXJCLElBQUEsV0FBQSxHQUFBO1FBQ0ksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1osUUFBQSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7QUFDakMsUUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDN0IsUUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7S0FDcEM7SUFFRCxrQkFBa0IsR0FBQTtBQUNkLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN0QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0lBRUQsU0FBUyxHQUFBO1FBQ0wsT0FBTztBQUNILFlBQUEsSUFBSSxFQUFFLElBQUk7QUFDVixZQUFBLEtBQUssRUFBRSxFQUFFO1NBQ1osQ0FBQTtLQUNKO0lBRUQsS0FBSyxHQUFBO0FBQ0QsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDOztBQUVqQyxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUosQ0FBQTtBQUVLLE1BQU8saUJBQWtCLFNBQVEsZ0JBQThCLENBQUE7QUFDakUsSUFBQSxNQUFNLENBQUMsQ0FBYyxFQUFBO0FBQ2pCLFFBQUEsTUFBTSxFQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsUUFBQSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFO1lBQzdCLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzdHO0lBRUQsS0FBSyxHQUFBO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsTUFBTSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0FBQ0osQ0FBQTtBQUVLLE1BQU8sWUFBYSxTQUFRLGNBQW9CLENBQUE7QUFDbEQsSUFBQSxLQUFLLENBQUMsSUFBWSxFQUFBO1FBQ2QsT0FBTyxJQUFJLEtBQUssSUFBSSxDQUFDO0tBQ3hCO0lBRUQsYUFBYSxDQUFDLElBQVMsRUFBRSxTQUE0QixFQUFBO0FBQ2pELFFBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztBQUMvQixRQUFBLE9BQU8sR0FBRyxDQUFDO0tBQ2Q7QUFFSjs7TUNuRFksZUFBZSxDQUFBO0FBQ3hCLElBQUEsT0FBTyxhQUFhLENBQUMsSUFBdUIsRUFBRSxTQUE0QixFQUFBO1FBQ3RFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7O1FBRW5ELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDeEQsUUFBQSxNQUFNLFFBQVEsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN4QyxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzVELFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsWUFBQSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsWUFBQSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFDLFNBQUE7UUFDRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEtBQUssS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQzVFLE1BQU0sTUFBTSxHQUFrRSxFQUFFLENBQUM7O0FBRWpGLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hDLFlBQUEsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUc7QUFDekMsZ0JBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUMzQyxRQUNJLENBQUMsV0FBVyxJQUFJLGVBQWUsSUFBSSxXQUFXLEdBQUcsYUFBYTs7QUFFOUQseUJBQUMsU0FBUyxHQUFHLGVBQWUsSUFBSSxTQUFTLElBQUksYUFBYSxDQUFDOzt5QkFFMUQsV0FBVyxJQUFJLGVBQWUsSUFBSSxTQUFTLElBQUksYUFBYSxDQUFDLEVBQ2pFO0FBQ0wsYUFBQyxDQUFDLENBQUM7QUFDSCxZQUFBLElBQUksUUFBUSxFQUFFO0FBQ1YsZ0JBQUEsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLGVBQWUsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEtBQUssYUFBYSxFQUFFO29CQUMzRixTQUFTO0FBQ1osaUJBQUE7QUFDRCxnQkFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0FBQzFELGdCQUFBLElBQUksS0FBSyxFQUFFO0FBQ1Asb0JBQUEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDZCx3QkFBQSxJQUFJLEVBQUUsUUFBUTtBQUNkLHdCQUFBLElBQUksRUFBRSxFQUFDLEtBQUssRUFBRSxhQUFhLEdBQUcsZUFBZSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFDO0FBQ3hFLHFCQUFBLENBQUMsQ0FBQTtBQUNMLGlCQUFBO0FBQU0scUJBQUE7b0JBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQztBQUNSLHdCQUFBLElBQUksRUFBRSxRQUFRO0FBQ2Qsd0JBQUEsTUFBTSxFQUFFLENBQUM7QUFDTCxnQ0FBQSxJQUFJLEVBQUUsUUFBUTtBQUNkLGdDQUFBLElBQUksRUFBRSxFQUFDLEtBQUssRUFBRSxhQUFhLEdBQUcsZUFBZSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFDOzZCQUN4RSxDQUFDO0FBQ0wscUJBQUEsQ0FBQyxDQUFBO0FBQ0wsaUJBQUE7QUFDSixhQUFBO0FBQ0osU0FBQTs7UUFFRCxNQUFNLFlBQVksR0FBNkIsRUFBRSxDQUFDO0FBQ2xELFFBQUEsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDbEUsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QyxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2xELFlBQUEsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzNFLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFHO0FBQ3pDLGdCQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ2hDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDM0MsUUFDSSxDQUFDLFdBQVcsSUFBSSxlQUFlLElBQUksV0FBVyxHQUFHLGFBQWE7O0FBRTlELHlCQUFDLFNBQVMsR0FBRyxlQUFlLElBQUksU0FBUyxJQUFJLGFBQWEsQ0FBQzs7eUJBRTFELFdBQVcsSUFBSSxlQUFlLElBQUksU0FBUyxJQUFJLGFBQWEsQ0FBQyxFQUNqRTtBQUNMLGFBQUMsQ0FBQyxDQUFDO0FBQ0gsWUFBQSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2hDLFNBQUE7QUFDRCxRQUFBLE9BQU8sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDakM7SUFHTyxPQUFPLFNBQVMsQ0FBQyxNQUFxQixFQUFBO1FBQzFDLE1BQU0sS0FBSyxHQUFzQixFQUFFLENBQUM7QUFDcEMsUUFBQSxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDcEQsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQ2pFLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRU8sSUFBQSxPQUFPLFlBQVksQ0FBQyxLQUFhLEVBQUUsSUFBWSxFQUFBO1FBQ25ELE1BQU0sS0FBSyxHQUFzQixFQUFFLENBQUM7UUFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzQixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQzNELFNBQUE7QUFDRCxRQUFBLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUYsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNoQjtJQUVPLE9BQU8sZUFBZSxDQUFDLFVBQTZCLEVBQUE7UUFDeEQsTUFBTSxZQUFZLEdBQTRCLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDVixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hDLFlBQUEsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUNuRSxZQUFBLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQ2xCLFNBQUE7QUFDRCxRQUFBLE9BQU8sWUFBWSxDQUFDO0tBQ3ZCO0FBQ0o7O0FDMUdEOzs7OztBQUtHO01BQ1UsY0FBYyxDQUFBO0FBQ3ZCOzs7O0FBSUc7QUFDSCxJQUFBLE9BQU8sU0FBUyxDQUFDLEVBQWtCLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBQTtBQUMzRCxRQUFBLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDWixZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtBQUN2QyxTQUFBO0FBQ0QsUUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNwRCxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEMsU0FBQTtBQUFNLGFBQUE7WUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkMsU0FBQTs7Ozs7Ozs7OztLQVVKO0FBR0Q7O0FBRUc7QUFDSyxJQUFBLE9BQU8sZUFBZSxDQUFDLEVBQWtCLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBQTtBQUN6RSxRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0IsUUFBQSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNCLFFBQUEsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDMUIsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDaEMsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7QUFDeEQsU0FBQTtRQUNELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekQsUUFBQSxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRCxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2xELE9BQU87QUFDVixTQUFBOztRQUVELElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtZQUNWLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNELFlBQUEsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFELFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsZ0JBQUEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RCxhQUFBO0FBQ0QsWUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDaEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQW9CLENBQUM7O2dCQUU5QyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBcUIsQ0FBQztnQkFDcEUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQixvQkFBQSxNQUFNLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7b0JBQ3ZDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQyxvQkFBQSxJQUFJLENBQUMsR0FBRyxhQUFhLElBQUksQ0FBQyxHQUFHLGFBQWEsRUFBRTs7QUFFeEMsd0JBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQzFCLDRCQUFBLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUN2Qyx5QkFBQTtBQUNELHdCQUFBLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztBQUNyQyxxQkFBQTtBQUNKLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7UUFDRCxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDVixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMzQixNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFDdEMsZ0JBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3BDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQW1CLENBQUMsQ0FBQyxDQUFDO29CQUNsRCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFtQixDQUFDLENBQUMsQ0FBQTtvQkFDekQsSUFBSSxDQUFDLEdBQUcsY0FBYyxJQUFJLENBQUMsR0FBRyxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUM7O0FBRW5ELHdCQUFBLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDekIsNEJBQUEsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7QUFDdkMsZ0NBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQzFCLG9DQUFBLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQTtBQUN0QyxpQ0FBQTtBQUNELGdDQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztBQUNsQyw2QkFBQTtBQUNKLHlCQUFBO0FBQU0sNkJBQUE7QUFDSCw0QkFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDMUIsZ0NBQUEsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFBO0FBQ3RDLDZCQUFBO0FBQ0QsNEJBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFBO0FBQ2pDLHlCQUFBO0FBQ1IsaUJBQUE7QUFDSixhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDcEI7QUFFRDs7Ozs7QUFLRztBQUNILElBQUEsT0FBTyxjQUFjLENBQUMsRUFBa0IsRUFBRSxJQUFZLEVBQUUsSUFBWSxFQUFBO0FBQ2hFLFFBQUEsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQixRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0IsUUFBQSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtZQUMxQixPQUFPO0FBQ1YsU0FBQTtBQUNELFFBQUEsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDakYsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDekUsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUNoQyxZQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztBQUN4RCxTQUFBO1FBQ0QsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN6RCxRQUFBLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QixFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRTtBQUNsRCxRQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3BELE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUM3RSxRQUFBLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDOztBQUU3RSxRQUFBLElBQUksU0FBUyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO0FBQzNCLFlBQUEsSUFBSSxJQUFJLEdBQUcsU0FBUyxLQUFLLENBQUMsRUFBRTtnQkFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFBLFNBQUEsRUFBWSxTQUFTLENBQWEsVUFBQSxFQUFBLFNBQVMsQ0FBSyxHQUFBLENBQUEsQ0FBQyxDQUFBO0FBQ3BFLGFBQUE7QUFDSixTQUFBOzs7QUFHRCxRQUFBLElBQUksU0FBUyxLQUFLLElBQUksSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO0FBQzFDLFlBQUEsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQixPQUFPO0FBQ1YsU0FBQTtRQUVELElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtBQUNqQixZQUFBLE1BQU0sRUFBQyxXQUFXLEVBQUMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNwRCxTQUFBOztBQUVJLGFBQUE7QUFDRCxZQUFBLE1BQU0sRUFBQyxXQUFXLEVBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNwRCxTQUFBO0tBQ0o7QUFFRDs7Ozs7QUFLRztBQUNILElBQUEsT0FBTyxxQkFBcUIsQ0FBQyxFQUFrQixFQUFFLElBQVksRUFBRSxJQUFZLEVBQUE7QUFDdkUsUUFBQSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN6RSxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ2hDLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0FBQ3hELFNBQUE7UUFDRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pELFFBQUEsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0QsUUFBQSxFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUQsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3QyxZQUFBLEVBQUUsQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUQsU0FBQTtBQUNELFFBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDN0UsUUFBQSxJQUFJLEdBQUcsSUFBSSxHQUFHLFNBQVMsR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDOztRQUUzQyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7QUFDVixZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNoQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBb0IsQ0FBQzs7Z0JBRWxELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFxQixDQUFDO2dCQUN4RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNCLG9CQUFBLE1BQU0sT0FBTyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztvQkFDdkMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUM5QyxJQUFJLENBQUMsR0FBRyxhQUFhLElBQUksQ0FBQyxJQUFJLGFBQWEsR0FBRyxJQUFJLEVBQUU7O0FBRWhELHdCQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtBQUMxQiw0QkFBQSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7QUFDdkMseUJBQUE7QUFDRCx3QkFBQSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFDckMscUJBQUE7QUFBTSx5QkFBQTt3QkFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNsRCxxQkFBQTtBQUNKLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7OztBQUdELFFBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQ3pCLFlBQUEsU0FBUTtZQUNSLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7Z0JBQzVELEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQyxhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsT0FBTztBQUNILFlBQUEsYUFBYSxFQUFFLGNBQWM7QUFDN0IsWUFBQSxXQUFXLEVBQUUsY0FBYyxHQUFHLElBQUksR0FBRyxDQUFDO1NBQ3pDLENBQUE7S0FDSjtBQUVEOzs7OztBQUtHO0FBQ0gsSUFBQSxPQUFPLG9CQUFvQixDQUFDLEVBQWtCLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBQTtBQUN0RSxRQUFBLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUU7QUFDaEMsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7QUFDeEQsU0FBQTtRQUNELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekQsUUFBQSxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDMUMsUUFBQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9FLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3pFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JELFFBQUEsTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsNkJBQTZCLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDckUsUUFBQSxJQUFJLENBQUMsaUNBQWlDLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzNGLFFBQUEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzQixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsT0FBTztBQUNILFlBQUEsYUFBYSxFQUFFLGNBQWM7WUFDN0IsV0FBVyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDO1NBQ25FLENBQUE7S0FDSjtBQUVEOztBQUVHO0FBQ0ssSUFBQSxPQUFPLHNCQUFzQixDQUFDLEtBQW9FLEVBQUUsVUFBNkIsRUFBQTtBQUNySSxRQUFBLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM3RCxRQUFBLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDcEIsWUFBQSxPQUFPLFlBQVksQ0FBQztBQUN2QixTQUFBO0FBQ0QsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ2QsWUFBQSxPQUFPLFlBQVksQ0FBQztBQUN2QixTQUFBO1FBQ0QsT0FBTyxZQUFZLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFBO0tBQ3pGO0FBRUQ7O0FBRUc7SUFDSyxPQUFPLDZCQUE2QixDQUFDLEVBQWdCLEVBQUUsYUFBcUIsRUFBRSxTQUFpQixFQUFFLEtBQW9FLEVBQUE7QUFDekssUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsWUFBQSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsWUFBQSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNqQyxZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzlDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsZ0JBQUEsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtvQkFDekIsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQyxpQkFBQTtBQUFNLHFCQUFBLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDaEMsb0JBQUEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRTdDLG9CQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUNoQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBb0IsQ0FBQzs7d0JBRWxELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFxQixDQUFDO0FBQ2xFLHdCQUFBLE1BQU0sT0FBTyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDdkMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLHdCQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtBQUMxQiw0QkFBQSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7QUFDdkMseUJBQUE7QUFDRCx3QkFBQSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFDckMscUJBQUE7QUFDSixpQkFBQTtBQUNKLGFBQUE7QUFDSixTQUFBO0tBQ0o7QUFFRDs7Ozs7OztBQU9HO0lBQ0ssT0FBTyxpQ0FBaUMsQ0FBQyxFQUFnQixFQUFFLGFBQXFCLEVBQUUsWUFBb0IsRUFBRSxTQUFpQixFQUFFLEtBQStCLEVBQUE7O0FBRTlKLFFBQUEsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDMUUsUUFBQSxVQUFVLEdBQUcsVUFBVSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQy9DLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFvQixDQUFDO0FBQy9ELFFBQUEsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBb0IsQ0FBQztBQUM5RSxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25DLFlBQUEsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFlBQUEsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN4QixnQkFBQSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFxQixDQUFDO0FBQzNGLGdCQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQXFCLENBQUM7Z0JBQ3ZGLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRCxhQUFBO0FBQU0saUJBQUE7Ozs7O0FBS0gsZ0JBQUEsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBcUIsQ0FBQztBQUMzRixnQkFBQSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQXFCLENBQUM7Z0JBQzFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRCxhQUFBO0FBQ0osU0FBQTtLQUNKO0FBR0Q7Ozs7QUFJRztBQUNLLElBQUEsT0FBTyxvQkFBb0IsQ0FBQyxFQUFrQixFQUFFLElBQVksRUFBRSxXQUFtQixFQUFBO1FBQ3JGLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNaLE9BQU87QUFDVixTQUFBO0FBQ0QsUUFBQSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN6RSxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ2hDLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0FBQ3hELFNBQUE7UUFDRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pELFFBQUEsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNsQixRQUFBLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQ3RDLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUN2RSxZQUFBLElBQUksU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDeEIsZ0JBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLFNBQVMsQ0FBQSxHQUFBLENBQUssQ0FBQyxDQUFDO0FBQy9DLGFBQUE7QUFDSixTQUFBOztRQUVELElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtBQUNqQixZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9CLGdCQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7QUFDckMsZ0JBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3RDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFxQixDQUFDO0FBQzlELG9CQUFBLE1BQU0sSUFBSSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQzs7QUFFcEMsb0JBQUEsSUFBSSxDQUFDLEdBQUcsY0FBYyxJQUFJLENBQUMsR0FBRyxXQUFXLEVBQUU7QUFDdkMsd0JBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQzVCLDRCQUFBLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUN6Qyx5QkFBQTtBQUNELHdCQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztBQUNsQyxxQkFBQTtvQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUM5QyxvQkFBQSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLGlCQUFBO2dCQUNELEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUMsYUFBQTtBQUNKLFNBQUE7O0FBRUksYUFBQTs7WUFFRCxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7Z0JBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ2hDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBb0IsQ0FBQztvQkFDOUQsS0FBSyxJQUFJLENBQUMsR0FBRyxjQUFjLEVBQUUsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDaEQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQXFCLENBQUM7QUFDakQsd0JBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzVCLHFCQUFBO0FBQ0osaUJBQUE7QUFDSixhQUFBO0FBQU0saUJBQUE7Z0JBQ0gsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoQyxvQkFBQSxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFO3dCQUNoQixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQW9CLENBQUM7d0JBQzlELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFxQixDQUFDO0FBQzlELHdCQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUNqQyxxQkFBQTtBQUNKLGlCQUFBO0FBQ0osYUFBQTtBQUNKLFNBQUE7S0FDSjtBQUdPLElBQUEsT0FBTyxZQUFZLENBQUMsS0FBYSxFQUFFLElBQVksRUFBQTtRQUNuRCxNQUFNLEtBQUssR0FBc0IsRUFBRSxDQUFDO1FBQ3BDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0IsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUMzRCxTQUFBO0FBQ0QsUUFBQSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVGLFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFFRDs7Ozs7O0FBTUc7SUFDSyxPQUFPLGFBQWEsQ0FBQyxFQUFnQixFQUFFLFlBQW9CLEVBQUUsWUFBb0IsRUFBRSxTQUFpQixFQUFBO1FBQ3hHLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFvQixDQUFDO0FBQ3pELFFBQUEsTUFBTSxLQUFLLEdBQXNCLENBQUMsRUFBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFDLENBQUMsQ0FBQztBQUMvRixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3ZELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFxQixDQUFDO0FBQ2pELFlBQUEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDbEMsZ0JBQUEsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQ3JELGFBQUE7QUFBTSxpQkFBQTtnQkFDSCxNQUFNO0FBQ1QsYUFBQTtBQUNKLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBRUQ7Ozs7O0FBS0c7QUFDSyxJQUFBLE9BQU8sa0JBQWtCLENBQUMsRUFBZ0IsRUFBRSxRQUFnQixFQUFFLFFBQWdCLEVBQUE7QUFDbEYsUUFBQSxNQUFNLFNBQVMsR0FBdUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDL0YsUUFBQSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtBQUN0QyxZQUFBLE9BQU8sQ0FBQyxDQUFDO0FBQ1osU0FBQTtRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNWLFFBQUEsS0FBSyxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBb0IsQ0FBQztZQUM5QyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBcUIsQ0FBQztBQUN4RCxZQUFBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFO2dCQUNsQyxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDdkIsYUFBQTtBQUNKLFNBQUE7UUFDRCxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUM7S0FDdkI7QUFFRDs7Ozs7QUFLRztBQUNLLElBQUEsT0FBTyxrQkFBa0IsQ0FBQyxFQUFnQixFQUFFLFFBQWdCLEVBQUUsUUFBZ0IsRUFBQTtRQUNsRixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFrQixRQUFRLENBQUMsQ0FBQztRQUNuRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFtQixRQUFRLENBQUMsQ0FBQTtBQUMxRCxRQUFBLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO0FBQ3RDLFlBQUEsT0FBTyxDQUFDLENBQUM7QUFDWixTQUFBO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1YsUUFBQSxLQUFLLENBQUMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFxQixDQUFDO0FBQ2pELFlBQUEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUU7Z0JBQ2xDLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN2QixhQUFBO0FBQ0osU0FBQTtRQUNELE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQztLQUN2QjtBQUVKOztNQ3pjWSxPQUFPLENBQUE7QUFpQkcsSUFBQSxNQUFBLENBQUE7QUFBbUMsSUFBQSxNQUFBLENBQUE7QUFoQjlDLElBQUEsR0FBRyxDQUE0QjtBQUMvQixJQUFBLE9BQU8sQ0FBYzs7SUFFckIsVUFBVSxHQUFHLEVBQUUsQ0FBQzs7QUFFaEIsSUFBQSxNQUFNLENBR2I7QUFDTyxJQUFBLFlBQVksQ0FBbUI7SUFDL0IsaUJBQWlCLEdBQW9CLEVBQUUsQ0FBQztJQUN4QyxlQUFlLEdBQW9CLEVBQUUsQ0FBQztJQUN0QyxrQkFBa0IsR0FBK0IsTUFBTSxDQUFDO0FBQ3pELElBQUEsV0FBVyxDQUFjO0FBQ3pCLElBQUEsRUFBRSxDQUFnQjtJQUV6QixXQUFtQixDQUFBLE1BQXlCLEVBQVUsTUFBcUIsRUFBQTtRQUF4RCxJQUFNLENBQUEsTUFBQSxHQUFOLE1BQU0sQ0FBbUI7UUFBVSxJQUFNLENBQUEsTUFBQSxHQUFOLE1BQU0sQ0FBZTtRQUN2RSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQzNDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQTZCLENBQUM7UUFDcEUsSUFBSSxDQUFDLE9BQU8sR0FBRztBQUNYLFlBQUEsS0FBSyxFQUFFLENBQUM7QUFDUixZQUFBLE1BQU0sRUFBRSxDQUFDO0FBQ1QsWUFBQSxNQUFNLEVBQUUsQ0FBQztBQUNULFlBQUEsT0FBTyxFQUFFLENBQUM7U0FDYixDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRztBQUNWLFlBQUEsTUFBTSxFQUFFLENBQUM7QUFDVCxZQUFBLE9BQU8sRUFBRSxDQUFDO1NBQ2IsQ0FBQztBQUNGLFFBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlFLFFBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlFLFFBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzdFO0lBRUQsT0FBTyxHQUFBO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDbEU7QUFFRCxJQUFBLGNBQWMsQ0FBQyxPQUFvQixFQUFBO0FBQy9CLFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDdkIsUUFBQSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztBQUN0RCxRQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFDckUsUUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDOztRQUVyRSxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDOztLQUU5RztJQUVELGNBQWMsR0FBQTtBQUNWLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUErQixDQUFDO0FBQzNELFFBQUEsT0FBTyxNQUFNLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUM7S0FDL0M7SUFFTyxRQUFRLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxLQUFhLEVBQUUsTUFBYyxFQUFFLEtBQWEsRUFBQTtBQUMvRSxRQUFBLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ2pDLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekIsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDM0IsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN2QyxRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDdEI7SUFFTyxlQUFlLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBQTtRQUN4QyxNQUFNLE1BQU0sR0FBb0IsRUFBRSxDQUFDO1FBQ25DLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2pCO0lBRU8sYUFBYSxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUE7UUFDdEMsTUFBTSxNQUFNLEdBQW9DLEVBQUUsQ0FBQztRQUNuRCxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUM5QixRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUM5QixRQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDakI7QUFFTyxJQUFBLFdBQVcsQ0FBQyxJQUFZLEVBQUE7QUFDNUIsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyx1QkFBdUIsQ0FBQztRQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7S0FDeEI7QUFFTyxJQUFBLFFBQVEsQ0FBQyxNQUF1QixFQUFBO0FBQ3BDLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNyQixRQUFBLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ2pDLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekIsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7QUFDN0IsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDekIsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxJQUFJLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixDQUFDLElBQUksR0FBRyxDQUFDO1lBQ1QsQ0FBQyxJQUFJLEdBQUcsQ0FBQztZQUNULElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekIsYUFBQTtBQUFNLGlCQUFBO2dCQUNILElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QixhQUFBO0FBQ0osU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsQixRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDaEIsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3JCLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUN0QjtBQUVPLElBQUEsUUFBUSxDQUFDLElBQVksRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFBO0FBQy9DLFFBQUEsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDakMsUUFBQSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNkLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoQixRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQztBQUNsQyxRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUNyQyxRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLHVCQUF1QixDQUFDO0FBQ3hDLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLFFBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUN0QjtBQUVEOztBQUVHO0lBQ0gsV0FBVyxHQUFBOzs7O0FBSVAsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM3RCxRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDaEIsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsUUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ3RCO0FBRU8sSUFBQSxlQUFlLENBQUMsR0FBZSxFQUFBO1FBQ25DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRTtBQUNwRCxZQUFBLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLENBQUM7QUFDbkMsWUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztBQUNoQyxTQUFBO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUU7QUFDekQsWUFBQSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDO0FBQ2pDLFlBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7QUFDaEMsU0FBQTtBQUFNLGFBQUE7QUFDSCxZQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekIsU0FBQTtLQUNKO0FBRU8sSUFBQSxXQUFXLENBQUMsR0FBZSxFQUFBO0FBQy9CLFFBQUEsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDakMsT0FBTztBQUNILFlBQUEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQy9DLFlBQUEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSztTQUN6QixDQUFBO0tBQ0o7QUFFTyxJQUFBLGVBQWUsQ0FBQyxHQUFlLEVBQUE7QUFDbkMsUUFBQSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekQsT0FBTztBQUNWLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3BCLE9BQU87QUFDVixTQUFBO1FBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDOztBQUU5QyxRQUFBLE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QixPQUFPO0FBQ1YsU0FBQTtBQUFNLGFBQUE7WUFDSCxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUU7QUFDZixnQkFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUMxQixhQUFBO0FBQU0saUJBQUE7QUFDSCxnQkFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUMxQixhQUFBO0FBQ0osU0FBQTtRQUNELElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNiLE9BQU87QUFDVixTQUFBO1FBQ0QsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDMUMsUUFBQSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksRUFBRTtBQUNQLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQTtBQUNsQyxTQUFBO0FBQ0QsUUFBQSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxRQUFRLEVBQUU7QUFDdEMsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNyRSxZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3ZHLFlBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7QUFDOUIsWUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ25CLFNBQUE7QUFDRCxRQUFBLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLE1BQU0sRUFBRTtBQUNwQyxZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQztZQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0FBQ3hFLFlBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDMUcsWUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztBQUM5QixZQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQztZQUM1QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbkIsU0FBQTtLQUNKO0FBRU8sSUFBQSxhQUFhLENBQUMsR0FBZSxFQUFBO0FBQ2pDLFFBQUEsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQztBQUNqQyxRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0tBQzVCO0lBR08sV0FBVyxDQUFDLEVBQVksRUFBRSxJQUFxQixFQUFBO1FBQ25ELElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDekQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JMLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUNULGFBQUE7QUFDSixTQUFBO0FBQ0QsUUFBQSxPQUFPLENBQUMsQ0FBQztLQUNaO0FBR0Q7O0FBRUc7SUFDSyxRQUFRLEdBQUE7UUFDWixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDdkIsUUFBZ0IsSUFBSSxDQUFDLFlBQVk7OztBQUdqQyxRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMs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LENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRixTQUFBO1FBQ0QsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFO0FBQ3JCLFlBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvRCxTQUFBO1FBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFO0FBQ3BCLFlBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RELFNBQUE7UUFDRCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDYixJQUFJLFVBQVUsR0FBRyxNQUFNLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFFBQUEsSUFBSSxTQUFTLENBQUMsU0FBUyxLQUFLLGFBQWEsRUFBRTs7WUFFdkMsVUFBVSxJQUFJLFNBQVMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7O0FBRzVDLFNBQUE7QUFDRCxRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxRCxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFlBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztBQUN2RCxZQUFBLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzNCLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFF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
16871
+ //# sourceMappingURL=index.js.map