@bizdoc/core 2.1.2 → 2.1.3

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.
Files changed (113) hide show
  1. package/esm2022/lib/admin/architecture/designer.component.mjs +1 -1
  2. package/esm2022/lib/admin/architecture/icon-picker.component.mjs +2 -3
  3. package/esm2022/lib/admin/core/color-picker.input.mjs +2 -3
  4. package/esm2022/lib/admin/diff/configuration-diff.component.mjs +42 -38
  5. package/esm2022/lib/admin/document-trace/document-trace.component.mjs +30 -28
  6. package/esm2022/lib/admin/document-trace/trace-element.component.mjs +13 -11
  7. package/esm2022/lib/admin/form/designer/properties.component.mjs +5 -7
  8. package/esm2022/lib/admin/form/designer/section.component.mjs +5 -7
  9. package/esm2022/lib/admin/form/designer/settings.component.mjs +5 -7
  10. package/esm2022/lib/admin/form/form.resolve.service.mjs +3 -2
  11. package/esm2022/lib/admin/form/workflow/workflow.component.mjs +4 -4
  12. package/esm2022/lib/admin/indices/manage-cube-index.component.mjs +3 -4
  13. package/esm2022/lib/admin/patterns/patterns.component.mjs +7 -5
  14. package/esm2022/lib/admin/permissions/permissions.component.mjs +7 -5
  15. package/esm2022/lib/admin/positions/positions.component.mjs +57 -54
  16. package/esm2022/lib/browse/browse-items.component.mjs +57 -43
  17. package/esm2022/lib/browse/browse.pane.component.mjs +3 -3
  18. package/esm2022/lib/browse/expanded-item/expanded-item.component.mjs +25 -24
  19. package/esm2022/lib/chat/chat-info.mjs +2 -2
  20. package/esm2022/lib/chat/contacts.component.mjs +7 -5
  21. package/esm2022/lib/chat/conversation.component.mjs +27 -22
  22. package/esm2022/lib/compose/action/action-picker.component.mjs +9 -7
  23. package/esm2022/lib/compose/action/action.base.mjs +4 -3
  24. package/esm2022/lib/compose/action/moveto-action.component.mjs +1 -1
  25. package/esm2022/lib/compose/can-deactivate-changes.service.mjs +2 -2
  26. package/esm2022/lib/compose/comments/comment.component.mjs +9 -8
  27. package/esm2022/lib/compose/comments/comments.component.mjs +15 -13
  28. package/esm2022/lib/compose/comments/quick-comment.component.exp.mjs +10 -8
  29. package/esm2022/lib/compose/compose-resolve.service.mjs +10 -5
  30. package/esm2022/lib/compose/compose.pane.component.mjs +3 -3
  31. package/esm2022/lib/compose/copy/copy.dialog.mjs +2 -3
  32. package/esm2022/lib/compose/document.mobile.component.mjs +3 -2
  33. package/esm2022/lib/compose/document.pane.component.mjs +3 -2
  34. package/esm2022/lib/compose/form-selector/form-selector.sheet.mjs +10 -6
  35. package/esm2022/lib/compose/tag/tags.component.mjs +3 -5
  36. package/esm2022/lib/compose/trace/trace.component.mjs +4 -3
  37. package/esm2022/lib/core/avatar/avatar.component.mjs +2 -2
  38. package/esm2022/lib/core/component-factory-resolver.mjs +6 -4
  39. package/esm2022/lib/core/guide/guide.component.mjs +17 -18
  40. package/esm2022/lib/core/http.interceptor.mjs +9 -6
  41. package/esm2022/lib/core/identity/identity.component.mjs +2 -2
  42. package/esm2022/lib/core/info/location-info.component.mjs +2 -3
  43. package/esm2022/lib/core/inputs/combination-picker-body.mjs +9 -8
  44. package/esm2022/lib/core/inputs/combination-picker.mjs +1 -1
  45. package/esm2022/lib/core/inputs/combination-pool.mjs +6 -6
  46. package/esm2022/lib/core/inputs/file.input.mjs +28 -28
  47. package/esm2022/lib/core/mailbox.service.mjs +69 -63
  48. package/esm2022/lib/core/slots/router.service.mjs +4 -2
  49. package/esm2022/lib/core/slots/slots.component.mjs +13 -13
  50. package/esm2022/lib/core/tagging/edit-input.component.mjs +9 -12
  51. package/esm2022/lib/core/tagging/tagging.directive.mjs +5 -6
  52. package/esm2022/lib/core/tagging/tagging.pipe.mjs +2 -2
  53. package/esm2022/lib/core/translate.service.mjs +3 -3
  54. package/esm2022/lib/cube/accum/accum.component.mjs +10 -8
  55. package/esm2022/lib/cube/chart/chart.component.mjs +10 -8
  56. package/esm2022/lib/cube/cube.service.mjs +81 -73
  57. package/esm2022/lib/cube/explore/explore-items.component.mjs +38 -34
  58. package/esm2022/lib/cube/explore/item-resolver.service.mjs +13 -15
  59. package/esm2022/lib/cube/grid/grid.component.mjs +24 -23
  60. package/esm2022/lib/cube/grid/spreadsheet.component.mjs +25 -20
  61. package/esm2022/lib/cube/matrix/matrix.base.mjs +6 -6
  62. package/esm2022/lib/cube/matrix/popup.component.mjs +7 -4
  63. package/esm2022/lib/cube/matrix/table.component.mjs +24 -20
  64. package/esm2022/lib/cube/parallel/parallel.component.mjs +12 -10
  65. package/esm2022/lib/cube/pivot/pivot.component.mjs +1 -1
  66. package/esm2022/lib/cube/sum/sum.component.mjs +15 -16
  67. package/esm2022/lib/dashboard/cube/compare.widget.mjs +5 -4
  68. package/esm2022/lib/dashboard/cube/documents.widget.mjs +10 -8
  69. package/esm2022/lib/dashboard/recents/recents.widget.mjs +9 -7
  70. package/esm2022/lib/dashboard/score/compare-groups.widget.mjs +3 -2
  71. package/esm2022/lib/desktop.module.mjs +4 -4
  72. package/esm2022/lib/home/home.desktop.component.mjs +16 -14
  73. package/esm2022/lib/home/home.mobile.component.mjs +2 -2
  74. package/esm2022/lib/home/notifications/notifications.component.mjs +2 -2
  75. package/esm2022/lib/home/tools.component.mjs +2 -2
  76. package/esm2022/lib/impersonate/impersonate.component.mjs +10 -9
  77. package/esm2022/lib/mobile.module.mjs +4 -4
  78. package/esm2022/lib/notifications/notifications-table.component.mjs +2 -2
  79. package/esm2022/lib/notifications/notifications.component-base.mjs +2 -2
  80. package/esm2022/lib/notifications/types/cube-anomaly.notification.mjs +2 -2
  81. package/esm2022/lib/notifications/types/liked.notification.mjs +3 -2
  82. package/esm2022/lib/notifications/types/notification-base.mjs +2 -2
  83. package/esm2022/lib/options/options.component.mjs +5 -8
  84. package/esm2022/lib/options/options.service.mjs +7 -5
  85. package/esm2022/lib/reports/cube/usage.component.mjs +3 -2
  86. package/esm2022/lib/routes.desktop.mjs +3 -3
  87. package/esm2022/lib/routes.mobile.mjs +17 -9
  88. package/esm2022/lib/scheduler/schedule.component.mjs +18 -17
  89. package/esm2022/lib/search/search.service.mjs +2 -2
  90. package/esm2022/lib/views/cube/cube-base.mjs +3 -3
  91. package/esm2022/lib/views/cube/explore.component.mjs +13 -11
  92. package/esm2022/lib/views/timeline/timeline.component.exp.mjs +20 -8
  93. package/esm2022/public-api.mjs +2 -2
  94. package/fesm2022/bizdoc-core.mjs +906 -784
  95. package/fesm2022/bizdoc-core.mjs.map +1 -1
  96. package/lib/admin/indices/manage-cube-index.component.d.ts +1 -1
  97. package/lib/admin/positions/positions.component.d.ts +1 -3
  98. package/lib/browse/browse-items.component.d.ts +1 -1
  99. package/lib/compose/can-deactivate-changes.service.d.ts +3 -3
  100. package/lib/compose/compose-resolve.service.d.ts +3 -3
  101. package/lib/compose/document.mobile.component.d.ts +1 -1
  102. package/lib/compose/document.pane.component.d.ts +1 -1
  103. package/lib/core/component-factory-resolver.d.ts +3 -1
  104. package/lib/core/mailbox.service.d.ts +2 -2
  105. package/lib/core/tagging/tagging.directive.d.ts +1 -1
  106. package/lib/cube/explore/item-resolver.service.d.ts +8 -9
  107. package/lib/cube/pivot/pivot.component.d.ts +1 -2
  108. package/lib/dashboard/cube/compare.widget.d.ts +1 -1
  109. package/lib/dashboard/score/compare-groups.widget.d.ts +1 -1
  110. package/lib/notifications/types/liked.notification.d.ts +1 -1
  111. package/lib/reports/cube/usage.component.d.ts +1 -1
  112. package/package.json +2 -2
  113. package/public-api.d.ts +1 -1
@@ -1,5 +1,5 @@
1
1
  import { Component, EventEmitter, Inject, Output, ViewChild, ViewContainerRef, HostListener } from '@angular/core';
2
- import { isObservable, Subject } from 'rxjs';
2
+ import { firstValueFrom, isObservable, Subject } from 'rxjs';
3
3
  import { takeUntil, tap } from 'rxjs/operators';
4
4
  import { isArray, isBoolean, isDate, isPromise, isString } from '../functions';
5
5
  import { PANES_DATA, PaneRef, QueryParamNavigation, ParamNavigation, NavigationStart, NavigationClose, NavigationEnd, NavigationFocus, PATH_CHAR, QUERY_CHAR, ARG_CHAR, PANE_CHAR, CollapseNavigation, BackNavigation, NavigationExpand, NavigationResize, } from './pane-ref';
@@ -100,8 +100,8 @@ class SlotsComponent {
100
100
  parent = relativeTo || this.panes[this.selectedIndex];
101
101
  let parentpath = parent.path;
102
102
  while (path.startsWith('../')) {
103
- parentpath = parentpath.substr(0, parentpath.lastIndexOf('/'));
104
- path = path.substr(3);
103
+ parentpath = parentpath.substring(0, parentpath.lastIndexOf('/'));
104
+ path = path.substring(3);
105
105
  }
106
106
  path = parentpath + '/' + path;
107
107
  }
@@ -661,7 +661,7 @@ class SlotsComponent {
661
661
  if (isPromise(value))
662
662
  await value.then(r => data[key] = r);
663
663
  else if (isObservable(value))
664
- await value.pipe(tap(r => data[key] = r)).toPromise();
664
+ await firstValueFrom(value.pipe(tap(r => data[key] = r)));
665
665
  else
666
666
  data[key] = value;
667
667
  }
@@ -1004,7 +1004,7 @@ class SlotsComponent {
1004
1004
  else if (isPromise(ok))
1005
1005
  return ok;
1006
1006
  else
1007
- return ok.toPromise();
1007
+ return firstValueFrom(ok);
1008
1008
  }
1009
1009
  scrollTo(index) {
1010
1010
  const item = this._children.item(index);
@@ -1032,14 +1032,14 @@ class SlotsComponent {
1032
1032
  el.focus();
1033
1033
  }
1034
1034
  onPaneResize(pane, event) {
1035
- const el = event.srcElement.previousElementSibling;
1035
+ const el = event.target.previousElementSibling;
1036
1036
  const // remember mouse down info
1037
1037
  width = el.clientWidth, d = this._rtl ? -1 : 1;
1038
- event.srcElement.classList.add('resizing');
1038
+ event.target.classList.add('resizing');
1039
1039
  this.dragging = true;
1040
1040
  document.onmousemove = onMouseMove;
1041
1041
  document.onmouseup = () => {
1042
- event.srcElement.classList.remove('resizing');
1042
+ event.target.classList.remove('resizing');
1043
1043
  document.onmousemove = document.onmouseup = null;
1044
1044
  this.dragging = false;
1045
1045
  };
@@ -1051,15 +1051,15 @@ class SlotsComponent {
1051
1051
  }
1052
1052
  }
1053
1053
  onTabResize(event) {
1054
- const el = event.srcElement.nextElementSibling;
1054
+ const el = event.target.nextElementSibling;
1055
1055
  const me = this,
1056
1056
  // remember mouse down info
1057
1057
  width = el.clientWidth, d = this._rtl ? 1 : -1;
1058
- event.srcElement.classList.add('resizing');
1058
+ event.target.classList.add('resizing');
1059
1059
  this.dragging = true;
1060
1060
  document.onmousemove = onMouseMove;
1061
1061
  document.onmouseup = () => {
1062
- event.srcElement.classList.remove('resizing');
1062
+ event.target.classList.remove('resizing');
1063
1063
  document.onmousemove = document.onmouseup = null;
1064
1064
  this.dragging = false;
1065
1065
  me.enableNavigationArrows();
@@ -1132,7 +1132,7 @@ function prepareRoutes(routes, treePath) {
1132
1132
  fullPath,
1133
1133
  regEx: new RegExp('^' + fullPath.
1134
1134
  replace('/', '\\/').
1135
- replace(PANE_PARAMS_REGEX, e => `(?<${e.substr(1)}>[\\w@\\-]*)`))
1135
+ replace(PANE_PARAMS_REGEX, e => `(?<${e.substring(1)}>[\\w@\\-]*)`))
1136
1136
  });
1137
1137
  if (route.children) {
1138
1138
  let children = prepareRoutes(route.children, fullPath);
@@ -1144,4 +1144,4 @@ function prepareRoutes(routes, treePath) {
1144
1144
  }
1145
1145
  return routes;
1146
1146
  }
1147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL3Nsb3RzL3Nsb3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9zbG90cy9zbG90cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUErQixNQUFNLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUUvSyxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUE0QixvQkFBb0IsRUFBRSxlQUFlLEVBQWtCLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFZLGdCQUFnQixHQUFHLE1BQU0sWUFBWSxDQUFDO0FBR25VLE9BQU8sRUFBRSxhQUFhLEVBQWlCLE1BQU0sc0JBQXNCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hKLE9BQU8sRUFBZ0QsY0FBYyxF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QUN6QixNQUFNLEVBQUUsS0FBSztpQkFDZCxDQUFDLENBQUM7U0FDTjtLQUNGO0lBQ0QsT0FBTyxNQUF5QixDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENka0RyYWdEcm9wIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgaXNBcnJheSwgaXNCb29sZWFuLCBpc0RhdGUsIGlzUHJvbWlzZSwgaXNTdHJpbmcgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBQQU5FU19EQVRBLCBQYW5lUmVmLCBQYW5lT3B0aW9ucywgUGFuZUNvbW1hbmQsIFF1ZXJ5UGFyYW1OYXZpZ2F0aW9uLCBQYXJhbU5hdmlnYXRpb24sIE5hdmlnYXRpb25Nb2RlLCBOYXZpZ2F0aW9uU3RhcnQsIE5hdmlnYXRpb25DbG9zZSwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvbkZvY3VzLCBQQVRIX0NIQVIsIFFVRVJZX0NIQVIsIEFSR19DSEFSLCBQQU5FX0NIQVIsIENvbGxhcHNlTmF2aWdhdGlvbiwgQmFja05hdmlnYXRpb24sIE5hdmlnYXRpb25FeHBhbmQsIFBhbmVNb2RlLCBOYXZpZ2F0aW9uUmVzaXplLCB9IGZyb20gJy4vcGFuZS1yZWYnO1xyXG5pbXBvcnQgeyBQYW5lc1JvdXRlciB9IGZyb20gJy4vcm91dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3Nlc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENka1Njcm9sbGFibGUsIENvbXBvbmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IFdpbmRvd1RpdGxlU2VydmljZSB9IGZyb20gJy4uL3dpbmRvdy10aXRsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgcGFuZXNBbmltYXRpb24sIHBhbmVBbmltYXRpb24sIHBhbmVzVGl0bGVBbmltYXRpb24sIHBhcmFtQW5pbWF0aW9uLCBxdWVyeUFuaW1hdGlvbiwgdGFiQW5pbWF0aW9uLCB0YWJzQW5pbWF0aW9uIH0gZnJvbSAnLi4vYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IFBhbmVSZXNvbHZlLCBQYW5lUm91dGUsIFBhcmFtTWFwLCBDYW5EaXNtaXNzLCBERUZBVUxUX1BPTElDWSwgT3BlblBvbGljeSB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBHdWlkZVNlcnZpY2UgfSBmcm9tICcuLi9ndWlkZS9ndWlkZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJpcHBsZUNvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMobmFtZT86IHN0cmluZyk7XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBERUZBVUxUX1JPVVRFID0gWydkYXNoYm9hcmQnXTtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtcGFuZXMtb3V0bGV0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2xvdHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Nsb3RzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW3BhbmVzQW5pbWF0aW9uLFxyXG4gICAgcGFuZXNUaXRsZUFuaW1hdGlvbixcclxuICAgIHBhbmVBbmltYXRpb24sXHJcbiAgICBwYXJhbUFuaW1hdGlvbixcclxuICAgIHF1ZXJ5QW5pbWF0aW9uLFxyXG4gICAgdGFic0FuaW1hdGlvbixcclxuICAgIHRhYkFuaW1hdGlvblxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNsb3RzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBkaWFsb2dDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQFZpZXdDaGlsZCgncGFubmluZycsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pIF9wYW5lc0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcclxuICBAVmlld0NoaWxkKCd0YWJpbmcnKSBfdGFic0VsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChDZGtTY3JvbGxhYmxlLCB7IHN0YXRpYzogdHJ1ZSB9KSBfc2Nyb2xsYWJsZTogQ2RrU2Nyb2xsYWJsZTtcclxuICB0aXRsZUFuaW1hdGlvbiA9IDA7XHJcbiAgZ3JvdXA6IHN0cmluZztcclxuICBzd2FwPzogbnVtYmVyO1xyXG4gIHN3YXBUYWI/OiBudW1iZXI7XHJcbiAgcHJldkdyb3VwPzogc3RyaW5nO1xyXG5cclxuICByZWFkb25seSBwYW5lczogUGFuZVJlZjxhbnk+W10gPSBbXTtcclxuICByZWFkb25seSB0YWJzOiBQYW5lUmVmPGFueT5bXSA9IFtdO1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkVGFiSW5kZXggPSAtMTtcclxuICBkaWFsb2cgPSBmYWxzZTtcclxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkVGFiSW5kZXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUYWJJbmRleDtcclxuICB9XHJcbiAgcHVibGljIHNldCBzZWxlY3RlZFRhYkluZGV4KHZhbHVlKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFRhYkluZGV4ID0gdmFsdWU7XHJcbiAgICB0aGlzLl9zZXRUYWJBbmltYXRpb24oKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfc2V0VGFiQW5pbWF0aW9uKCkge1xyXG4gICAgdGhpcy50YWJzQW5pbWF0aW9uID0ge1xyXG4gICAgICB2YWx1ZTogdGhpcy5zZWxlY3RlZFRhYkluZGV4LFxyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBzdGFydFdpZHRoOiB0aGlzLl90YWJzRWxlbWVudCA/IHRoaXMuX3RhYnNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggOiAwXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIHNlbGVjdGVkSW5kZXggPSAtMTtcclxuICBuZXh0OiBib29sZWFuO1xyXG4gIHByZXY6IGJvb2xlYW47XHJcbiAgZHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0YWJzQW5pbWF0aW9uOiB7XHJcbiAgICB2YWx1ZTogbnVtYmVyLFxyXG4gICAgcGFyYW1zOiB7XHJcbiAgICAgIHN0YXJ0V2lkdGg6IG51bWJlclxyXG4gICAgfVxyXG4gIH07XHJcbiAgcmVhZG9ubHkgcmlwcGxlOiBSaXBwbGVDb25maWcgPSB7XHJcbiAgICBjb2xvcjogdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKSxcclxuICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgcmFkaXVzOiAyNVxyXG4gIH1cclxuICBhY2NlbnQ6IHN0cmluZyA9IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KCk7XHJcbiAgcHJpdmF0ZSBfbmF2aWdhdGlvbkluUHJvY2VzczogYm9vbGVhbjtcclxuICBwcml2YXRlIF9yZXBvc2l0b3J5OiBFeHRlbmRlZFJvdXRlW107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVuZGluZyA9IFtdIGFzIHN0cmluZ1tdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0bCA9IHRoaXMuX3Nlc3Npb24uaW52ZXJzZTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNpemluZyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KFBBTkVTX0RBVEEpIGRhdGE6IEV4dGVuZGVkUm91dGVbXSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBQYW5lc1JvdXRlcixcclxuICAgIHByaXZhdGUgX3RpdGxlOiBXaW5kb3dUaXRsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9ndWlkZTogR3VpZGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICBfc2Vzc2lvbi50aGVtZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiB0aGlzLmFjY2VudCA9IF9zZXNzaW9uLmdldEFjY2VudCgpKTtcclxuICAgIF9yb3V0ZXIuX2NvbW0kLlxyXG4gICAgICBzdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChlKSB7XHJcbiAgICAgICAgICBjYXNlICdjb2xsYXBzZSc6XHJcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2UoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB0aGlzLl9yZXBvc2l0b3J5ID0gcHJlcGFyZVJvdXRlcyhkYXRhKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcm91dGVyLl9uYXZpZ2F0ZSQuXHJcbiAgICAgIHN1YnNjcmliZShhc3luYyBuID0+IHtcclxuICAgICAgICBjb25zdCB7IGNvbW1hbmRzLCBjb21wb25lbnQsIHBhdGhNb2RlLCByZWxhdGl2ZVRvLCBpbmplY3RvciB9ID0gbjtcclxuICAgICAgICBsZXQge1xyXG4gICAgICAgICAgaWNvbixcclxuICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICBoZWxwLFxyXG4gICAgICAgICAgcG9saWN5LFxyXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICBzdGF0ZVxyXG4gICAgICAgIH0gPSBuO1xyXG4gICAgICAgIGxldFxyXG4gICAgICAgICAgcXVlcnlTdHJpbmc6IHN0cmluZyxcclxuICAgICAgICAgIHBhcmFtczogUGFyYW1NYXAsXHJcbiAgICAgICAgICBwYXJlbnQ6IFBhbmVSZWYsXHJcbiAgICAgICAgICBwYXRoOiBzdHJpbmcsXHJcbiAgICAgICAgICByb3V0ZTogRXh0ZW5kZWRSb3V0ZTtcclxuXHJcbiAgICAgICAgaWYgKGNvbW1hbmRzICYmIGNvbW1hbmRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgcGF0aCA9IG4uY29tbWFuZHMuam9pbignLycpO1xyXG4gICAgICAgICAgaWYgKHBhdGguaW5kZXhPZihRVUVSWV9DSEFSKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlZ3MgPSBwYXRoLnNwbGl0KFFVRVJZX0NIQVIpO1xyXG4gICAgICAgICAgICBxdWVyeVN0cmluZyA9IHNlZ3NbMV07XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyB8fCAnJyk7XHJcbiAgICAgICAgICAgIHBhdGggPSBzZWdzWzBdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gbi5xdWVyeVBhcmFtcyB8fCB7fTtcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSB0aGlzLl9xdWVyeVN0cmluZyhxdWVyeVBhcmFtcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocGF0aE1vZGUgPT09ICdyZWxhdGl2ZScgfHwgcGF0aC5zdGFydHNXaXRoKCcuLi8nKSkge1xyXG4gICAgICAgICAgICBwYXJlbnQgPSByZWxhdGl2ZVRvIHx8IHRoaXMucGFuZXNbdGhpcy5zZWxlY3RlZEluZGV4XTtcclxuICAgICAgICAgICAgbGV0IHBhcmVudHBhdGggPSBwYXJlbnQucGF0aDtcclxuICAgICAgICAgICAgd2hpbGUgKHBhdGguc3RhcnRzV2l0aCgnLi4vJykpIHtcclxuICAgICAgICAgICAgICBwYXJlbnRwYXRoID0gcGFyZW50cGF0aC5zdWJzdHIoMCwgcGFyZW50cGF0aC5sYXN0SW5kZXhPZignLycpKTtcclxuICAgICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHIoMyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcGF0aCA9IHBhcmVudHBhdGggKyAnLycgKyBwYXRoO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcm91dGUgPSB0aGlzLl9tYXRjaChwYXRoKTtcclxuXHJcbiAgICAgICAgICBpZiAoIXJvdXRlKVxyXG4gICAgICAgICAgICB0aHJvdyBgbm8gbWF0Y2ggJHtwYXRofWA7XHJcbiAgICAgICAgICBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocm91dGUsIHBhdGgpO1xyXG4gICAgICAgICAgaWYgKCFwb2xpY3kpIHBvbGljeSA9IHJvdXRlLnBvbGljeSB8fCBERUZBVUxUX1BPTElDWTtcclxuICAgICAgICAgIGVsc2UgaWYgKHJvdXRlLnBvbGljeSkgcG9saWN5IHw9IHJvdXRlLnBvbGljeTtcclxuICAgICAgICAgIGlmICghaWNvbikgaWNvbiA9IHJvdXRlLmljb247XHJcbiAgICAgICAgICBpZiAoIWhlbHApIGhlbHAgPSByb3V0ZS5oZWxwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmICghcG9saWN5KSBwb2xpY3kgPSBERUZBVUxUX1BPTElDWTtcclxuICAgICAgICAgIGlmICghcXVlcnlQYXJhbXMpIHF1ZXJ5UGFyYW1zID0ge307XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuQ2xlYXIpID09IE9wZW5Qb2xpY3kuQ2xlYXIpIHtcclxuICAgICAgICAgIHRoaXMuX2NsZWFyUGVuZGluZygpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5fY2xlYXJUYWJzKCk7XHJcbiAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSAhPSBPcGVuUG9saWN5LlRhYilcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2xlYXJQYW5lcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29tbWFuZHMpIHtcclxuICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5UYWIpID09IE9wZW5Qb2xpY3kuVGFiKVxyXG4gICAgICAgICAgICB3aGlsZSAoaSA8IHRoaXMudGFicy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBsZXQgdGFiID0gdGhpcy50YWJzW2ldO1xyXG4gICAgICAgICAgICAgIGlmIChwYXRoID09PSB0YWIucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSB0YWIucXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRvZ2dsZSkgPT0gT3BlblBvbGljeS5Ub2dnbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlICYmIHRhYi5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXModGFiLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHRhYi5yb3V0ZSA9PT0gcm91dGUpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25hdlBhcmFtcyhwYXRoLCB0YWIsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSB0YWIuZ3JvdXA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB3aGlsZSAoaSA8IHRoaXMucGFuZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2ldO1xyXG4gICAgICAgICAgICAgIGlmIChwYXRoID09PSBwYW5lLnBhdGgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZyA9PT0gcGFuZS5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVG9nZ2xlKSA9PSBPcGVuUG9saWN5LlRvZ2dsZSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUF0KGkpO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSAmJiBwYW5lLl9kYXRhJC5uZXh0KHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUbyhpKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXMocGFuZSwgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUbyhpKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAocGFuZS5yb3V0ZSA9PT0gcm91dGUpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25hdlBhcmFtcyhwYXRoLCBwYW5lLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29tbWFuZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3N0YXRlKHJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIpXHJcbiAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0VGFiKHJvdXRlLmNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgIGhlbHAsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeSxcclxuICAgICAgICAgICAgICAgICAgaW5qZWN0b3JcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0UGFuZShyb3V0ZS5jb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgICByb3V0ZSxcclxuICAgICAgICAgICAgICAgICAgaWNvbixcclxuICAgICAgICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgIGhlbHAsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeSxcclxuICAgICAgICAgICAgICAgICAgaW5qZWN0b3JcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByb3V0ZSAmJlxyXG4gICAgICAgICAgICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhbmUgPSAocG9saWN5ICYgT3BlblBvbGljeS5UYWIpID09IE9wZW5Qb2xpY3kuVGFiID9cclxuICAgICAgICAgICAgICB0aGlzLnRhYnNbdGhpcy5zZWxlY3RlZFRhYkluZGV4XSA6IHRoaXMucGFuZXNbdGhpcy5zZWxlY3RlZEluZGV4XTtcclxuICAgICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXMocGFuZSwgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5UYWIpICE9IE9wZW5Qb2xpY3kuVGFiKSB0aGlzLnNlbGVjdCh0aGlzLnNlbGVjdGVkSW5kZXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5UYWIpID09IE9wZW5Qb2xpY3kuVGFiKSB7XHJcbiAgICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5EZWZlcikgPT0gT3BlblBvbGljeS5EZWZlcilcclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jbGVhclRhYnMoKTtcclxuICAgICAgICAgICAgdGhpcy5faW5zZXJ0VGFiKGNvbXBvbmVudCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGljb24sIHRpdGxlLCBoZWxwLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50LFxyXG4gICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgcm91dGUsXHJcbiAgICAgICAgICAgICAgICBncm91cCxcclxuICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgcG9saWN5LFxyXG4gICAgICAgICAgICAgICAgaW5qZWN0b3JcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgdGhpcy5faW5zZXJ0UGFuZShjb21wb25lbnQsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgICAgICAgICBpY29uLCB0aXRsZSwgaGVscCxcclxuICAgICAgICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICByb3V0ZSxcclxuICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgcG9saWN5LFxyXG4gICAgICAgICAgICAgIGluamVjdG9yXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB3aW5kb3cucmVtb3ZlQWxsTGlzdGVuZXJzKCdwb3BzdGF0ZScpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgZSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9uYXZpZ2F0aW9uSW5Qcm9jZXNzKSB7XHJcbiAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkluUHJvY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZS5zdGF0ZSAmJiBlLnN0YXRlLmJpemRvYykge1xyXG4gICAgICAgIGNvbnN0IGV2dCA9IG5ldyBCYWNrTmF2aWdhdGlvbigpO1xyXG4gICAgICAgIGlmIChldnQuX3ByZXZlbnREZWZhdWx0KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgICAgICBjb25zdCBzdGF0ZSA9IGUuc3RhdGUgYXMgSGlzdG9yeVN0YXRlO1xyXG4gICAgICAgIHRoaXMuX2Rlc2VyaWFsaXplKGxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygxKSwgc3RhdGUpO1xyXG4gICAgICAgIHRoaXMuc3dhcCA9IHN0YXRlLnN3YXA7XHJcbiAgICAgICAgdGhpcy5zd2FwVGFiID0gc3RhdGUuc3dhcFRhYjtcclxuICAgICAgICB0aGlzLnByZXZHcm91cCA9IHN0YXRlLnByZXZHcm91cDtcclxuICAgICAgICB0aGlzLmdyb3VwID0gc3RhdGUuZ3JvdXA7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gc3RhdGUuc2VsZWN0ZWRUYWJJbmRleDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZGVzZXJpYWxpemUobG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lLmxlbmd0aCA+IDEpXHJcbiAgICAgIHRoaXMuX2Rlc2VyaWFsaXplKGxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygxKSxcclxuICAgICAgICBoaXN0b3J5LnN0YXRlICYmIGhpc3Rvcnkuc3RhdGUuYml6ZG9jID8gaGlzdG9yeS5zdGF0ZSA6IHVuZGVmaW5lZCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuX3JvdXRlci5fbmF2aWdhdGUkLm5leHQoe1xyXG4gICAgICAgIGNvbW1hbmRzOiBERUZBVUxUX1JPVVRFLFxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuX3Jlc2l6aW5nLnBpcGUoZGVib3VuY2VUaW1lKDE1MCkpLnN1YnNjcmliZSh0aGlzLl9yZXNpemUuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX2Rlc2VyaWFsaXplKHVybDogc3RyaW5nLCBzdGF0ZT86IEhpc3RvcnlTdGF0ZSkge1xyXG5cclxuICAgIGNvbnN0IHNlY3Rpb25zID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybCkuc3BsaXQoUEFORV9DSEFSKSxcclxuICAgICAgcGFuZXMgPSBkZXNlcmlhbGl6ZShzZWN0aW9uc1swXSksXHJcbiAgICAgIHRhYnMgPSBzZWN0aW9ucy5sZW5ndGggPiAxID8gZGVzZXJpYWxpemUoc2VjdGlvbnNbMV0pIDogW107XHJcblxyXG4gICAgZnVuY3Rpb24gZGVzZXJpYWxpemUocGF0aDogc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybiBwYXRoLlxyXG4gICAgICAgIHNwbGl0KFBBVEhfQ0hBUikubWFwKHMgPT4ge1xyXG4gICAgICAgICAgY29uc3QgW3BhdGgsIHF1ZXJ5U3RyaW5nXSA9IHMuc3BsaXQoUVVFUllfQ0hBUik7XHJcbiAgICAgICAgICByZXR1cm4geyBwYXRoLCBxdWVyeVN0cmluZyB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHBhbmUgPSBwYW5lc1tpXTtcclxuICAgICAgYXdhaXQgdGhpcy5fbmF2aWdhdGVQYW5lKGksIHBhbmUucGF0aCwgcGFuZS5xdWVyeVN0cmluZywgc3RhdGUgPyBzdGF0ZS5wYW5lc1tpXSA6IG51bGwpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoID4gcGFuZXMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBpID0gMDtcclxuICAgICAgd2hpbGUgKGkgPCB0aGlzLnBhbmVzLmxlbmd0aCkge1xyXG4gICAgICAgIGxldCBwYW5lID0gdGhpcy5wYW5lc1tpXTtcclxuICAgICAgICBpZiAocGFuZXMubGVuZ3RoIC0gMSA8IGkgfHwgcGFuZS5wYXRoICE9PSBwYW5lc1tpXS5wYXRoKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4ID09PSBpKVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpIC0gMTtcclxuICAgICAgICAgIHRoaXMucGFuZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUocGFuZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA8IDApXHJcbiAgICAgIHRoaXMuc2VsZWN0KDApO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0YWIgPSB0YWJzW2ldO1xyXG4gICAgICBhd2FpdCB0aGlzLl9uYXZpZ2F0ZVRhYihpLCB0YWIucGF0aCwgdGFiLnF1ZXJ5U3RyaW5nLCBzdGF0ZSA/IHN0YXRlLnRhYnNbaV0gOiBudWxsKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoID4gdGFicy5sZW5ndGgpIHtcclxuICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICB3aGlsZSAoaSA8IHRoaXMudGFicy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgdGFiID0gdGhpcy50YWJzW2ldO1xyXG4gICAgICAgIGlmICh0YWJzLmxlbmd0aCAtIDEgPCBpIHx8IHRhYi5wYXRoICE9PSB0YWJzW2ldLnBhdGgpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gaSAtIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRhYnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUodGFiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaSsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCAmJiB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPCAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuID0gdGhpcy5wYW5lcy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xyXG4gICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaV07XHJcbiAgICAgIGlmIChwYW5lLmV4cGFuZGVkICE9PSAobiA9PT0gMSkpIHtcclxuICAgICAgICBjb25zdCBldnQgPSBuZXcgTmF2aWdhdGlvbkV4cGFuZChwYW5lLl9leHBhbmRlZCA9IG4gPT09IDEsIHBhbmUpO1xyXG4gICAgICAgIHBhbmUuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBpbmRleFxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICogQHBhcmFtIHF1ZXJ5U3RyaW5nXHJcbiAgICogQHBhcmFtIHN0YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2aWdhdGVQYW5lKGluZGV4OiBudW1iZXIsIHBhdGg6IHN0cmluZywgcXVlcnlTdHJpbmc6IHN0cmluZywgc3RhdGU/OiBhbnkpIHtcclxuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgaWYgKCFyb3V0ZSkgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcblxyXG4gICAgd2hpbGUgKGluZGV4IDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2luZGV4XTtcclxuICAgICAgaWYgKHBhdGggPT09IHBhbmUucGF0aCkge1xyXG4gICAgICAgIGlmIChxdWVyeVN0cmluZyA9PT0gcGFuZS5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChwYW5lLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fcGFyYW1zKHBhbmUucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSwgcGF0aCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHBhbmUsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocm91dGUsIHBhdGgpO1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRBbmNlc3Rvcihyb3V0ZSwgcGF0aCk7XHJcbiAgICBhd2FpdCB0aGlzLl9zdGF0ZShyb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICB0aGlzLl9pbnNlcnRQYW5lKHJvdXRlLmNvbXBvbmVudCwge1xyXG4gICAgICBwYXRoLCBwYXJlbnQsIHJvdXRlLCBkYXRhOiBzdGF0ZSwgcGFyYW1zLCBxdWVyeVBhcmFtcyxcclxuICAgICAgaWNvbjogcm91dGUuaWNvbixcclxuICAgICAgaGVscDogcm91dGUuaGVscCxcclxuICAgICAgcG9saWN5OiByb3V0ZS5wb2xpY3ksXHJcbiAgICAgIGZvY3VzOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX25hdmlnYXRlVGFiKGluZGV4OiBudW1iZXIsIHBhdGg6IHN0cmluZywgcXVlcnlTdHJpbmc6IHN0cmluZywgc3RhdGU/OiBhbnkpIHtcclxuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgaWYgKCFyb3V0ZSkgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcblxyXG4gICAgd2hpbGUgKGluZGV4IDwgdGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgdGFiID0gdGhpcy50YWJzW2luZGV4XTtcclxuICAgICAgaWYgKHBhdGggPT09IHRhYi5wYXRoKSB7XHJcbiAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSB0YWIucXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXModGFiLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0YWIucm91dGUgPT09IHJvdXRlKSB7XHJcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXModGFiLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUsIHBhdGgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX25hdlBhcmFtcyhwYXRoLCB0YWIsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocm91dGUsIHBhdGgpO1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuXHJcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9maW5kQW5jZXN0b3Iocm91dGUsIHBhdGgpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuX3N0YXRlKHJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgIHRoaXMuX2luc2VydFRhYihyb3V0ZS5jb21wb25lbnQsIHtcclxuICAgICAgaWNvbjogcm91dGUuaWNvbixcclxuICAgICAgaGVscDogcm91dGUuaGVscCxcclxuICAgICAgcG9saWN5OiByb3V0ZS5wb2xpY3kgfCBPcGVuUG9saWN5LlRhYixcclxuICAgICAgcGF0aCwgcGFyZW50LCByb3V0ZSxcclxuICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgIHBhcmFtcywgcXVlcnlQYXJhbXMsXHJcbiAgICAgIGZvY3VzOiBmYWxzZSxcclxuICAgICAgc3dhcDogZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9maW5kQW5jZXN0b3Iocm91dGU6IEV4dGVuZGVkUm91dGUsIHBhdGg6IHN0cmluZykge1xyXG4gICAgaWYgKChyb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKS5wYXJlbnQpXHJcbiAgICAgIHJldHVybiB0aGlzLnBhbmVzLmZpbmQocCA9PiAocC5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKSA9PT1cclxuICAgICAgICAocm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSkucGFyZW50ICYmXHJcbiAgICAgICAgcGF0aC5zdGFydHNXaXRoKHAucGF0aCkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX25hdlF1ZXJ5UGFyYW1zKHBhbmU6IFBhbmVSZWY8YW55PiwgcXVlcnlQYXJhbXM6IFBhcmFtTWFwLCBzdGF0ZTogUGFyYW1NYXApIHtcclxuICAgIHBhbmUuX3F1ZXJ5U3RyaW5nID0gdGhpcy5fcXVlcnlTdHJpbmcocXVlcnlQYXJhbXMpO1xyXG4gICAgc3RhdGUgJiYgcGFuZS5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICBwYW5lLl9xdWVyeVBhcmFtcyQubmV4dChxdWVyeVBhcmFtcyk7XHJcbiAgICBjb25zdCBldnQgPSBuZXcgUXVlcnlQYXJhbU5hdmlnYXRpb24ocXVlcnlQYXJhbXMsIHBhbmUpO1xyXG4gICAgcGFuZS5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICogQHBhcmFtIHBhcmFtc1xyXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xyXG4gICAqIEBwYXJhbSBzdGF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX25hdlBhcmFtcyhwYXRoOiBzdHJpbmcsIHBhbmU6IFBhbmVSZWY8YW55PiwgcGFyYW1zOiBQYXJhbU1hcCwgcXVlcnlQYXJhbXM6IFBhcmFtTWFwLCBzdGF0ZTogUGFyYW1NYXApIHtcclxuICAgIGlmIChwYW5lLnJvdXRlLmNhbkRpc21pc3MpXHJcbiAgICAgIGF3YWl0IHRoaXMuX2Rpc21pc3MocGFuZSk7XHJcblxyXG4gICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuICAgIGF3YWl0IHRoaXMuX3N0YXRlKHBhbmUucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICBwYW5lLl9kYXRhJC5uZXh0KHN0YXRlKTtcclxuICAgIHBhbmUuX3BhdGggPSBwYXRoO1xyXG4gICAgcGFuZS5fcGFyYW1zJC5uZXh0KHBhcmFtcyk7XHJcbiAgICBpZiAocXVlcnlQYXJhbXMpIHtcclxuICAgICAgcGFuZS5fcXVlcnlTdHJpbmcgPSB0aGlzLl9xdWVyeVN0cmluZyhxdWVyeVBhcmFtcyk7XHJcbiAgICAgIHBhbmUuX3F1ZXJ5UGFyYW1zJC5uZXh0KHF1ZXJ5UGFyYW1zKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBwYW5lLl9xdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgICBwYW5lLl9xdWVyeVBhcmFtcyQubmV4dCh7fSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBldnQgPSBuZXcgUGFyYW1OYXZpZ2F0aW9uKHBhcmFtcywgcGFuZSk7XHJcbiAgICBwYW5lLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcblxyXG4gICAgdGhpcy5wYW5lcy5jb25jYXQodGhpcy50YWJzKS5mb3JFYWNoKGNoaWxkID0+IHtcclxuICAgICAgaWYgKGNoaWxkLnJvdXRlICYmIChjaGlsZC5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKS5wYXJlbnQgPT09IHBhbmUucm91dGUpIHtcclxuICAgICAgICBjaGlsZC5fZGF0YSQubmV4dChPYmplY3QuYXNzaWduKGNoaWxkLmRhdGEsIHN0YXRlKSk7XHJcbiAgICAgICAgY2hpbGQuX3BhcmFtcyQubmV4dChwYXJhbXMpO1xyXG4gICAgICAgIGNoaWxkLl9wYXRoID0gcGFuZS5wYXRoICsgJy8nICsgY2hpbGQucm91dGUucGF0aDtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ID4gLTEgJiYgY2hpbGQgPT09IHRoaXMudGFic1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkVGFiSW5kZXg7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwID0gY2hpbGQuZ3JvdXA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChwYW5lLm1vZGUgPT09ICdwYW5lJykgdGhpcy50aXRsZUFuaW1hdGlvbisrO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICAvKiogKi9cclxuICBwcml2YXRlIF9zeW5jQnJvd3Nlckhpc3RvcnkoKSB7XHJcbiAgICBsZXQgcGF0aCA9IHRoaXMucGFuZXMuZmlsdGVyKHAgPT4gcC5yb3V0ZSkubWFwKHMgPT4gcy5mdWxsUGF0aCkuam9pbihQQVRIX0NIQVIpO1xyXG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgdGFicyA9IHRoaXMudGFicy5maWx0ZXIocCA9PiBwLnJvdXRlKTtcclxuICAgICAgaWYgKHRhYnMubGVuZ3RoKVxyXG4gICAgICAgIHBhdGggKz0gUEFORV9DSEFSICsgdGFicy5tYXAocyA9PiBzLmZ1bGxQYXRoKS5qb2luKFBBVEhfQ0hBUik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX2NvbnN0cnVjdEhpc3RvcnlTdGF0ZSgpO1xyXG4gICAgdGhpcy5fbmF2aWdhdGlvbkluUHJvY2VzcyA9IHRydWU7XHJcbiAgICBoaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZSwgJycsICcvJyArIHBhdGgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9uYXZpZ2F0aW9uSW5Qcm9jZXNzID0gZmFsc2UsIDIwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb25zdHJ1Y3RIaXN0b3J5U3RhdGUoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBiaXpkb2M6IHRydWUsXHJcbiAgICAgIHN0ZXA6IGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyAoaGlzdG9yeS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGUpLnN0ZXAgKyAxIDogMSxcclxuICAgICAgc2VsZWN0ZWRUYWJJbmRleDogdGhpcy5zZWxlY3RlZFRhYkluZGV4LFxyXG4gICAgICBwYW5lczogdGhpcy5wYW5lcy5tYXAocCA9PiBwLmRhdGEpLFxyXG4gICAgICB0YWJzOiB0aGlzLnRhYnMubWFwKHQgPT4gdC5kYXRhKSxcclxuICAgICAgc3dhcDogdGhpcy5zd2FwLFxyXG4gICAgICBncm91cDogdGhpcy5ncm91cCxcclxuICAgICAgc3dhcFRhYjogdGhpcy5zd2FwVGFiLFxyXG4gICAgICBwcmV2R3JvdXA6IHRoaXMucHJldkdyb3VwXHJcbiAgICB9IGFzIEhpc3RvcnlTdGF0ZTtcclxuICB9XHJcblxyXG4gIGRyb3AoZXZ0OiBDZGtEcmFnRHJvcDxzdHJpbmcsIHN0cmluZz4pIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzW2V2dC5wcmV2aW91c0luZGV4XTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKGV2dC5wcmV2aW91c0luZGV4LCAxKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKGV2dC5jdXJyZW50SW5kZXgsIDAsIHBhbmUpO1xyXG4gICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVQaW5uZWQocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICBwYW5lLnBpbm5lZCA9ICFwYW5lLnBpbm5lZDtcclxuICAgIHRoaXMucGFuZXMuZm9yRWFjaChzID0+IHtcclxuICAgICAgaWYgKHMuZGVjZW5kZW50T2YocGFuZSkpIHMucGlubmVkID0gcGFuZS5waW5uZWQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3F1ZXJ5U3RyaW5nKHF1ZXJ5UGFyYW1zOiBQYXJhbU1hcCkge1xyXG4gICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhxdWVyeVBhcmFtcyk7XHJcbiAgICBsZXQgcXVlcnlTdHJpbmc6IHN0cmluZztcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHZhbCA9IHF1ZXJ5UGFyYW1zW25hbWVzW2ldXTtcclxuXHJcbiAgICAgIGlmICh2YWwgIT09IG51bGwgJiYgdmFsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAoIXF1ZXJ5U3RyaW5nKSBxdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgICAgIGVsc2UgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZyArIEFSR19DSEFSO1xyXG5cclxuICAgICAgICBpZiAoaXNTdHJpbmcodmFsKSlcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke25hbWVzW2ldfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWwpfWA7XHJcbiAgICAgICAgZWxzZSBpZiAoaXNBcnJheSh2YWwpKVxyXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gdmFsLm1hcCh2ID0+IGAke25hbWVzW2ldfT0ke3Z9YCkuam9pbihBUkdfQ0hBUik7XHJcbiAgICAgICAgZWxzZSBpZiAoaXNEYXRlKHZhbCkpXHJcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSBgJHtuYW1lc1tpXX09JHt2YWwudG9KU09OKCl9YDtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSBgJHtuYW1lc1tpXX09JHt2YWx9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xyXG4gIH1cclxuICBwcml2YXRlIF9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nOiBzdHJpbmcpOiBQYXJhbU1hcCB7XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHt9O1xyXG4gICAgcXVlcnlTdHJpbmcgJiYgcXVlcnlTdHJpbmcuXHJcbiAgICAgIHNwbGl0KEFSR19DSEFSKS5mb3JFYWNoKHAgPT4ge1xyXG4gICAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBwLnNwbGl0KCc9Jyk7XHJcbiAgICAgICAgaWYgKCFxdWVyeVBhcmFtc1tuYW1lXSlcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zW25hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCB2YWxzID0gcXVlcnlQYXJhbXNbbmFtZV07XHJcbiAgICAgICAgICBxdWVyeVBhcmFtc1tuYW1lXSA9IGlzQXJyYXkodmFscykgPyBbLi4udmFscywgdmFsdWVdIDogW3ZhbHMsIHZhbHVlXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHF1ZXJ5UGFyYW1zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcm91dGVcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3BhcmFtcyhyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBleCA9IHJvdXRlLnJlZ0V4LmV4ZWMocGF0aCksXHJcbiAgICAgIHBhcmFtcyA9IGV4Lmdyb3VwcztcclxuXHJcbiAgICByZXR1cm4gcGFyYW1zIHx8IHt9O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gdXJsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbWF0Y2godXJsOiBzdHJpbmcpIHtcclxuICAgIGxldCByb3V0ZSA9IHRoaXMuX3JlcG9zaXRvcnkuZmluZChyID0+IHIucmVnRXgudGVzdCh1cmwpKTtcclxuICAgIGlmIChyb3V0ZSlcclxuICAgICAgd2hpbGUgKHJvdXRlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgbGV0IGNoaWxkID0gcm91dGUuY2hpbGRyZW4uZmluZChyID0+IHIucmVnRXgudGVzdCh1cmwpKTtcclxuICAgICAgICBpZiAoY2hpbGQpXHJcbiAgICAgICAgICByb3V0ZSA9IGNoaWxkO1xyXG4gICAgICAgIGVsc2UgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIHJldHVybiByb3V0ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHJvdXRlXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcGFyYW1zXHJcbiAgICogQHBhcmFtIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9zdGF0ZShyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nLCBwYXJhbXM6IFBhcmFtTWFwLCBkYXRhOiBQYXJhbU1hcCkge1xyXG4gICAgaWYgKHRoaXMuX3BlbmRpbmcuaW5kZXhPZihwYXRoKSA+IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5fcHMudG9hc3QoJ1dvcmtpbmcnKTtcclxuICAgICAgdGhyb3cgJ2FscmVhZHkgcHJvY2Vzc2luZyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wZW5kaW5nLnB1c2gocGF0aCk7XHJcblxyXG4gICAgY29uc3QgeyBwYXJlbnQsIHJlc29sdmUgfSA9IHJvdXRlO1xyXG4gICAgaWYgKHBhcmVudClcclxuICAgICAgYXdhaXQgdGhpcy5fcGFyZW50c3RhdGUocGFyZW50LCBwYXRoLCBwYXJhbXMsIGRhdGEpO1xyXG4gICAgaWYgKHJlc29sdmUpIHtcclxuICAgICAgYXdhaXQgdGhpcy5fcmVzb2x2ZShyZXNvbHZlLCBwYXJhbXMsIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcGVuZGluZy5yZW1vdmUocGF0aCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSByb3V0ZVxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICogQHBhcmFtIHBhcmFtc1xyXG4gICAqIEBwYXJhbSBkYXRhXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfcGFyZW50c3RhdGUocm91dGU6IEV4dGVuZGVkUm91dGUsIHBhdGg6IHN0cmluZywgcGFyYW1zOiBQYXJhbU1hcCwgZGF0YTogUGFyYW1NYXApIHtcclxuICAgIGNvbnN0IHsgcGFyZW50LCByZXNvbHZlIH0gPSByb3V0ZTtcclxuXHJcbiAgICBpZiAocGFyZW50KVxyXG4gICAgICBhd2FpdCB0aGlzLl9wYXJlbnRzdGF0ZShwYXJlbnQsIHBhdGgsIHBhcmFtcywgZGF0YSk7XHJcblxyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXMuZmluZChzID0+IHMucm91dGUgJiYgcy5yb3V0ZSA9PT0gcm91dGVcclxuICAgICAgJiYgcGF0aC5zdGFydHNXaXRoKHMucGF0aCkpO1xyXG5cclxuICAgIHBhbmUgJiYgT2JqZWN0LmFzc2lnbihkYXRhLCBwYW5lLmRhdGEpO1xyXG5cclxuICAgIGlmIChyZXNvbHZlKVxyXG4gICAgICBhd2FpdCB0aGlzLl9yZXNvbHZlKHJlc29sdmUsIHBhcmFtcywgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9yZXNvbHZlKHJlc29sdmU6IHsgW2tleTogc3RyaW5nXTogQ29tcG9uZW50VHlwZTxQYW5lUmVzb2x2ZTxhbnk+PiB9LCBwYXJhbXM6IFBhcmFtTWFwLCBkYXRhOiBQYXJhbU1hcCkge1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJlc29sdmUpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICBpZiAoIWRhdGFba2V5XSkge1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KHJlc29sdmVba2V5XSkgYXMgUGFuZVJlc29sdmU8YW55PjtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGluc3RhbmNlLm9uUmVzb2x2ZShwYXJhbXMpO1xyXG4gICAgICAgIGlmIChpc1Byb21pc2UodmFsdWUpKVxyXG4gICAgICAgICAgYXdhaXQgdmFsdWUudGhlbihyID0+IGRhdGFba2V5XSA9IHIpO1xyXG4gICAgICAgIGVsc2UgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpXHJcbiAgICAgICAgICBhd2FpdCB2YWx1ZS5waXBlKHRhcChyID0+IGRhdGFba2V5XSA9IHIpKS50b1Byb21pc2UoKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkPFQ+KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPiwgb3B0aW9ucz86IFBhbmVPcHRpb25zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnNlcnQodGhpcy5wYW5lcy5sZW5ndGgsIGNvbXBvbmVudCwgb3B0aW9ucyk7XHJcbiAgfVxyXG4gIGluc2VydDxUPihwb3NpdGlvbjogbnVtYmVyLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sIG9wdGlvbnM/OiBQYW5lT3B0aW9ucykge1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMuX2luc2VydFBhbmU8VD4oY29tcG9uZW50LCBvcHRpb25zIHx8IHt9LCBwb3NpdGlvbik7XHJcbiAgICByZXR1cm4gcGFuZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaW5zZXJ0UGFuZTxUID0gYW55Pihjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sIG9wdGlvbnM6IHtcclxuICAgIHBhdGg/OiBzdHJpbmc7XHJcbiAgICByb3V0ZT86IFBhbmVSb3V0ZTtcclxuICAgIGljb24/OiBzdHJpbmc7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxuICAgIGlucHV0cz86IHsgW25hbWU6IHN0cmluZ106IGFueSB9LFxyXG4gICAgZGF0YT86IFBhcmFtTWFwO1xyXG4gICAgcGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICBxdWVyeVBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgaGVscD86IHN0cmluZztcclxuICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xyXG4gICAgcG9saWN5PzogT3BlblBvbGljeTtcclxuICAgIGluamVjdG9yPzogSW5qZWN0b3I7XHJcbiAgICBmb2N1cz86IGJvb2xlYW5cclxuICB9LCBwb3NpdGlvbj86IG51bWJlcikge1xyXG5cclxuICAgIGNvbnN0IHN0cmV0Y2hhYmxlID0gKG9wdGlvbnMucG9saWN5ICYgT3BlblBvbGljeS5TdHJldGNoKSA9PSBPcGVuUG9saWN5LlN0cmV0Y2g7XHJcblxyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMuX2NvbnN0cmFjdDxUPihjb21wb25lbnQsIHtcclxuICAgICAgbW9kZTogJ3BhbmUnLFxyXG4gICAgICBleHBhbmRlZDogIXRoaXMucGFuZXMubGVuZ3RoLFxyXG4gICAgICBzdHJldGNoYWJsZSxcclxuICAgICAgLi4ub3B0aW9uc1xyXG4gICAgfSk7XHJcbiAgICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZClcclxuICAgICAgcG9zaXRpb24gPSB0aGlzLnBhbmVzLmxlbmd0aDtcclxuICAgIHRoaXMucGFuZXMucHVzaChwYW5lKTtcclxuICAgIHRoaXMudGl0bGVBbmltYXRpb24rKztcclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGNvbnN0IGV2dCA9IG5ldyBOYXZpZ2F0aW9uU3RhcnQocGFuZSk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgaWYgKG9wdGlvbnMuZm9jdXMgIT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHBvc2l0aW9uO1xyXG4gICAgICB0aGlzLl90aXRsZS5zZXQocGFuZS50aXRsZSk7XHJcbiAgICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCA+IDEpIHRoaXMuc2Nyb2xsVG8ocG9zaXRpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbmFibGVOYXZpZ2F0aW9uQXJyb3dzKCk7XHJcbiAgICByZXR1cm4gcGFuZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbXBvbmVudFxyXG4gICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfY29uc3RyYWN0PFQgPSBhbnk+KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPixcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgbW9kZTogUGFuZU1vZGUsXHJcbiAgICAgIGV4cGFuZGVkPzogYm9vbGVhbjtcclxuICAgICAgZGlhbG9nPzogYm9vbGVhbjtcclxuICAgICAgc3RyZXRjaGFibGU/OiBib29sZWFuO1xyXG4gICAgICBwYXRoPzogc3RyaW5nO1xyXG4gICAgICByb3V0ZT86IFBhbmVSb3V0ZTtcclxuICAgICAgaWNvbj86IHN0cmluZztcclxuICAgICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gICAgICBkYXRhPzogUGFyYW1NYXA7XHJcbiAgICAgIHBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgICBxdWVyeVBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgICBoZWxwPzogc3RyaW5nO1xyXG4gICAgICBwYXJlbnQ/OiBQYW5lUmVmPGFueT47XHJcbiAgICAgIGluamVjdG9yPzogSW5qZWN0b3I7XHJcbiAgICAgIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xyXG4gICAgICBkaXNtaXNzYWJsZT86IGJvb2xlYW47XHJcbiAgICAgIGV4cGFuZGFibGU/OiBib29sZWFuXHJcbiAgICB9KSB7XHJcbiAgICBjb25zdCBwYW5lID0gbmV3IFBhbmVSZWY8VD4oY29tcG9uZW50LCBvcHRpb25zLmluamVjdG9yIHx8IHRoaXMuX2luamVjdG9yLCBvcHRpb25zKTtcclxuICAgIHBhbmUuX2NvbW1hbmQkLnN1YnNjcmliZShlID0+IHRoaXMuX3BhbmVDb21tYW5kPFQ+KGUsIHBhbmUpKTtcclxuICAgIHJldHVybiBwYW5lO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29tcG9uZW50XHJcbiAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgKi9cclxuICBwcml2YXRlIF9pbnNlcnRUYWI8VCA9IGFueT4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zOiB7XHJcbiAgICBpY29uPzogc3RyaW5nO1xyXG4gICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICBncm91cD86IHN0cmluZztcclxuICAgIGhlbHA/OiBzdHJpbmc7XHJcbiAgICBwYXRoPzogc3RyaW5nO1xyXG4gICAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XHJcbiAgICByb3V0ZT86IFBhbmVSb3V0ZTtcclxuICAgIGRhdGE/OiBQYXJhbU1hcDtcclxuICAgIHBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgcXVlcnlQYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgIHBvbGljeT86IE9wZW5Qb2xpY3k7XHJcbiAgICBpbmplY3Rvcj86IEluamVjdG9yO1xyXG4gICAgc3dhcD86IGJvb2xlYW47XHJcbiAgICBmb2N1cz86IGJvb2xlYW47XHJcbiAgfSkge1xyXG4gICAgY29uc3QgeyBwb2xpY3kgfSA9IG9wdGlvbnMsXHJcbiAgICAgIGRpYWxvZyA9IChwb2xpY3kgJiBPcGVuUG9saWN5LkRpYWxvZykgPT0gT3BlblBvbGljeS5EaWFsb2csXHJcbiAgICAgIGV4cGFuZGFibGUgPSAocG9saWN5ICYgT3BlblBvbGljeS5FeHBhbmRhYmxlKSA9PSBPcGVuUG9saWN5LkV4cGFuZGFibGUsXHJcbiAgICAgIGRpc21pc3NhYmxlID0gKHBvbGljeSAmIE9wZW5Qb2xpY3kuRGlzbWlzc2FibGUpID09IE9wZW5Qb2xpY3kuRGlzbWlzc2FibGU7XHJcblxyXG4gICAgY29uc3QgdGFiID0gdGhpcy5fY29uc3RyYWN0PFQ+KGNvbXBvbmVudCxcclxuICAgICAge1xyXG4gICAgICAgIG1vZGU6ICd0YWInLFxyXG4gICAgICAgIGV4cGFuZGVkOiBmYWxzZSxcclxuICAgICAgICAuLi5vcHRpb25zLFxyXG4gICAgICAgIGRpYWxvZyxcclxuICAgICAgICBkaXNtaXNzYWJsZSxcclxuICAgICAgICBleHBhbmRhYmxlXHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy50YWJzLnB1c2godGFiKTtcclxuICAgIGRpYWxvZyAmJiB0aGlzLmRpYWxvZ0NoYW5nZS5lbWl0KHRoaXMuZGlhbG9nID0gdHJ1ZSk7XHJcbiAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvblN0YXJ0KHRhYikpO1xyXG4gICAgaWYgKHRhYi5ncm91cCAmJiB0aGlzLmdyb3VwICE9PSB0YWIuZ3JvdXAgJiYgb3B0aW9ucy5zd2FwICE9PSBmYWxzZSkge1xyXG4gICAgICBsZXQgaSA9IDAsIHN3YXAgPSBmYWxzZTtcclxuICAgICAgZG8ge1xyXG4gICAgICAgIGlmICh0aGlzLnRhYnNbaV0uZ3JvdXAgIT09IHRhYi5ncm91cCkge1xyXG4gICAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUodGhpcy50YWJzW2ldKTtcclxuICAgICAgICAgIHRoaXMudGFicy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICBzd2FwID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaSsrXHJcbiAgICAgIH0gd2hpbGUgKGkgPCB0aGlzLnRhYnMubGVuZ3RoKTtcclxuICAgICAgaWYgKHN3YXApIHtcclxuICAgICAgICB0aGlzLnN3YXBUYWIgPSB0aGlzLl9nZXRIaXN0b3J5U3RlcCgpO1xyXG4gICAgICAgIHRoaXMucHJldkdyb3VwID0gdGhpcy5ncm91cDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnN3YXBUYWIgPSBudWxsO1xyXG4gICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgIGlmIChvcHRpb25zLmZvY3VzICE9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoIC0gMTtcclxuICAgIH1cclxuICAgIHJldHVybiB0YWI7XHJcbiAgfVxyXG5cclxuICBndWlkZShuYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2d1aWRlLnN0YXJ0KG5hbWUpO1xyXG4gIH1cclxuICBiYWNrKCkge1xyXG4gICAgdGhpcy5fbmF2QmFjayh0aGlzLnN3YXApO1xyXG4gICAgdGhpcy5zd2FwID0gbnVsbDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHN0ZXBzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2QmFjayhzdGVwczogbnVtYmVyKSB7XHJcbiAgICBoaXN0b3J5LmdvKHN0ZXBzIC0gKGhpc3Rvcnkuc3RhdGUgYXMgSGlzdG9yeVN0YXRlKS5zdGVwKTtcclxuICB9XHJcbiAgdGFiQmFjaygpIHtcclxuICAgIHRoaXMuX25hdkJhY2sodGhpcy5zd2FwVGFiKTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb21tYW5kXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9wYW5lQ29tbWFuZDxUID0gYW55Pihjb21tYW5kOiBQYW5lQ29tbWFuZCwgcGFuZTogUGFuZVJlZjxUPikge1xyXG4gICAgc3dpdGNoIChjb21tYW5kKSB7XHJcbiAgICAgIGNhc2UgJ2ZvY3VzJzpcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZiAocGFuZS5tb2RlID09PSAndGFiJykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucGFuZXMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgICAgdGhpcy5mb2N1cyhpbmRleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIGNhc2UgJ2Nsb3NlJzpcclxuICAgICAgICBpZiAocGFuZS5tb2RlID09PSAndGFiJykge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgIHRoaXMuY2xvc2VUYWIoaW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYW5lcy5pbmRleE9mKHBhbmUpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVBdChpbmRleCk7XHJcbiAgICAgICAgICB0aGlzLl9jbGVhclBlbmRpbmcoKTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX2NsZWFyVGFicygpO1xyXG4gICAgICAgICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKERFRkFVTFRfUk9VVEUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZXhwYW5kJzpcclxuICAgICAgICBpZiAocGFuZS5tb2RlID09PSAndGFiJylcclxuICAgICAgICAgIHRoaXMuZXhwYW5kVGFiKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5leHBhbmRQYW5lKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3JlY3ljbGUnOiB7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9jb25zdHJ1Y3RIaXN0b3J5U3RhdGUoKTtcclxuICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShzdGF0ZSwgJycpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIGVzY2FwZVxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJylcclxuICBhc3luYyBjb2xsYXBzZSgpIHtcclxuICAgIGlmICghdGhpcy50YWJzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IENvbGxhcHNlTmF2aWdhdGlvbigpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIGlmIChldnQuX3ByZXZlbnREZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLl9jbGVhclBlbmRpbmcoKTtcclxuICAgIGF3YWl0IHRoaXMuX2NsZWFyVGFicygpO1xyXG4gICAgdGhpcy5kaWFsb2cgJiZcclxuICAgICAgdGhpcy5kaWFsb2dDaGFuZ2UuZW1pdCh0aGlzLmRpYWxvZyA9IGZhbHNlKTtcclxuICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBvblJlc2l6ZSgpIHtcclxuICAgIHRoaXMuX3Jlc2l6aW5nLm5leHQoKTtcclxuICB9XHJcbiAgLyoqICovXHJcbiAgcHJpdmF0ZSBfcmVzaXplKCkge1xyXG4gICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoID4gMSAmJiAhdGhpcy5wYW5lc1t0aGlzLnBhbmVzLmxlbmd0aCAtIDFdLnN0cmV0Y2hhYmxlKSB7XHJcbiAgICAgIGNvbnN0IGVsID0gdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgIGNoaWxkID0gZWwubGFzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgICAgY2hpbGQuc3R5bGUubWluV2lkdGggPVxyXG4gICAgICAgIChlbC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBlbC5wYXJlbnRFbGVtZW50Lm9mZnNldExlZnQgLSBjaGlsZC5vZmZzZXRMZWZ0IC0gMikgKyAncHgnO1xyXG4gICAgfVxyXG4gICAgdGhpcy50YWJzLmNvbmNhdCh0aGlzLnBhbmVzKS5mb3JFYWNoKHAgPT4gcC5fZXZlbnRzJC5uZXh0KG5ldyBOYXZpZ2F0aW9uUmVzaXplKHtcclxuICAgIH0gYXMgYW55LCBwKSkpO1xyXG4gIH1cclxuICBjbG9zZVRhYihwb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbcG9zaXRpb25dO1xyXG4gICAgaWYgKCF0aGlzLl9jbG9zaW5nKHRhYikpIHJldHVybjtcclxuICAgIHRoaXMudGFicy5zcGxpY2UocG9zaXRpb24sIDEpO1xyXG4gICAgdGhpcy5fZGVzdHJveVBhbmUodGFiKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggPyBwb3NpdGlvbiA+IDAgPyBwb3NpdGlvbiAtIDEgOiAwIDogLTE7XHJcbiAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgIHRhYi5kaWFsb2cgJiZcclxuICAgICAgdGhpcy5kaWFsb2dDaGFuZ2UuZW1pdCh0aGlzLmRpYWxvZyA9IGZhbHNlKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIF9jbG9zaW5nKHBhbmU6IFBhbmVSZWY8YW55Pikge1xyXG4gICAgbGV0IGV2dCA9IG5ldyBOYXZpZ2F0aW9uQ2xvc2UocGFuZSk7XHJcbiAgICBwYW5lLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHJldHVybiAhZXZ0Ll9wcmV2ZW50RGVmYXVsdDtcclxuICB9XHJcblxyXG4gIGV4cGFuZFBhbmUoKSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IE5hdmlnYXRpb25FeHBhbmQocGFuZS5fZXhwYW5kZWQgPSB0cnVlLCBwYW5lKTtcclxuICAgIHBhbmUuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIGlmIChldnQuX3ByZXZlbnREZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLnN3YXAgPSB0aGlzLl9nZXRIaXN0b3J5U3RlcCgpO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgZG8ge1xyXG4gICAgICBpZiAodGhpcy5wYW5lc1tpXSAhPT0gcGFuZSkge1xyXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRoaXMucGFuZXNbaV0pO1xyXG4gICAgICAgIHRoaXMucGFuZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpKys7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoaSA8IHRoaXMucGFuZXMubGVuZ3RoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZ2V0SGlzdG9yeVN0ZXAoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBoaXN0b3J5LnN0YXRlICYmIGhpc3Rvcnkuc3RhdGUuYml6ZG9jID8gKGhpc3Rvcnkuc3RhdGUgYXMgSGlzdG9yeVN0YXRlKS5zdGVwIDogMDtcclxuICB9XHJcblxyXG4gIGV4cGFuZFRhYigpIHtcclxuICAgIGNvbnN0IHRhYiA9IHRoaXMudGFic1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IE5hdmlnYXRpb25FeHBhbmQodGFiLl9leHBhbmRlZCA9IHRydWUsIHRhYilcclxuICAgIHRhYi5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgaWYgKGV2dC5fcHJldmVudERlZmF1bHQpIHJldHVybjtcclxuICAgIHRoaXMuc3dhcCA9IHRoaXMuX2dldEhpc3RvcnlTdGVwKCk7XHJcbiAgICB0aGlzLnN3YXBUYWIgPSBudWxsO1xyXG4gICAgdGhpcy5wYW5lcy5mb3JFYWNoKHAgPT5cclxuICAgICAgdGhpcy5fZGVzdHJveVBhbmUocClcclxuICAgICk7XHJcbiAgICB0aGlzLnRhYnMuc3BsaWNlKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCwgMSk7XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZSgwLCB0aGlzLnBhbmVzLmxlbmd0aCwgdGFiKTtcclxuXHJcbiAgICB0YWIuX21vZGUgPSAncGFuZSc7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoID8gMCA6IC0xO1xyXG4gICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3QocG9zaXRpb246IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gcG9zaXRpb24pIHJldHVybjtcclxuICAgIGlmIChwb3NpdGlvbiA9PT0gLTEpIHtcclxuICAgICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoKSBwb3NpdGlvbiA9IHRoaXMucGFuZXMubGVuZ3RoIC0gMTtcclxuICAgICAgZWxzZSByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBwb3NpdGlvbjtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzW3Bvc2l0aW9uXTtcclxuICAgIGNvbnN0IGV2dCA9IG5ldyBOYXZpZ2F0aW9uRm9jdXMocGFuZSk7XHJcbiAgICBwYW5lLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICB0aGlzLl90aXRsZS5zZXQocGFuZS50aXRsZSk7XHJcbiAgfVxyXG4gIGFzeW5jIHJlbW92ZUF0KHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzW3Bvc2l0aW9uXTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2Nsb3NpbmcocGFuZSkpIHJldHVybjtcclxuXHJcbiAgICBhd2FpdCB0aGlzLl9kaXNtaXNzKHBhbmUpO1xyXG5cclxuICAgIHRoaXMuX2Rpc2NhcmRQYW5lKHBhbmUpO1xyXG5cclxuICAgIGlmIChwb3NpdGlvbiA+PSB0aGlzLnNlbGVjdGVkSW5kZXgpXHJcbiAgICAgIHRoaXMuc2VsZWN0KC0xKTtcclxuICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX2Rpc21pc3MocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICBjb25zdCBwYW5lcyA9IHRoaXMucGFuZXMuY29uY2F0KHRoaXMudGFicykuXHJcbiAgICAgIGZpbHRlcihzID0+IHMuZGVjZW5kZW50T2YocGFuZSkgJiYgcy5yb3V0ZSAmJiBzLnJvdXRlLmNhbkRpc21pc3MpLlxyXG4gICAgICByZXZlcnNlKCk7XHJcblxyXG4gICAgcGFuZS5yb3V0ZSAmJiBwYW5lLnJvdXRlLmNhbkRpc21pc3MgJiZcclxuICAgICAgcGFuZXMucHVzaChwYW5lKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBvayA9IGF3YWl0IHRoaXMuX2Rpc21pc3NhYmxlKHBhbmVzW2ldKTtcclxuICAgICAgaWYgKCFvaykgdGhyb3cgJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZGlzY2FyZFBhbmUocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLlxyXG4gICAgICBmaWx0ZXIocyA9PiBzLmRlY2VuZGVudE9mKHBhbmUpKS5cclxuICAgICAgcmV2ZXJzZSgpLlxyXG4gICAgICBmb3JFYWNoKHMgPT4gdGhpcy5fZGlzY2FyZFBhbmUocykpO1xyXG4gICAgdGhpcy5fZGVzdHJveVBhbmUocGFuZSk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucGFuZXMuaW5kZXhPZihwYW5lKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY2xlYXJQZW5kaW5nKCkge1xyXG4gICAgdGhpcy5fcGVuZGluZy5zcGxpY2UoMCwgdGhpcy5fcGVuZGluZy5sZW5ndGgpO1xyXG4gIH1cclxuICAvKiogKi9cclxuICBwcml2YXRlIGFzeW5jIF9jbGVhclBhbmVzKCkge1xyXG4gICAgYXdhaXQgdGhpcy5fZGlzbWlzc0FsbCh0aGlzLnBhbmVzKTtcclxuICAgIHRoaXMucGFuZXMuZm9yRWFjaChwID0+IHRoaXMuX2Rlc3Ryb3lQYW5lKHApKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKDAsIHRoaXMucGFuZXMubGVuZ3RoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5zd2FwID0gbnVsbDtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfY2xlYXJUYWJzKCkge1xyXG4gICAgaWYgKCF0aGlzLnRhYnMubGVuZ3RoKSByZXR1cm47XHJcbiAgICBhd2FpdCB0aGlzLl9kaXNtaXNzQWxsKHRoaXMudGFicyk7XHJcbiAgICB0aGlzLnRhYnMuZm9yRWFjaCh0ID0+IHRoaXMuX2Rlc3Ryb3lQYW5lKHQpKTtcclxuICAgIHRoaXMudGFicy5zcGxpY2UoMCwgdGhpcy50YWJzLmxlbmd0aCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAtMTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX2Rpc21pc3NBbGwocGFuZXM6IFBhbmVSZWZbXSkge1xyXG4gICAgZm9yIChsZXQgcGFuZSBvZiBwYW5lcy5cclxuICAgICAgZmlsdGVyKHMgPT4gcy5yb3V0ZSAmJiBzLnJvdXRlLmNhbkRpc21pc3MpKSB7XHJcbiAgICAgIGxldCBvayA9IGF3YWl0IHRoaXMuX2Rpc21pc3NhYmxlKHBhbmUpO1xyXG4gICAgICBpZiAoIW9rKVxyXG4gICAgICAgIHRocm93ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIF9kaXNtaXNzYWJsZShwYW5lOiBQYW5lUmVmPGFueT4pIHtcclxuICAgIGNvbnN0IHsgaW5zdGFuY2UsIHJvdXRlOiB7IGNhbkRpc21pc3MgfSB9ID0gcGFuZTtcclxuICAgIGNvbnN0IGRpc21pc3NhYmxlID0gdGhpcy5faW5qZWN0b3IuZ2V0KGNhbkRpc21pc3MpIGFzIENhbkRpc21pc3M8YW55PjtcclxuICAgIGNvbnN0IG9rID0gZGlzbWlzc2FibGUub25EaXNtaXNzKGluc3RhbmNlKTtcclxuICAgIGlmIChpc0Jvb2xlYW4ob2spKVxyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9rKTtcclxuICAgIGVsc2UgaWYgKGlzUHJvbWlzZShvaykpXHJcbiAgICAgIHJldHVybiBvaztcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIG9rLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuICBzY3JvbGxUbyhpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5fY2hpbGRyZW4uaXRlbShpbmRleCkgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBpdGVtICYmIGl0ZW0uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGlubGluZTogJ2VuZCcsIGJsb2NrOiAnZW5kJyB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IF9jaGlsZHJlbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9wYW5lc0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnBhbmUtY29udGVudCcpO1xyXG4gIH1cclxuICBkb25lKCkge1xyXG4gICAgdGhpcy5lbmFibGVOYXZpZ2F0aW9uQXJyb3dzKCk7XHJcbiAgICB0aGlzLl9yZXNpemUoKTtcclxuICB9XHJcbiAgZW5hYmxlTmF2aWdhdGlvbkFycm93cyhfPzogRXZlbnQpIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX3BhbmVzQ29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcclxuICAgICAgc2Nyb2xsTGVmdCA9IE1hdGgucm91bmQoY29udGFpbmVyLnNjcm9sbExlZnQpO1xyXG4gICAgdGhpcy5uZXh0ID0gdGhpcy5fcnRsID8gY29udGFpbmVyLmNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdCA8IGNvbnRhaW5lci5zY3JvbGxXaWR0aCA6XHJcbiAgICAgIHNjcm9sbExlZnQgKyBjb250YWluZXIuY2xpZW50V2lkdGggPCBjb250YWluZXIuc2Nyb2xsV2lkdGg7XHJcbiAgICB0aGlzLnByZXYgPSB0aGlzLl9ydGwgPyBzY3JvbGxMZWZ0IDwgMCA6IHNjcm9sbExlZnQgPiAwO1xyXG4gIH1cclxuICBzY3JvbGxCeShuOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGxlZnQgPSBuICogKHRoaXMuX3J0bCA/IC0xIDogMSk7XHJcbiAgICB0aGlzLl9wYW5lc0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsQnkoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGxlZnQgfSk7XHJcbiAgfVxyXG4gIGZvY3VzKGluZGV4KSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuX2NoaWxkcmVuLml0ZW0oaW5kZXgpIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gICAgZWwuZm9jdXMoKTtcclxuICB9XHJcbiAgb25QYW5lUmVzaXplKHBhbmU6IFBhbmVSZWY8YW55PiwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IGVsID0gKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgYXMgSFRNTERpdkVsZW1lbnQ7XHJcblxyXG4gICAgY29uc3QgLy8gcmVtZW1iZXIgbW91c2UgZG93biBpbmZvXHJcbiAgICAgIHdpZHRoID0gZWwuY2xpZW50V2lkdGgsXHJcbiAgICAgIGQgPSB0aGlzLl9ydGwgPyAtMSA6IDE7XHJcblxyXG4gICAgKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nJyk7XHJcblxyXG4gICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XHJcblxyXG4gICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBvbk1vdXNlTW92ZTtcclxuICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9ICgpID0+IHtcclxuICAgICAgKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nJyk7XHJcbiAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcclxuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgfTtcclxuICAgIGZ1bmN0aW9uIG9uTW91c2VNb3ZlKGUpIHtcclxuXHJcbiAgICAgIGNvbnN0IGRlbHRhID0gKGUuY2xpZW50WCAtIGV2ZW50LmNsaWVudFgpICogZDtcclxuICAgICAgZWwuc3R5bGUud2lkdGggPSBlbC5zdHlsZS5taW5XaWR0aFxyXG4gICAgICAgID0gTWF0aC5tYXgod2lkdGggKyBkZWx0YSwgMzUwKSArICdweCc7XHJcbiAgICAgIHBhbmUuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvblJlc2l6ZSh7fSBhcyBhbnksIHBhbmUpKTtcclxuICAgIH1cclxuICB9XHJcbiAgb25UYWJSZXNpemUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IGVsID0gKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLm5leHRFbGVtZW50U2libGluZyBhcyBIVE1MRGl2RWxlbWVudDtcclxuXHJcbiAgICBjb25zdFxyXG4gICAgICBtZSA9IHRoaXMsXHJcbiAgICAgIC8vIHJlbWVtYmVyIG1vdXNlIGRvd24gaW5mb1xyXG4gICAgICB3aWR0aCA9IGVsLmNsaWVudFdpZHRoLFxyXG4gICAgICBkID0gdGhpcy5fcnRsID8gMSA6IC0xO1xyXG5cclxuICAgIChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5jbGFzc0xpc3QuYWRkKCdyZXNpemluZycpO1xyXG5cclxuICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xyXG5cclxuICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gb25Nb3VzZU1vdmU7XHJcbiAgICBkb2N1bWVudC5vbm1vdXNldXAgPSAoKSA9PiB7XHJcbiAgICAgIChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZycpO1xyXG4gICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgbWUuZW5hYmxlTmF2aWdhdGlvbkFycm93cygpO1xyXG4gICAgICB0aGlzLl9yZXNpemUoKTtcclxuICAgIH07XHJcbiAgICBmdW5jdGlvbiBvbk1vdXNlTW92ZShlKSB7XHJcblxyXG4gICAgICAvLyBwcmV2ZW50IG5lZ2F0aXZlLXNpemVkIGVsZW1lbnRzXHJcbiAgICAgIGNvbnN0IGRlbHRhID0gTWF0aC5tYXgoKGUuY2xpZW50WCAtIGV2ZW50LmNsaWVudFgpICogZCwgLXdpZHRoKTtcclxuICAgICAgZWwuc3R5bGUud2lkdGggPSBlbC5zdHlsZS5taW5XaWR0aCA9ICh3aWR0aCArIGRlbHRhKSArICdweCc7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0YWJzJywgZWwuc3R5bGUud2lkdGgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9kZXN0cm95UGFuZShwYW5lOiBQYW5lUmVmKSB7XHJcbiAgICBwYW5lLl9kZXN0cm95KCk7XHJcbiAgICBjb25zdCBldnQgPSBuZXcgTmF2aWdhdGlvbkVuZChwYW5lKTtcclxuICAgIHBhbmUuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95Lm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IFBBTkVfUEFSQU1TX1JFR0VYID0gLyg6W1xcd1xcLV0rKS9nO1xyXG5cclxuZnVuY3Rpb24gcHJlcGFyZVJvdXRlcyhyb3V0ZXM6IFBhbmVSb3V0ZVtdLCB0cmVlUGF0aD86IHN0cmluZyk6IEV4dGVuZGVkUm91dGVbXSB7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3V0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgIGxldCByb3V0ZSA9IHJvdXRlc1tpXSwgZnVsbFBhdGggPSAodHJlZVBhdGggPyAodHJlZVBhdGggKyAnLycpIDogJycpICsgcm91dGUucGF0aDtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKHJvdXRlLCB7XHJcbiAgICAgIGZ1bGxQYXRoLFxyXG4gICAgICByZWdFeDogbmV3IFJlZ0V4cCgnXicgKyBmdWxsUGF0aC5cclxuICAgICAgICByZXBsYWNlKCcvJywgJ1xcXFwvJykuXHJcbiAgICAgICAgcmVwbGFjZShQQU5FX1BBUkFNU19SRUdFWCwgZSA9PiBgKD88JHtlLnN1YnN0cigxKX0+W1xcXFx3QFxcXFwtXSopYCkpXHJcbiAgICB9KTtcclxuICAgIGlmIChyb3V0ZS5jaGlsZHJlbikge1xyXG4gICAgICBsZXQgY2hpbGRyZW4gPSBwcmVwYXJlUm91dGVzKHJvdXRlLmNoaWxkcmVuLCBmdWxsUGF0aCk7XHJcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hpbGRyZW4ubGVuZ3RoOyBqKyspXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihjaGlsZHJlbltqXSwge1xyXG4gICAgICAgICAgcGFyZW50OiByb3V0ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcm91dGVzIGFzIEV4dGVuZGVkUm91dGVbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIEV4dGVuZGVkUm91dGUgZXh0ZW5kcyBQYW5lUm91dGUge1xyXG4gIGZ1bGxQYXRoOiBzdHJpbmc7XHJcbiAgcmVnRXg6IFJlZ0V4cDtcclxuICBwYXJlbnQ/OiBFeHRlbmRlZFJvdXRlO1xyXG4gIGNoaWxkcmVuPzogRXh0ZW5kZWRSb3V0ZVtdO1xyXG59XHJcbmludGVyZmFjZSBIaXN0b3J5U3RhdGUge1xyXG4gIGJpemRvYzogdHJ1ZTtcclxuICBzdGVwOiBudW1iZXI7XHJcbiAgc3dhcD86IG51bWJlcjtcclxuICBzd2FwVGFiPzogbnVtYmVyO1xyXG4gIGdyb3VwPzogc3RyaW5nO1xyXG4gIHByZXZHcm91cD86IHN0cmluZztcclxuICBwYW5lczogYW55W107XHJcbiAgdGFiczogYW55W107XHJcbiAgc2VsZWN0ZWRUYWJJbmRleD86IG51bWJlcjtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicGFuZXNcIj5cclxuICA8ZGl2IGNsYXNzPVwic2Nyb2xsLWFycm93XCIgKGNsaWNrKT1cInNjcm9sbEJ5KC00MDApXCIgbWF0UmlwcGxlIFttYXRSaXBwbGVVbmJvdW5kZWRdPVwidHJ1ZVwiIFttYXRSaXBwbGVDZW50ZXJlZF09XCJ0cnVlXCIgW21hdFJpcHBsZUNvbG9yXT1cImFjY2VudFwiXHJcbiAgICAgICAqbmdJZj1cInByZXZcIj5cclxuICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgbWF0LWljb24tcnRsLW1pcnJvclwiPlxyXG4gICAgICBhcnJvd19iYWNrX2lvc1xyXG4gICAgPC9pPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJwYW5lcy10aXRsZVwiIFtAdGl0bGVdPVwidGl0bGVBbmltYXRpb25cIj5cclxuICAgIDxoMT5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImJhY2soKVwiICpuZ0lmPVwic3dhcFwiIFtiaXpkb2NUb29sdGlwXT1cIidCYWNrJ3x0cmFuc2xhdGVcIj48bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+YXJyb3dfY2lyY2xlX2xlZnQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwIG9mIHBhbmVzOyBsZXQgZmlyc3QgPSBmaXJzdFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYnJlYWRjcnVtYnNcIiAqbmdJZj1cIiFmaXJzdFwiPlxcPC9zcGFuPlxyXG4gICAgICAgIHt7cC50aXRsZX19XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZ3VpZGUocGFuZXNbMF0uZ3VpZGUpXCIgKm5nSWY9XCJwYW5lc1swXT8uZ3VpZGVcIiBbYml6ZG9jVG9vbHRpcF09XCInSGVscCd8dHJhbnNsYXRlXCI+PG1hdC1pY29uPmhlbHA8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9oMT5cclxuICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPGJpemRvYy1xdWlja3Rvb2xzPjwvYml6ZG9jLXF1aWNrdG9vbHM+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAjcGFubmluZyBjbGFzcz1cInBhbmVzLWNvbnRhaW5lclwiXHJcbiAgICAgICBjZGtTY3JvbGxhYmxlXHJcbiAgICAgICBAcGFuZXNcclxuICAgICAgIChzY3JvbGwpPVwiZW5hYmxlTmF2aWdhdGlvbkFycm93cygkZXZlbnQpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwIG9mIHBhbmVzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgIDxkaXYgKG1vdXNlZW50ZXIpPVwic2VsZWN0ZWRJbmRleCAhPT0gaSAmJiAhZHJhZ2dpbmcgJiYgc2VsZWN0KGkpXCJcclxuICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0KGkpXCJcclxuICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkSW5kZXggPT09IGkgJiYgcGFuZXMubGVuZ3RoID4gMVwiIGNsYXNzPVwicGFuZS1jb250ZW50XCIgQHBhbmU+XHJcbiAgICAgICAgPG5neC1jb21wb25lbnQtb3V0bGV0IFt0eXBlXT1cInAuY29tcG9uZW50XCIgW2luamVjdG9yXT1cInAuaW5qZWN0b3JcIiAoY3JlYXRlKT1cInAuX2luc3RhbmNlID0gJGV2ZW50XCI+PC9uZ3gtY29tcG9uZW50LW91dGxldD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwYW5lLXNlcGFyYXRvclwiICpuZ0lmPVwiaSA8IHBhbmVzLmxlbmd0aCAtIDFcIiAobW91c2Vkb3duKT1cIm9uUGFuZVJlc2l6ZShwLCAkZXZlbnQpXCI+Jm5ic3A7PC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiYmFja2Ryb3BcIiAqbmdJZj1cImRpYWxvZ1wiIChjbGljayk9XCJjbG9zZVRhYihzZWxlY3RlZFRhYkluZGV4KVwiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzY3JvbGwtYXJyb3cgZm9yd2FyZFwiXHJcbiAgICAgICAqbmdJZj1cIm5leHRcIj5cclxuICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgbWF0LWljb24tcnRsLW1pcnJvclwiIG1hdFJpcHBsZSBbbWF0UmlwcGxlVW5ib3VuZGVkXT1cInRydWVcIiBbbWF0UmlwcGxlQ2VudGVyZWRdPVwidHJ1ZVwiIFttYXRSaXBwbGVSYWRpdXNdPVwiMzBcIiBbbWF0UmlwcGxlQ29sb3JdPVwiYWNjZW50XCJcclxuICAgICAgIChjbGljayk9XCJzY3JvbGxCeSg0MDApXCI+XHJcbiAgICAgIGFycm93X2ZvcndhcmRfaW9zXHJcbiAgICA8L2k+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwidGFicy5sZW5ndGhcIj5cclxuICA8ZGl2IGNsYXNzPVwidGFicy1zZXBhcmF0b3JcIiAobW91c2Vkb3duKT1cIm9uVGFiUmVzaXplKCRldmVudClcIj4mbmJzcDs8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MTggdGFic1wiICN0YWJpbmcgW0B0YWJzXT1cInRhYnNBbmltYXRpb25cIiAoQHRhYnMuZG9uZSk9XCJkb25lKClcIj5cclxuICAgIDwhLS0tLT5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgdGFicy10aXRsZVwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidGFiQmFjaygpXCIgKm5nSWY9XCJzd2FwVGFiXCIgW2JpemRvY1Rvb2x0aXBdPVwicHJldkdyb3VwIHx8ICgnQmFjayd8dHJhbnNsYXRlKVwiPjxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5hcnJvd19iYWNrPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPGgyPnt7Z3JvdXB9fTwvaDI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiIWRpYWxvZ1wiIChjbGljayk9XCJleHBhbmRUYWIoKVwiIFtiaXpkb2NUb29sdGlwXT1cIidFeHBhbmQnfCB0cmFuc2xhdGVcIj48bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+b3Blbl9pbl9mdWxsPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPCEtLSpuZ0lmPVwic2VsZWN0ZWRUYWJJbmRleCA8PTwgLTEgJiYgdGFic1tzZWxlY3RlZFRhYkluZGV4XS5leHBhbmRhYmxlXCItLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY29sbGFwc2UoKVwiIGJpemRvY1Rvb2x0aXA9XCJFc2NcIj48bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bmF2IG1hdC10YWItbmF2LWJhciBjb2xvcj1cImFjY2VudFwiIFtkaXNhYmxlUGFnaW5hdGlvbl09XCJ0cnVlXCIgW3RhYlBhbmVsXT1cInRhYlBhbmVsXCI+XHJcbiAgICAgIDxhIG1hdC10YWItbGluayAqbmdGb3I9XCJsZXQgdCBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJtYXQtdGFiLWxpbmtcIlxyXG4gICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRUYWJJbmRleCA9IGlcIlxyXG4gICAgICAgICBbYWN0aXZlXT1cInNlbGVjdGVkVGFiSW5kZXggPT09IGlcIj5cclxuICAgICAgICA8bWF0LWljb24gW21hdEJhZGdlXT1cInQuYmFkZ2VcIiBbbWF0QmFkZ2VIaWRkZW5dPVwiIXQuYmFkZ2VcIiBtYXRCYWRnZVNpemU9XCJzbWFsbFwiIG1hdEJhZGdlQ29sb3I9XCJhY2NlbnRcIj57e3QuaWNvbn19PC9tYXQtaWNvbj4mbmJzcDtcclxuICAgICAgICB7e3QudGl0bGV9fVxyXG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInQuZGlzbWlzc2FibGVcIiAoY2xpY2spPVwiY2xvc2VUYWIoaSlcIiBjbGFzcz1cInRvb2xcIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPCEtLWlubGluZT1cInRydWVcIi0tPlxyXG4gICAgICA8L2E+XHJcbiAgICA8L25hdj5cclxuICAgIDxtYXQtdGFiLW5hdi1wYW5lbCAjdGFiUGFuZWwgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHQgb2YgdGFiczsgbGV0IGkgPSBpbmRleFwiIFtzdHlsZS5kaXNwbGF5XT1cInNlbGVjdGVkVGFiSW5kZXggPT09IGkgPyAnJzogJ25vbmUnXCIgY2xhc3M9XCJ0YWJcIiBbQHRhYl09XCJzZWxlY3RlZFRhYkluZGV4XCI+XHJcbiAgICAgICAgPG5neC1jb21wb25lbnQtb3V0bGV0IFt0eXBlXT1cInQuY29tcG9uZW50XCIgW2luamVjdG9yXT1cInQuaW5qZWN0b3JcIiAoY3JlYXRlKT1cInQuX2luc3RhbmNlID0gJGV2ZW50XCI+PC9uZ3gtY29tcG9uZW50LW91dGxldD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC10YWItbmF2LXBhbmVsPlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
1147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL3Nsb3RzL3Nsb3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9zbG90cy9zbG90cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUErQixNQUFNLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUUvSyxPQUFPLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBNEIsb0JBQW9CLEVBQUUsZUFBZSxFQUFrQixlQUFlLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBWSxnQkFBZ0IsR0FBRyxNQUFNLFlBQVksQ0FBQztBQUduVSxPQUFPLEVBQUUsYUFBYSxFQUFpQixNQUFNLHNCQUFzQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSixPQUFPLEVB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QUMsRUFBRTtvQkFDekIsTUFBTSxFQUFFLEtBQUs7aUJBQ2QsQ0FBQyxDQUFDO1NBQ047S0FDRjtJQUNELE9BQU8sTUFBeUIsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgaXNPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBpc0FycmF5LCBpc0Jvb2xlYW4sIGlzRGF0ZSwgaXNQcm9taXNlLCBpc1N0cmluZyB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFBBTkVTX0RBVEEsIFBhbmVSZWYsIFBhbmVPcHRpb25zLCBQYW5lQ29tbWFuZCwgUXVlcnlQYXJhbU5hdmlnYXRpb24sIFBhcmFtTmF2aWdhdGlvbiwgTmF2aWdhdGlvbk1vZGUsIE5hdmlnYXRpb25TdGFydCwgTmF2aWdhdGlvbkNsb3NlLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uRm9jdXMsIFBBVEhfQ0hBUiwgUVVFUllfQ0hBUiwgQVJHX0NIQVIsIFBBTkVfQ0hBUiwgQ29sbGFwc2VOYXZpZ2F0aW9uLCBCYWNrTmF2aWdhdGlvbiwgTmF2aWdhdGlvbkV4cGFuZCwgUGFuZU1vZGUsIE5hdmlnYXRpb25SZXNpemUsIH0gZnJvbSAnLi9wYW5lLXJlZic7XHJcbmltcG9ydCB7IFBhbmVzUm91dGVyIH0gZnJvbSAnLi9yb3V0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSwgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgV2luZG93VGl0bGVTZXJ2aWNlIH0gZnJvbSAnLi4vd2luZG93LXRpdGxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBwYW5lc0FuaW1hdGlvbiwgcGFuZUFuaW1hdGlvbiwgcGFuZXNUaXRsZUFuaW1hdGlvbiwgcGFyYW1BbmltYXRpb24sIHF1ZXJ5QW5pbWF0aW9uLCB0YWJBbmltYXRpb24sIHRhYnNBbmltYXRpb24gfSBmcm9tICcuLi9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgUGFuZVJlc29sdmUsIFBhbmVSb3V0ZSwgUGFyYW1NYXAsIENhbkRpc21pc3MsIERFRkFVTFRfUE9MSUNZLCBPcGVuUG9saWN5IH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IEd1aWRlU2VydmljZSB9IGZyb20gJy4uL2d1aWRlL2d1aWRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmlwcGxlQ29uZmlnIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgIHJlbW92ZUFsbExpc3RlbmVycyhuYW1lPzogc3RyaW5nKTtcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IERFRkFVTFRfUk9VVEUgPSBbJ2Rhc2hib2FyZCddO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1wYW5lcy1vdXRsZXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbG90cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2xvdHMuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbcGFuZXNBbmltYXRpb24sXHJcbiAgICBwYW5lc1RpdGxlQW5pbWF0aW9uLFxyXG4gICAgcGFuZUFuaW1hdGlvbixcclxuICAgIHBhcmFtQW5pbWF0aW9uLFxyXG4gICAgcXVlcnlBbmltYXRpb24sXHJcbiAgICB0YWJzQW5pbWF0aW9uLFxyXG4gICAgdGFiQW5pbWF0aW9uXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2xvdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGRpYWxvZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAVmlld0NoaWxkKCdwYW5uaW5nJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgX3BhbmVzQ29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmluZycpIF90YWJzRWxlbWVudDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKENka1Njcm9sbGFibGUsIHsgc3RhdGljOiB0cnVlIH0pIF9zY3JvbGxhYmxlOiBDZGtTY3JvbGxhYmxlO1xyXG4gIHRpdGxlQW5pbWF0aW9uID0gMDtcclxuICBncm91cDogc3RyaW5nO1xyXG4gIHN3YXA/OiBudW1iZXI7XHJcbiAgc3dhcFRhYj86IG51bWJlcjtcclxuICBwcmV2R3JvdXA/OiBzdHJpbmc7XHJcblxyXG4gIHJlYWRvbmx5IHBhbmVzOiBQYW5lUmVmPGFueT5bXSA9IFtdO1xyXG4gIHJlYWRvbmx5IHRhYnM6IFBhbmVSZWY8YW55PltdID0gW107XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRUYWJJbmRleCA9IC0xO1xyXG4gIGRpYWxvZyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRUYWJJbmRleCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFRhYkluZGV4O1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkVGFiSW5kZXgodmFsdWUpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGFiSW5kZXggPSB2YWx1ZTtcclxuICAgIHRoaXMuX3NldFRhYkFuaW1hdGlvbigpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZXRUYWJBbmltYXRpb24oKSB7XHJcbiAgICB0aGlzLnRhYnNBbmltYXRpb24gPSB7XHJcbiAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkVGFiSW5kZXgsXHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIHN0YXJ0V2lkdGg6IHRoaXMuX3RhYnNFbGVtZW50ID8gdGhpcy5fdGFic0VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA6IDBcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcbiAgc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG4gIG5leHQ6IGJvb2xlYW47XHJcbiAgcHJldjogYm9vbGVhbjtcclxuICBkcmFnZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRhYnNBbmltYXRpb246IHtcclxuICAgIHZhbHVlOiBudW1iZXIsXHJcbiAgICBwYXJhbXM6IHtcclxuICAgICAgc3RhcnRXaWR0aDogbnVtYmVyXHJcbiAgICB9XHJcbiAgfTtcclxuICByZWFkb25seSByaXBwbGU6IFJpcHBsZUNvbmZpZyA9IHtcclxuICAgIGNvbG9yOiB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCgpLFxyXG4gICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICByYWRpdXM6IDI1XHJcbiAgfVxyXG4gIGFjY2VudDogc3RyaW5nID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKTtcclxuICBwcml2YXRlIF9uYXZpZ2F0aW9uSW5Qcm9jZXNzOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX3JlcG9zaXRvcnk6IEV4dGVuZGVkUm91dGVbXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9wZW5kaW5nID0gW10gYXMgc3RyaW5nW107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRsID0gdGhpcy5fc2Vzc2lvbi5pbnZlcnNlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc2l6aW5nID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoUEFORVNfREFUQSkgZGF0YTogRXh0ZW5kZWRSb3V0ZVtdLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFBhbmVzUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBfdGl0bGU6IFdpbmRvd1RpdGxlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2d1aWRlOiBHdWlkZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgIF9zZXNzaW9uLnRoZW1lQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgc3Vic2NyaWJlKCgpID0+IHRoaXMuYWNjZW50ID0gX3Nlc3Npb24uZ2V0QWNjZW50KCkpO1xyXG4gICAgX3JvdXRlci5fY29tbSQuXHJcbiAgICAgIHN1YnNjcmliZShlID0+IHtcclxuICAgICAgICBzd2l0Y2ggKGUpIHtcclxuICAgICAgICAgIGNhc2UgJ2NvbGxhcHNlJzpcclxuICAgICAgICAgICAgdGhpcy5jb2xsYXBzZSgpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuX3JlcG9zaXRvcnkgPSBwcmVwYXJlUm91dGVzKGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX25hdmlnYXRlJC5cclxuICAgICAgc3Vic2NyaWJlKGFzeW5jIG4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgY29tbWFuZHMsIGNvbXBvbmVudCwgcGF0aE1vZGUsIHJlbGF0aXZlVG8sIGluamVjdG9yIH0gPSBuO1xyXG4gICAgICAgIGxldCB7XHJcbiAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBncm91cCxcclxuICAgICAgICAgIGhlbHAsXHJcbiAgICAgICAgICBwb2xpY3ksXHJcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgIHN0YXRlXHJcbiAgICAgICAgfSA9IG47XHJcbiAgICAgICAgbGV0XHJcbiAgICAgICAgICBxdWVyeVN0cmluZzogc3RyaW5nLFxyXG4gICAgICAgICAgcGFyYW1zOiBQYXJhbU1hcCxcclxuICAgICAgICAgIHBhcmVudDogUGFuZVJlZixcclxuICAgICAgICAgIHBhdGg6IHN0cmluZyxcclxuICAgICAgICAgIHJvdXRlOiBFeHRlbmRlZFJvdXRlO1xyXG5cclxuICAgICAgICBpZiAoY29tbWFuZHMgJiYgY29tbWFuZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBwYXRoID0gbi5jb21tYW5kcy5qb2luKCcvJyk7XHJcbiAgICAgICAgICBpZiAocGF0aC5pbmRleE9mKFFVRVJZX0NIQVIpID4gLTEpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VncyA9IHBhdGguc3BsaXQoUVVFUllfQ0hBUik7XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gc2Vnc1sxXTtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nIHx8ICcnKTtcclxuICAgICAgICAgICAgcGF0aCA9IHNlZ3NbMF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSBuLnF1ZXJ5UGFyYW1zIHx8IHt9O1xyXG4gICAgICAgICAgICBxdWVyeVN0cmluZyA9IHRoaXMuX3F1ZXJ5U3RyaW5nKHF1ZXJ5UGFyYW1zKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChwYXRoTW9kZSA9PT0gJ3JlbGF0aXZlJyB8fCBwYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XHJcbiAgICAgICAgICAgIHBhcmVudCA9IHJlbGF0aXZlVG8gfHwgdGhpcy5wYW5lc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgcGFyZW50cGF0aCA9IHBhcmVudC5wYXRoO1xyXG4gICAgICAgICAgICB3aGlsZSAocGF0aC5zdGFydHNXaXRoKCcuLi8nKSkge1xyXG4gICAgICAgICAgICAgIHBhcmVudHBhdGggPSBwYXJlbnRwYXRoLnN1YnN0cmluZygwLCBwYXJlbnRwYXRoLmxhc3RJbmRleE9mKCcvJykpO1xyXG4gICAgICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXRoID0gcGFyZW50cGF0aCArICcvJyArIHBhdGg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByb3V0ZSA9IHRoaXMuX21hdGNoKHBhdGgpO1xyXG5cclxuICAgICAgICAgIGlmICghcm91dGUpXHJcbiAgICAgICAgICAgIHRocm93IGBubyBtYXRjaCAke3BhdGh9YDtcclxuICAgICAgICAgIHBhcmFtcyA9IHRoaXMuX3BhcmFtcyhyb3V0ZSwgcGF0aCk7XHJcbiAgICAgICAgICBpZiAoIXBvbGljeSkgcG9saWN5ID0gcm91dGUucG9saWN5IHx8IERFRkFVTFRfUE9MSUNZO1xyXG4gICAgICAgICAgZWxzZSBpZiAocm91dGUucG9saWN5KSBwb2xpY3kgfD0gcm91dGUucG9saWN5O1xyXG4gICAgICAgICAgaWYgKCFpY29uKSBpY29uID0gcm91dGUuaWNvbjtcclxuICAgICAgICAgIGlmICghaGVscCkgaGVscCA9IHJvdXRlLmhlbHA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCFwb2xpY3kpIHBvbGljeSA9IERFRkFVTFRfUE9MSUNZO1xyXG4gICAgICAgICAgaWYgKCFxdWVyeVBhcmFtcykgcXVlcnlQYXJhbXMgPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5DbGVhcikgPT0gT3BlblBvbGljeS5DbGVhcikge1xyXG4gICAgICAgICAgdGhpcy5fY2xlYXJQZW5kaW5nKCk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9jbGVhclRhYnMoKTtcclxuICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5UYWIpICE9IE9wZW5Qb2xpY3kuVGFiKVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jbGVhclBhbmVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb21tYW5kcykge1xyXG4gICAgICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIpXHJcbiAgICAgICAgICAgIHdoaWxlIChpIDwgdGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGxldCB0YWIgPSB0aGlzLnRhYnNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKHBhdGggPT09IHRhYi5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlcnlTdHJpbmcgPT09IHRhYi5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVG9nZ2xlKSA9PSBPcGVuUG9saWN5LlRvZ2dsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFicy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy50YWJzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgJiYgdGFiLl9kYXRhJC5uZXh0KHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyh0YWIsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSB0YWIuZ3JvdXA7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAodGFiLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHRhYiwgcGFyYW1zLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHdoaWxlIChpIDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKHBhdGggPT09IHBhbmUucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSBwYW5lLnF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5Ub2dnbGUpID09IE9wZW5Qb2xpY3kuVG9nZ2xlKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlICYmIHBhbmUuX2RhdGEkLm5leHQoc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKGkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKGkpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmIChwYW5lLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHBhbmUsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb21tYW5kcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fc3RhdGUocm91dGUsIHBhdGgsIHBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSA9PSBPcGVuUG9saWN5LlRhYilcclxuICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRUYWIocm91dGUuY29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgICAgcm91dGUsXHJcbiAgICAgICAgICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICBncm91cCxcclxuICAgICAgICAgICAgICAgICAgaGVscCxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcG9saWN5LFxyXG4gICAgICAgICAgICAgICAgICBpbmplY3RvclxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRQYW5lKHJvdXRlLmNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgICAgICAgaGVscCxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcG9saWN5LFxyXG4gICAgICAgICAgICAgICAgICBpbmplY3RvclxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJvdXRlICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgcGFuZSA9IChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIgP1xyXG4gICAgICAgICAgICAgIHRoaXMudGFic1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdIDogdGhpcy5wYW5lc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgIT0gT3BlblBvbGljeS5UYWIpIHRoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWRJbmRleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIpIHtcclxuICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LkRlZmVyKSA9PSBPcGVuUG9saWN5LkRlZmVyKVxyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NsZWFyVGFicygpO1xyXG4gICAgICAgICAgICB0aGlzLl9pbnNlcnRUYWIoY29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgaWNvbiwgdGl0bGUsIGhlbHAsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyxcclxuICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICByb3V0ZSxcclxuICAgICAgICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBwb2xpY3ksXHJcbiAgICAgICAgICAgICAgICBpbmplY3RvclxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB0aGlzLl9pbnNlcnRQYW5lKGNvbXBvbmVudCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGRhdGE6IHN0YXRlLFxyXG4gICAgICAgICAgICAgIGljb24sIHRpdGxlLCBoZWxwLFxyXG4gICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICBxdWVyeVN0cmluZyxcclxuICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgICBwb2xpY3ksXHJcbiAgICAgICAgICAgICAgaW5qZWN0b3JcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHdpbmRvdy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3BvcHN0YXRlJyk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBlID0+IHtcclxuICAgICAgaWYgKHRoaXMuX25hdmlnYXRpb25JblByb2Nlc3MpIHtcclxuICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uSW5Qcm9jZXNzID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlLnN0YXRlICYmIGUuc3RhdGUuYml6ZG9jKSB7XHJcbiAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEJhY2tOYXZpZ2F0aW9uKCk7XHJcbiAgICAgICAgaWYgKGV2dC5fcHJldmVudERlZmF1bHQpIHJldHVybjtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gZS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGU7XHJcbiAgICAgICAgdGhpcy5fZGVzZXJpYWxpemUobG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLCBzdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5zd2FwID0gc3RhdGUuc3dhcDtcclxuICAgICAgICB0aGlzLnN3YXBUYWIgPSBzdGF0ZS5zd2FwVGFiO1xyXG4gICAgICAgIHRoaXMucHJldkdyb3VwID0gc3RhdGUucHJldkdyb3VwO1xyXG4gICAgICAgIHRoaXMuZ3JvdXAgPSBzdGF0ZS5ncm91cDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBzdGF0ZS5zZWxlY3RlZFRhYkluZGV4O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLl9kZXNlcmlhbGl6ZShsb2NhdGlvbi5wYXRobmFtZS5zdWJzdHJpbmcoMSkpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAobG9jYXRpb24ucGF0aG5hbWUubGVuZ3RoID4gMSlcclxuICAgICAgdGhpcy5fZGVzZXJpYWxpemUobG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLFxyXG4gICAgICAgIGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyBoaXN0b3J5LnN0YXRlIDogdW5kZWZpbmVkKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fcm91dGVyLl9uYXZpZ2F0ZSQubmV4dCh7XHJcbiAgICAgICAgY29tbWFuZHM6IERFRkFVTFRfUk9VVEUsXHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5fcmVzaXppbmcucGlwZShkZWJvdW5jZVRpbWUoMTUwKSkuc3Vic2NyaWJlKHRoaXMuX3Jlc2l6ZS5iaW5kKHRoaXMpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfZGVzZXJpYWxpemUodXJsOiBzdHJpbmcsIHN0YXRlPzogSGlzdG9yeVN0YXRlKSB7XHJcblxyXG4gICAgY29uc3Qgc2VjdGlvbnMgPSBkZWNvZGVVUklDb21wb25lbnQodXJsKS5zcGxpdChQQU5FX0NIQVIpLFxyXG4gICAgICBwYW5lcyA9IGRlc2VyaWFsaXplKHNlY3Rpb25zWzBdKSxcclxuICAgICAgdGFicyA9IHNlY3Rpb25zLmxlbmd0aCA+IDEgPyBkZXNlcmlhbGl6ZShzZWN0aW9uc1sxXSkgOiBbXTtcclxuXHJcbiAgICBmdW5jdGlvbiBkZXNlcmlhbGl6ZShwYXRoOiBzdHJpbmcpIHtcclxuICAgICAgcmV0dXJuIHBhdGguXHJcbiAgICAgICAgc3BsaXQoUEFUSF9DSEFSKS5tYXAocyA9PiB7XHJcbiAgICAgICAgICBjb25zdCBbcGF0aCwgcXVlcnlTdHJpbmddID0gcy5zcGxpdChRVUVSWV9DSEFSKTtcclxuICAgICAgICAgIHJldHVybiB7IHBhdGgsIHF1ZXJ5U3RyaW5nIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcGFuZSA9IHBhbmVzW2ldO1xyXG4gICAgICBhd2FpdCB0aGlzLl9uYXZpZ2F0ZVBhbmUoaSwgcGFuZS5wYXRoLCBwYW5lLnF1ZXJ5U3RyaW5nLCBzdGF0ZSA/IHN0YXRlLnBhbmVzW2ldIDogbnVsbCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGggPiBwYW5lcy5sZW5ndGgpIHtcclxuICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICB3aGlsZSAoaSA8IHRoaXMucGFuZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2ldO1xyXG4gICAgICAgIGlmIChwYW5lcy5sZW5ndGggLSAxIDwgaSB8fCBwYW5lLnBhdGggIT09IHBhbmVzW2ldLnBhdGgpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPT09IGkpXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGkgLSAxO1xyXG4gICAgICAgICAgdGhpcy5wYW5lcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICB0aGlzLl9kZXN0cm95UGFuZShwYW5lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaSsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4IDwgMClcclxuICAgICAgdGhpcy5zZWxlY3QoMCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHRhYiA9IHRhYnNbaV07XHJcbiAgICAgIGF3YWl0IHRoaXMuX25hdmlnYXRlVGFiKGksIHRhYi5wYXRoLCB0YWIucXVlcnlTdHJpbmcsIHN0YXRlID8gc3RhdGUudGFic1tpXSA6IG51bGwpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGggPiB0YWJzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgaSA9IDA7XHJcbiAgICAgIHdoaWxlIChpIDwgdGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICAgIGxldCB0YWIgPSB0aGlzLnRhYnNbaV07XHJcbiAgICAgICAgaWYgKHRhYnMubGVuZ3RoIC0gMSA8IGkgfHwgdGFiLnBhdGggIT09IHRhYnNbaV0ucGF0aCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9PT0gaSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpIC0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudGFicy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICB0aGlzLl9kZXN0cm95UGFuZSh0YWIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBpKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoICYmIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA8IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcclxuICAgIH1cclxuICAgIGNvbnN0IG4gPSB0aGlzLnBhbmVzLmxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgIGxldCBwYW5lID0gdGhpcy5wYW5lc1tpXTtcclxuICAgICAgaWYgKHBhbmUuZXhwYW5kZWQgIT09IChuID09PSAxKSkge1xyXG4gICAgICAgIGNvbnN0IGV2dCA9IG5ldyBOYXZpZ2F0aW9uRXhwYW5kKHBhbmUuX2V4cGFuZGVkID0gbiA9PT0gMSwgcGFuZSk7XHJcbiAgICAgICAgcGFuZS5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGluZGV4XHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcXVlcnlTdHJpbmdcclxuICAgKiBAcGFyYW0gc3RhdGVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9uYXZpZ2F0ZVBhbmUoaW5kZXg6IG51bWJlciwgcGF0aDogc3RyaW5nLCBxdWVyeVN0cmluZzogc3RyaW5nLCBzdGF0ZT86IGFueSkge1xyXG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLl9tYXRjaChwYXRoKTtcclxuXHJcbiAgICBpZiAoIXJvdXRlKSB0aHJvdyBgbm8gbWF0Y2ggJHtwYXRofWA7XHJcblxyXG4gICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuXHJcbiAgICB3aGlsZSAoaW5kZXggPCB0aGlzLnBhbmVzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaW5kZXhdO1xyXG4gICAgICBpZiAocGF0aCA9PT0gcGFuZS5wYXRoKSB7XHJcbiAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSBwYW5lLnF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICAgIHRoaXMuX25hdlF1ZXJ5UGFyYW1zKHBhbmUsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHBhbmUucm91dGUgPT09IHJvdXRlKSB7XHJcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocGFuZS5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlLCBwYXRoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9uYXZQYXJhbXMocGF0aCwgcGFuZSwgcGFyYW1zLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BhcmFtcyhyb3V0ZSwgcGF0aCk7XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZmluZEFuY2VzdG9yKHJvdXRlLCBwYXRoKTtcclxuICAgIGF3YWl0IHRoaXMuX3N0YXRlKHJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgIHRoaXMuX2luc2VydFBhbmUocm91dGUuY29tcG9uZW50LCB7XHJcbiAgICAgIHBhdGgsIHBhcmVudCwgcm91dGUsIGRhdGE6IHN0YXRlLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICBpY29uOiByb3V0ZS5pY29uLFxyXG4gICAgICBoZWxwOiByb3V0ZS5oZWxwLFxyXG4gICAgICBwb2xpY3k6IHJvdXRlLnBvbGljeSxcclxuICAgICAgZm9jdXM6IGZhbHNlXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2aWdhdGVUYWIoaW5kZXg6IG51bWJlciwgcGF0aDogc3RyaW5nLCBxdWVyeVN0cmluZzogc3RyaW5nLCBzdGF0ZT86IGFueSkge1xyXG4gICAgY29uc3Qgcm91dGUgPSB0aGlzLl9tYXRjaChwYXRoKTtcclxuXHJcbiAgICBpZiAoIXJvdXRlKSB0aHJvdyBgbm8gbWF0Y2ggJHtwYXRofWA7XHJcblxyXG4gICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuXHJcbiAgICB3aGlsZSAoaW5kZXggPCB0aGlzLnRhYnMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCB0YWIgPSB0aGlzLnRhYnNbaW5kZXhdO1xyXG4gICAgICBpZiAocGF0aCA9PT0gdGFiLnBhdGgpIHtcclxuICAgICAgICBpZiAocXVlcnlTdHJpbmcgPT09IHRhYi5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyh0YWIsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRhYi5yb3V0ZSA9PT0gcm91dGUpIHtcclxuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BhcmFtcyh0YWIucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSwgcGF0aCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHRhYiwgcGFyYW1zLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpbmRleCsrO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BhcmFtcyhyb3V0ZSwgcGF0aCk7XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG5cclxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRBbmNlc3Rvcihyb3V0ZSwgcGF0aCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5fc3RhdGUocm91dGUsIHBhdGgsIHBhcmFtcywgc3RhdGUpO1xyXG4gICAgdGhpcy5faW5zZXJ0VGFiKHJvdXRlLmNvbXBvbmVudCwge1xyXG4gICAgICBpY29uOiByb3V0ZS5pY29uLFxyXG4gICAgICBoZWxwOiByb3V0ZS5oZWxwLFxyXG4gICAgICBwb2xpY3k6IHJvdXRlLnBvbGljeSB8IE9wZW5Qb2xpY3kuVGFiLFxyXG4gICAgICBwYXRoLCBwYXJlbnQsIHJvdXRlLFxyXG4gICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgcGFyYW1zLCBxdWVyeVBhcmFtcyxcclxuICAgICAgZm9jdXM6IGZhbHNlLFxyXG4gICAgICBzd2FwOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2ZpbmRBbmNlc3Rvcihyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nKSB7XHJcbiAgICBpZiAoKHJvdXRlIGFzIEV4dGVuZGVkUm91dGUpLnBhcmVudClcclxuICAgICAgcmV0dXJuIHRoaXMucGFuZXMuZmluZChwID0+IChwLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUpID09PVxyXG4gICAgICAgIChyb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKS5wYXJlbnQgJiZcclxuICAgICAgICBwYXRoLnN0YXJ0c1dpdGgocC5wYXRoKSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbmF2UXVlcnlQYXJhbXMocGFuZTogUGFuZVJlZjxhbnk+LCBxdWVyeVBhcmFtczogUGFyYW1NYXAsIHN0YXRlOiBQYXJhbU1hcCkge1xyXG4gICAgcGFuZS5fcXVlcnlTdHJpbmcgPSB0aGlzLl9xdWVyeVN0cmluZyhxdWVyeVBhcmFtcyk7XHJcbiAgICBzdGF0ZSAmJiBwYW5lLl9kYXRhJC5uZXh0KHN0YXRlKTtcclxuICAgIHBhbmUuX3F1ZXJ5UGFyYW1zJC5uZXh0KHF1ZXJ5UGFyYW1zKTtcclxuICAgIGNvbnN0IGV2dCA9IG5ldyBRdWVyeVBhcmFtTmF2aWdhdGlvbihxdWVyeVBhcmFtcywgcGFuZSk7XHJcbiAgICBwYW5lLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKiBAcGFyYW0gcGFyYW1zXHJcbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zXHJcbiAgICogQHBhcmFtIHN0YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2UGFyYW1zKHBhdGg6IHN0cmluZywgcGFuZTogUGFuZVJlZjxhbnk+LCBwYXJhbXM6IFBhcmFtTWFwLCBxdWVyeVBhcmFtczogUGFyYW1NYXAsIHN0YXRlOiBQYXJhbU1hcCkge1xyXG4gICAgaWYgKHBhbmUucm91dGUuY2FuRGlzbWlzcylcclxuICAgICAgYXdhaXQgdGhpcy5fZGlzbWlzcyhwYW5lKTtcclxuXHJcbiAgICBpZiAoIXN0YXRlKSBzdGF0ZSA9IHt9O1xyXG4gICAgYXdhaXQgdGhpcy5fc3RhdGUocGFuZS5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgIHBhbmUuX2RhdGEkLm5leHQoc3RhdGUpO1xyXG4gICAgcGFuZS5fcGF0aCA9IHBhdGg7XHJcbiAgICBwYW5lLl9wYXJhbXMkLm5leHQocGFyYW1zKTtcclxuICAgIGlmIChxdWVyeVBhcmFtcykge1xyXG4gICAgICBwYW5lLl9xdWVyeVN0cmluZyA9IHRoaXMuX3F1ZXJ5U3RyaW5nKHF1ZXJ5UGFyYW1zKTtcclxuICAgICAgcGFuZS5fcXVlcnlQYXJhbXMkLm5leHQocXVlcnlQYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHBhbmUuX3F1ZXJ5U3RyaW5nID0gJyc7XHJcbiAgICAgIHBhbmUuX3F1ZXJ5UGFyYW1zJC5uZXh0KHt9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IGV2dCA9IG5ldyBQYXJhbU5hdmlnYXRpb24ocGFyYW1zLCBwYW5lKTtcclxuICAgIHBhbmUuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuXHJcbiAgICB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICBpZiAoY2hpbGQucm91dGUgJiYgKGNoaWxkLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUpLnBhcmVudCA9PT0gcGFuZS5yb3V0ZSkge1xyXG4gICAgICAgIGNoaWxkLl9kYXRhJC5uZXh0KE9iamVjdC5hc3NpZ24oY2hpbGQuZGF0YSwgc3RhdGUpKTtcclxuICAgICAgICBjaGlsZC5fcGFyYW1zJC5uZXh0KHBhcmFtcyk7XHJcbiAgICAgICAgY2hpbGQuX3BhdGggPSBwYW5lLnBhdGggKyAnLycgKyBjaGlsZC5yb3V0ZS5wYXRoO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPiAtMSAmJiBjaGlsZCA9PT0gdGhpcy50YWJzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF0pIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMuc2VsZWN0ZWRUYWJJbmRleDtcclxuICAgICAgICAgIHRoaXMuZ3JvdXAgPSBjaGlsZC5ncm91cDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHBhbmUubW9kZSA9PT0gJ3BhbmUnKSB0aGlzLnRpdGxlQW5pbWF0aW9uKys7XHJcbiAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIC8qKiAqL1xyXG4gIHByaXZhdGUgX3N5bmNCcm93c2VySGlzdG9yeSgpIHtcclxuICAgIGxldCBwYXRoID0gdGhpcy5wYW5lcy5maWx0ZXIocCA9PiBwLnJvdXRlKS5tYXAocyA9PiBzLmZ1bGxQYXRoKS5qb2luKFBBVEhfQ0hBUik7XHJcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCB0YWJzID0gdGhpcy50YWJzLmZpbHRlcihwID0+IHAucm91dGUpO1xyXG4gICAgICBpZiAodGFicy5sZW5ndGgpXHJcbiAgICAgICAgcGF0aCArPSBQQU5FX0NIQVIgKyB0YWJzLm1hcChzID0+IHMuZnVsbFBhdGgpLmpvaW4oUEFUSF9DSEFSKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fY29uc3RydWN0SGlzdG9yeVN0YXRlKCk7XHJcbiAgICB0aGlzLl9uYXZpZ2F0aW9uSW5Qcm9jZXNzID0gdHJ1ZTtcclxuICAgIGhpc3RvcnkucHVzaFN0YXRlKHN0YXRlLCAnJywgJy8nICsgcGF0aCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX25hdmlnYXRpb25JblByb2Nlc3MgPSBmYWxzZSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NvbnN0cnVjdEhpc3RvcnlTdGF0ZSgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGJpemRvYzogdHJ1ZSxcclxuICAgICAgc3RlcDogaGlzdG9yeS5zdGF0ZSAmJiBoaXN0b3J5LnN0YXRlLmJpemRvYyA/IChoaXN0b3J5LnN0YXRlIGFzIEhpc3RvcnlTdGF0ZSkuc3RlcCArIDEgOiAxLFxyXG4gICAgICBzZWxlY3RlZFRhYkluZGV4OiB0aGlzLnNlbGVjdGVkVGFiSW5kZXgsXHJcbiAgICAgIHBhbmVzOiB0aGlzLnBhbmVzLm1hcChwID0+IHAuZGF0YSksXHJcbiAgICAgIHRhYnM6IHRoaXMudGFicy5tYXAodCA9PiB0LmRhdGEpLFxyXG4gICAgICBzd2FwOiB0aGlzLnN3YXAsXHJcbiAgICAgIGdyb3VwOiB0aGlzLmdyb3VwLFxyXG4gICAgICBzd2FwVGFiOiB0aGlzLnN3YXBUYWIsXHJcbiAgICAgIHByZXZHcm91cDogdGhpcy5wcmV2R3JvdXBcclxuICAgIH0gYXMgSGlzdG9yeVN0YXRlO1xyXG4gIH1cclxuXHJcbiAgZHJvcChldnQ6IENka0RyYWdEcm9wPHN0cmluZywgc3RyaW5nPikge1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXNbZXZ0LnByZXZpb3VzSW5kZXhdO1xyXG4gICAgdGhpcy5wYW5lcy5zcGxpY2UoZXZ0LnByZXZpb3VzSW5kZXgsIDEpO1xyXG4gICAgdGhpcy5wYW5lcy5zcGxpY2UoZXZ0LmN1cnJlbnRJbmRleCwgMCwgcGFuZSk7XHJcbiAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVBpbm5lZChwYW5lOiBQYW5lUmVmPGFueT4pIHtcclxuICAgIHBhbmUucGlubmVkID0gIXBhbmUucGlubmVkO1xyXG4gICAgdGhpcy5wYW5lcy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICBpZiAocy5kZWNlbmRlbnRPZihwYW5lKSkgcy5waW5uZWQgPSBwYW5lLnBpbm5lZDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcXVlcnlTdHJpbmcocXVlcnlQYXJhbXM6IFBhcmFtTWFwKSB7XHJcbiAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1zKTtcclxuICAgIGxldCBxdWVyeVN0cmluZzogc3RyaW5nO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdmFsID0gcXVlcnlQYXJhbXNbbmFtZXNbaV1dO1xyXG5cclxuICAgICAgaWYgKHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICghcXVlcnlTdHJpbmcpIHF1ZXJ5U3RyaW5nID0gJyc7XHJcbiAgICAgICAgZWxzZSBxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nICsgQVJHX0NIQVI7XHJcblxyXG4gICAgICAgIGlmIChpc1N0cmluZyh2YWwpKVxyXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7bmFtZXNbaV19PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbCl9YDtcclxuICAgICAgICBlbHNlIGlmIChpc0FycmF5KHZhbCkpXHJcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSB2YWwubWFwKHYgPT4gYCR7bmFtZXNbaV19PSR7dn1gKS5qb2luKEFSR19DSEFSKTtcclxuICAgICAgICBlbHNlIGlmIChpc0RhdGUodmFsKSlcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke25hbWVzW2ldfT0ke3ZhbC50b0pTT04oKX1gO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke25hbWVzW2ldfT0ke3ZhbH1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcnlTdHJpbmc7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmc6IHN0cmluZyk6IFBhcmFtTWFwIHtcclxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge307XHJcbiAgICBxdWVyeVN0cmluZyAmJiBxdWVyeVN0cmluZy5cclxuICAgICAgc3BsaXQoQVJHX0NIQVIpLmZvckVhY2gocCA9PiB7XHJcbiAgICAgICAgY29uc3QgW25hbWUsIHZhbHVlXSA9IHAuc3BsaXQoJz0nKTtcclxuICAgICAgICBpZiAoIXF1ZXJ5UGFyYW1zW25hbWVdKVxyXG4gICAgICAgICAgcXVlcnlQYXJhbXNbbmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHZhbHMgPSBxdWVyeVBhcmFtc1tuYW1lXTtcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zW25hbWVdID0gaXNBcnJheSh2YWxzKSA/IFsuLi52YWxzLCB2YWx1ZV0gOiBbdmFscywgdmFsdWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gcXVlcnlQYXJhbXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSByb3V0ZVxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcGFyYW1zKHJvdXRlOiBFeHRlbmRlZFJvdXRlLCBwYXRoOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGV4ID0gcm91dGUucmVnRXguZXhlYyhwYXRoKSxcclxuICAgICAgcGFyYW1zID0gZXguZ3JvdXBzO1xyXG5cclxuICAgIHJldHVybiBwYXJhbXMgfHwge307XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB1cmxcclxuICAgKi9cclxuICBwcml2YXRlIF9tYXRjaCh1cmw6IHN0cmluZykge1xyXG4gICAgbGV0IHJvdXRlID0gdGhpcy5fcmVwb3NpdG9yeS5maW5kKHIgPT4gci5yZWdFeC50ZXN0KHVybCkpO1xyXG4gICAgaWYgKHJvdXRlKVxyXG4gICAgICB3aGlsZSAocm91dGUuY2hpbGRyZW4pIHtcclxuICAgICAgICBsZXQgY2hpbGQgPSByb3V0ZS5jaGlsZHJlbi5maW5kKHIgPT4gci5yZWdFeC50ZXN0KHVybCkpO1xyXG4gICAgICAgIGlmIChjaGlsZClcclxuICAgICAgICAgIHJvdXRlID0gY2hpbGQ7XHJcbiAgICAgICAgZWxzZSBicmVhaztcclxuICAgICAgfVxyXG4gICAgcmV0dXJuIHJvdXRlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcm91dGVcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKiBAcGFyYW0gZGF0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX3N0YXRlKHJvdXRlOiBFeHRlbmRlZFJvdXRlLCBwYXRoOiBzdHJpbmcsIHBhcmFtczogUGFyYW1NYXAsIGRhdGE6IFBhcmFtTWFwKSB7XHJcbiAgICBpZiAodGhpcy5fcGVuZGluZy5pbmRleE9mKHBhdGgpID4gLTEpIHtcclxuICAgICAgLy90aGlzLl9wcy50b2FzdCgnV29ya2luZycpO1xyXG4gICAgICB0aHJvdyAnYWxyZWFkeSBwcm9jZXNzaW5nJztcclxuICAgIH1cclxuICAgIHRoaXMuX3BlbmRpbmcucHVzaChwYXRoKTtcclxuXHJcbiAgICBjb25zdCB7IHBhcmVudCwgcmVzb2x2ZSB9ID0gcm91dGU7XHJcbiAgICBpZiAocGFyZW50KVxyXG4gICAgICBhd2FpdCB0aGlzLl9wYXJlbnRzdGF0ZShwYXJlbnQsIHBhdGgsIHBhcmFtcywgZGF0YSk7XHJcbiAgICBpZiAocmVzb2x2ZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLl9yZXNvbHZlKHJlc29sdmUsIHBhcmFtcywgZGF0YSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wZW5kaW5nLnJlbW92ZShwYXRoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHJvdXRlXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcGFyYW1zXHJcbiAgICogQHBhcmFtIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9wYXJlbnRzdGF0ZShyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nLCBwYXJhbXM6IFBhcmFtTWFwLCBkYXRhOiBQYXJhbU1hcCkge1xyXG4gICAgY29uc3QgeyBwYXJlbnQsIHJlc29sdmUgfSA9IHJvdXRlO1xyXG5cclxuICAgIGlmIChwYXJlbnQpXHJcbiAgICAgIGF3YWl0IHRoaXMuX3BhcmVudHN0YXRlKHBhcmVudCwgcGF0aCwgcGFyYW1zLCBkYXRhKTtcclxuXHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lcy5maW5kKHMgPT4gcy5yb3V0ZSAmJiBzLnJvdXRlID09PSByb3V0ZVxyXG4gICAgICAmJiBwYXRoLnN0YXJ0c1dpdGgocy5wYXRoKSk7XHJcblxyXG4gICAgcGFuZSAmJiBPYmplY3QuYXNzaWduKGRhdGEsIHBhbmUuZGF0YSk7XHJcblxyXG4gICAgaWYgKHJlc29sdmUpXHJcbiAgICAgIGF3YWl0IHRoaXMuX3Jlc29sdmUocmVzb2x2ZSwgcGFyYW1zLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3Jlc29sdmUocmVzb2x2ZTogeyBba2V5OiBzdHJpbmddOiBDb21wb25lbnRUeXBlPFBhbmVSZXNvbHZlPGFueT4+IH0sIHBhcmFtczogUGFyYW1NYXAsIGRhdGE6IFBhcmFtTWFwKSB7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVzb2x2ZSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGtleSA9IGtleXNbaV07XHJcbiAgICAgIGlmICghZGF0YVtrZXldKSB7XHJcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQocmVzb2x2ZVtrZXldKSBhcyBQYW5lUmVzb2x2ZTxhbnk+O1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW5zdGFuY2Uub25SZXNvbHZlKHBhcmFtcyk7XHJcbiAgICAgICAgaWYgKGlzUHJvbWlzZSh2YWx1ZSkpXHJcbiAgICAgICAgICBhd2FpdCB2YWx1ZS50aGVuKHIgPT4gZGF0YVtrZXldID0gcik7XHJcbiAgICAgICAgZWxzZSBpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSlcclxuICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHZhbHVlLnBpcGUodGFwKHIgPT4gZGF0YVtrZXldID0gcikpKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkPFQ+KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPiwgb3B0aW9ucz86IFBhbmVPcHRpb25zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnNlcnQodGhpcy5wYW5lcy5sZW5ndGgsIGNvbXBvbmVudCwgb3B0aW9ucyk7XHJcbiAgfVxyXG4gIGluc2VydDxUPihwb3NpdGlvbjogbnVtYmVyLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sIG9wdGlvbnM/OiBQYW5lT3B0aW9ucykge1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMuX2luc2VydFBhbmU8VD4oY29tcG9uZW50LCBvcHRpb25zIHx8IHt9LCBwb3NpdGlvbik7XHJcbiAgICByZXR1cm4gcGFuZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaW5zZXJ0UGFuZTxUID0gYW55Pihjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sIG9wdGlvbnM6IHtcclxuICAgIHBhdGg/OiBzdHJpbmc7XHJcbiAgICByb3V0ZT86IFBhbmVSb3V0ZTtcclxuICAgIGljb24/OiBzdHJpbmc7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxuICAgIGlucHV0cz86IHsgW25hbWU6IHN0cmluZ106IGFueSB9LFxyXG4gICAgZGF0YT86IFBhcmFtTWFwO1xyXG4gICAgcGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICBxdWVyeVBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgaGVscD86IHN0cmluZztcclxuICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xyXG4gICAgcG9saWN5PzogT3BlblBvbGljeTtcclxuICAgIGluamVjdG9yPzogSW5qZWN0b3I7XHJcbiAgICBmb2N1cz86IGJvb2xlYW5cclxuICB9LCBwb3NpdGlvbj86IG51bWJlcikge1xyXG5cclxuICAgIGNvbnN0IHN0cmV0Y2hhYmxlID0gKG9wdGlvbnMucG9saWN5ICYgT3BlblBvbGljeS5TdHJldGNoKSA9PSBPcGVuUG9saWN5LlN0cmV0Y2g7XHJcblxyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMuX2NvbnN0cmFjdDxUPihjb21wb25lbnQsIHtcclxuICAgICAgbW9kZTogJ3BhbmUnLFxyXG4gICAgICBleHBhbmRlZDogIXRoaXMucGFuZXMubGVuZ3RoLFxyXG4gICAgICBzdHJldGNoYWJsZSxcclxuICAgICAgLi4ub3B0aW9uc1xyXG4gICAgfSk7XHJcbiAgICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZClcclxuICAgICAgcG9zaXRpb24gPSB0aGlzLnBhbmVzLmxlbmd0aDtcclxuICAgIHRoaXMucGFuZXMucHVzaChwYW5lKTtcclxuICAgIHRoaXMudGl0bGVBbmltYXRpb24rKztcclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGNvbnN0IGV2dCA9IG5ldyBOYXZpZ2F0aW9uU3RhcnQocGFuZSk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgaWYgKG9wdGlvbnMuZm9jdXMgIT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHBvc2l0aW9uO1xyXG4gICAgICB0aGlzLl90aXRsZS5zZXQocGFuZS50aXRsZSk7XHJcbiAgICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCA+IDEpIHRoaXMuc2Nyb2xsVG8ocG9zaXRpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbmFibGVOYXZpZ2F0aW9uQXJyb3dzKCk7XHJcbiAgICByZXR1cm4gcGFuZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbXBvbmVudFxyXG4gICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfY29uc3RyYWN0PFQgPSBhbnk+KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPixcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgbW9kZTogUGFuZU1vZGUsXHJcbiAgICAgIGV4cGFuZGVkPzogYm9vbGVhbjtcclxuICAgICAgZGlhbG9nPzogYm9vbGVhbjtcclxuICAgICAgc3RyZXRjaGFibGU/OiBib29sZWFuO1xyXG4gICAgICBwYXRoPzogc3RyaW5nO1xyXG4gICAgICByb3V0ZT86IFBhbmVSb3V0ZTtcclxuICAgICAgaWNvbj86IHN0cmluZztcclxuICAgICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gICAgICBkYXRhPzogUGFyYW1NYXA7XHJcbiAgICAgIHBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgICBxdWVyeVBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgICBoZWxwPzogc3RyaW5nO1xyXG4gICAgICBwYXJlbnQ/OiBQYW5lUmVmPGFueT47XHJcbiAgICAgIGluamVjdG9yPzogSW5qZWN0b3I7XHJcbiAgICAgIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xyXG4gICAgICBkaXNtaXNzYWJsZT86IGJvb2xlYW47XHJcbiAgICAgIGV4cGFuZGFibGU/OiBib29sZWFuXHJcbiAgICB9KSB7XHJcbiAgICBjb25zdCBwYW5lID0gbmV3IFBhbmVSZWY8VD4oY29tcG9uZW50LCBvcHRpb25zLmluamVjdG9yIHx8IHRoaXMuX2luamVjdG9yLCBvcHRpb25zKTtcclxuICAgIHBhbmUuX2NvbW1hbmQkLnN1YnNjcmliZShlID0+IHRoaXMuX3BhbmVDb21tYW5kPFQ+KGUsIHBhbmUpKTtcclxuICAgIHJldHVybiBwYW5lO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29tcG9uZW50XHJcbiAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgKi9cclxuICBwcml2YXRlIF9pbnNlcnRUYWI8VCA9IGFueT4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zOiB7XHJcbiAgICBpY29uPzogc3RyaW5nO1xyXG4gICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICBncm91cD86IHN0cmluZztcclxuICAgIGhlbHA/OiBzdHJpbmc7XHJcbiAgICBwYXRoPzogc3RyaW5nO1xyXG4gICAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XHJcbiAgICByb3V0ZT86IFBhbmVSb3V0ZTtcclxuICAgIGRhdGE/OiBQYXJhbU1hcDtcclxuICAgIHBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgcXVlcnlQYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgIHBvbGljeT86IE9wZW5Qb2xpY3k7XHJcbiAgICBpbmplY3Rvcj86IEluamVjdG9yO1xyXG4gICAgc3dhcD86IGJvb2xlYW47XHJcbiAgICBmb2N1cz86IGJvb2xlYW47XHJcbiAgfSkge1xyXG4gICAgY29uc3QgeyBwb2xpY3kgfSA9IG9wdGlvbnMsXHJcbiAgICAgIGRpYWxvZyA9IChwb2xpY3kgJiBPcGVuUG9saWN5LkRpYWxvZykgPT0gT3BlblBvbGljeS5EaWFsb2csXHJcbiAgICAgIGV4cGFuZGFibGUgPSAocG9saWN5ICYgT3BlblBvbGljeS5FeHBhbmRhYmxlKSA9PSBPcGVuUG9saWN5LkV4cGFuZGFibGUsXHJcbiAgICAgIGRpc21pc3NhYmxlID0gKHBvbGljeSAmIE9wZW5Qb2xpY3kuRGlzbWlzc2FibGUpID09IE9wZW5Qb2xpY3kuRGlzbWlzc2FibGU7XHJcblxyXG4gICAgY29uc3QgdGFiID0gdGhpcy5fY29uc3RyYWN0PFQ+KGNvbXBvbmVudCxcclxuICAgICAge1xyXG4gICAgICAgIG1vZGU6ICd0YWInLFxyXG4gICAgICAgIGV4cGFuZGVkOiBmYWxzZSxcclxuICAgICAgICAuLi5vcHRpb25zLFxyXG4gICAgICAgIGRpYWxvZyxcclxuICAgICAgICBkaXNtaXNzYWJsZSxcclxuICAgICAgICBleHBhbmRhYmxlXHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy50YWJzLnB1c2godGFiKTtcclxuICAgIGRpYWxvZyAmJiB0aGlzLmRpYWxvZ0NoYW5nZS5lbWl0KHRoaXMuZGlhbG9nID0gdHJ1ZSk7XHJcbiAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvblN0YXJ0KHRhYikpO1xyXG4gICAgaWYgKHRhYi5ncm91cCAmJiB0aGlzLmdyb3VwICE9PSB0YWIuZ3JvdXAgJiYgb3B0aW9ucy5zd2FwICE9PSBmYWxzZSkge1xyXG4gICAgICBsZXQgaSA9IDAsIHN3YXAgPSBmYWxzZTtcclxuICAgICAgZG8ge1xyXG4gICAgICAgIGlmICh0aGlzLnRhYnNbaV0uZ3JvdXAgIT09IHRhYi5ncm91cCkge1xyXG4gICAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUodGhpcy50YWJzW2ldKTtcclxuICAgICAgICAgIHRoaXMudGFicy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICBzd2FwID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaSsrXHJcbiAgICAgIH0gd2hpbGUgKGkgPCB0aGlzLnRhYnMubGVuZ3RoKTtcclxuICAgICAgaWYgKHN3YXApIHtcclxuICAgICAgICB0aGlzLnN3YXBUYWIgPSB0aGlzLl9nZXRIaXN0b3J5U3RlcCgpO1xyXG4gICAgICAgIHRoaXMucHJldkdyb3VwID0gdGhpcy5ncm91cDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnN3YXBUYWIgPSBudWxsO1xyXG4gICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgIGlmIChvcHRpb25zLmZvY3VzICE9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoIC0gMTtcclxuICAgIH1cclxuICAgIHJldHVybiB0YWI7XHJcbiAgfVxyXG5cclxuICBndWlkZShuYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2d1aWRlLnN0YXJ0KG5hbWUpO1xyXG4gIH1cclxuICBiYWNrKCkge1xyXG4gICAgdGhpcy5fbmF2QmFjayh0aGlzLnN3YXApO1xyXG4gICAgdGhpcy5zd2FwID0gbnVsbDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHN0ZXBzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2QmFjayhzdGVwczogbnVtYmVyKSB7XHJcbiAgICBoaXN0b3J5LmdvKHN0ZXBzIC0gKGhpc3Rvcnkuc3RhdGUgYXMgSGlzdG9yeVN0YXRlKS5zdGVwKTtcclxuICB9XHJcbiAgdGFiQmFjaygpIHtcclxuICAgIHRoaXMuX25hdkJhY2sodGhpcy5zd2FwVGFiKTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb21tYW5kXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9wYW5lQ29tbWFuZDxUID0gYW55Pihjb21tYW5kOiBQYW5lQ29tbWFuZCwgcGFuZTogUGFuZVJlZjxUPikge1xyXG4gICAgc3dpdGNoIChjb21tYW5kKSB7XHJcbiAgICAgIGNhc2UgJ2ZvY3VzJzpcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZiAocGFuZS5tb2RlID09PSAndGFiJykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucGFuZXMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgICAgdGhpcy5mb2N1cyhpbmRleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIGNhc2UgJ2Nsb3NlJzpcclxuICAgICAgICBpZiAocGFuZS5tb2RlID09PSAndGFiJykge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgIHRoaXMuY2xvc2VUYWIoaW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYW5lcy5pbmRleE9mKHBhbmUpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVBdChpbmRleCk7XHJcbiAgICAgICAgICB0aGlzLl9jbGVhclBlbmRpbmcoKTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX2NsZWFyVGFicygpO1xyXG4gICAgICAgICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKERFRkFVTFRfUk9VVEUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZXhwYW5kJzpcclxuICAgICAgICBpZiAocGFuZS5tb2RlID09PSAndGFiJylcclxuICAgICAgICAgIHRoaXMuZXhwYW5kVGFiKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5leHBhbmRQYW5lKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3JlY3ljbGUnOiB7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9jb25zdHJ1Y3RIaXN0b3J5U3RhdGUoKTtcclxuICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShzdGF0ZSwgJycpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIGVzY2FwZVxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJylcclxuICBhc3luYyBjb2xsYXBzZSgpIHtcclxuICAgIGlmICghdGhpcy50YWJzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IENvbGxhcHNlTmF2aWdhdGlvbigpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIGlmIChldnQuX3ByZXZlbnREZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLl9jbGVhclBlbmRpbmcoKTtcclxuICAgIGF3YWl0IHRoaXMuX2NsZWFyVGFicygpO1xyXG4gICAgdGhpcy5kaWFsb2cgJiZcclxuICAgICAgdGhpcy5kaWFsb2dDaGFuZ2UuZW1pdCh0aGlzLmRpYWxvZyA9IGZhbHNlKTtcclxuICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBvblJlc2l6ZSgpIHtcclxuICAgIHRoaXMuX3Jlc2l6aW5nLm5leHQoKTtcclxuICB9XHJcbiAgLyoqICovXHJcbiAgcHJpdmF0ZSBfcmVzaXplKCkge1xyXG4gICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoID4gMSAmJiAhdGhpcy5wYW5lc1t0aGlzLnBhbmVzLmxlbmd0aCAtIDFdLnN0cmV0Y2hhYmxlKSB7XHJcbiAgICAgIGNvbnN0IGVsID0gdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgIGNoaWxkID0gZWwubGFzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgICAgY2hpbGQuc3R5bGUubWluV2lkdGggPVxyXG4gICAgICAgIChlbC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBlbC5wYXJlbnRFbGVtZW50Lm9mZnNldExlZnQgLSBjaGlsZC5vZmZzZXRMZWZ0IC0gMikgKyAncHgnO1xyXG4gICAgfVxyXG4gICAgdGhpcy50YWJzLmNvbmNhdCh0aGlzLnBhbmVzKS5mb3JFYWNoKHAgPT4gcC5fZXZlbnRzJC5uZXh0KG5ldyBOYXZpZ2F0aW9uUmVzaXplKHtcclxuICAgIH0gYXMgYW55LCBwKSkpO1xyXG4gIH1cclxuICBjbG9zZVRhYihwb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbcG9zaXRpb25dO1xyXG4gICAgaWYgKCF0aGlzLl9jbG9zaW5nKHRhYikpIHJldHVybjtcclxuICAgIHRoaXMudGFicy5zcGxpY2UocG9zaXRpb24sIDEpO1xyXG4gICAgdGhpcy5fZGVzdHJveVBhbmUodGFiKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggPyBwb3NpdGlvbiA+IDAgPyBwb3NpdGlvbiAtIDEgOiAwIDogLTE7XHJcbiAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgIHRhYi5kaWFsb2cgJiZcclxuICAgICAgdGhpcy5kaWFsb2dDaGFuZ2UuZW1pdCh0aGlzLmRpYWxvZyA9IGZhbHNlKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIF9jbG9zaW5nKHBhbmU6IFBhbmVSZWY8YW55Pikge1xyXG4gICAgbGV0IGV2dCA9IG5ldyBOYXZpZ2F0aW9uQ2xvc2UocGFuZSk7XHJcbiAgICBwYW5lLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHJldHVybiAhZXZ0Ll9wcmV2ZW50RGVmYXVsdDtcclxuICB9XHJcblxyXG4gIGV4cGFuZFBhbmUoKSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IE5hdmlnYXRpb25FeHBhbmQocGFuZS5fZXhwYW5kZWQgPSB0cnVlLCBwYW5lKTtcclxuICAgIHBhbmUuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIGlmIChldnQuX3ByZXZlbnREZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLnN3YXAgPSB0aGlzLl9nZXRIaXN0b3J5U3RlcCgpO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgZG8ge1xyXG4gICAgICBpZiAodGhpcy5wYW5lc1tpXSAhPT0gcGFuZSkge1xyXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRoaXMucGFuZXNbaV0pO1xyXG4gICAgICAgIHRoaXMucGFuZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpKys7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoaSA8IHRoaXMucGFuZXMubGVuZ3RoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZ2V0SGlzdG9yeVN0ZXAoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBoaXN0b3J5LnN0YXRlICYmIGhpc3Rvcnkuc3RhdGUuYml6ZG9jID8gKGhpc3Rvcnkuc3RhdGUgYXMgSGlzdG9yeVN0YXRlKS5zdGVwIDogMDtcclxuICB9XHJcblxyXG4gIGV4cGFuZFRhYigpIHtcclxuICAgIGNvbnN0IHRhYiA9IHRoaXMudGFic1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IE5hdmlnYXRpb25FeHBhbmQodGFiLl9leHBhbmRlZCA9IHRydWUsIHRhYilcclxuICAgIHRhYi5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgaWYgKGV2dC5fcHJldmVudERlZmF1bHQpIHJldHVybjtcclxuICAgIHRoaXMuc3dhcCA9IHRoaXMuX2dldEhpc3RvcnlTdGVwKCk7XHJcbiAgICB0aGlzLnN3YXBUYWIgPSBudWxsO1xyXG4gICAgdGhpcy5wYW5lcy5mb3JFYWNoKHAgPT5cclxuICAgICAgdGhpcy5fZGVzdHJveVBhbmUocClcclxuICAgICk7XHJcbiAgICB0aGlzLnRhYnMuc3BsaWNlKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCwgMSk7XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZSgwLCB0aGlzLnBhbmVzLmxlbmd0aCwgdGFiKTtcclxuXHJcbiAgICB0YWIuX21vZGUgPSAncGFuZSc7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoID8gMCA6IC0xO1xyXG4gICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3QocG9zaXRpb246IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gcG9zaXRpb24pIHJldHVybjtcclxuICAgIGlmIChwb3NpdGlvbiA9PT0gLTEpIHtcclxuICAgICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoKSBwb3NpdGlvbiA9IHRoaXMucGFuZXMubGVuZ3RoIC0gMTtcclxuICAgICAgZWxzZSByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBwb3NpdGlvbjtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzW3Bvc2l0aW9uXTtcclxuICAgIGNvbnN0IGV2dCA9IG5ldyBOYXZpZ2F0aW9uRm9jdXMocGFuZSk7XHJcbiAgICBwYW5lLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICB0aGlzLl90aXRsZS5zZXQocGFuZS50aXRsZSk7XHJcbiAgfVxyXG4gIGFzeW5jIHJlbW92ZUF0KHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzW3Bvc2l0aW9uXTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2Nsb3NpbmcocGFuZSkpIHJldHVybjtcclxuXHJcbiAgICBhd2FpdCB0aGlzLl9kaXNtaXNzKHBhbmUpO1xyXG5cclxuICAgIHRoaXMuX2Rpc2NhcmRQYW5lKHBhbmUpO1xyXG5cclxuICAgIGlmIChwb3NpdGlvbiA+PSB0aGlzLnNlbGVjdGVkSW5kZXgpXHJcbiAgICAgIHRoaXMuc2VsZWN0KC0xKTtcclxuICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX2Rpc21pc3MocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICBjb25zdCBwYW5lcyA9IHRoaXMucGFuZXMuY29uY2F0KHRoaXMudGFicykuXHJcbiAgICAgIGZpbHRlcihzID0+IHMuZGVjZW5kZW50T2YocGFuZSkgJiYgcy5yb3V0ZSAmJiBzLnJvdXRlLmNhbkRpc21pc3MpLlxyXG4gICAgICByZXZlcnNlKCk7XHJcblxyXG4gICAgcGFuZS5yb3V0ZSAmJiBwYW5lLnJvdXRlLmNhbkRpc21pc3MgJiZcclxuICAgICAgcGFuZXMucHVzaChwYW5lKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBvayA9IGF3YWl0IHRoaXMuX2Rpc21pc3NhYmxlKHBhbmVzW2ldKTtcclxuICAgICAgaWYgKCFvaykgdGhyb3cgJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZGlzY2FyZFBhbmUocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLlxyXG4gICAgICBmaWx0ZXIocyA9PiBzLmRlY2VuZGVudE9mKHBhbmUpKS5cclxuICAgICAgcmV2ZXJzZSgpLlxyXG4gICAgICBmb3JFYWNoKHMgPT4gdGhpcy5fZGlzY2FyZFBhbmUocykpO1xyXG4gICAgdGhpcy5fZGVzdHJveVBhbmUocGFuZSk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucGFuZXMuaW5kZXhPZihwYW5lKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY2xlYXJQZW5kaW5nKCkge1xyXG4gICAgdGhpcy5fcGVuZGluZy5zcGxpY2UoMCwgdGhpcy5fcGVuZGluZy5sZW5ndGgpO1xyXG4gIH1cclxuICAvKiogKi9cclxuICBwcml2YXRlIGFzeW5jIF9jbGVhclBhbmVzKCkge1xyXG4gICAgYXdhaXQgdGhpcy5fZGlzbWlzc0FsbCh0aGlzLnBhbmVzKTtcclxuICAgIHRoaXMucGFuZXMuZm9yRWFjaChwID0+IHRoaXMuX2Rlc3Ryb3lQYW5lKHApKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKDAsIHRoaXMucGFuZXMubGVuZ3RoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5zd2FwID0gbnVsbDtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfY2xlYXJUYWJzKCkge1xyXG4gICAgaWYgKCF0aGlzLnRhYnMubGVuZ3RoKSByZXR1cm47XHJcbiAgICBhd2FpdCB0aGlzLl9kaXNtaXNzQWxsKHRoaXMudGFicyk7XHJcbiAgICB0aGlzLnRhYnMuZm9yRWFjaCh0ID0+IHRoaXMuX2Rlc3Ryb3lQYW5lKHQpKTtcclxuICAgIHRoaXMudGFicy5zcGxpY2UoMCwgdGhpcy50YWJzLmxlbmd0aCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAtMTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX2Rpc21pc3NBbGwocGFuZXM6IFBhbmVSZWZbXSkge1xyXG4gICAgZm9yIChsZXQgcGFuZSBvZiBwYW5lcy5cclxuICAgICAgZmlsdGVyKHMgPT4gcy5yb3V0ZSAmJiBzLnJvdXRlLmNhbkRpc21pc3MpKSB7XHJcbiAgICAgIGxldCBvayA9IGF3YWl0IHRoaXMuX2Rpc21pc3NhYmxlKHBhbmUpO1xyXG4gICAgICBpZiAoIW9rKVxyXG4gICAgICAgIHRocm93ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIF9kaXNtaXNzYWJsZShwYW5lOiBQYW5lUmVmPGFueT4pIHtcclxuICAgIGNvbnN0IHsgaW5zdGFuY2UsIHJvdXRlOiB7IGNhbkRpc21pc3MgfSB9ID0gcGFuZTtcclxuICAgIGNvbnN0IGRpc21pc3NhYmxlID0gdGhpcy5faW5qZWN0b3IuZ2V0KGNhbkRpc21pc3MpIGFzIENhbkRpc21pc3M8YW55PjtcclxuICAgIGNvbnN0IG9rID0gZGlzbWlzc2FibGUub25EaXNtaXNzKGluc3RhbmNlKTtcclxuICAgIGlmIChpc0Jvb2xlYW4ob2spKVxyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9rKTtcclxuICAgIGVsc2UgaWYgKGlzUHJvbWlzZShvaykpXHJcbiAgICAgIHJldHVybiBvaztcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKG9rKTtcclxuICB9XHJcbiAgc2Nyb2xsVG8oaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuX2NoaWxkcmVuLml0ZW0oaW5kZXgpIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gICAgaXRlbSAmJiBpdGVtLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBpbmxpbmU6ICdlbmQnLCBibG9jazogJ2VuZCcgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBfY2hpbGRyZW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wYW5lLWNvbnRlbnQnKTtcclxuICB9XHJcbiAgZG9uZSgpIHtcclxuICAgIHRoaXMuZW5hYmxlTmF2aWdhdGlvbkFycm93cygpO1xyXG4gICAgdGhpcy5fcmVzaXplKCk7XHJcbiAgfVxyXG4gIGVuYWJsZU5hdmlnYXRpb25BcnJvd3MoXz86IEV2ZW50KSB7XHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9wYW5lc0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgIHNjcm9sbExlZnQgPSBNYXRoLnJvdW5kKGNvbnRhaW5lci5zY3JvbGxMZWZ0KTtcclxuICAgIHRoaXMubmV4dCA9IHRoaXMuX3J0bCA/IGNvbnRhaW5lci5jbGllbnRXaWR0aCAtIHNjcm9sbExlZnQgPCBjb250YWluZXIuc2Nyb2xsV2lkdGggOlxyXG4gICAgICBzY3JvbGxMZWZ0ICsgY29udGFpbmVyLmNsaWVudFdpZHRoIDwgY29udGFpbmVyLnNjcm9sbFdpZHRoO1xyXG4gICAgdGhpcy5wcmV2ID0gdGhpcy5fcnRsID8gc2Nyb2xsTGVmdCA8IDAgOiBzY3JvbGxMZWZ0ID4gMDtcclxuICB9XHJcbiAgc2Nyb2xsQnkobjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBsZWZ0ID0gbiAqICh0aGlzLl9ydGwgPyAtMSA6IDEpO1xyXG4gICAgdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEJ5KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBsZWZ0IH0pO1xyXG4gIH1cclxuICBmb2N1cyhpbmRleCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLl9jaGlsZHJlbi5pdGVtKGluZGV4KSBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgIGVsLmZvY3VzKCk7XHJcbiAgfVxyXG4gIG9uUGFuZVJlc2l6ZShwYW5lOiBQYW5lUmVmPGFueT4sIGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBjb25zdCBlbCA9IChldmVudC50YXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgYXMgSFRNTERpdkVsZW1lbnQ7XHJcblxyXG4gICAgY29uc3QgLy8gcmVtZW1iZXIgbW91c2UgZG93biBpbmZvXHJcbiAgICAgIHdpZHRoID0gZWwuY2xpZW50V2lkdGgsXHJcbiAgICAgIGQgPSB0aGlzLl9ydGwgPyAtMSA6IDE7XHJcblxyXG4gICAgKGV2ZW50LnRhcmdldCBhcyBIVE1MRGl2RWxlbWVudCkuY2xhc3NMaXN0LmFkZCgncmVzaXppbmcnKTtcclxuXHJcbiAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG9uTW91c2VNb3ZlO1xyXG4gICAgZG9jdW1lbnQub25tb3VzZXVwID0gKCkgPT4ge1xyXG4gICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZycpO1xyXG4gICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIH07XHJcbiAgICBmdW5jdGlvbiBvbk1vdXNlTW92ZShlKSB7XHJcblxyXG4gICAgICBjb25zdCBkZWx0YSA9IChlLmNsaWVudFggLSBldmVudC5jbGllbnRYKSAqIGQ7XHJcbiAgICAgIGVsLnN0eWxlLndpZHRoID0gZWwuc3R5bGUubWluV2lkdGhcclxuICAgICAgICA9IE1hdGgubWF4KHdpZHRoICsgZGVsdGEsIDM1MCkgKyAncHgnO1xyXG4gICAgICBwYW5lLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25SZXNpemUoe30gYXMgYW55LCBwYW5lKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uVGFiUmVzaXplKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBjb25zdCBlbCA9IChldmVudC50YXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpLm5leHRFbGVtZW50U2libGluZyBhcyBIVE1MRGl2RWxlbWVudDtcclxuXHJcbiAgICBjb25zdFxyXG4gICAgICBtZSA9IHRoaXMsXHJcbiAgICAgIC8vIHJlbWVtYmVyIG1vdXNlIGRvd24gaW5mb1xyXG4gICAgICB3aWR0aCA9IGVsLmNsaWVudFdpZHRoLFxyXG4gICAgICBkID0gdGhpcy5fcnRsID8gMSA6IC0xO1xyXG5cclxuICAgIChldmVudC50YXJnZXQgYXMgSFRNTERpdkVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nJyk7XHJcblxyXG4gICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XHJcblxyXG4gICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBvbk1vdXNlTW92ZTtcclxuICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9ICgpID0+IHtcclxuICAgICAgKGV2ZW50LnRhcmdldCBhcyBIVE1MRGl2RWxlbWVudCkuY2xhc3NMaXN0LnJlbW92ZSgncmVzaXppbmcnKTtcclxuICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsO1xyXG4gICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgIG1lLmVuYWJsZU5hdmlnYXRpb25BcnJvd3MoKTtcclxuICAgICAgdGhpcy5fcmVzaXplKCk7XHJcbiAgICB9O1xyXG4gICAgZnVuY3Rpb24gb25Nb3VzZU1vdmUoZSkge1xyXG5cclxuICAgICAgLy8gcHJldmVudCBuZWdhdGl2ZS1zaXplZCBlbGVtZW50c1xyXG4gICAgICBjb25zdCBkZWx0YSA9IE1hdGgubWF4KChlLmNsaWVudFggLSBldmVudC5jbGllbnRYKSAqIGQsIC13aWR0aCk7XHJcbiAgICAgIGVsLnN0eWxlLndpZHRoID0gZWwuc3R5bGUubWluV2lkdGggPSAod2lkdGggKyBkZWx0YSkgKyAncHgnO1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndGFicycsIGVsLnN0eWxlLndpZHRoKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBfZGVzdHJveVBhbmUocGFuZTogUGFuZVJlZikge1xyXG4gICAgcGFuZS5fZGVzdHJveSgpO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IE5hdmlnYXRpb25FbmQocGFuZSk7XHJcbiAgICBwYW5lLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBQQU5FX1BBUkFNU19SRUdFWCA9IC8oOltcXHdcXC1dKykvZztcclxuXHJcbmZ1bmN0aW9uIHByZXBhcmVSb3V0ZXMocm91dGVzOiBQYW5lUm91dGVbXSwgdHJlZVBhdGg/OiBzdHJpbmcpOiBFeHRlbmRlZFJvdXRlW10ge1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm91dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBsZXQgcm91dGUgPSByb3V0ZXNbaV0sIGZ1bGxQYXRoID0gKHRyZWVQYXRoID8gKHRyZWVQYXRoICsgJy8nKSA6ICcnKSArIHJvdXRlLnBhdGg7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihyb3V0ZSwge1xyXG4gICAgICBmdWxsUGF0aCxcclxuICAgICAgcmVnRXg6IG5ldyBSZWdFeHAoJ14nICsgZnVsbFBhdGguXHJcbiAgICAgICAgcmVwbGFjZSgnLycsICdcXFxcLycpLlxyXG4gICAgICAgIHJlcGxhY2UoUEFORV9QQVJBTVNfUkVHRVgsIGUgPT4gYCg/PCR7ZS5zdWJzdHJpbmcoMSl9PltcXFxcd0BcXFxcLV0qKWApKVxyXG4gICAgfSk7XHJcbiAgICBpZiAocm91dGUuY2hpbGRyZW4pIHtcclxuICAgICAgbGV0IGNoaWxkcmVuID0gcHJlcGFyZVJvdXRlcyhyb3V0ZS5jaGlsZHJlbiwgZnVsbFBhdGgpO1xyXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNoaWxkcmVuLmxlbmd0aDsgaisrKVxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oY2hpbGRyZW5bal0sIHtcclxuICAgICAgICAgIHBhcmVudDogcm91dGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHJvdXRlcyBhcyBFeHRlbmRlZFJvdXRlW107XHJcbn1cclxuXHJcbmludGVyZmFjZSBFeHRlbmRlZFJvdXRlIGV4dGVuZHMgUGFuZVJvdXRlIHtcclxuICBmdWxsUGF0aDogc3RyaW5nO1xyXG4gIHJlZ0V4OiBSZWdFeHA7XHJcbiAgcGFyZW50PzogRXh0ZW5kZWRSb3V0ZTtcclxuICBjaGlsZHJlbj86IEV4dGVuZGVkUm91dGVbXTtcclxufVxyXG5pbnRlcmZhY2UgSGlzdG9yeVN0YXRlIHtcclxuICBiaXpkb2M6IHRydWU7XHJcbiAgc3RlcDogbnVtYmVyO1xyXG4gIHN3YXA/OiBudW1iZXI7XHJcbiAgc3dhcFRhYj86IG51bWJlcjtcclxuICBncm91cD86IHN0cmluZztcclxuICBwcmV2R3JvdXA/OiBzdHJpbmc7XHJcbiAgcGFuZXM6IGFueVtdO1xyXG4gIHRhYnM6IGFueVtdO1xyXG4gIHNlbGVjdGVkVGFiSW5kZXg/OiBudW1iZXI7XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInBhbmVzXCI+XHJcbiAgPGRpdiBjbGFzcz1cInNjcm9sbC1hcnJvd1wiIChjbGljayk9XCJzY3JvbGxCeSgtNDAwKVwiIG1hdFJpcHBsZSBbbWF0UmlwcGxlVW5ib3VuZGVkXT1cInRydWVcIiBbbWF0UmlwcGxlQ2VudGVyZWRdPVwidHJ1ZVwiIFttYXRSaXBwbGVDb2xvcl09XCJhY2NlbnRcIlxyXG4gICAgICAgKm5nSWY9XCJwcmV2XCI+XHJcbiAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIG1hdC1pY29uLXJ0bC1taXJyb3JcIj5cclxuICAgICAgYXJyb3dfYmFja19pb3NcclxuICAgIDwvaT5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwicGFuZXMtdGl0bGVcIiBbQHRpdGxlXT1cInRpdGxlQW5pbWF0aW9uXCI+XHJcbiAgICA8aDE+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJiYWNrKClcIiAqbmdJZj1cInN3YXBcIiBbYml6ZG9jVG9vbHRpcF09XCInQmFjayd8dHJhbnNsYXRlXCI+PG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPmFycm93X2NpcmNsZV9sZWZ0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcCBvZiBwYW5lczsgbGV0IGZpcnN0ID0gZmlyc3RcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImJyZWFkY3J1bWJzXCIgKm5nSWY9XCIhZmlyc3RcIj5cXDwvc3Bhbj5cclxuICAgICAgICB7e3AudGl0bGV9fVxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImd1aWRlKHBhbmVzWzBdLmd1aWRlKVwiICpuZ0lmPVwicGFuZXNbMF0/Lmd1aWRlXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0hlbHAnfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj5oZWxwPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvaDE+XHJcbiAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxiaXpkb2MtcXVpY2t0b29scz48L2JpemRvYy1xdWlja3Rvb2xzPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgI3Bhbm5pbmcgY2xhc3M9XCJwYW5lcy1jb250YWluZXJcIlxyXG4gICAgICAgY2RrU2Nyb2xsYWJsZVxyXG4gICAgICAgQHBhbmVzXHJcbiAgICAgICAoc2Nyb2xsKT1cImVuYWJsZU5hdmlnYXRpb25BcnJvd3MoJGV2ZW50KVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcCBvZiBwYW5lczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICA8ZGl2IChtb3VzZWVudGVyKT1cInNlbGVjdGVkSW5kZXggIT09IGkgJiYgIWRyYWdnaW5nICYmIHNlbGVjdChpKVwiXHJcbiAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdChpKVwiXHJcbiAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZEluZGV4ID09PSBpICYmIHBhbmVzLmxlbmd0aCA+IDFcIiBjbGFzcz1cInBhbmUtY29udGVudFwiIEBwYW5lPlxyXG4gICAgICAgIDxuZ3gtY29tcG9uZW50LW91dGxldCBbdHlwZV09XCJwLmNvbXBvbmVudFwiIFtpbmplY3Rvcl09XCJwLmluamVjdG9yXCIgKGNyZWF0ZSk9XCJwLl9pbnN0YW5jZSA9ICRldmVudFwiPjwvbmd4LWNvbXBvbmVudC1vdXRsZXQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGFuZS1zZXBhcmF0b3JcIiAqbmdJZj1cImkgPCBwYW5lcy5sZW5ndGggLSAxXCIgKG1vdXNlZG93bik9XCJvblBhbmVSZXNpemUocCwgJGV2ZW50KVwiPiZuYnNwOzwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImJhY2tkcm9wXCIgKm5nSWY9XCJkaWFsb2dcIiAoY2xpY2spPVwiY2xvc2VUYWIoc2VsZWN0ZWRUYWJJbmRleClcIj48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwic2Nyb2xsLWFycm93IGZvcndhcmRcIlxyXG4gICAgICAgKm5nSWY9XCJuZXh0XCI+XHJcbiAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIG1hdC1pY29uLXJ0bC1taXJyb3JcIiBtYXRSaXBwbGUgW21hdFJpcHBsZVVuYm91bmRlZF09XCJ0cnVlXCIgW21hdFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIiBbbWF0UmlwcGxlUmFkaXVzXT1cIjMwXCIgW21hdFJpcHBsZUNvbG9yXT1cImFjY2VudFwiXHJcbiAgICAgICAoY2xpY2spPVwic2Nyb2xsQnkoNDAwKVwiPlxyXG4gICAgICBhcnJvd19mb3J3YXJkX2lvc1xyXG4gICAgPC9pPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnMubGVuZ3RoXCI+XHJcbiAgPGRpdiBjbGFzcz1cInRhYnMtc2VwYXJhdG9yXCIgKG1vdXNlZG93bik9XCJvblRhYlJlc2l6ZSgkZXZlbnQpXCI+Jm5ic3A7PC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejE4IHRhYnNcIiAjdGFiaW5nIFtAdGFic109XCJ0YWJzQW5pbWF0aW9uXCIgKEB0YWJzLmRvbmUpPVwiZG9uZSgpXCI+XHJcbiAgICA8IS0tLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IHRhYnMtdGl0bGVcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRhYkJhY2soKVwiICpuZ0lmPVwic3dhcFRhYlwiIFtiaXpkb2NUb29sdGlwXT1cInByZXZHcm91cCB8fCAoJ0JhY2snfHRyYW5zbGF0ZSlcIj48bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+YXJyb3dfYmFjazwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDxoMj57e2dyb3VwfX08L2gyPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cIiFkaWFsb2dcIiAoY2xpY2spPVwiZXhwYW5kVGFiKClcIiBbYml6ZG9jVG9vbHRpcF09XCInRXhwYW5kJ3wgdHJhbnNsYXRlXCI+PG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPm9wZW5faW5fZnVsbDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDwhLS0qbmdJZj1cInNlbGVjdGVkVGFiSW5kZXggPD08IC0xICYmIHRhYnNbc2VsZWN0ZWRUYWJJbmRleF0uZXhwYW5kYWJsZVwiLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNvbGxhcHNlKClcIiBiaXpkb2NUb29sdGlwPVwiRXNjXCI+PG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5hdiBtYXQtdGFiLW5hdi1iYXIgY29sb3I9XCJhY2NlbnRcIiBbZGlzYWJsZVBhZ2luYXRpb25dPVwidHJ1ZVwiIFt0YWJQYW5lbF09XCJ0YWJQYW5lbFwiPlxyXG4gICAgICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPVwibGV0IHQgb2YgdGFiczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwibWF0LXRhYi1saW5rXCJcclxuICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVGFiSW5kZXggPSBpXCJcclxuICAgICAgICAgW2FjdGl2ZV09XCJzZWxlY3RlZFRhYkluZGV4ID09PSBpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIFttYXRCYWRnZV09XCJ0LmJhZGdlXCIgW21hdEJhZGdlSGlkZGVuXT1cIiF0LmJhZGdlXCIgbWF0QmFkZ2VTaXplPVwic21hbGxcIiBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCI+e3t0Lmljb259fTwvbWF0LWljb24+Jm5ic3A7XHJcbiAgICAgICAge3t0LnRpdGxlfX1cclxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJ0LmRpc21pc3NhYmxlXCIgKGNsaWNrKT1cImNsb3NlVGFiKGkpXCIgY2xhc3M9XCJ0b29sXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwhLS1pbmxpbmU9XCJ0cnVlXCItLT5cclxuICAgICAgPC9hPlxyXG4gICAgPC9uYXY+XHJcbiAgICA8bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsIGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0IG9mIHRhYnM7IGxldCBpID0gaW5kZXhcIiBbc3R5bGUuZGlzcGxheV09XCJzZWxlY3RlZFRhYkluZGV4ID09PSBpID8gJyc6ICdub25lJ1wiIGNsYXNzPVwidGFiXCIgW0B0YWJdPVwic2VsZWN0ZWRUYWJJbmRleFwiPlxyXG4gICAgICAgIDxuZ3gtY29tcG9uZW50LW91dGxldCBbdHlwZV09XCJ0LmNvbXBvbmVudFwiIFtpbmplY3Rvcl09XCJ0LmluamVjdG9yXCIgKGNyZWF0ZSk9XCJ0Ll9pbnN0YW5jZSA9ICRldmVudFwiPjwvbmd4LWNvbXBvbmVudC1vdXRsZXQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9tYXQtdGFiLW5hdi1wYW5lbD5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==