raise-common-lib 0.0.235-beta → 0.0.236-beta

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 (98) hide show
  1. package/README.md +57 -57
  2. package/bundles/raise-common-lib.umd.js +62 -30
  3. package/bundles/raise-common-lib.umd.js.map +1 -1
  4. package/bundles/raise-common-lib.umd.min.js +1 -1
  5. package/bundles/raise-common-lib.umd.min.js.map +1 -1
  6. package/esm2015/lib/commentary/index.component.js +3 -2
  7. package/esm2015/lib/common-grid/grid-action/grid-action.component.js +3 -2
  8. package/esm2015/lib/common-grid/index.component.js +3 -2
  9. package/esm2015/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.js +4 -3
  10. package/esm2015/lib/dashboard/dashboardPorlets.service.js +4 -3
  11. package/esm2015/lib/dashboard/dialog-group/download/index.component.js +3 -2
  12. package/esm2015/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.js +3 -2
  13. package/esm2015/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.js +3 -2
  14. package/esm2015/lib/dashboard/gadget-group/gadget-table/gadget-table.component.js +3 -2
  15. package/esm2015/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.js +3 -2
  16. package/esm2015/lib/dashboard/pane-group-new.component.js +4 -3
  17. package/esm2015/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.js +3 -2
  18. package/esm2015/lib/dashboard/sidebar-iconlist/field-format/field-format.component.js +3 -2
  19. package/esm2015/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.js +3 -2
  20. package/esm2015/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.js +4 -3
  21. package/esm2015/lib/dialog/common-delete-dialog/index.component.js +3 -2
  22. package/esm2015/lib/dialog/common-dialog/index.component.js +3 -2
  23. package/esm2015/lib/form/checkbox-group/index.component.js +3 -2
  24. package/esm2015/lib/form/confirm-select/index.component.js +3 -2
  25. package/esm2015/lib/form/search-input/index.component.js +3 -2
  26. package/esm2015/lib/layout/grid-box/index.component.js +3 -2
  27. package/esm2015/lib/layout/multi-tab/index.component.js +3 -2
  28. package/esm2015/lib/layout/page-list/index.component.js +3 -2
  29. package/esm2015/lib/layout/rs-header/index.component.js +5 -4
  30. package/esm2015/lib/service/dialog.service.js +3 -2
  31. package/esm2015/lib/utils/utils.js +32 -0
  32. package/esm5/lib/commentary/index.component.js +3 -2
  33. package/esm5/lib/common-grid/grid-action/grid-action.component.js +3 -2
  34. package/esm5/lib/common-grid/index.component.js +3 -2
  35. package/esm5/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.js +4 -3
  36. package/esm5/lib/dashboard/dashboardPorlets.service.js +4 -3
  37. package/esm5/lib/dashboard/dialog-group/download/index.component.js +3 -2
  38. package/esm5/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.js +3 -2
  39. package/esm5/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.js +3 -2
  40. package/esm5/lib/dashboard/gadget-group/gadget-table/gadget-table.component.js +3 -2
  41. package/esm5/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.js +3 -2
  42. package/esm5/lib/dashboard/pane-group-new.component.js +4 -3
  43. package/esm5/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.js +3 -2
  44. package/esm5/lib/dashboard/sidebar-iconlist/field-format/field-format.component.js +3 -2
  45. package/esm5/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.js +3 -2
  46. package/esm5/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.js +4 -3
  47. package/esm5/lib/dialog/common-delete-dialog/index.component.js +3 -2
  48. package/esm5/lib/dialog/common-dialog/index.component.js +3 -2
  49. package/esm5/lib/form/checkbox-group/index.component.js +3 -2
  50. package/esm5/lib/form/confirm-select/index.component.js +3 -2
  51. package/esm5/lib/form/search-input/index.component.js +3 -2
  52. package/esm5/lib/layout/grid-box/index.component.js +3 -2
  53. package/esm5/lib/layout/multi-tab/index.component.js +3 -2
  54. package/esm5/lib/layout/page-list/index.component.js +3 -2
  55. package/esm5/lib/layout/rs-header/index.component.js +5 -4
  56. package/esm5/lib/service/dialog.service.js +3 -2
  57. package/esm5/lib/utils/utils.js +32 -0
  58. package/fesm2015/raise-common-lib.js +62 -30
  59. package/fesm2015/raise-common-lib.js.map +1 -1
  60. package/fesm5/raise-common-lib.js +62 -30
  61. package/fesm5/raise-common-lib.js.map +1 -1
  62. package/lib/utils/utils.d.ts +1 -0
  63. package/package.json +1 -1
  64. package/raise-common-lib.metadata.json +1 -1
  65. package/src/assets/img/arrow_right.svg +4 -4
  66. package/src/assets/img/calendar-disabled.svg +6 -6
  67. package/src/assets/img/calendar.svg +6 -6
  68. package/src/assets/img/calendar_arrow_left.svg +3 -3
  69. package/src/assets/img/calendar_arrow_right.svg +3 -3
  70. package/src/assets/img/checked-vector.svg +3 -3
  71. package/src/assets/img/dialog-close.svg +4 -4
  72. package/src/assets/img/dialog-grow.svg +6 -6
  73. package/src/assets/img/dialog-shrink.svg +6 -6
  74. package/src/assets/img/plus.svg +4 -4
  75. package/src/assets/img/search.svg +4 -4
  76. package/src/assets/img/shrink-icon.svg +6 -6
  77. package/src/assets/img/time-disabled.svg +4 -4
  78. package/src/assets/img/time.svg +4 -4
  79. package/src/assets/img/toolbar-action-addFolder.svg +17 -17
  80. package/src/assets/img/toolbar-action-calculator.svg +11 -11
  81. package/src/assets/img/toolbar-action-collapse.svg +7 -7
  82. package/src/assets/img/toolbar-action-combine.svg +4 -4
  83. package/src/assets/img/toolbar-action-edit.svg +4 -4
  84. package/src/assets/img/toolbar-action-expand.svg +7 -7
  85. package/src/assets/img/toolbar-action-folderMove.svg +8 -8
  86. package/src/assets/img/toolbar-action-lock.svg +6 -6
  87. package/src/assets/img/toolbar-action-preview.svg +7 -7
  88. package/src/assets/img/toolbar-action-publish.svg +5 -5
  89. package/src/assets/img/toolbar-action-reminders.svg +10 -10
  90. package/src/assets/img/toolbar-action-rename.svg +7 -7
  91. package/src/assets/img/toolbar-action-saveSequence.svg +5 -5
  92. package/src/assets/img/toolbar-action-send-file.svg +5 -5
  93. package/src/assets/img/toolbar-action-settle.svg +7 -7
  94. package/src/assets/img/toolbar-action-share.svg +5 -5
  95. package/src/assets/img/toolbar-action-submitForApproval.svg +4 -4
  96. package/src/assets/img/toolbar-action-sync.svg +4 -4
  97. package/src/assets/img/toolbar-action-template.svg +6 -6
  98. package/src/assets/img/toolbar-action-workflow.svg +9 -9
@@ -17,6 +17,7 @@ import { Predicate, Query } from "@syncfusion/ej2-data/src/query";
17
17
  import { DataUtil } from "@syncfusion/ej2-data";
18
18
  import moment from "moment";
19
19
  import { PBF_TOKEN } from "../../../service/InjectionToken";
20
+ import { getTranslation } from "../../../utils/utils";
20
21
  enableRipple(false);
21
22
  var GadgetPivotComponent = /** @class */ (function () {
22
23
  function GadgetPivotComponent(dashboardPorletsService, dashboardService, ref, pbf) {
@@ -3395,7 +3396,7 @@ var GadgetPivotComponent = /** @class */ (function () {
3395
3396
  */
3396
3397
  function () {
3397
3398
  this.datePipeFormat = localStorage.getItem("datePipe");
3398
- this.translation = JSON.parse(localStorage.getItem("translation"));
3399
+ this.translation = getTranslation();
3399
3400
  };
3400
3401
  /**
3401
3402
  * @param {?} args
@@ -4937,4 +4938,4 @@ if (false) {
4937
4938
  */
4938
4939
  GadgetPivotComponent.prototype.pbf;
4939
4940
  }
4940
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3JhaXNlLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvZGFzaGJvYXJkL2dhZGdldC1ncm91cC9nYWRnZXQtcGl2b3QvZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ04saUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUNULHVCQUF1QixFQUN2QixNQUFNLEVBQ04sUUFBUSxHQUNSLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFTix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBR2xCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUV0QixrQkFBa0IsRUFHbEIsb0JBQW9CLEVBSXBCLG1CQUFtQixHQUduQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFDTixJQUFJLEVBQ0osWUFBWSxFQUNaLE9BQU8sR0FDUCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFDTixNQUFNLEVBQ04sY0FBYyxFQUNkLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sSUFBSSxPQUFPLEVBQ2pCLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sR0FDTixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQix1QkFBdUIsR0FDdkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FB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Z0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7O0lBNjdIL0MsMkJBQUM7Q0FBQSxBQTE5SEQsSUEwOUhDO1NBMzhIWSxvQkFBb0I7OztJQUNoQyx1Q0FBaUI7O0lBQ2pCLHlDQUFtQjs7SUFDbkIsd0NBQWtCOzs7OztJQUNsQiwwQ0FBK0I7Ozs7O0lBQy9CLHNDQUFlOztJQUNmLGtEQUF3Qzs7SUFDeEMsNENBQWtDOzs7OztJQUNsQyw2Q0FBMkI7Ozs7O0lBQzNCLDhDQUE0Qjs7Ozs7SUFDNUIsOENBQXVCOztJQUN2QiwyQ0FBbUI7Ozs7O0lBQ25CLHdDQUNxQzs7SUFDckMsNENBQzZDOzs7OztJQUM3QywwQ0FBc0M7Ozs7O0lBQ3RDLDJDQUF5Qjs7Ozs7SUFDekIseUNBQXVCOzs7OztJQUN2QixvQ0FBOEI7Ozs7O0lBQzlCLDRDQUE0Qjs7Ozs7SUFDNUIsNkNBQTJDOzs7OztJQUMzQyw0Q0FBcUI7Ozs7O0lBRXJCLHNDQUErQjs7Ozs7SUFDL0IsOENBQXNDOztJQUN0QywrQ0FFRTs7Ozs7SUFDRiwyQ0FBeUI7Ozs7O0lBQ3pCLDRDQUEwQjs7Ozs7SUFDMUIsNkNBU0U7O0lBQ0YsNENBRUU7O0lBQ0YsbURBTUU7Ozs7O0lBQ0YsMkNBQXlCOzs7OztJQUN6QixzREFBMkM7Ozs7O0lBQzNDLHVEQUE0Qzs7Ozs7SUFDNUMsOENBR0U7Ozs7O0lBQ0YsNkNBQTJCOzs7OztJQUMzQiw2Q0FBMkI7O0lBQzNCLDhDQUFzQjs7SUFDdEIsMENBQW1DOztJQUNuQywyQ0FBd0I7Ozs7O0lBQ3hCLGdEQUE4Qjs7SUFDOUIsMkNBQW1COztJQXUvQ25CLDhDQUFvQjs7Ozs7SUFwL0NuQix1REFBd0Q7Ozs7O0lBQ3hELGdEQUEwQzs7Ozs7SUFDMUMsbUNBQThCOzs7OztJQUM5QixtQ0FBK0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG5cdENoYW5nZURldGVjdG9yUmVmLFxyXG5cdENvbXBvbmVudCxcclxuXHRJbnB1dCxcclxuXHRPbkluaXQsXHJcblx0Vmlld0NoaWxkLFxyXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG5cdEluamVjdCxcclxuXHRPcHRpb25hbCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtcclxuXHRJRGF0YU9wdGlvbnMsXHJcblx0UGl2b3RGaWVsZExpc3RDb21wb25lbnQsXHJcblx0UGl2b3RWaWV3Q29tcG9uZW50LFxyXG5cdEVuZ2luZVBvcHVsYXRlZEV2ZW50QXJncyxcclxuXHRJRGF0YVNldCxcclxuXHRUb29sYmFyU2VydmljZSxcclxuXHRGaWVsZExpc3RTZXJ2aWNlLFxyXG5cdE51bWJlckZvcm1hdHRpbmdTZXJ2aWNlLFxyXG5cdENhbGN1bGF0ZWRGaWVsZFNlcnZpY2UsXHJcblx0Q2FsY3VsYXRlZEZpZWxkQ3JlYXRlRXZlbnRBcmdzLFxyXG5cdEdyb3VwaW5nQmFyU2VydmljZSxcclxuXHRGaWVsZERyb3BFdmVudEFyZ3MsXHJcblx0SVNvcnQsXHJcblx0VmlydHVhbFNjcm9sbFNlcnZpY2UsXHJcblx0SVBpdm90VmFsdWVzLFxyXG5cdElQYWdlU2V0dGluZ3MsXHJcblx0RHJpbGxUaHJvdWdoRXZlbnRBcmdzLFxyXG5cdERyaWxsVGhyb3VnaFNlcnZpY2UsXHJcblx0UGl2b3RBY3Rpb25GYWlsdXJlRXZlbnRBcmdzLFxyXG5cdFF1ZXJ5Q2VsbEluZm9FdmVudEFyZ3MsXHJcbn0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXBpdm90dmlld1wiO1xyXG5pbXBvcnQge1xyXG5cdEwxMG4sXHJcblx0ZW5hYmxlUmlwcGxlLFxyXG5cdEJyb3dzZXIsXHJcbn0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1iYXNlXCI7XHJcbmltcG9ydCB7IEdyaWRTZXR0aW5ncyB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItcGl2b3R2aWV3L3NyYy9waXZvdHZpZXcvbW9kZWwvZ3JpZHNldHRpbmdzXCI7XHJcbmltcG9ydCB7XHJcblx0c29ydEJ5LFxyXG5cdGRpZmZlcmVuY2VXaXRoLFxyXG5cdHN0YXJ0c1dpdGgsXHJcblx0Y2xvbmVEZWVwLFxyXG5cdHVuaXFCeSxcclxuXHRmaWx0ZXIgYXMgX2ZpbHRlcixcclxuXHRtYXhCeSxcclxuXHRtaW5CeSxcclxuXHRzdW1CeSxcclxuXHRtZWFuQnksXHJcbn0gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgeyBEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2Rhc2hib2FyZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7XHJcblx0QUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0QUxMX0FHR1JFR0FURV9UWVBFUyxcclxuXHREYXNoYm9hcmRQb3JsZXRzU2VydmljZSxcclxufSBmcm9tIFwiLi4vLi4vZGFzaGJvYXJkUG9ybGV0cy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE1hc2tlZFRleHRCb3ggfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWlucHV0cy9zcmMvbWFza2VkdGV4dGJveC9tYXNrZWR0ZXh0Ym94XCI7XHJcbmltcG9ydCB7IERhdGFNYW5hZ2VyIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1kYXRhL3NyYy9tYW5hZ2VyXCI7XHJcbmltcG9ydCB7IFByZWRpY2F0ZSwgUXVlcnkgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWRhdGEvc3JjL3F1ZXJ5XCI7XHJcbmltcG9ydCB7IERhdGFVdGlsIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1kYXRhXCI7XHJcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQgeyBQQkZfVE9LRU4gfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZS9JbmplY3Rpb25Ub2tlblwiO1xyXG5cclxuZW5hYmxlUmlwcGxlKGZhbHNlKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiBcInJzLWdhZGdldC1waXZvdFwiLFxyXG5cdHRlbXBsYXRlVXJsOiBcIi4vZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC5odG1sXCIsXHJcblx0c3R5bGVVcmxzOiBbXCIuL2dhZGdldC1waXZvdC5jb21wb25lbnQuc2Nzc1wiXSxcclxuXHRwcm92aWRlcnM6IFtcclxuXHRcdFRvb2xiYXJTZXJ2aWNlLFxyXG5cdFx0RmllbGRMaXN0U2VydmljZSxcclxuXHRcdE51bWJlckZvcm1hdHRpbmdTZXJ2aWNlLFxyXG5cdFx0Q2FsY3VsYXRlZEZpZWxkU2VydmljZSxcclxuXHRcdEdyb3VwaW5nQmFyU2VydmljZSxcclxuXHRcdFZpcnR1YWxTY3JvbGxTZXJ2aWNlLFxyXG5cdFx0RHJpbGxUaHJvdWdoU2VydmljZSxcclxuXHRdLFxyXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2FkZ2V0UGl2b3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdEBJbnB1dCgpIHBvcnRsZXQ7XHJcblx0QElucHV0KCkgZGFzaGJvYXJkO1xyXG5cdEBJbnB1dCgpIHBvcnRsZXRzO1xyXG5cdHByaXZhdGUgUGl2b3RfRGF0YTogSURhdGFTZXRbXTtcclxuXHRwcml2YXRlIGNvbmZpZztcclxuXHRwdWJsaWMgZGF0YVNvdXJjZVNldHRpbmdzOiBJRGF0YU9wdGlvbnM7XHJcblx0cHVibGljIGdyaWRTZXR0aW5nczogR3JpZFNldHRpbmdzO1xyXG5cdHByaXZhdGUgZXhjbHVkZUZpZWxkcyA9IFtdO1xyXG5cdHByaXZhdGUgZmlsdGVyU2V0dGluZ3MgPSBbXTtcclxuXHRwcml2YXRlIGRhdGVQaXBlRm9ybWF0O1xyXG5cdHB1YmxpYyB0cmFuc2xhdGlvbjtcclxuXHRAVmlld0NoaWxkKFwicGl2b3R2aWV3XCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG5cdHByaXZhdGUgcGl2b3RPYmo6IFBpdm90Vmlld0NvbXBvbmVudDtcclxuXHRAVmlld0NoaWxkKFwicGl2b3RmaWVsZGxpc3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcblx0cHVibGljIGZpZWxkbGlzdE9iajogUGl2b3RGaWVsZExpc3RDb21wb25lbnQ7XHJcblx0cHJpdmF0ZSBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcclxuXHRwcml2YXRlIGdyYW5kVG90YWxzID0ge307XHJcblx0cHJpdmF0ZSBzdWJUb3RhbHMgPSB7fTtcclxuXHRwcml2YXRlIGZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwcml2YXRlIHByZXZpb3VzU29ydDogSVNvcnQ7XHJcblx0cHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cdHByaXZhdGUgYWxsRGF0YVZhbHVlO1xyXG5cdC8vIHByaXZhdGUgY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3M7XHJcblx0cHJpdmF0ZSBpc0luaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdHByaXZhdGUgcGl2b3RTZWFyY2hCb3g6IE1hc2tlZFRleHRCb3g7XHJcblx0cHVibGljIHRvb2x0aXBTZXR0aW5ncyA9IHtcclxuXHRcdGVuYWJsZTogZmFsc2UsXHJcblx0fTtcclxuXHRwcml2YXRlIGNvbHVtblRleHRzID0gW107XHJcblx0cHJpdmF0ZSBjb25maWdGaWVsZHMgPSBbXTtcclxuXHRwcml2YXRlIHF1YXJ0ZXJGb3JtYXQgPSBbXHJcblx0XHR7IHZhbHVlOiBcIjAzLzIwMjFcIiwgZm9ybWF0OiBcIk1NL3l5eXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCIwMy8yMVwiLCBmb3JtYXQ6IFwiTU0vZGRcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCIzLzIwMjFcIiwgZm9ybWF0OiBcIk0veXl5eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIjMvMjFcIiwgZm9ybWF0OiBcIk0veXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCJNYXJjaCAyMDIxXCIsIGZvcm1hdDogXCJNTU1NIHl5eXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCJNYXIsIDIwMjFcIiwgZm9ybWF0OiBcIk1NTSwgeXl5eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIk1hcmNoLCAyMDIxXCIsIGZvcm1hdDogXCJNTU1NLCB5eXl5XCIgfSxcclxuXHRcdHsgdmFsdWU6IFwiMjAyMVwiLCBmb3JtYXQ6IFwieXl5eVwiIH0sXHJcblx0XTtcclxuXHR6b29tU2V0dGluZ3MgPSB7XHJcblx0XHRlbmFibGU6IGZhbHNlLFxyXG5cdH07XHJcblx0aXRlbURhdGFUeXBlU29ydEFyciA9IFtcclxuXHRcdFwiQXNzZXRzXCIsXHJcblx0XHRcIkxpYWJpbGl0aWVzXCIsXHJcblx0XHRcIkVxdWl0eVwiLFxyXG5cdFx0XCJQJkxcIixcclxuXHRcdFwiQ2FzaGZsb3dcIixcclxuXHRdO1xyXG5cdHByaXZhdGUgZm9ybWF0RGF0ZXMgPSBbXTtcclxuXHRwcml2YXRlIGN1c3RvbUNhbGN1bGF0ZWRGaWVsZHM6IGFueVtdID0gW107IC8vIOiHquWumuS5ieiuoeeul+WIl1xyXG5cdHByaXZhdGUgYWxsb3dlZENhbGN1bGF0ZWRGaWVsZHM6IGFueVtdID0gW107IC8vIOWFgeiuuOiHquWumuS5ieeul+azleeahOWtl+autVxyXG5cdHByaXZhdGUgemVyb0Zvcm1hdERhdGEgPSB7XHJcblx0XHRlbXB0eUxpc3Q6IFtdLFxyXG5cdFx0aGdMaXN0OiBbXSxcclxuXHR9O1xyXG5cdHByaXZhdGUgbWlsbGlvbkZpZWxkcyA9IFtdO1xyXG5cdHByaXZhdGUgdGVtcFN1YnRvdGFscyA9IFtdO1xyXG5cdHB1YmxpYyBvcmRlckJ5Q29sdW1uczsgLy8gRWc6IFwiRHVlRGF0ZSwgU2VxdWVuY2VcIlxyXG5cdHB1YmxpYyBpc0FwcGx5SVJSOiBib29sZWFuID0gZmFsc2U7XHJcblx0cHVibGljIGNhbGNJUlJEYXRhOiBhbnk7XHJcblx0cHJpdmF0ZSBwZXJjZW50TnVtRmllbGRzID0gW107XHJcblx0cHVibGljIHBhZ2VMb2FkaW5nO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2U6IERhc2hib2FyZFBvcmxldHNTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBEYXNoYm9hcmRTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdFx0QE9wdGlvbmFsKCkgQEluamVjdChQQkZfVE9LRU4pIHByaXZhdGUgcGJmOiBhbnksXHJcblxyXG5cdCkge31cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHR0aGlzLmdldEluZm8oKTtcclxuXHRcdEwxMG4ubG9hZCh7XHJcblx0XHRcdFwiZW4tVVNcIjoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR6aDoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRcInpoLUhhbnQtSEtcIjoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRqYToge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRrbzoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRmcjoge1xyXG5cdFx0XHRcdHBpdm90dmlldzogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdFx0cGl2b3RmaWVsZGxpc3Q6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmdldERhdGEoKTtcclxuXHR9XHJcblxyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0Y2hhbmdlUGl2b3QoKS5zdWJzY3JpYmUoKHVwZGF0ZWQpID0+IHtcclxuXHRcdFx0XHRpZiAodXBkYXRlZCA9PT0gdGhpcy5wb3J0bGV0Lm5ld0lkKSB7XHJcblx0XHRcdFx0XHR0aGlzLmdldERhdGEoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0U3RhcnRSZWZyZXNoKCkuc3Vic2NyaWJlKChkYXNoYm9hcmRJZCkgPT4ge1xyXG5cdFx0XHRcdGlmIChkYXNoYm9hcmRJZCA9PT0gdGhpcy5kYXNoYm9hcmQuaWQpIHtcclxuXHRcdFx0XHRcdHRoaXMucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldFVwZGF0ZWQoKS5zdWJzY3JpYmUoKG5ld0lkKSA9PiB7XHJcblx0XHRcdFx0aWYgKG5ld0lkID09PSB0aGlzLnBvcnRsZXQubmV3SWQgfHwgbmV3SWQgPT09IHRoaXMucG9ydGxldC5pZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5nZXREYXRhKCk7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRSZWZyZXNoR2FkZ2V0KCkuc3Vic2NyaWJlKChlKSA9PiB7XHJcblx0XHRcdFx0aWYgKCFlKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGlkID0gZVtcIm5ld0lkXCJdO1xyXG5cdFx0XHRcdGlmIChpZCA9PT0gdGhpcy5wb3J0bGV0Lm5ld0lkIHx8IGlkID09PSB0aGlzLnBvcnRsZXQuaWQpIHtcclxuXHRcdFx0XHRcdHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRUYWJsZUZvcm1hdCgpLnN1YnNjcmliZSgodXBkYXRlZCkgPT4ge1xyXG5cdFx0XHRcdGlmICh1cGRhdGVkID09PSB0aGlzLnBvcnRsZXQubmV3SWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2VcclxuXHRcdFx0XHQuY2xlYXJGaWVsZExpc3RPYnNlcnZhYmxlKClcclxuXHRcdFx0XHQuc3Vic2NyaWJlKCh1cGRhdGVkKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAodXBkYXRlZCA9PT0gdGhpcy5wb3J0bGV0Lm5ld0lkKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmRhdGFTb3VyY2UgPSBbXTtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLnVwZGF0ZURhdGFTb3VyY2UoKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyB0aXRsZSBjaGFuZ2VcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlUG9ydGxldFRpdGxlKCkuc3Vic2NyaWJlKCh1cGRhdGVkKSA9PiB7XHJcblx0XHRcdFx0aWYgKHVwZGF0ZWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuY29uZmlnID0gSlNPTi5wYXJzZSh0aGlzLnBvcnRsZXQuY29uZmlnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcblx0fVxyXG5cclxuXHRvbk1lbWJlckVkaXRvck9wZW4oYXJnczogYW55KTogdm9pZCB7XHJcblx0XHQvLyDkvaDlj6/ku6XlnKjov5nph4zmoLnmja7pnIDopoHkv67mlLlhcmdz5p2l6Ieq5a6a5LmJ6L+H5ruk56qX5Y+j55qE6KGM5Li6XHJcblx0XHQvLyAxMTI0NyDkuJPpl6jkuLppdGVtIGRhdGEgdHlwZeiAjOiuvue9rlxyXG5cdFx0aWYgKGFyZ3MuZmllbGROYW1lID09PSBcIkFjY291bnRUeXBlQ29kZVwiKSB7XHJcblx0XHRcdGxldCByZXMgPSBuZXcgQXJyYXkoNSkuZmlsbChudWxsKTtcclxuXHRcdFx0Y29uc3QgZmllbGRNZW1iZXJzID0gWy4uLmFyZ3MuZmllbGRNZW1iZXJzXTtcclxuXHJcblx0XHRcdGZvciAobGV0IGkgPSBmaWVsZE1lbWJlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuXHRcdFx0XHRsZXQgaW5kZXggPSAtMTtcclxuXHRcdFx0XHRjb25zdCBpdGVtID0gdGhpcy5pdGVtRGF0YVR5cGVTb3J0QXJyLmZpbmQoKG5hbWUsIGluZCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGZpZWxkTWVtYmVyc1tpXS5hY3R1YWxUZXh0ID09PSBuYW1lKSB7XHJcblx0XHRcdFx0XHRcdGluZGV4ID0gaW5kO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuIGZpZWxkTWVtYmVyc1tpXS5hY3R1YWxUZXh0ID09PSBuYW1lO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHRcdGlmICghaXRlbSkge1xyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IGZpbGxJdGVtID0gZmllbGRNZW1iZXJzLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHRyZXNbaW5kZXhdID0gZmlsbEl0ZW1bMF07XHJcblx0XHRcdH1cclxuXHRcdFx0cmVzID0gcmVzLmZpbHRlcigoaXRlbSkgPT4gaXRlbSkgfHwgW107XHJcblx0XHRcdGFyZ3MuZmllbGRNZW1iZXJzID0gWy4uLnJlcywgLi4uZmllbGRNZW1iZXJzXTtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5lLW1lbWJlci1lZGl0b3ItZGlhbG9nXCIpO1xyXG5cdFx0XHRcdGlmIChlbGUpIHtcclxuXHRcdFx0XHRcdGVsZS5xdWVyeVNlbGVjdG9yKFwiLmUtZmlsdGVyLXNvcnRcIikuc2V0QXR0cmlidXRlKFxyXG5cdFx0XHRcdFx0XHRcInN0eWxlXCIsXHJcblx0XHRcdFx0XHRcdFwiZGlzcGxheTogbm9uZVwiXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldEdyaWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuZ3JpZFNldHRpbmdzID0ge1xyXG5cdFx0XHRjb2x1bW5XaWR0aDogMTQwLFxyXG5cdFx0XHRyb3dIZWlnaHQ6IDQwLFxyXG5cdFx0XHRhbGxvd1NlbGVjdGlvbjogdHJ1ZSxcclxuXHRcdFx0c2VsZWN0aW9uU2V0dGluZ3M6IHtcclxuXHRcdFx0XHRtb2RlOiBcIkNlbGxcIixcclxuXHRcdFx0XHR0eXBlOiBcIk11bHRpcGxlXCIsXHJcblx0XHRcdFx0Y2VsbFNlbGVjdGlvbk1vZGU6IFwiQm94XCIsXHJcblx0XHRcdH0sXHJcblx0XHRcdGNvbHVtblJlbmRlcjogdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSgoYXJncykgPT4ge1xyXG5cdFx0XHRcdHRoaXMuc2V0Q29sdW1uc1JlbmRlcihhcmdzKTtcclxuXHRcdFx0fSkgYXMgYW55LFxyXG5cdFx0XHQvLyDljYfnuqflkI4g6buY6K6k5Lya5pyJ5a+85Ye65qC35byP6KaG55uW77yM6ZyA6KaB5omL5Yqo6K6+572u5a+85Ye65qCH6aKY5qC35byPXHJcblx0XHRcdGV4Y2VsSGVhZGVyUXVlcnlDZWxsSW5mbzogdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSgoYXJnczogYW55KSA9PiB7XHJcblx0XHRcdFx0Ly8gYXJncy5zdHlsZeaYr+S4qkV4Y2VsU3R5bGXnsbvlnotcclxuXHRcdFx0XHRhcmdzLnN0eWxlID0ge1xyXG5cdFx0XHRcdFx0Ym9sZDogdHJ1ZSwgLy8g5a2X5L2T5Yqg57KXXHJcblx0XHRcdFx0XHR2QWxpZ246IFwiQ2VudGVyXCIsXHJcblx0XHRcdFx0XHR3cmFwVGV4dDogZmFsc2UsIC8vIOS4jeaNouihjFxyXG5cdFx0XHRcdFx0aW5kZW50OiAwLFxyXG5cdFx0XHRcdFx0Ym9yZGVyczogbnVsbCwgLy8g5LiN6ZyA6KaBYm9yZGVyXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fSkgYXMgYW55LFxyXG5cdFx0XHQvLyDljYfnuqflkI4g6buY6K6k5Lya5pyJ5a+85Ye65qC35byP6KaG55uW77yM6ZyA6KaB5omL5Yqo6K6+572u5a+85Ye65YaF5a655qC35byPXHJcblx0XHRcdGV4Y2VsUXVlcnlDZWxsSW5mbzogdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSgoYXJnczogYW55KSA9PiB7XHJcblx0XHRcdFx0Ly8gI2Y0ODZjZmZmIOi/memHjOi+k+WHuueahOaYr1JHQkEg6aKc6Imy5qC85byP77yMIHhsc3jph4zkuI3pnIDopoHpgI/mmI7luqYs5Y675o6J5bC+6YOoZmZcclxuXHRcdFx0XHRpZiAoYXJncy5zdHlsZSAmJiBhcmdzLnN0eWxlLmJhY2tDb2xvcikge1xyXG5cdFx0XHRcdFx0YXJncy5zdHlsZS5iYWNrQ29sb3IgPSBhcmdzLnN0eWxlLmJhY2tDb2xvci5zdWJzdHJpbmcoMCwgNyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGxldCBfc3R5bGU6IGFueSA9IHtcclxuXHRcdFx0XHRcdGJvbGQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0d3JhcFRleHQ6IGZhbHNlLFxyXG5cdFx0XHRcdFx0Ym9yZGVyczogbnVsbCxcclxuXHRcdFx0XHRcdGZvbnRDb2xvcjogYXJncy5zdHlsZS5mb250Q29sb3IsXHJcblx0XHRcdFx0XHRiYWNrQ29sb3I6IGFyZ3Muc3R5bGUuYmFja0NvbG9yLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0bGV0IGNvbEluZGV4ID0gYXJncy5jZWxsLmNvbEluZGV4O1xyXG5cdFx0XHRcdGxldCByb3dJbmRleCA9IGFyZ3MuY2VsbC5yb3dJbmRleDtcclxuXHRcdFx0XHRpZiAodGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzKSB7XHJcblx0XHRcdFx0XHQvLyBHcmFuZFRvdGFs5LiN6ZyA6KaB6aKc6ImyXHJcblx0XHRcdFx0XHRpZiAoYXJncy5kYXRhLmxlbmd0aCA9PT0gcm93SW5kZXggKyAxKSB7XHJcblx0XHRcdFx0XHRcdGRlbGV0ZSBfc3R5bGUuZm9udENvbG9yO1xyXG5cdFx0XHRcdFx0XHRkZWxldGUgX3N0eWxlLmJhY2tDb2xvcjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGFyZ3MuZGF0YVtyb3dJbmRleF1bY29sSW5kZXhdLmZvcm1hdHRlZFRleHQgPT0gXCJcIikge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGFyZ3Muc3R5bGUgPSBPYmplY3QuYXNzaWduKGFyZ3Muc3R5bGUsIF9zdHlsZSk7XHJcblx0XHRcdFx0aWYgKGFyZ3MudmFsdWUgPT09IFwiXCIgJiYgYXJncy5zdHlsZS5udW1iZXJGb3JtYXQpIHtcclxuXHRcdFx0XHRcdGFyZ3Muc3R5bGUubnVtYmVyRm9ybWF0ID0gbnVsbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHRoaXMuZm9ybWF0RGF0ZXMgJiYgdGhpcy5mb3JtYXREYXRlcy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGxldCBkYXRlRmllbGRzID0gdGhpcy5mb3JtYXREYXRlcy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBlbC5uYW1lO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdChhcmdzIGFzIGFueSkudmFsdWUgJiZcclxuXHRcdFx0XHRcdFx0KChhcmdzIGFzIGFueSkuY2VsbC5jb2xJbmRleCA9PT0gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZGF0ZUZpZWxkcy5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS5jZWxsLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBkYXRlRmllbGRzLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLmNlbGwuYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdCAgKSlcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHQvL0N1c3RvbWl6ZSB0aGUgUm93IGhlYWRlcnMvQ29sdW1uIGhlYWRlcnMgYmFzZWQgb24geW91ciBuZWVkc1xyXG5cdFx0XHRcdFx0XHRsZXQgaGVhZGVycztcclxuXHRcdFx0XHRcdFx0aWYgKChhcmdzIGFzIGFueSkuY2VsbC5jb2xJbmRleCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnMgPSAoYXJncyBhcyBhbnkpLmNlbGwuYWN0dWFsVGV4dDtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBoZWFkZXJzID0gcGl2b3RWYWx1ZXNba11bal0uZm9ybWF0dGVkVGV4dDtcclxuXHRcdFx0XHRcdFx0XHRoZWFkZXJzID0gKGFyZ3MgYXMgYW55KS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoaGVhZGVycykge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBkYXRlID0gbmV3IERhdGUoaGVhZGVycyk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGxldCBxdWFydGVyID0gTWF0aC5mbG9vcihkYXRlLmdldE1vbnRoKCkgLyAzKSArIDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdGxldCBmb3JtYXQ7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZm9ybWF0RGF0ZXMubWFwKChlbCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKChhcmdzIGFzIGFueSkuY2VsbC5jb2xJbmRleCA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5uYW1lID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS5jZWxsLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBlbC5mb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwubmFtZSA9PSAoYXJncyBhcyBhbnkpLmNlbGwuYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gZWwuZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdChhcmdzIGFzIGFueSkudmFsdWUgPSB0aGlzLmdldFF1YXJ0ZXJWYWx1ZShcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdCxcclxuXHRcdFx0XHRcdFx0XHRcdGRhdGUsXHJcblx0XHRcdFx0XHRcdFx0XHRxdWFydGVyXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSkgYXMgYW55LFxyXG5cdFx0fSBhcyBHcmlkU2V0dGluZ3M7XHJcblx0fVxyXG5cclxuXHRiZWZvcmVFeHBvcnQoZXhwb3J0RGF0YSkge1xyXG5cdFx0aWYgKGV4cG9ydERhdGEpIHtcclxuXHRcdFx0Y29uc3Qga2V5TWFwID0ge307XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzLmZvcm1hdFNldHRpbmdzLmZvckVhY2goKGRhdGEpID0+IHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRkYXRhLmZvcm1hdCA9PT0gXCIjLCMjIywsLjA7KCMsIyMjLCwuMClcIiB8fFxyXG5cdFx0XHRcdFx0ZGF0YS5mb3JtYXQgPT09IFwiIywjIyMsLDsoIywjIyMsLClcIiB8fFxyXG5cdFx0XHRcdFx0ZGF0YS5mb3JtYXQgPT09IFwiIywjIyMsLC4wMDsoIywjIyMsLC4wMClcIlxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0a2V5TWFwW2RhdGEubmFtZV0gPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRleHBvcnREYXRhLmRhdGFDb2xsZWN0aW9ucyAmJlxyXG5cdFx0XHRcdGV4cG9ydERhdGEuZGF0YUNvbGxlY3Rpb25zLmxlbmd0aFxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRleHBvcnREYXRhLmRhdGFDb2xsZWN0aW9uc1swXS5mb3JFYWNoKChyb3cpID0+IHtcclxuXHRcdFx0XHRcdHJvdy5mb3JFYWNoKChjZWxsKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmIChrZXlNYXBbY2VsbC5hY3R1YWxUZXh0XSkge1xyXG5cdFx0XHRcdFx0XHRcdGNlbGwudmFsdWUgPSBjZWxsLmFjdHVhbFZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0dHlwZW9mIGNlbGwudmFsdWUgPT09IFwib2JqZWN0XCIgJiZcclxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgY2VsbC5mb3JtYXR0ZWRUZXh0ID09PSBcInN0cmluZ1wiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGNlbGwudmFsdWUgPSBjZWxsLmZvcm1hdHRlZFRleHQ7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGdldERhdGEoKSB7XHJcblx0XHR0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcblx0XHRsZXQgY29sdW1ucyA9IFtdO1xyXG5cdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0bGV0IGZvcm1hdFNldHRpbmdzID0gW107XHJcblx0XHRsZXQgcm93cyA9IFtdO1xyXG5cdFx0bGV0IGZpZWxkTWFwcGluZyA9IFtdO1xyXG5cdFx0Ly8g5riF56m6Z3JhbmRUb3RhbHPlkoxzdWJUb3RhbHNcclxuXHRcdHRoaXMuZ3JhbmRUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuc3ViVG90YWxzID0ge307XHJcblx0XHR0aGlzLmNvbmZpZyA9IEpTT04ucGFyc2UodGhpcy5wb3J0bGV0LmNvbmZpZyk7XHJcblx0XHR0aGlzLnNldEdyaWRTZXR0aW5ncygpO1xyXG5cdFx0aWYgKHRoaXMuY29uZmlnLmZpZWxkcykge1xyXG5cdFx0XHRpZiAodGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5hbGxGaWVsZHNPYmpbdGhpcy5wb3J0bGV0LmlkXSkge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnRmllbGRzID1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2Uuc2V0Q29uZmlnRmllbGRzKFxyXG5cdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmFsbEZpZWxkc09ialtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBvcnRsZXQuaWRcclxuXHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0dGhpcy5jb25maWcuZmllbGRzXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnRmllbGRzID0gWy4uLnRoaXMuY29uZmlnLmZpZWxkc107XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLlBpdm90X0RhdGEgPSB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldFJlc3VsdEJ5RGF0YVRhYmxlKFxyXG5cdFx0XHR0aGlzLnBvcnRsZXQsXHJcblx0XHRcdGZhbHNlLFxyXG5cdFx0XHRmYWxzZSxcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmQuaWRcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5vcmRlckJ5Q29sdW1ucyA9IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0T3JkZXJCeUNvbHVtbnNOZXcoXHJcblx0XHRcdHRoaXMucG9ydGxldC5maWd1cmVDb2RlLFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLlBpdm90X0RhdGEgPSBEYXRhVXRpbC5wYXJzZS5wYXJzZUpzb24odGhpcy5QaXZvdF9EYXRhKTtcclxuXHRcdGlmICh0aGlzLlBpdm90X0RhdGEgJiYgdGhpcy5QaXZvdF9EYXRhLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Ly8g56e76Zmk5YiX5ZCN5ZKM5pWw5o2ua2V55LiN5Yy56YWN55qE6aG5XHJcblx0XHRcdHRoaXMuZ2V0ZXhjbHVkZUZpZWxkcyh0aGlzLmNvbmZpZ0ZpZWxkcywgdGhpcy5QaXZvdF9EYXRhWzBdKTtcclxuXHRcdFx0aWYgKCF0aGlzLmFsbG93ZWRDYWxjdWxhdGVkRmllbGRzLmxlbmd0aCkge1xyXG5cdFx0XHRcdHRoaXMuYWxsb3dlZENhbGN1bGF0ZWRGaWVsZHMgPSBPYmplY3Qua2V5cyh0aGlzLlBpdm90X0RhdGFbMF0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGl0ZW0gb2YgdGhpcy5jb25maWdGaWVsZHMpIHtcclxuXHRcdFx0XHQvLyDlrZfmrrXliIbnu4QgaHR0cHM6Ly9lajIuc3luY2Z1c2lvbi5jb20vYW5ndWxhci9kb2N1bWVudGF0aW9uL3Bpdm90dmlldy9maWVsZC1saXN0P3NlYXJjaD1maWVsZE1hcHBpbmcjZ3JvdXAtZmllbGRzLXVuZGVyLWRlc2lyZWQtZm9sZGVyLW5hbWVcclxuXHRcdFx0XHRmaWVsZE1hcHBpbmcucHVzaCh7XHJcblx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRjYXB0aW9uOiBpdGVtLmFkZHRpb25OYW1lXHJcblx0XHRcdFx0XHRcdD8gYCR7aXRlbS5sYW5nVmFsdWV9ICR7aXRlbS5hZGR0aW9uTmFtZX1gXHJcblx0XHRcdFx0XHRcdDogaXRlbS5sYW5nVmFsdWVcclxuXHRcdFx0XHRcdFx0PyBpdGVtLmxhbmdWYWx1ZVxyXG5cdFx0XHRcdFx0XHQ6IHRoaXMudHJhbnNsYXRpb25baXRlbS5sYW5nQ29kZV0gfHwgaXRlbS5sYW5nQ29kZSxcclxuXHJcblx0XHRcdFx0XHRkYXRhVHlwZTogaXRlbS5kYXRhVHlwZSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuY29uZmlnRmllbGRzKSB7XHJcblx0XHRcdHRoaXMucGVyY2VudE51bUZpZWxkcyA9IFtdO1xyXG5cdFx0XHR0aGlzLmZvcm1hdERhdGVzID0gW107XHJcblx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuaGdMaXN0ID0gW107XHJcblx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuZW1wdHlMaXN0ID0gW107XHJcblx0XHRcdHRoaXMubWlsbGlvbkZpZWxkcyA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbmZpZ0ZpZWxkcy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0Ly8gU01QMi0yNDg2ICYgcGVyY2VudE51beeahGZvcm1hdOmXrumimFxyXG5cdFx0XHRcdGlmIChlbC5kYXRhVHlwZSA9PSBcInBlcmNlbnROdW1cIikge1xyXG5cdFx0XHRcdFx0dGhpcy5wZXJjZW50TnVtRmllbGRzLnB1c2goZWwuY29sTmFtZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQgJiZcclxuXHRcdFx0XHRcdFsyLCA1LCA4LCAxMSwgMTQsIDE3XS5pbmNsdWRlcyhlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXQpXHJcblx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5oZ0xpc3QucHVzaChlbC5jb2xOYW1lKTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkICYmXHJcblx0XHRcdFx0XHRbMywgNiwgOSwgMTIsIDE1LCAxOF0uaW5jbHVkZXMoZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0KVxyXG5cdFx0XHRcdClcclxuXHRcdFx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuZW1wdHlMaXN0LnB1c2goZWwuY29sTmFtZSk7XHJcblx0XHRcdFx0Ly8gIHBpdm90VGFibGVmb3JtYXRQZXJjZW50IOeZvuWIhuavlOS5n+aciTEwLDExLDEyIOS9huaYr+Wug+aYr+aYvuekujAuMDB455qE5qC85byP77yM5omA5Lul5b6X5o6S6ZmkXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZWwuZGF0YVR5cGUgIT09IFwicGVyY2VudFwiICYmXHJcblx0XHRcdFx0XHRlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkICYmXHJcblx0XHRcdFx0XHRbMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOF0uaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHRcdClcclxuXHRcdFx0XHRcdHRoaXMubWlsbGlvbkZpZWxkcy5wdXNoKGVsLmNvbE5hbWUpO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmRhdGFUeXBlID09PSBcIm51bWJlclwiICYmXHJcblx0XHRcdFx0XHQoIWVsLmZvcm1hdCB8fFxyXG5cdFx0XHRcdFx0XHQoZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCFlbC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCkpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHQvL1NNUDItMzAyNiBhbmQgU01QMi0zMDU5XHJcblx0XHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0XHRlbC5jb2xOYW1lICE9PSBcIlBvcnRJbnZTdGtcIiAmJlxyXG5cdFx0XHRcdFx0XHRcdGVsLmNvbE5hbWUgIT09IFwiUG9ydEZkSW52U3RrXCJcclxuXHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuZHBcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiBcIiMjMC4jIyMjIyMjMFwiLFxyXG5cdFx0XHRcdFx0XHR1c2VHcm91cGluZzogdHJ1ZSxcclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0KGVsLmRhdGFUeXBlID09PSBcInBlcmNlbnRcIiB8fFxyXG5cdFx0XHRcdFx0XHRlbC5kYXRhVHlwZSA9PT0gXCJwZXJjZW50TnVtXCIpICYmXHJcblx0XHRcdFx0XHQoIWVsLmZvcm1hdCB8fFxyXG5cdFx0XHRcdFx0XHQoZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCFlbC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCkpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtYXQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRlbC5kcFxyXG5cdFx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmRhdGFUeXBlID09PSBcIm11bHRpcGxlXCIgJiZcclxuXHRcdFx0XHRcdCghZWwuZm9ybWF0IHx8XHJcblx0XHRcdFx0XHRcdChlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0IWVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkKSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGVsLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm1hdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRNdWx0aXBsZShcclxuXHRcdFx0XHRcdFx0XHRlbC5kcFxyXG5cdFx0XHRcdFx0XHQpLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChlbC5kYXRhVHlwZSA9PT0gXCJkYXRldGltZVwiIHx8IGVsLmRhdGFUeXBlID09PSBcImRhdGVcIikge1xyXG5cdFx0XHRcdFx0bGV0IGZvcm1hdCA9IFwiXCI7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGVsLmZvcm1hdFswXS5kYXRlVHlwZSA9PSBcIlF1YXJ0ZXJcIikge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmb3JtYXRfID0gZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0SW5mbyA9IHRoaXMucXVhcnRlckZvcm1hdC5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHQocXVyKSA9PiBxdXIudmFsdWUgPT0gZm9ybWF0X1xyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGZvcm1hdEluZm8ubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBmb3JtYXRJbmZvWzBdLmZvcm1hdDtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogZWwuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0OiBmb3JtYXRfLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcImRhdGVcIixcclxuXHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmZvcm1hdERhdGVzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGVsLmZvcm1hdFswXS5kYXRlVHlwZSA9PSBcIkRhdGVcIikge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmcm9tSWR4ID1cclxuXHRcdFx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuaW5kZXhPZihcIihcIik7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHRvSWR4ID1cclxuXHRcdFx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuaW5kZXhPZihcIilcIik7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZvcm1hdF8gPVxyXG5cdFx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5zbGljZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZnJvbUlkeCArIDEsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRvSWR4XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoZm9ybWF0Xykge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkREL01NL1lZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC9NTS95eXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkREL01NL1lZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiZGQvTU0veXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0vREQvWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NL2RkL3l5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0vREQvWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJNTS9kZC95eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJZWVlZLU1NLUREXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwieXl5eS1NTS1kZFwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJZWS1NTS1ERFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcInl5LU1NLWRkXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkRELU1NLVlZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC1NTS15eXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkRELU1NLVlZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiZGQtTU0teXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0tREQtWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NLWRkLXl5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU0tREQtWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJNTS1kZC15eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTU0gREQsIFlZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJNTU0gZGQsIHl5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQtTU1NLVlZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC1NTU0teXl5eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKCFmb3JtYXQpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogdGhpcy5kYXRlUGlwZUZvcm1hdCxcclxuXHRcdFx0XHRcdFx0XHR0eXBlOiBcImRhdGVcIixcclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdFx0bmFtZTogZWwuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXQ6IGZvcm1hdCxcclxuXHRcdFx0XHRcdFx0XHR0eXBlOiBcImRhdGVcIixcclxuXHRcdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdC8vY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MgZm9ybWF0IHB1c2ggdG8gZm9ybWF0U2V0dGluZ3NcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MgJiZcclxuXHRcdFx0dGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MubGVuZ3RoID4gMFxyXG5cdFx0KSB7XHJcblx0XHRcdHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRpZiAoZWwuZm9ybWF0U3RyaW5nICE9PSBcIlwiKSB7XHJcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gZm9ybWF0U2V0dGluZ3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuXHRcdFx0XHRcdFx0aWYgKGZvcm1hdFNldHRpbmdzW2ldLm5hbWUgPT09IGVsLm5hbWUpIHtcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5zcGxpY2UoaSwgMSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBlbC5uYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtYXQ6IGVsLmZvcm1hdFN0cmluZyxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRsZXQgc2VyaWVzID0gdGhpcy5jb25maWcueWF4aXMuc2VyaWVzO1xyXG5cdFx0aWYgKHNlcmllcykge1xyXG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIHNlcmllcykge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogaXRlbS5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0Y2FwdGlvbjogdGhpcy5nZXRDYXB0aW9uQnlOYW1lKGl0ZW0uY29sTmFtZSkgfHwgaXRlbS50aXRsZSxcclxuXHRcdFx0XHRcdHR5cGU6IGl0ZW0uY2FsTWV0aG9kLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0dmFsdWVzLnB1c2godmFsdWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRsZXQgZ3JvdXBzID0gdGhpcy5jb25maWcueGF4aXMuZ3JvdXBzO1xyXG5cdFx0aWYgKGdyb3Vwcykge1xyXG5cdFx0XHRmb3IgKGxldCBnaXRlbSBvZiBncm91cHMpIHtcclxuXHRcdFx0XHRjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gZ2l0ZW0ubmFtZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKGZpZWxkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdGdpdGVtLnNob3dTdWJUb3RhbHMgPSBmaWVsZFswXS5zaG93U3ViVG90YWxzO1xyXG5cdFx0XHRcdFx0Z2l0ZW0uY2FwdGlvbiA9XHJcblx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0XHR0aGlzLnRyYW5zbGF0aW9uW2ZpZWxkWzBdLmxhbmdDb2RlXSB8fFxyXG5cdFx0XHRcdFx0XHRnaXRlbS5jYXB0aW9uIHx8XHJcblx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdDb2RlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyb3dzLnB1c2goZ2l0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5jb25maWcuY29sdW1uR3JvdXAgJiYgdGhpcy5jb25maWcuY29sdW1uR3JvdXAubGVuZ3RoKSB7XHJcblx0XHRcdGZvciAobGV0IGl0ZW0gb2YgdGhpcy5jb25maWcuY29sdW1uR3JvdXApIHtcclxuXHRcdFx0XHRjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gaXRlbS5uYW1lXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0aXRlbS5zaG93U3ViVG90YWxzID0gZmllbGRbMF0uc2hvd1N1YlRvdGFscztcclxuXHRcdFx0XHRcdGl0ZW0uY2FwdGlvbiA9XHJcblx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0XHR0aGlzLnRyYW5zbGF0aW9uW2ZpZWxkWzBdLmxhbmdDb2RlXSB8fFxyXG5cdFx0XHRcdFx0XHRmaWVsZFswXS5sYW5nQ29kZSB8fFxyXG5cdFx0XHRcdFx0XHRpdGVtLmNhcHRpb247XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbHVtbnMucHVzaChpdGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0bGV0IGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MgPSBbXTtcclxuXHRcdHRoaXMuY29uZmlnRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblx0XHRcdGlmIChmaWVsZC5mb3JtYXQgJiYgZmllbGQuZm9ybWF0Lmxlbmd0aCkge1xyXG5cdFx0XHRcdGlmIChmaWVsZC5mb3JtYXRbMF0uZm9udFNldHRpbmdDaGVja2VkKSB7XHJcblx0XHRcdFx0XHRsZXQgY29uZGl0aW9uYWxGb3JtYXRPYmogPSB7XHJcblx0XHRcdFx0XHRcdGFwcGx5R3JhbmRUb3RhbHM6IHRydWUsXHJcblx0XHRcdFx0XHRcdG1lYXN1cmU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdHZhbHVlMTogbnVsbCxcclxuXHRcdFx0XHRcdFx0dmFsdWUyOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25zOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRzdHlsZToge1xyXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRjb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRmb250RmFtaWx5OiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGZvbnRTaXplOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdGxldCBuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmogPSB7XHJcblx0XHRcdFx0XHRcdGFwcGx5R3JhbmRUb3RhbHM6IHRydWUsXHJcblx0XHRcdFx0XHRcdG1lYXN1cmU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdHZhbHVlMTogbnVsbCxcclxuXHRcdFx0XHRcdFx0dmFsdWUyOiBudWxsLFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25zOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRzdHlsZToge1xyXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRjb2xvcjogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRmb250RmFtaWx5OiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGZvbnRTaXplOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdC8vIGZvbnQgc2V0dGluZyBzdGFydFxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLm1lYXN1cmUgPVxyXG5cdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGaWVsZDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLm1lYXN1cmUgPVxyXG5cdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGaWVsZDtcclxuXHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkICYmXHJcblx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5jb21wYXJlU2VsZWN0XHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRDb21wYXJlQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMjtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTI7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0sXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdFNldHRpbmdzLnB1c2gobmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MudW5zaGlmdChjb25kaXRpb25hbEZvcm1hdE9iaik7XHJcblx0XHRcdFx0XHQvLyBmb250IHNldHRpbmcgZW5kXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGxldCBmb3JtYXRTZXR0aW5nc09iaiA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IFwiXCIsXHJcblx0XHRcdFx0XHRmb3JtYXQ6IFwiXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQpIHtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLm5hbWUgPSBmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGaWVsZDtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdHN3aXRjaCAoZmllbGQuZm9ybWF0WzBdLmRhdGFUeXBlKSB7XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJpbnRlZ2VyXCI6XHJcblx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0ID1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdEludGVnZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSBcInBlcmNlbnROdW1cIjpcclxuXHRcdFx0XHRcdFx0Y2FzZSBcInBlcmNlbnRcIjpcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlIFwibXVsdGlwbGVcIjpcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0TXVsdGlwbGUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSBcImRhdGVcIjpcclxuXHRcdFx0XHRcdFx0Y2FzZSBcImRhdGV0aW1lXCI6XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZvcm1hdCA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGZpZWxkLmZvcm1hdCAmJiBmaWVsZC5mb3JtYXQubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0WzBdLmRhdGVUeXBlID09IFwiUXVhcnRlclwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZmllbGQuZm9ybWF0WzBdLmRhdGVUeXBlID09IFwiRGF0ZVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBmcm9tSWR4ID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5LmluZGV4T2YoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIihcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCB0b0lkeCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5pbmRleE9mKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuc2xpY2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmcm9tSWR4ICsgMSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvSWR4XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKGZvcm1hdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmogPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IGZpZWxkLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBmaWVsZC5kYXRhVHlwZSA9IFwic3RyaW5nXCI7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9IHRoaXMuZGF0ZVBpcGVGb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09ialtcInR5cGVcIl0gPSBcImRhdGVcIjtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5kYXRhVHlwZSAhPT0gXCJzdHJpbmdcIiAmJlxyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0XHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5wdXNoKGZvcm1hdFNldHRpbmdzT2JqKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzID0gdGhpcy5jb25maWcuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1xyXG5cdFx0XHQ/IHRoaXMuY29uZmlnLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNcclxuXHRcdFx0OiBbXTtcclxuXHJcblx0XHQvLyBTTVAyLTQ1ODIgQUdJQyAtIERhc2hib2FyZCBpdGVtIHNlcXVlbmNlXHJcblx0XHRsZXQgaXNFeGlzdFNlcSA9IGZhbHNlO1xyXG5cdFx0bGV0IHNvcnRTZXR0aW5ncyA9IHRoaXMuY29uZmlnLnNvcnRTZXR0aW5ncyB8fCBbXTtcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5QaXZvdF9EYXRhICYmXHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YVswXSAmJlxyXG5cdFx0XHR0aGlzLlBpdm90X0RhdGFbMF0uU2VxICE9PSBudWxsXHJcblx0XHQpIHtcclxuXHRcdFx0Ly8g5Y+W5raITmFtZeeahOm7mOiupOaOkuW6j++8jOagueaNrlNlceadpeaOkuW6j1xyXG5cdFx0XHRzb3J0U2V0dGluZ3MucHVzaCh7IG5hbWU6IFwiTmFtZVwiLCBvcmRlcjogXCJOb25lXCIgfSk7XHJcblx0XHRcdGlzRXhpc3RTZXEgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGZpbHRlclNldHRpbmdzID0gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5jaGVja0ZpbHRlclNldHRpbmdzKFxyXG5cdFx0XHR0aGlzLmNvbmZpZyxcclxuXHRcdFx0dGhpcy5jb25maWdGaWVsZHMsXHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YVxyXG5cdFx0KTtcclxuXHRcdGxldCBuYW1lRmlsdGVyID0gZmlsdGVyU2V0dGluZ3MuZmluZCgoeCkgPT4geC5uYW1lID09PSBcIk5hbWVcIik7XHJcblx0XHQvLyDlrZjlnKggTmFtZeeahGZpbHRlcuaXtu+8jOS8muaMieeFp+m7mOiupOaOkuW6j++8jOmcgOimgeWvuU5hbWXov5vooYxTZXHmjpLluo/lpITnkIZcclxuXHRcdGlmIChpc0V4aXN0U2VxICYmIG5hbWVGaWx0ZXIgJiYgcm93cy5zb21lKCh4KSA9PiB4Lm5hbWUgPT09IFwiTmFtZVwiKSkge1xyXG5cdFx0XHRsZXQgaXRlbXMgPSBuYW1lRmlsdGVyLml0ZW1zOyAvLyDmi7/liLDlvZPliY3mjpLluo/vvIzpu5jorqRBLVpcclxuXHRcdFx0bGV0IHNlcUFyciA9IFtdO1xyXG5cdFx0XHRpdGVtcy5mb3JFYWNoKChuYW1lKSA9PiB7XHJcblx0XHRcdFx0bGV0IG9iaiA9IHRoaXMuUGl2b3RfRGF0YS5maW5kKCh4KSA9PiB4Lk5hbWUgPT09IG5hbWUpO1xyXG5cdFx0XHRcdGxldCBpdGVtOiBhbnkgPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBuYW1lLFxyXG5cdFx0XHRcdFx0c2VxOiBvYmouU2VxLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0c2VxQXJyLnB1c2goaXRlbSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRzZXFBcnIuc29ydCgoYSwgYikgPT4gYS5zZXEgLSBiLnNlcSk7XHJcblx0XHRcdG5hbWVGaWx0ZXIuaXRlbXMgPSBzZXFBcnIubWFwKCh4KSA9PiB4Lm5hbWUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGFsbEZpZWxkcyA9XHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuYWxsRmllbGRzT2JqW3RoaXMucG9ydGxldC5pZF07XHJcblx0XHRpZiAoYWxsRmllbGRzKSB7XHJcblx0XHRcdHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW0gPSBhbGxGaWVsZHMuZmluZChcclxuXHRcdFx0XHRcdChmaWVsZCkgPT4gZmllbGQuY29sTmFtZSA9PT0gdmFsdWUubmFtZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKGl0ZW0pIHtcclxuXHRcdFx0XHRcdHZhbHVlLmNhcHRpb24gPVxyXG5cdFx0XHRcdFx0XHQoaXRlbS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRpdGVtLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHRpdGVtLmZvcm1hdFswXS5kaXNwbGF5TmFtZSkgfHxcclxuXHRcdFx0XHRcdFx0aXRlbS5sYW5nVmFsdWUgfHxcclxuXHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGlvbltpdGVtLmxhbmdDb2RlXSB8fFxyXG5cdFx0XHRcdFx0XHRpdGVtLmxhbmdDb2RlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRsZXQgaGFzSXRlbURhdGFUeXBlID0gZmFsc2U7XHJcblx0XHRpZiAodGhpcy5QaXZvdF9EYXRhKSB7XHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YS5tYXAoKGRhdGEpID0+IHtcclxuXHRcdFx0XHRpZiAoZGF0YVtcIkFjY291bnRUeXBlQ29kZVwiXSkge1xyXG5cdFx0XHRcdFx0aGFzSXRlbURhdGFUeXBlID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cm93cy5mb3JFYWNoKChyb3cpID0+IHtcclxuXHRcdFx0XHRcdGlmIChkYXRhW3Jvdy5uYW1lXSA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0XHRkYXRhW3Jvdy5uYW1lXSA9IFwibnVsbFwiO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdGlmIChoYXNJdGVtRGF0YVR5cGUpIHtcclxuXHRcdFx0c29ydFNldHRpbmdzLnB1c2goe1xyXG5cdFx0XHRcdG5hbWU6IFwiQWNjb3VudFR5cGVDb2RlXCIsXHJcblx0XHRcdFx0b3JkZXI6IFwiQXNjZW5kaW5nXCIsXHJcblx0XHRcdFx0bWVtYmVyc09yZGVyOiBbLi4udGhpcy5pdGVtRGF0YVR5cGVTb3J0QXJyXSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLmNvbmZpZy5maWx0ZXJzLmZvckVhY2goKGZpbHRlcikgPT4ge1xyXG5cdFx0XHRmaWx0ZXIuY2FwdGlvbiA9XHJcblx0XHRcdFx0dGhpcy5nZXRDYXB0aW9uQnlOYW1lKGZpbHRlci5uYW1lKSB8fCBmaWx0ZXIuY2FwdGlvbjtcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5kYXRhU291cmNlU2V0dGluZ3MgPSB7XHJcblx0XHRcdGRhdGFTb3VyY2U6IHRoaXMuUGl2b3RfRGF0YSB8fCBbXSxcclxuXHRcdFx0cm93czogcm93cyB8fCBbXSxcclxuXHRcdFx0Y29sdW1uczogY29sdW1ucyB8fCBbXSxcclxuXHRcdFx0dmFsdWVzOiB2YWx1ZXMgfHwgW10sXHJcblx0XHRcdGZpbHRlcnM6IHRoaXMuY29uZmlnLmZpbHRlcnMsXHJcblx0XHRcdGZpbHRlclNldHRpbmdzOiBmaWx0ZXJTZXR0aW5ncyxcclxuXHRcdFx0ZXhjbHVkZUZpZWxkczogdGhpcy5leGNsdWRlRmllbGRzLFxyXG5cdFx0XHRmb3JtYXRTZXR0aW5nczogZm9ybWF0U2V0dGluZ3MsXHJcblx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3M6IGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MsXHJcblx0XHRcdC8vIOeUqOS6juaUtui1t+WxleW8gOaMh+WumuWxgue6pywg6L+Z546p5oSP5Y+q6IO95bGV5byA56ys5LiA5bGCLFxyXG5cdFx0XHQvLyDlv4Xpobvorr7lrppleHBhbmRBbGwg5Li6ZmFsc2XvvIjpu5jorqTmmK9mYWxzZe+8ie+8jCDov5nmoLflrZDmiY3og73lrp7njrDlj6rlsZXlvIDkuKTlsYJcclxuXHRcdFx0Ly8gZHJpbGxlZE1lbWJlcnMsXHJcblx0XHRcdGV4cGFuZEFsbDogdHJ1ZSxcclxuXHRcdFx0ZW5hYmxlU29ydGluZzogdHJ1ZSxcclxuXHRcdFx0ZmllbGRNYXBwaW5nOiBmaWVsZE1hcHBpbmcsXHJcblx0XHRcdGNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzOiB0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncyxcclxuXHRcdFx0c29ydFNldHRpbmdzOiBzb3J0U2V0dGluZ3MsXHJcblx0XHRcdC8vIGdyb3VwU2V0dGluZ3M6IHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3MsXHJcblx0XHRcdHZhbHVlU29ydFNldHRpbmdzOiB0aGlzLmNvbmZpZy52YWx1ZVNvcnRTZXR0aW5ncyxcclxuXHRcdFx0c2hvd0dyYW5kVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdHNob3dSb3dHcmFuZFRvdGFsczogdGhpcy5jb25maWcuc2hvd1Jvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRzaG93Q29sdW1uR3JhbmRUb3RhbHM6IHRoaXMuY29uZmlnLnNob3dDb2x1bW5HcmFuZFRvdGFscyxcclxuXHRcdFx0c2hvd1N1YlRvdGFsczogdGhpcy5jb25maWcuc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0c2hvd1Jvd1N1YlRvdGFsczogdGhpcy5jb25maWcuc2hvd1Jvd1N1YlRvdGFscyxcclxuXHRcdFx0c2hvd0NvbHVtblN1YlRvdGFsczogdGhpcy5jb25maWcuc2hvd0NvbHVtblN1YlRvdGFscyxcclxuXHRcdH07XHJcblx0XHRjb25zb2xlLmxvZyhcInRoaXMuZGF0YVNvdXJjZVNldHRpbmdzXCIsIHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzKTtcclxuXHJcblx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHR9XHJcblxyXG5cdGdldENhcHRpb25CeU5hbWUobmFtZVN0cmluZykge1xyXG5cdFx0aWYgKCFuYW1lU3RyaW5nKSByZXR1cm4gXCJcIjtcclxuXHRcdGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmluZCgoZWwpID0+IGVsLmNvbE5hbWUgPT09IG5hbWVTdHJpbmcpO1xyXG5cclxuXHRcdHJldHVybiBmaWVsZFxyXG5cdFx0XHQ/IGZpZWxkLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0dGhpcy50cmFuc2xhdGlvbltmaWVsZCAmJiBmaWVsZC5sYW5nQ29kZV0gfHxcclxuXHRcdFx0XHRcdGZpZWxkLmxhbmdDb2RlXHJcblx0XHRcdDogXCJcIjtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhZnRlclBvcHVsYXRlKGFyZ3M6IEVuZ2luZVBvcHVsYXRlZEV2ZW50QXJncyk6IHZvaWQge1xyXG5cdFx0dGhpcy50ZW1wU3VidG90YWxzID0gW107XHJcblx0XHR0aGlzLmdyYW5kVG90YWxzID0ge307XHJcblx0XHR0aGlzLnN1YlRvdGFscyA9IHt9O1xyXG5cdFx0bGV0IHRlbXBzaG93QXJyYXkgPSBbXTtcclxuXHRcdHRoaXMuY29uZmlnLnlheGlzLnNlcmllcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRpdGVtLmhhc093blByb3BlcnR5KFwic2hvd1N1YlRvdGFsc1wiKSAmJlxyXG5cdFx0XHRcdGl0ZW0uaGFzT3duUHJvcGVydHkoXCJzaG93R3JhbmRUb3RhbHNcIilcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0dGVtcHNob3dBcnJheS5wdXNoKHtcclxuXHRcdFx0XHRcdG5hbWU6IGl0ZW0uY29sTmFtZSxcclxuXHRcdFx0XHRcdGNhbE1ldGhvZDogaXRlbS5jYWxNZXRob2QsXHJcblx0XHRcdFx0XHRzaG93U3ViVG90YWxzOiBpdGVtLnNob3dTdWJUb3RhbHMsXHJcblx0XHRcdFx0XHRzaG93R3JhbmRUb3RhbHM6IGl0ZW0uc2hvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChpdGVtLmhhc093blByb3BlcnR5KFwic2hvd0dyYW5kVG90YWxzXCIpKSB7XHJcblx0XHRcdFx0XHR0ZW1wc2hvd0FycmF5LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdGNhbE1ldGhvZDogaXRlbS5jYWxNZXRob2QsXHJcblx0XHRcdFx0XHRcdHNob3dHcmFuZFRvdGFsczogaXRlbS5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoXCJzaG93U3ViVG90YWxzXCIpKSB7XHJcblx0XHRcdFx0XHR0ZW1wc2hvd0FycmF5LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdGNhbE1ldGhvZDogaXRlbS5jYWxNZXRob2QsXHJcblx0XHRcdFx0XHRcdHNob3dTdWJUb3RhbHM6IGl0ZW0uc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqICYmIHRoaXMucGl2b3RPYmopIHtcclxuXHRcdFx0dGhpcy5jb25maWcuY29sdW1uR3JvdXAgPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcueGF4aXMuZ3JvdXBzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLnlheGlzLnNlcmllcyA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5maWx0ZXJzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLmZpbHRlclNldHRpbmdzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzID0gW107XHJcblx0XHRcdGxldCBncm91cFNldHRpbmdzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiZ3JvdXBTZXR0aW5nc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBjb2x1bW5zID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiY29sdW1uc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCByb3dzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwicm93c1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBmaWx0ZXJzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiZmlsdGVyc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBmaWx0ZXJTZXR0aW5ncyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcImZpbHRlclNldHRpbmdzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IHZhbHVlcyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcInZhbHVlc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBzb3J0U2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJzb3J0U2V0dGluZ3NcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRsZXQgY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJjYWxjdWxhdGVkRmllbGRTZXR0aW5nc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChncm91cFNldHRpbmdzLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRcdGZvciAobGV0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0bmFtZTogY29sdW1uLm5hbWUsXHJcblx0XHRcdFx0XHRcdGNhcHRpb246XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRDYXB0aW9uQnlOYW1lKGNvbHVtbi5uYW1lKSB8fFxyXG5cdFx0XHRcdFx0XHRcdGNvbHVtbi5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vSWYgdGhlcmUgaXMgYSBncm91cCwgZmlyc3QgZmlsdGVyIHRoZSBjb2x1bW5zIG9mIHRoZSBncm91cCBmaWVsZCwgYW5kIHRoZW4gb25seSBzYXZlIHRoZSBsYXN0IG9uZVxyXG5cdFx0XHRcdGZvciAobGV0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcblx0XHRcdFx0XHRpZiAoIXN0YXJ0c1dpdGgoY29sdW1uLm5hbWUsIGdyb3VwU2V0dGluZ3NbMF0ubmFtZSArIFwiX1wiKSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lOiBjb2x1bW4ubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRjYXB0aW9uOlxyXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uLm5hbWUgPT09IGdyb3VwU2V0dGluZ3NbMF0ubmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IFwiXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmdldENhcHRpb25CeU5hbWUoY29sdW1uLm5hbWUpIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgY29sdW1uLmNhcHRpb24sXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKGxldCByb3cgb2Ygcm93cykge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLnhheGlzLmdyb3Vwcy5wdXNoKHtcclxuXHRcdFx0XHRcdG5hbWU6IHJvdy5uYW1lLFxyXG5cdFx0XHRcdFx0Y2FwdGlvbjogdGhpcy5nZXRDYXB0aW9uQnlOYW1lKHJvdy5uYW1lKSB8fCByb3cuY2FwdGlvbixcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKGxldCBmaWx0ZXIgb2YgZmlsdGVycykge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmZpbHRlcnMucHVzaCh7XHJcblx0XHRcdFx0XHRuYW1lOiBmaWx0ZXIubmFtZSxcclxuXHRcdFx0XHRcdGNhcHRpb246XHJcblx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FwdGlvbkJ5TmFtZShmaWx0ZXIubmFtZSkgfHwgZmlsdGVyLmNhcHRpb24sXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuZmlsdGVyU2V0dGluZ3MgJiYgdGhpcy5maWx0ZXJTZXR0aW5ncy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0YXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3MgPSB0aGlzLmZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmZpbHRlclNldHRpbmdzID0gdGhpcy5maWx0ZXJTZXR0aW5ncztcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5maWx0ZXJTZXR0aW5ncztcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZy5maWx0ZXJTZXR0aW5ncyA9IGZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xyXG5cdFx0XHRcdGxldCBzZXJpZXNEYXRhO1xyXG5cdFx0XHRcdGxldCB0ZW1wU2hvd09iajtcclxuXHRcdFx0XHRsZXQgZmlsdGVyVGVtcHNob3dBcnJheSA9IFtdO1xyXG5cdFx0XHRcdGlmICh0ZW1wc2hvd0FycmF5Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0ZmlsdGVyVGVtcHNob3dBcnJheSA9IHRlbXBzaG93QXJyYXkuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHQoaXRlbSkgPT5cclxuXHRcdFx0XHRcdFx0XHRpdGVtLm5hbWUgPT09IHZhbHVlLm5hbWUgJiZcclxuXHRcdFx0XHRcdFx0XHRpdGVtLmNhbE1ldGhvZCA9PT0gdmFsdWUudHlwZVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGlmIChmaWx0ZXJUZW1wc2hvd0FycmF5Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHR0ZW1wU2hvd09iaiA9IGZpbHRlclRlbXBzaG93QXJyYXlbMF07XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHR0ZW1wU2hvd09iai5oYXNPd25Qcm9wZXJ0eShcInNob3dTdWJUb3RhbHNcIikgJiZcclxuXHRcdFx0XHRcdFx0XHR0ZW1wU2hvd09iai5oYXNPd25Qcm9wZXJ0eShcInNob3dHcmFuZFRvdGFsc1wiKVxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRzZXJpZXNEYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29sTmFtZTogdmFsdWUubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdGNhbE1ldGhvZDogdmFsdWUudHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB2YWx1ZS5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2hvd1N1YlRvdGFsczogdGVtcFNob3dPYmouc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0XHRcdFx0XHRcdHNob3dHcmFuZFRvdGFsczogdGVtcFNob3dPYmouc2hvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRlbXBTaG93T2JqLmhhc093blByb3BlcnR5KFwic2hvd0dyYW5kVG90YWxzXCIpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzZXJpZXNEYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xOYW1lOiB2YWx1ZS5uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYWxNZXRob2Q6IHZhbHVlLnR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB2YWx1ZS5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93R3JhbmRUb3RhbHM6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGVtcFNob3dPYmouc2hvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRlbXBTaG93T2JqLmhhc093blByb3BlcnR5KFwic2hvd1N1YlRvdGFsc1wiKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0c2VyaWVzRGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sTmFtZTogdmFsdWUubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiB2YWx1ZS50eXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdmFsdWUuY2FwdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd1N1YlRvdGFsczogdGVtcFNob3dPYmouc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICghc2VyaWVzRGF0YSkge1xyXG5cdFx0XHRcdFx0c2VyaWVzRGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0Y29sTmFtZTogdmFsdWUubmFtZSxcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHZhbHVlLmNhcHRpb24sXHJcblx0XHRcdFx0XHRcdGNhbE1ldGhvZDogdmFsdWUudHlwZSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuY29uZmlnLnlheGlzLnNlcmllcy5wdXNoKHNlcmllc0RhdGEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGNhbGN1bGF0ZSBvZiBjYWxjdWxhdGVkRmllbGRTZXR0aW5ncykge1xyXG5cdFx0XHRcdGNvbnN0IGNhbGN1bGF0ZURhdGEgPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBjYWxjdWxhdGUubmFtZSxcclxuXHRcdFx0XHRcdGZvcm11bGE6IGNhbGN1bGF0ZS5mb3JtdWxhLFxyXG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOlxyXG5cdFx0XHRcdFx0XHRjYWxjdWxhdGUuZm9ybWF0U3RyaW5nID09PSBcIlwiXHJcblx0XHRcdFx0XHRcdFx0PyBcIk4yXCJcclxuXHRcdFx0XHRcdFx0XHQ6IGNhbGN1bGF0ZS5mb3JtYXRTdHJpbmcsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncy5wdXNoKGNhbGN1bGF0ZURhdGEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuY29uZmlnLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMgPSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHM7XHJcblx0XHRcdHRoaXMuY29uZmlnLnNvcnRTZXR0aW5ncyA9IHNvcnRTZXR0aW5ncztcclxuXHRcdFx0dGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncyA9IGdyb3VwU2V0dGluZ3M7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLnVwZGF0ZVZpZXcodGhpcy5waXZvdE9iaik7XHJcblx0XHR9XHJcblx0XHR0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0Ly9yZW1vdmUgdGhlIHNvcnRcclxuXHRcdGlmICh0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5zb3J0U2V0dGluZ3MubGVuZ3RoID4gMCkge1xyXG5cdFx0XHR0aGlzLnByZXZpb3VzU29ydCA9IHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mbztcclxuXHRcdFx0KHRoaXMuZmllbGRsaXN0T2JqIGFzIGFueSkubGFzdFNvcnRJbmZvID0gW107XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYWZ0ZXJFbmdpbmVQb3B1bGF0ZShhcmdzOiBhbnkpIHtcclxuXHRcdGlmICghQnJvd3Nlci5pc0RldmljZSAmJiB0aGlzLmZpZWxkbGlzdE9iaiAmJiB0aGlzLnBpdm90T2JqKSB7XHJcblx0XHRcdHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iaixcclxuXHRcdFx0XHRcImdyb3VwU2V0dGluZ3NcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHR0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmopIHRoaXMuZmllbGRsaXN0T2JqLnVwZGF0ZSh0aGlzLnBpdm90T2JqKTtcclxuXHRcdFx0dGhpcy5waXZvdE9iai5ncmlkLnF1ZXJ5Q2VsbEluZm8gPSB0aGlzLnF1ZXJ5Q2VsbC5iaW5kKHRoaXMpO1xyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmdyaWQuaGVhZGVyQ2VsbEluZm8gPSB0aGlzLmhlYWRlckNlbGwuYmluZCh0aGlzKTtcclxuXHRcdFx0Ly8gU01QMi0zOTI5IHJvbGxiYWNrXHJcblx0XHRcdC8vIGlmICghdGhpcy5pc0FwcGx5SVJSKVxyXG5cdFx0XHQvLyBcdHRoaXMuZ2V0Q2FsY3VsYXRpb25SZXN1bHRCeURhc2hib2FyZERhdGFUYWJsZUlkKCk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5QaXZvdF9EYXRhICYmIHRoaXMuUGl2b3RfRGF0YS5sZW5ndGgpIHtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5lbmdpbmVQb3B1bGF0ZWQoYXJncyk7XHJcblx0XHRcdH0sIDE1MDApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKG9iaiwga2V5KSB7XHJcblx0XHRsZXQgcHJvcCA9IG51bGw7XHJcblx0XHRpZiAob2JqICYmIG9iai5kYXRhU291cmNlU2V0dGluZ3MpIHtcclxuXHRcdFx0cHJvcCA9IG9iai5kYXRhU291cmNlU2V0dGluZ3Nba2V5XTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChwcm9wKSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiICYmXHJcblx0XHRcdFx0cHJvcC5sZW5ndGggPiAwXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHByb3AgPSBwcm9wLm1hcCgoaXRlbSkgPT4gaXRlbS5wcm9wZXJ0aWVzIHx8IGl0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcHJvcDtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBlbmdpbmVQb3B1bGF0aW5nKGFyZ3MpIHtcclxuXHRcdHRoaXMuZ3JhbmRUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuc3ViVG90YWxzID0ge307XHJcblx0XHR0aGlzLmFsbERhdGFWYWx1ZSA9IFtdO1xyXG5cdFx0Ly8gaWYgKGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5ncy5sZW5ndGgpIHtcclxuXHRcdC8vIFx0Zm9yIChcclxuXHRcdC8vIFx0XHRsZXQgaSA9IDA7XHJcblx0XHQvLyBcdFx0aSA8IGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5ncy5sZW5ndGg7XHJcblx0XHQvLyBcdFx0aSsrXHJcblx0XHQvLyBcdCkge1xyXG5cdFx0Ly8gXHRcdGlmIChcclxuXHRcdC8vIFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mbyAmJlxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvLm5hbWUgPT09XHJcblx0XHQvLyBcdFx0XHRcdGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5nc1tpXS5uYW1lICYmXHJcblx0XHQvLyBcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5sYXN0U29ydEluZm8ub3JkZXIgPT09IFwiQXNjZW5kaW5nXCIgJiZcclxuXHRcdC8vIFx0XHRcdCEoXHJcblx0XHQvLyBcdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mby5uYW1lID09PVxyXG5cdFx0Ly8gXHRcdFx0XHRcdHRoaXMucHJldmlvdXNTb3J0Lm5hbWUgJiZcclxuXHRcdC8vIFx0XHRcdFx0dGhpcy5wcmV2aW91c1NvcnQub3JkZXIgPT09IFwiTm9uZVwiXHJcblx0XHQvLyBcdFx0XHQpXHJcblx0XHQvLyBcdFx0KSB7XHJcblx0XHQvLyBcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5zb3J0U2V0dGluZ3NbaV0ub3JkZXIgPSBcIk5vbmVcIjtcclxuXHRcdC8vIFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5wcmV2aW91c1NvcnQgJiZcclxuXHRcdC8vIFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mbyAmJlxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvLm5hbWUgPT09XHJcblx0XHQvLyBcdFx0XHRcdHRoaXMucHJldmlvdXNTb3J0Lm5hbWUgJiZcclxuXHRcdC8vIFx0XHRcdHRoaXMucHJldmlvdXNTb3J0Lm9yZGVyID09PSBcIkFzY2VuZGluZ1wiXHJcblx0XHQvLyBcdFx0KSB7XHJcblx0XHQvLyBcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5zb3J0U2V0dGluZ3NbaV0ub3JkZXIgPSBcIkFzY2VuZGluZ1wiO1xyXG5cdFx0Ly8gXHRcdH1cclxuXHRcdC8vIFx0fVxyXG5cdFx0Ly8gfVxyXG5cdH1cclxuXHJcblx0cHVibGljIGNlbGxDbGljayhhcmdzKSB7XHJcblx0XHRpZiAoYXJncy5jdXJyZW50Q2VsbC5jbGFzc0xpc3QuY29udGFpbnMoXCJlLWhlYWRlcmNlbGxcIikpIHtcclxuXHRcdFx0dGhpcy5mbGFnID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdC8vIOa4hemZpOaOkuW6j1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5ncy5zb3J0T3JkZXIgJiZcclxuXHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVTb3J0U2V0dGluZ3MuaGVhZGVyVGV4dCAmJlxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5ncy5zb3J0T3JkZXIgPT09XHJcblx0XHRcdFx0XCJEZXNjZW5kaW5nXCIgJiZcclxuXHRcdFx0YXJncy5kYXRhLnZhbHVlU29ydCAmJlxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5ncy5oZWFkZXJUZXh0ID09PVxyXG5cdFx0XHRcdGFyZ3MuZGF0YS52YWx1ZVNvcnQubGV2ZWxOYW1lXHJcblx0XHQpIHtcclxuXHRcdFx0dGhpcy5waXZvdE9iai5zZXRQcm9wZXJ0aWVzKFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdGRhdGFTb3VyY2VTZXR0aW5nczoge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZVNvcnRTZXR0aW5nczoge1xyXG5cdFx0XHRcdFx0XHRcdHNvcnRPcmRlcjogXCJEZXNjZW5kaW5nXCIsXHJcblx0XHRcdFx0XHRcdFx0aGVhZGVyVGV4dDogXCJcIixcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR0cnVlXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdHRoaXMuZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy52YWx1ZVNvcnRTZXR0aW5ncyA9IHt9O1xyXG5cdFx0XHR0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBxdWVyeUNlbGwoYXJnczogYW55KTogdm9pZCB7XHJcblx0XHQodGhpcy5waXZvdE9iai5yZW5kZXJNb2R1bGUgYXMgYW55KS5yb3dDZWxsQm91bmRFdmVudChhcmdzKTtcclxuXHRcdGxldCByb3dJbmRleCA9IE51bWJlcihhcmdzLmNlbGwuZ2V0QXR0cmlidXRlKFwiaW5kZXhcIikpO1xyXG5cdFx0Ly8g5paw54mI5pysMjYueOS4rSBhcmlhLWNvbGluZGV4IOS8muavlOaXp+eJiOacrHYyMC54IOWkmjFcclxuXHRcdGxldCBjb2xJbmRleCA9IHBhcnNlSW50KGFyZ3MuY2VsbC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWNvbGluZGV4XCIpKSAtIDE7XHJcblx0XHRpZiAoXHJcblx0XHRcdCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb25kaXRpb25hbEZvcm1hdFNldHRpbmdzLmxlbmd0aFxyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChhcmdzLmRhdGEgJiYgYXJncy5kYXRhWzBdLmZvcm1hdHRlZFRleHQgPT09IFwiR3JhbmQgVG90YWxcIikge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwiZ3JhbmQtY2xhc3NcIik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXHJcblx0XHRcdFx0XHRyb3dJbmRleCAlIDIgPyBcIm9kZC1jbGFzc1wiIDogXCJldmVuLWNsYXNzXCJcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsZXQgbWVhc3VyZUFyciA9XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29uZGl0aW9uYWxGb3JtYXRTZXR0aW5ncy5tYXAoXHJcblx0XHRcdFx0XHQob2JqKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBvYmoubWVhc3VyZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0bWVhc3VyZUFyci5pbmNsdWRlcyhhcmdzLmRhdGFbY29sSW5kZXhdLmFjdHVhbFRleHQpICYmXHJcblx0XHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XS5zdHlsZVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuc3R5bGUuY3NzVGV4dCArPSBgYmFja2dyb3VuZC1jb2xvcjogJHthcmdzLmRhdGFbY29sSW5kZXhdLnN0eWxlLmJhY2tncm91bmRDb2xvcn0gIWltcG9ydGFudGA7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGFyZ3MuZGF0YSAmJiBhcmdzLmRhdGFbMF0uZm9ybWF0dGVkVGV4dCA9PT0gXCJHcmFuZCBUb3RhbFwiKVxyXG5cdFx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwiZS1jdXN0b21jbGFzc1wiKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoYXJncy5kYXRhICYmIGFyZ3MuZGF0YVswXS5mb3JtYXR0ZWRUZXh0ID09PSBcIkdyYW5kIFRvdGFsXCIpIHtcclxuXHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJncmFuZC1jbGFzc1wiKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmIChyb3dJbmRleCAlIDIpIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcIm9kZC1jbGFzc1wiKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcImV2ZW4tY2xhc3NcIik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvL2dldCBzb3J0aW5nIGRhdGFcclxuXHRcdGlmICh0aGlzLmZsYWcpIHtcclxuXHRcdFx0dGhpcy5mbGFnID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuY29uZmlnLnZhbHVlU29ydFNldHRpbmdzID1cclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5nc1tcclxuXHRcdFx0XHRcdFwicHJvcGVydGllc1wiXHJcblx0XHRcdFx0XTtcclxuXHRcdFx0dGhpcy5wb3J0bGV0LmNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnKTtcclxuXHRcdH1cclxuXHRcdC8vY3VzdG9taXplIHRoZSBoZWFkZXIgdGV4dFxyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3MubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRhcmdzLmRhdGEgJiZcclxuXHRcdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdICYmXHJcblx0XHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XS5heGlzID09PSBcInJvd1wiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5xdWVyeVNlbGVjdG9yKFwiLmUtY2VsbHZhbHVlXCIpLmlubmVyVGV4dCA9XHJcblx0XHRcdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdLmZvcm1hdHRlZFRleHQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBTTVAyLTI5MTIgc3VidG90YWzlrZfkvZPliqDnspdcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGggJiZcclxuXHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XSAmJlxyXG5cdFx0XHRhcmdzLmRhdGFbMF0ubGV2ZWwgIT09XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGggLSAxICYmXHJcblx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0ucm93SGVhZGVycyAhPT0gXCJcIiAmJlxyXG5cdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdLmF4aXMgPT0gXCJ2YWx1ZVwiXHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJlLWN1c3RvbWNsYXNzXCIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBoZWFkZXJDZWxsKGFyZ3M6IGFueSk6IHZvaWQge1xyXG5cdFx0KHRoaXMucGl2b3RPYmoucmVuZGVyTW9kdWxlIGFzIGFueSkuY29sdW1uQ2VsbEJvdW5kRXZlbnQoYXJncyk7XHJcblx0XHRpZiAodGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0bGV0IG5vZGUgPSBhcmdzLm5vZGUucXVlcnlTZWxlY3RvcihcclxuXHRcdFx0XHRcIi5lLWhlYWRlcmNlbGxkaXYgLmUtaGVhZGVydGV4dFwiXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChub2RlKSBub2RlLmlubmVyVGV4dCA9IGFyZ3MuY2VsbC5jb2x1bW4uaGVhZGVyVGV4dDtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHRleHRBbGlnbiA9IGFyZ3MuY2VsbC5jb2x1bW4udGV4dEFsaWduO1xyXG5cdFx0YXJncy5jZWxsLmNvbHVtbi5oZWFkZXJUZXh0QWxpZ24gPSB0ZXh0QWxpZ247XHJcblx0XHRhcmdzLm5vZGUuc3R5bGUudGV4dEFsaWduID0gdGV4dEFsaWduID09PSBcIlJpZ2h0XCIgPyBcInJpZ2h0XCIgOiBcImxlZnRcIjsgLy8gQWxpZ24gcmlnaHQgZm9yIG51bWVyaWMgY29sdW1uc1xyXG5cdFx0aWYgKHRleHRBbGlnbiA9PT0gXCJSaWdodFwiKSB7XHJcblx0XHRcdGFyZ3Mubm9kZS5jbGFzc0xpc3QuYWRkKFwiaGVhZGVyLWFsaWduLXJpZ2h0XCIpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZGF0YUJvdW5kKGUpIHtcclxuXHRcdGlmICh0aGlzLmlzSW5pdCkge1xyXG5cdFx0XHR0aGlzLmlzSW5pdCA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5ncmFuZFRvdGFscyA9IHt9O1xyXG5cdFx0dGhpcy5zdWJUb3RhbHMgPSB7fTtcclxuXHRcdGlmICh0aGlzLnBpdm90T2JqLmdyaWQpIHtcclxuXHRcdFx0dGhpcy5waXZvdE9iai5ncmlkLnJlc2l6ZVN0b3AgPSB0aGlzLnJlc2l6ZVN0b3AuYmluZCh0aGlzKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLnBpdm90T2JqKSB7XHJcblx0XHRcdHZhciBpbmRleCA9IFtdO1xyXG5cdFx0XHQvLyBHZXQgdGhlIGVtcHR5IHJvdyBoZWFkZXJzIGhlcmUuXHJcblx0XHRcdHZhciBlbXB0eVJvd0hlYWRlcjogYW55ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuXHRcdFx0XHQndGRbYXJpYS1sYWJlbD1cIiBjb2x1bW4gaGVhZGVyIFwiXSdcclxuXHRcdFx0KTtcclxuXHRcdFx0Zm9yICh2YXIgZWxlIG9mIGVtcHR5Um93SGVhZGVyKSB7XHJcblx0XHRcdFx0aWYgKGVsZSkge1xyXG5cdFx0XHRcdFx0aW5kZXgucHVzaChlbGUuZ2V0QXR0cmlidXRlKFwiaW5kZXhcIikpO1xyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIGFsbCB0aGUgZW1wdHkgcm93IGhlYWRlcnMgaGVyZS5cclxuXHRcdFx0XHRcdGVsZS5jbG9zZXN0KFwidHJcIikucmVtb3ZlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaW5kZXgubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHQvLyBHZXQgdGhlIGVtcHR5IHZhbHVlcyBoZXJlLlxyXG5cdFx0XHRcdHZhciBlbXB0eVZhbHVlcyA9IHRoaXMucGl2b3RPYmouZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG5cdFx0XHRcdFx0YHRkW2luZGV4PVwiJHtpbmRleFtpXX1cIl1gXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoZW1wdHlWYWx1ZXNbMF0pIHtcclxuXHRcdFx0XHRcdC8vIFJlbW92ZSBhbGwgdGhlIGVtcHR5IHZhbHVlIHJvd3MgaGVyZS5cclxuXHRcdFx0XHRcdGVtcHR5VmFsdWVzWzBdLmNsb3Nlc3QoXCJ0clwiKS5yZW1vdmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmogJiZcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoucGl2b3RCdXR0b25Nb2R1bGUgJiZcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoucGl2b3RCdXR0b25Nb2R1bGUubWVudU9wdGlvblxyXG5cdFx0KSB7XHJcblx0XHRcdChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5waXZvdEJ1dHRvbk1vZHVsZS5tZW51T3B0aW9uIGFzIGFueVxyXG5cdFx0XHQpLnN0cmluZ0FnZ3JlZ2F0ZVR5cGVzID0gW1xyXG5cdFx0XHRcdFwiQ291bnRcIixcclxuXHRcdFx0XHRcIkRpc3RpbmN0Q291bnRcIixcclxuXHRcdFx0XHRcIkZpcnN0XCIsXHJcblx0XHRcdFx0XCJMYXN0XCIsXHJcblx0XHRcdF07XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMucGl2b3RPYmoucGl2b3RCdXR0b25Nb2R1bGUgJiZcclxuXHRcdFx0dGhpcy5waXZvdE9iai5waXZvdEJ1dHRvbk1vZHVsZS5tZW51T3B0aW9uXHJcblx0XHQpIHtcclxuXHRcdFx0KFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmoucGl2b3RCdXR0b25Nb2R1bGUubWVudU9wdGlvbiBhcyBhbnlcclxuXHRcdFx0KS5zdHJpbmdBZ2dyZWdhdGVUeXBlcyA9IFtcclxuXHRcdFx0XHRcIkNvdW50XCIsXHJcblx0XHRcdFx0XCJEaXN0aW5jdENvdW50XCIsXHJcblx0XHRcdFx0XCJGaXJzdFwiLFxyXG5cdFx0XHRcdFwiTGFzdFwiLFxyXG5cdFx0XHRdO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGFsbFN1bW1hcnlUeXBlID0gQUxMX0FHR1JFR0FURV9UWVBFUyBhcyBhbnk7XHJcblx0XHR0aGlzLnBpdm90T2JqLmdldEFsbFN1bW1hcnlUeXBlID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRyZXR1cm4gYWxsU3VtbWFyeVR5cGU7XHJcblx0XHR9O1xyXG5cdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqKSB7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmFnZ3JlZ2F0ZVR5cGVzID0gYWxsU3VtbWFyeVR5cGU7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmdldEFsbFN1bW1hcnlUeXBlID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdHJldHVybiBhbGxTdW1tYXJ5VHlwZTtcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHRcdHRoaXMuc2V0VmFsdWVJdGVtRGF0YSgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRWYWx1ZUl0ZW1EYXRhKCkge1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdGNvbnN0IGZpZWxkRG9tID0gdGhpcy5maWVsZGxpc3RPYmouZmllbGRMaXN0U3Bpbm5lckVsZW1lbnQ7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlcy5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XHJcblx0XHRcdFx0aWYgKHZhbHVlLnR5cGUgIT09IFwiRmlyc3RcIiAmJiB2YWx1ZS50eXBlICE9PSBcIkxhc3RcIikge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCB2YWx1ZXNEb20gPSBmaWVsZERvbS5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdFx0YC5lLXZhbHVlcyAuJHt2YWx1ZS5uYW1lfSAuZS1wdnQtYnRuLWNvbnRlbnRgXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHR2YWx1ZXNEb20uaW5uZXJIVE1MICE9PSBgJHt2YWx1ZS50eXBlfSBvZiAke3ZhbHVlLmNhcHRpb259YFxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0dmFsdWVzRG9tLmlubmVySFRNTCA9IGAke3ZhbHVlLnR5cGV9IG9mICR7dmFsdWUuY2FwdGlvbn1gO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2FsY3VsYXRlZENlbGxTZXRzKGFyZ3MsIGN1ckZpZWxkcykge1xyXG5cdFx0bGV0IG1hdGNoRmllbGRzID0gY3VyRmllbGRzW1wibWF0Y2hGaWVsZHNcIl07XHJcblx0XHRsZXQgZm9ybXVsYSA9IGN1ckZpZWxkc1tcImZvcm11bGFcIl07XHJcblx0XHRsZXQgdmFsdWUgPSAwO1xyXG5cdFx0bGV0IHJvd3MgPSB0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzO1xyXG5cdFx0bGV0IGludmFsaWRUeXBlcyA9IFtcInN0cmluZ1wiLCBcIm52YXJjaGFyXCIsIFwiZGF0ZVwiLCBcImRhdGV0aW1lXCJdO1xyXG5cdFx0bGV0IGlzSW52YWxpZCA9IG1hdGNoRmllbGRzLnNvbWUoKGYpID0+XHJcblx0XHRcdGludmFsaWRUeXBlcy5pbmNsdWRlcyhcclxuXHRcdFx0XHR0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoKGVsKSA9PiBlbC5jb2xOYW1lID09PSBmLm1hdGNoV29yZClbMF1bXHJcblx0XHRcdFx0XHRcImRhdGFUeXBlXCJcclxuXHRcdFx0XHRdXHJcblx0XHRcdClcclxuXHRcdCk7XHJcblx0XHRsZXQgY3VycmVudHJvd0NlbGxUeXBlID0gYXJncy5yb3dDZWxsVHlwZTtcclxuXHRcdGlmIChpc0ludmFsaWQpIHJldHVybiBcIi1cIjtcclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9PT0gXCJzdWJUb3RhbFwiIHx8XHJcblx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHQpIHtcclxuXHRcdFx0bGV0IGNoaWxkSGVhZGVycyA9IFtdO1xyXG5cdFx0XHRsZXQgc3VtID0gMDtcclxuXHRcdFx0bGV0IGNsb25lQ2VsbFNldHMgPSBjbG9uZURlZXAoYXJncy5jZWxsU2V0cyk7XHJcblx0XHRcdGxldCBncm91cE5hbWVBcnJheXMgPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgaW5kZXggPSBhcmdzLnJvdy5sZXZlbDsgaW5kZXggPCByb3dzLmxlbmd0aDsgaW5kZXgrKykge1xyXG5cdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5wdXNoKHJvd3NbaW5kZXhdLm5hbWUpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2xvbmVDZWxsU2V0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0XHRsZXQgaGVhZGVyID0gZ3JvdXBOYW1lQXJyYXlzXHJcblx0XHRcdFx0XHQubWFwKChuYW1lKSA9PiB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGNsb25lQ2VsbFNldHNbaV1bbmFtZV0pO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gY2xvbmVDZWxsU2V0c1tpXVtuYW1lXTtcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQuam9pbihcIi1cIik7XHJcblx0XHRcdFx0aWYgKCEoY2hpbGRIZWFkZXJzIGFzIGFueSkuaW5jbHVkZXMoaGVhZGVyKSkge1xyXG5cdFx0XHRcdFx0Y2hpbGRIZWFkZXJzLnB1c2goaGVhZGVyKTtcclxuXHRcdFx0XHRcdGxldCBmaWx0ZXJPYmo6IGFueSA9IHt9O1xyXG5cdFx0XHRcdFx0Z3JvdXBOYW1lQXJyYXlzLm1hcChcclxuXHRcdFx0XHRcdFx0KG5hbWUsIGkpID0+IChmaWx0ZXJPYmpbbmFtZV0gPSB2YWx1ZXNbaV0pXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YXJncy5jZWxsU2V0cyA9IF9maWx0ZXIoY2xvbmVDZWxsU2V0cywgZmlsdGVyT2JqKTtcclxuXHRcdFx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPSBcInZhbHVlXCI7XHJcblx0XHRcdFx0XHRzdW0gKz0gdGhpcy5jYWxjdWxhdGVkVmFsdWVzKGFyZ3MsIG1hdGNoRmllbGRzLCBmb3JtdWxhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9IGN1cnJlbnRyb3dDZWxsVHlwZTtcclxuXHJcblx0XHRcdC8vIOaaguWtmOW9k+WJjVN1YlRvdGFs77yMIOeUqOS6juaUtue8qeaXtuivu+WPllxyXG5cdFx0XHRsZXQgcHJlZml4SGVhZGVyID0gdGhpcy5nZXRDYWxjSGVhZGVyKGFyZ3MsIGZvcm11bGEpO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVRlbXBTdWJ0b3RhbHMocHJlZml4SGVhZGVyLCBzdW0pO1xyXG5cdFx0XHRyZXR1cm4gc3VtO1xyXG5cdFx0fSBlbHNlIGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcInZhbHVlXCIpIHtcclxuXHRcdFx0aWYgKGFyZ3Mucm93Lmhhc0NoaWxkKSB7XHJcblx0XHRcdFx0Ly8gY29sbGFwc2Ug6K+75Y+WU3ViVG90YWxcclxuXHRcdFx0XHRsZXQgaGVhZGVyID0gdGhpcy5nZXRDYWxjSGVhZGVyKGFyZ3MsIGZvcm11bGEpO1xyXG5cdFx0XHRcdGxldCBpbmRleCA9IHRoaXMudGVtcFN1YnRvdGFscy5maW5kSW5kZXgoXHJcblx0XHRcdFx0XHQoaXRlbSkgPT4gaXRlbS5yb3dOYW1lID09PSBoZWFkZXJcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChpbmRleCA+IC0xKSB7XHJcblx0XHRcdFx0XHR2YWx1ZSA9IHRoaXMudGVtcFN1YnRvdGFsc1tpbmRleF0ucm93VmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIGV4cGFuZFxyXG5cdFx0XHRcdHZhbHVlID0gdGhpcy5jYWxjdWxhdGVkVmFsdWVzKGFyZ3MsIG1hdGNoRmllbGRzLCBmb3JtdWxhKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHZhbHVlO1xyXG5cdH1cclxuXHJcblx0YWN0aW9uRmFpbHVyZShhcmdzOiBQaXZvdEFjdGlvbkZhaWx1cmVFdmVudEFyZ3MpOiB2b2lkIHtcclxuXHRcdGlmIChhcmdzLmFjdGlvbk5hbWUgPT0gXCJEcmlsbCBkb3duXCIgfHwgYXJncy5hY3Rpb25OYW1lID09IFwiRHJpbGwgdXBcIikge1xyXG5cdFx0XHQvLyBUcmlnZ2VycyB3aGVuIHRoZSBjdXJyZW50IFVJIGFjdGlvbiBmYWlscyB0byBhY2hpZXZlIHRoZSBkZXNpcmVkIHJlc3VsdC5cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q2FsY0hlYWRlcihhcmdzLCBmb3JtdWxhPykge1xyXG5cdFx0bGV0IGhlYWRlciA9IFwiXCI7XHJcblx0XHRsZXQgcm93cyA9IHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3M7XHJcblx0XHRsZXQgZ3JvdXBOYW1lQXJyYXlzID0gW107XHJcblx0XHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJncy5yb3cubGV2ZWw7IGluZGV4KyspIHtcclxuXHRcdFx0Z3JvdXBOYW1lQXJyYXlzLnB1c2gocm93c1tpbmRleF0ubmFtZSk7XHJcblx0XHR9XHJcblx0XHRoZWFkZXIgPSBncm91cE5hbWVBcnJheXMubGVuZ3RoXHJcblx0XHRcdD8gZ3JvdXBOYW1lQXJyYXlzXHJcblx0XHRcdFx0XHQubWFwKChuYW1lKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBhcmdzLmNlbGxTZXRzWzBdW25hbWVdO1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdC5qb2luKFwiLVwiKSArXHJcblx0XHRcdCAgXCItXCIgK1xyXG5cdFx0XHQgIGFyZ3Mucm93LmFjdHVhbFRleHRcclxuXHRcdFx0OiBhcmdzLnJvdy5hY3R1YWxUZXh0O1xyXG5cdFx0aWYgKGZvcm11bGEpIGhlYWRlciArPSBcIl9fX1wiICsgZm9ybXVsYTtcclxuXHRcdHJldHVybiBoZWFkZXI7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHVwZGF0ZVRlbXBTdWJ0b3RhbHMocm93TmFtZSwgcm93VmFsdWUpIHtcclxuXHRcdGxldCBpbmRleCA9IHRoaXMudGVtcFN1YnRvdGFscy5maW5kSW5kZXgoXHJcblx0XHRcdChpdGVtKSA9PiBpdGVtLnJvd05hbWUgPT09IHJvd05hbWVcclxuXHRcdCk7XHJcblx0XHRsZXQgdGVtcDogYW55ID0ge307XHJcblx0XHR0ZW1wLnJvd05hbWUgPSByb3dOYW1lO1xyXG5cdFx0dGVtcC5yb3dWYWx1ZSA9IHJvd1ZhbHVlO1xyXG5cdFx0aWYgKGluZGV4ID4gLTEpIHtcclxuXHRcdFx0dGhpcy50ZW1wU3VidG90YWxzLnNwbGljZShpbmRleCwgMSwgdGVtcCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnRlbXBTdWJ0b3RhbHMucHVzaCh0ZW1wKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2FsY3VsYXRlZFZhbHVlcyhhcmdzLCBtYXRjaEZpZWxkcywgZm9ybXVsYSkge1xyXG5cdFx0aWYgKG1hdGNoRmllbGRzLmxlbmd0aCkge1xyXG5cdFx0XHRsZXQgY2FsY3VsZWRNYXRjaEZpZWxkcyA9IG1hdGNoRmllbGRzLm1hcCgoZikgPT4ge1xyXG5cdFx0XHRcdHN3aXRjaCAoZi5tYXRjaE1ldGhvZCkge1xyXG5cdFx0XHRcdFx0Y2FzZSBcIkZpcnN0XCI6XHJcblx0XHRcdFx0XHRjYXNlIFwiTGFzdFwiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlZEZpc3RMYXN0KFxyXG5cdFx0XHRcdFx0XHRcdGFyZ3MsXHJcblx0XHRcdFx0XHRcdFx0Zi5tYXRjaE1ldGhvZCxcclxuXHRcdFx0XHRcdFx0XHRmLm1hdGNoV29yZFxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgXCJNYXhcIjpcclxuXHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgPSBtYXhCeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdClbZi5tYXRjaFdvcmRdO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgXCJNaW5cIjpcclxuXHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgPSBtaW5CeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdClbZi5tYXRjaFdvcmRdO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgXCJTdW1cIjpcclxuXHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgPSBzdW1CeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdC8vIFNNUDItNDA5NCBVbmljb3JuIC0gTDMgQWRqdXN0ZWQgTkFWIHZhbHVlIGlzc3Vlc1xyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgJiYgZi5yZXBsYWNlVmFsdWUudG9GaXhlZCgxMCk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBcIkF2Z1wiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IG1lYW5CeShhcmdzLmNlbGxTZXRzLCAobykgPT5cclxuXHRcdFx0XHRcdFx0XHROdW1iZXIob1tmLm1hdGNoV29yZF0pXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBmO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0bGV0IHJlc3VsdEZvcm11bGEgPSBmb3JtdWxhO1xyXG5cdFx0XHRpZiAoY2FsY3VsZWRNYXRjaEZpZWxkcy5sZW5ndGgpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNhbGN1bGVkTWF0Y2hGaWVsZHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdHJlc3VsdEZvcm11bGEgPSByZXN1bHRGb3JtdWxhLnJlcGxhY2UoXHJcblx0XHRcdFx0XHRcdGNhbGN1bGVkTWF0Y2hGaWVsZHNbaV0ubWF0Y2hTdHIsXHJcblx0XHRcdFx0XHRcdFwiKFwiICsgY2FsY3VsZWRNYXRjaEZpZWxkc1tpXS5yZXBsYWNlVmFsdWUgKyBcIilcIlxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRsZXQgcmVzdWx0ID0gbmV3IEZ1bmN0aW9uKFxyXG5cdFx0XHRcdFx0XCJyZXR1cm4gXCIgKyByZXN1bHRGb3JtdWxhLnJlcGxhY2UoL1teLTw+PzooKVxcZC8qKy5dL2csIFwiXCIpXHJcblx0XHRcdFx0KSgpO1xyXG5cdFx0XHRcdGlmIChpc05hTihyZXN1bHQpIHx8ICFpc0Zpbml0ZShyZXN1bHQpKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gMDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdFx0cmV0dXJuIE5hTjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIDA7XHJcblx0fVxyXG5cclxuXHR0b3RhbEZvcm1hdHRlZCA9IHt9O1xyXG5cdHB1YmxpYyBhZ2dyZWdhdGVDZWxsSW5mbyhhcmdzKSB7XHJcblx0XHRsZXQgYXNPZkRhdGUgPSB0aGlzLnBiZi50aW1lKHRoaXMuZGFzaGJvYXJkLmFzT2ZEYXRlKTtcclxuXHRcdC8vIGlmIGNhbGN1bGF0ZWQgZmllbGRcclxuXHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT0gXCJDYWxjdWxhdGVkRmllbGRcIikge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChhcmdzLmZpZWxkTmFtZSA9PSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNbaV0ubmFtZSkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IHRoaXMuY2FsY3VsYXRlZENlbGxTZXRzKFxyXG5cdFx0XHRcdFx0XHRhcmdzLFxyXG5cdFx0XHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNbaV1cclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHRbXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVJUlJcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUkJlZm9yZUNhcnJpZWRcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUklSUkRhdGVcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUk1URFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlSVJSUVREXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVJUlJZVERcIixcclxuXHRcdFx0XS5pbmNsdWRlcyhhcmdzLmFnZ3JlZ2F0ZVR5cGUpXHJcblx0XHQpIHtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCI9PT09PT09PT09PT09PT09PT09PT09PT09PVwiKTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJhcmdzOlwiLCBhcmdzKTtcclxuXHRcdFx0bGV0IHZhbHVlRmllbGQ7XHJcblx0XHRcdGxldCBkYXRlRmllbGQ7XHJcblx0XHRcdGxldCBzdGFydERhdGU7XHJcblx0XHRcdGxldCBlbmREYXRlO1xyXG5cdFx0XHRzd2l0Y2ggKGFyZ3MuYWdncmVnYXRlVHlwZSkge1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJcIjpcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdFx0XHRkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJNVERcIjpcclxuXHRcdFx0XHRcdHN0YXJ0RGF0ZSA9IG1vbWVudChhc09mRGF0ZSlcclxuXHRcdFx0XHRcdFx0LnN0YXJ0T2YoXCJtb250aFwiKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdGVuZERhdGUgPSBtb21lbnQoYXNPZkRhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSUVREXCI6XHJcblx0XHRcdFx0XHRzdGFydERhdGUgPSBtb21lbnQoYXNPZkRhdGUpXHJcblx0XHRcdFx0XHRcdC5zdGFydE9mKFwicXVhcnRlclwiKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdGVuZERhdGUgPSBtb21lbnQoYXNPZkRhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSWVREXCI6XHJcblx0XHRcdFx0XHRzdGFydERhdGUgPSBtb21lbnQoYXNPZkRhdGUpXHJcblx0XHRcdFx0XHRcdC5zdGFydE9mKFwieWVhclwiKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdGVuZERhdGUgPSBtb21lbnQoYXNPZkRhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSSVJSRGF0ZVwiOlxyXG5cdFx0XHRcdFx0dmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVcIjtcclxuXHRcdFx0XHRcdGRhdGVGaWVsZCA9IFwiQ2FsY3VsYXRlSVJSRGF0ZVwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZUlSUkJlZm9yZUNhcnJpZWRcIjpcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlQmVmb3JlQ2FycnlcIjtcclxuXHRcdFx0XHRcdGRhdGVGaWVsZCA9IFwiSVJSRGF0ZVwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCBOQVZBZGogPSAwO1xyXG5cdFx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRcdGxldCBiZWZvcmVTdGFydE5BVkFkaiA9IDA7IC8vIOWtmOWCqOS4iuS4gOS4qumYtuauteeahE5BVkFkauaAu+WSjFxyXG5cdFx0XHRsZXQgYmVmb3JlU3RhcnRWYWx1ZXMgPSBbXTsgLy8g5a2Y5YKo5LiK5LiA5Liq6Zi25q6155qE57Sv6K6h6ZuG5ZCIICjlj6rmmK/kuLrkuobmiZPljbDvvIzmsqHmnInlrp7pmYXnlKjpgJQpXHJcblx0XHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRlbC5jb2xOYW1lID09PVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRBZ2dyZWdhdGVUeXBlKFxyXG5cdFx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRcdGFtb3VudDogYXJncy5jZWxsU2V0c1tpXVtcIklSUkFtb3VudFwiXSxcclxuXHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSA9PT1cclxuXHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdC8vIFNNUDItMTY5MjBcclxuXHRcdFx0XHQvLyBJZiBJUlIgRGF0ZSA+IERhc2hib2FyZCByZXBvcnQgZGF0ZSA9IFRha2VzIGFzIG9mIGRhc2hib2FyZCByZXBvcnQgZGF0ZVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVJUlJJUlJEYXRlXCIgJiZcclxuXHRcdFx0XHRcdGFzT2ZEYXRlIDwgdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRkYXRhLmRhdGUgPSBhc09mRGF0ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0TkFWQWRqICs9IGFyZ3MuY2VsbFNldHNbaV1bdmFsdWVGaWVsZF07XHJcblx0XHRcdFx0Ly8gU01QMi0xNzIxOSBNVEQgUVREIFlURCBJUlJcclxuXHRcdFx0XHRpZiAoc3RhcnREYXRlICYmIGVuZERhdGUpIHtcclxuXHRcdFx0XHRcdGlmIChtb21lbnQoZGF0YS5kYXRlKS5pc0JlZm9yZShzdGFydERhdGUpKSB7XHJcblx0XHRcdFx0XHRcdGRhdGFbdmFsdWVGaWVsZF0gPSBhcmdzLmNlbGxTZXRzW2ldW3ZhbHVlRmllbGRdO1xyXG5cdFx0XHRcdFx0XHRiZWZvcmVTdGFydFZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0XHRiZWZvcmVTdGFydE5BVkFkaiArPSBkYXRhW3ZhbHVlRmllbGRdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhbW9tZW50KGRhdGEuZGF0ZSkuaXNCZXR3ZWVuKFxyXG5cdFx0XHRcdFx0XHRcdHN0YXJ0RGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRlbmREYXRlLFxyXG5cdFx0XHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHRcdFx0XCJbXVwiXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGRhdGEuYW1vdW50ICE9IDApIHtcclxuXHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoTkFWQWRqID4gMC4wMDAxIHx8IE5BVkFkaiA8IC0wLjAwMDEpIHtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaCh7XHJcblx0XHRcdFx0XHRhbW91bnQ6IE5BVkFkaixcclxuXHRcdFx0XHRcdGRhdGU6IGFzT2ZEYXRlLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhbHVlcyA9IHNvcnRCeSh2YWx1ZXMsIFwiZGF0ZVwiKTtcclxuXHRcdFx0Ly8g5aaC5p6c5pivTVRELFFURCxZVEQg5YiZ6ZyA6KaB5oqK5b2T5YmN6Zi25q615Lul5YmN55qE5omA5pyJ5pWw5o2u6L+b6KGM5rGH5oC777yM5Yqg5YWl6K6h566XXHJcblx0XHRcdGlmIChzdGFydERhdGUgJiYgZW5kRGF0ZSkge1xyXG5cdFx0XHRcdHZhbHVlcy51bnNoaWZ0KHtcclxuXHRcdFx0XHRcdGFtb3VudDogLWJlZm9yZVN0YXJ0TkFWQWRqLCAvLyDlvIDlp4vnmoTmlbDmja7pnIDopoHlj5blj41cclxuXHRcdFx0XHRcdGRhdGU6IHRoaXMucGJmLnRpbWUoc3RhcnREYXRlKSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcImJlZm9yZVN0YXJ0VmFsdWVzOlwiLCBiZWZvcmVTdGFydFZhbHVlcyk7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwidmFsdWVzOlwiLCB2YWx1ZXMpO1xyXG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRsZXQgZ3Vlc3MgPSAwLjE7XHJcblx0XHRcdFx0Y29uc3Qgc3VtQW1vdW50ID0gdmFsdWVzXHJcblx0XHRcdFx0XHQubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudClcclxuXHRcdFx0XHRcdC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwKTtcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50IDwgMCkge1xyXG5cdFx0XHRcdFx0Z3Vlc3MgPSAtMC4xO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvL1NNUDItMjI0OSBmaXhlZCB0aGUgYmlnIGlyciBpc3N1ZVxyXG5cdFx0XHRcdGlmIChzdW1BbW91bnQgPT09IDApIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSAwO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUl0ZW1zID0gdmFsdWVzLnNsaWNlKDAsIHZhbHVlcy5sZW5ndGggLSAxKTtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudCk7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmRhdGUpO1xyXG5cdFx0XHRcdFx0Y29uc3QgbGFzdEl0ZW0gPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdO1xyXG5cdFx0XHRcdFx0Y29uc3QgbmF2QWRqdXN0ID0gbGFzdEl0ZW0uYW1vdW50O1xyXG5cdFx0XHRcdFx0Y29uc3QgbGF0ZXN0RGF0ZSA9IGxhc3RJdGVtLmRhdGU7XHJcblx0XHRcdFx0XHRsZXQgaXJyID1cclxuXHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5FeGNlbEZvcm11bGFzLl9DYWxjdWxhdGVYaXJyKFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRkYXRlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRuYXZBZGp1c3QsXHJcblx0XHRcdFx0XHRcdFx0bGF0ZXN0RGF0ZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IGlyciA9PT0gbnVsbCA/IFwiXCIgOiBpcnI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiYXJncy52YWx1ZTpcIiwgYXJncy52YWx1ZSk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZSAmJlxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV1cclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV07XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGFyZ3MuZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0Zm9ybWF0OlxyXG5cdFx0XHRcdFx0XHRmaWVsZC5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0PyBmaWVsZFswXS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmRwXHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHQ6IFwiUDJcIixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gIFNNUDItMTY1MjAgVFdSIOaciC/lraMv5bm0ICYmIFNNUDItMTY2ODMgVkFSXHJcblx0XHRpZiAoXHJcblx0XHRcdFtcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVRXUk1URFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVFdSUVREXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVUV1JZVERcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUk1URF85OVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSUVREXzk5XCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJZVERfOTlcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUk1URF85NVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSUVREXzk1XCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJZVERfOTVcIixcclxuXHRcdFx0XS5pbmNsdWRlcyhhcmdzLmFnZ3JlZ2F0ZVR5cGUpXHJcblx0XHQpIHtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCI9PT09PT09PT09PT09PT09PT09PT09PT09PVwiKTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJhcmdzOlwiLCBhcmdzKTtcclxuXHRcdFx0bGV0IHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdGxldCBkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0bGV0IHRpbWVSYW5nZTtcclxuXHRcdFx0c3dpdGNoIChhcmdzLmFnZ3JlZ2F0ZVR5cGUpIHtcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVFdSTVREXCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUk1URF85OVwiOlxyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVWQVJNVERfOTVcIjpcclxuXHRcdFx0XHRcdHRpbWVSYW5nZSA9IFwibW9udGhcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVUV1JRVERcIjpcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVkFSUVREXzk5XCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUlFURF85NVwiOlxyXG5cdFx0XHRcdFx0dGltZVJhbmdlID0gXCJxdWFydGVyXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVFdSWVREXCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUllURF85OVwiOlxyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVWQVJZVERfOTVcIjpcclxuXHRcdFx0XHRcdHRpbWVSYW5nZSA9IFwieWVhclwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHRcdGxldCB2YWx1ZXMgPSBbXTsgLy8g6L+Z5Liq6Zi25q6155qE57Sv6K6h6ZuG5ZCIXHJcblx0XHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRlbC5jb2xOYW1lID09PVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRBZ2dyZWdhdGVUeXBlKFxyXG5cdFx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFt2YWx1ZUZpZWxkXTogYXJncy5jZWxsU2V0c1tpXVt2YWx1ZUZpZWxkXSxcclxuXHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSA9PT1cclxuXHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKSxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyDlpoLmnpxhc09mRGF0ZeS4jeaYryDmnKzmnIgv5a2j5bqmL+W5tCDnmoTmnIDlkI7kuIDlpKnvvIzpg73mmK/miKroh7Mg5LiK5Liq5pyIL+Wto+W6pi/lubQg55qE5pyA5ZCO5LiA5aSp55qE5pWw5o2u5Y676K6h566XXHJcblx0XHRcdGxldCBfYXNPZkRhdGUgPSBtb21lbnQoYXNPZkRhdGUpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcIl9hc09mRGF0ZTpcIiwgX2FzT2ZEYXRlKTtcclxuXHRcdFx0bGV0IGlzRW5kT2ZQZXJpb2QgPSAodW5pdCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiAoXHJcblx0XHRcdFx0XHRfYXNPZkRhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSA9PT1cclxuXHRcdFx0XHRcdF9hc09mRGF0ZS5lbmRPZih1bml0KS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fTtcclxuXHRcdFx0bGV0IGVuZERhdGUgPSBpc0VuZE9mUGVyaW9kKHRpbWVSYW5nZSlcclxuXHRcdFx0XHQ/IG1vbWVudChhc09mRGF0ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKVxyXG5cdFx0XHRcdDogbW9tZW50KGFzT2ZEYXRlKVxyXG5cdFx0XHRcdFx0XHQuc3VidHJhY3QoMSwgdGltZVJhbmdlKVxyXG5cdFx0XHRcdFx0XHQuZW5kT2YodGltZVJhbmdlKVxyXG5cdFx0XHRcdFx0XHQuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiZW5kRGF0ZTpcIiwgZW5kRGF0ZSk7XHJcblx0XHRcdHZhbHVlcyA9IHZhbHVlcy5maWx0ZXIoKGl0ZW0pID0+XHJcblx0XHRcdFx0bW9tZW50KGl0ZW0uZGF0ZSkuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcclxuXHRcdFx0KTtcclxuXHRcdFx0dmFsdWVzID0gc29ydEJ5KHZhbHVlcywgXCJkYXRlXCIpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcInZhbHVlczpcIiwgdmFsdWVzKTtcclxuXHJcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGxldCByZXN1bHQgPSB0aGlzLmdldFRpbWVSYW5nZXMoXHJcblx0XHRcdFx0XHR2YWx1ZXMsXHJcblx0XHRcdFx0XHRlbmREYXRlLFxyXG5cdFx0XHRcdFx0dGltZVJhbmdlLFxyXG5cdFx0XHRcdFx0XCJkYXRlXCJcclxuXHRcdFx0XHQpOyAvLyDlkITkuKrpmLbmrrXnmoTmlbDmja5cclxuXHRcdFx0XHRsZXQgcmVzdWx0VG90YWwgPSB7fTsgLy8g5ZCE5Liq6Zi25q615oC75ZKMXHJcblx0XHRcdFx0Zm9yIChjb25zdCBwcm9wIGluIHJlc3VsdCkge1xyXG5cdFx0XHRcdFx0cmVzdWx0VG90YWxbcHJvcF0gPSByZXN1bHRbcHJvcF0ucmVkdWNlKChhY2MsIGN1cikgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gYWNjICsgKGN1clt2YWx1ZUZpZWxkXSB8fCAwKTtcclxuXHRcdFx0XHRcdH0sIDApO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcInJlc3VsdDpcIiwgcmVzdWx0KTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcInJlc3VsdFRvdGFsOlwiLCByZXN1bHRUb3RhbCk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGN1bXVsYXRpdmVTdW0gPSB7fTsgLy8g5ZCE5Liq6Zi25q6157Sv6K6h5ZKMXHJcblx0XHRcdFx0bGV0IHN1bSA9IDA7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVzdWx0VG90YWwpKSB7XHJcblx0XHRcdFx0XHRzdW0gKz0gcmVzdWx0VG90YWxba2V5XTtcclxuXHRcdFx0XHRcdGN1bXVsYXRpdmVTdW1bYCR7a2V5fWBdID0gc3VtO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcImN1bXVsYXRpdmVTdW06XCIsIGN1bXVsYXRpdmVTdW0pO1xyXG5cclxuXHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY3VtdWxhdGl2ZVN1bSk7XHJcblx0XHRcdFx0bGV0IHR3ckxpc3QgPSBbXTtcclxuXHRcdFx0XHQvLyDpgY3ljobmr4/kuKTkuKrpmLbmrrUg6K6h566XVFdSXHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3Qga2V5MSA9IGtleXNbaV07XHJcblx0XHRcdFx0XHRjb25zdCBrZXkyID0ga2V5c1tpICsgMV07XHJcblxyXG5cdFx0XHRcdFx0Ly8g6K6h566X5Lik5Liq6Zi25q615LmL6Ze055qE6YCS5aKe6YePLCDlh7rmlbDkuI3og73kuLowXHJcblx0XHRcdFx0XHRpZiAoY3VtdWxhdGl2ZVN1bVtrZXkxXSAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGluY3JlbWVudCA9XHJcblx0XHRcdFx0XHRcdFx0Y3VtdWxhdGl2ZVN1bVtrZXkyXSAtIGN1bXVsYXRpdmVTdW1ba2V5MV07XHJcblx0XHRcdFx0XHRcdGxldCB0d3IgPSBpbmNyZW1lbnQgLyBjdW11bGF0aXZlU3VtW2tleTFdO1xyXG5cdFx0XHRcdFx0XHR0d3JMaXN0LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdGRhdGU6IGtleTIsXHJcblx0XHRcdFx0XHRcdFx0dHdyOiB0d3IsXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyDorqHnrpdBdmVyYWdlIFRXUlxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwidHdyTGlzdDpcIiwgdHdyTGlzdCk7XHJcblx0XHRcdFx0bGV0IGF2ZXJhZ2VUV1IgPSB0aGlzLmNhbGN1bGF0ZUdyb3d0aFJhdGUoXHJcblx0XHRcdFx0XHR0d3JMaXN0Lm1hcCgoeCkgPT4geC50d3IpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcIuiuoeeul0F2ZXJhZ2UgVFdSOlwiLCBhdmVyYWdlVFdSKTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRbXHJcblx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVFdSTVREXCIsXHJcblx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVFdSUVREXCIsXHJcblx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVFdSWVREXCIsXHJcblx0XHRcdFx0XHRdLmluY2x1ZGVzKGFyZ3MuYWdncmVnYXRlVHlwZSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdC8vIFNNUDItMTY1MjAgVFdSIOaciC/lraMv5bm0XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0aXNOYU4oYXZlcmFnZVRXUikgfHwgYXZlcmFnZVRXUiA9PSBudWxsXHJcblx0XHRcdFx0XHRcdFx0PyBcIlwiXHJcblx0XHRcdFx0XHRcdFx0OiBOdW1iZXIoYXZlcmFnZVRXUik7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmIChpc05hTihhdmVyYWdlVFdSKSB8fCBhdmVyYWdlVFdSID09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvLyBTTVAyLTE2NjgzIFZBUiDljLrliIY5OSXlkow5NSVcclxuXHRcdFx0XHRcdFx0bGV0IFpTY29yZSA9IFtcclxuXHRcdFx0XHRcdFx0XHRcIkNhbGN1bGF0ZVZBUk1URF85OVwiLFxyXG5cdFx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVkFSUVREXzk5XCIsXHJcblx0XHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVWQVJZVERfOTlcIixcclxuXHRcdFx0XHRcdFx0XS5pbmNsdWRlcyhhcmdzLmFnZ3JlZ2F0ZVR5cGUpXHJcblx0XHRcdFx0XHRcdFx0PyAyLjMzXHJcblx0XHRcdFx0XHRcdFx0OiAxLjY1O1xyXG5cdFx0XHRcdFx0XHRpZiAodHdyTGlzdC5sZW5ndGggPCAyKSB7XHJcblx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IFNEID0gdGhpcy5jYWxjdWxhdGVTdGFuZGFyZERldmlhdGlvbihcclxuXHRcdFx0XHRcdFx0XHRcdHR3ckxpc3QubWFwKCh4KSA9PiB4LnR3cilcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiY2FsY3VsYXRlU3RhbmRhcmREZXZpYXRpb246XCIsIFNEKTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgVkFSID0gYXZlcmFnZVRXUiAtIFNEICogWlNjb3JlO1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBOdW1iZXIoVkFSKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcImFyZ3MudmFsdWU6XCIsIGFyZ3MudmFsdWUpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUgJiZcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdO1xyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBhcmdzLmZpZWxkTmFtZSxcclxuXHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZmllbGRbMF0uZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBcIlAyXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vU01QMi0yNzAxXHJcblx0XHRpZiAoYXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZUlSUkFjdHVhbEF1ZGl0ZWRcIikge1xyXG5cdFx0XHRsZXQgTkFWQWRqID0gMDtcclxuXHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRsZXQgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0ZWwuY29sTmFtZSA9PT1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0QWdncmVnYXRlVHlwZShcclxuXHRcdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHRcdC8vU01QMi0yNzEzIG9ubHkganVkZ2UgZm9yIHRoaXMgZGF0YU1hcnQoR3Jvc3NOZXQpXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSA9PT0gXCJHcm9zc05ldFwiIHx8XHJcblx0XHRcdFx0dGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGUgPT09XHJcblx0XHRcdFx0XHRcIkNvbWJpbmVkSW52ZXN0bWVudEZ1bmROQ29tcGFueUNhc2hmbG93XCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRhbW91bnQ6IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBbW91bnRcIl0sXHJcblx0XHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSkgPT09XHJcblx0XHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHROQVZBZGogKz0gYXJncy5jZWxsU2V0c1tpXVtcIkFjdHVhbEF1ZGl0ZWROQVZcIl07XHJcblx0XHRcdFx0XHRpZiAoZGF0YS5hbW91bnQgIT0gMCkge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaChkYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9maWx0ZXIgdGhlIGRhdGEgYnkgdGhlIERhdGFUeXBlKEFjdHVhbCBSZXBvcnRlZCBBdWRpdGVkKVxyXG5cdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRsZXQgYXJnc2RhdGEgPSBhcmdzLmNlbGxTZXRzLmZpbHRlcihcclxuXHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0ZWwuRGF0YVR5cGUgPT09IFwiQUNUVUFMX0FVRElURURcIiB8fFxyXG5cdFx0XHRcdFx0XHRlbC5EYXRhVHlwZSA9PT0gXCJSRVBPUlRFRFwiXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3NkYXRhLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRhbW91bnQ6IGFyZ3NkYXRhW2ldW1wiSVJSQW1vdW50XCJdLFxyXG5cdFx0XHRcdFx0XHRkYXRlOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJnc2RhdGFbaV1bXCJJUlJEYXRlXCJdKSA9PT1cclxuXHRcdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ/IGFzT2ZEYXRlXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJnc2RhdGFbaV1bXCJJUlJEYXRlXCJdKSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHROQVZBZGogKz0gYXJnc2RhdGFbaV1bXCJJUlJBZGpWYWx1ZVwiXTtcclxuXHRcdFx0XHRcdGlmIChkYXRhLmFtb3VudCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoTkFWQWRqID4gMC4wMDAxIHx8IE5BVkFkaiA8IC0wLjAwMDEpIHtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaCh7XHJcblx0XHRcdFx0XHRhbW91bnQ6IE5BVkFkaixcclxuXHRcdFx0XHRcdGRhdGU6IGFzT2ZEYXRlLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhbHVlcyA9IHNvcnRCeSh2YWx1ZXMsIFwiZGF0ZVwiKTtcclxuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0bGV0IGd1ZXNzID0gMC4xO1xyXG5cdFx0XHRcdGNvbnN0IHN1bUFtb3VudCA9IHZhbHVlc1xyXG5cdFx0XHRcdFx0Lm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpXHJcblx0XHRcdFx0XHQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMCk7XHJcblx0XHRcdFx0aWYgKHN1bUFtb3VudCA8IDApIHtcclxuXHRcdFx0XHRcdGd1ZXNzID0gLTAuMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly9TTVAyLTIyNDkgZml4ZWQgdGhlIGJpZyBpcnIgaXNzdWVcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50ID09PSAwKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVJdGVtcyA9IHZhbHVlcy5zbGljZSgwLCB2YWx1ZXMubGVuZ3RoIC0gMSk7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRlKTtcclxuXHRcdFx0XHRcdGNvbnN0IGxhc3RJdGVtID0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdGNvbnN0IG5hdkFkanVzdCA9IGxhc3RJdGVtLmFtb3VudDtcclxuXHRcdFx0XHRcdGNvbnN0IGxhdGVzdERhdGUgPSBsYXN0SXRlbS5kYXRlO1xyXG5cdFx0XHRcdFx0bGV0IGlyciA9XHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuRXhjZWxGb3JtdWxhcy5fQ2FsY3VsYXRlWGlycihcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0ZGF0ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0bmF2QWRqdXN0LFxyXG5cdFx0XHRcdFx0XHRcdGxhdGVzdERhdGVcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBpcnIgPT09IG51bGwgPyAwIDogaXJyO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUgJiZcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdO1xyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBhcmdzLmZpZWxkTmFtZSxcclxuXHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZmllbGRbMF0uZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBcIlAyXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly9TTVAyLTM0MTFcclxuXHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlSVJSUmVwb3J0ZWRcIikge1xyXG5cdFx0XHRsZXQgTkFWQWRqID0gMDtcclxuXHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRsZXQgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0ZWwuY29sTmFtZSA9PT1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0QWdncmVnYXRlVHlwZShcclxuXHRcdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSA9PT0gXCJHcm9zc05ldFwiIHx8XHJcblx0XHRcdFx0dGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGUgPT09XHJcblx0XHRcdFx0XHRcIkNvbWJpbmVkSW52ZXN0bWVudEZ1bmROQ29tcGFueUNhc2hmbG93XCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRhbW91bnQ6IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBbW91bnRcIl0sXHJcblx0XHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSkgPT09XHJcblx0XHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHROQVZBZGogKz0gYXJncy5jZWxsU2V0c1tpXVtcIlJlcG9ydGVkTkFWXCJdO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGEuYW1vdW50ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0YW1vdW50OiBhcmdzLmNlbGxTZXRzW2ldW1wiSVJSQW1vdW50XCJdLFxyXG5cdFx0XHRcdFx0XHRkYXRlOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtcIklSUkRhdGVcIl0pID09PVxyXG5cdFx0XHRcdFx0XHRcdFwiSW52YWxpZCBkYXRlXCJcclxuXHRcdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSksXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0TkFWQWRqICs9IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBZGpWYWx1ZVwiXTtcclxuXHRcdFx0XHRcdGlmIChkYXRhLmFtb3VudCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoTkFWQWRqID4gMC4wMDAxIHx8IE5BVkFkaiA8IC0wLjAwMDEpIHtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaCh7XHJcblx0XHRcdFx0XHRhbW91bnQ6IE5BVkFkaixcclxuXHRcdFx0XHRcdGRhdGU6IGFzT2ZEYXRlLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhbHVlcyA9IHNvcnRCeSh2YWx1ZXMsIFwiZGF0ZVwiKTtcclxuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0bGV0IGd1ZXNzID0gMC4xO1xyXG5cdFx0XHRcdGNvbnN0IHN1bUFtb3VudCA9IHZhbHVlc1xyXG5cdFx0XHRcdFx0Lm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpXHJcblx0XHRcdFx0XHQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMCk7XHJcblx0XHRcdFx0aWYgKHN1bUFtb3VudCA8IDApIHtcclxuXHRcdFx0XHRcdGd1ZXNzID0gLTAuMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly9TTVAyLTIyNDkgZml4ZWQgdGhlIGJpZyBpcnIgaXNzdWVcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50ID09PSAwKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVJdGVtcyA9IHZhbHVlcy5zbGljZSgwLCB2YWx1ZXMubGVuZ3RoIC0gMSk7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRlKTtcclxuXHRcdFx0XHRcdGNvbnN0IGxhc3RJdGVtID0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdGNvbnN0IG5hdkFkanVzdCA9IGxhc3RJdGVtLmFtb3VudDtcclxuXHRcdFx0XHRcdGNvbnN0IGxhdGVzdERhdGUgPSBsYXN0SXRlbS5kYXRlO1xyXG5cdFx0XHRcdFx0bGV0IGlyciA9XHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuRXhjZWxGb3JtdWxhcy5fQ2FsY3VsYXRlWGlycihcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0ZGF0ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0bmF2QWRqdXN0LFxyXG5cdFx0XHRcdFx0XHRcdGxhdGVzdERhdGVcclxuXHRcdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXJyID09PSBudWxsID8gMCA6IGlycjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IDA7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlICYmXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXTtcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogYXJncy5maWVsZE5hbWUsXHJcblx0XHRcdFx0XHRmb3JtYXQ6XHJcblx0XHRcdFx0XHRcdGZpZWxkLmxlbmd0aCA+IDBcclxuXHRcdFx0XHRcdFx0XHQ/IGZpZWxkWzBdLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0WzBdLmZvcm1hdENoZWNrZWRcclxuXHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZHBcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdDogXCJQMlwiLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZU11bHRpcGxlXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZVBJQ1wiIHx8XHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVEUElcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlVFZQSVwiIHx8XHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVSVlBJXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZU1BY3R1YWxBdWRpdGVkXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZU1SZXBvcnRlZFwiXHJcblx0XHQpIHtcclxuXHRcdFx0bGV0IHRvdGFsTnVtZXJhdG9yID0gMDtcclxuXHRcdFx0bGV0IHRvdGFsRGVub21pbmF0b3IgPSAwO1xyXG5cdFx0XHRsZXQgbnVtZXJhdG9yTmFtZTtcclxuXHRcdFx0bGV0IGRlbm9taW5hdG9yTmFtZTtcclxuXHRcdFx0bGV0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdGVsLmNvbE5hbWUgPT09XHJcblx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldEFnZ3JlZ2F0ZVR5cGUoXHJcblx0XHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGNvbnN0IGZvcm11bGFBcnJheSA9IGZpZWxkWzBdLmZvcm11bGEuc3BsaXQoXCIvXCIpO1xyXG5cdFx0XHRcdG51bWVyYXRvck5hbWUgPSBmb3JtdWxhQXJyYXlbMF07XHJcblx0XHRcdFx0ZGVub21pbmF0b3JOYW1lID0gZm9ybXVsYUFycmF5WzFdO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdHRvdGFsTnVtZXJhdG9yICs9IGFyZ3MuY2VsbFNldHNbal1bbnVtZXJhdG9yTmFtZV07XHJcblx0XHRcdFx0dG90YWxEZW5vbWluYXRvciArPSBhcmdzLmNlbGxTZXRzW2pdW2Rlbm9taW5hdG9yTmFtZV07XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRvdGFsRGVub21pbmF0b3IgIT09IDApIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gdG90YWxOdW1lcmF0b3IgLyB0b3RhbERlbm9taW5hdG9yO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlICYmXHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW1xyXG5cdFx0XHRcdFx0XHRhcmdzLmZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGFyZ3MuZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtYXQ6XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdFx0PyBmaWVsZFswXS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdE11bHRpcGxlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0TXVsdGlwbGUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogXCIjIyMwLjAwJ3gnXCIsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiRmlyc3RcIiB8fCBhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiTGFzdFwiKSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSB0aGlzLmNhbGN1bGF0ZWRGaXN0TGFzdChcclxuXHRcdFx0XHRhcmdzLFxyXG5cdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSxcclxuXHRcdFx0XHRhcmdzLmZpZWxkTmFtZVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNvdW50XCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkRpc3RpbmN0Q291bnRcIlxyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChhcmdzLnZhbHVlKSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUudG9GaXhlZCgyKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0IWFyZ3MudmFsdWUgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gMCAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBmYWxzZSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBcImZhbHNlXCJcclxuXHRcdCkge1xyXG5cdFx0XHRhcmdzLnNraXBGb3JtYXR0aW5nID0gdHJ1ZTtcclxuXHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHR9XHJcblx0XHQvLyDmlrDlu7pwaXZvdCB0YWJsZSwg6L+Y5rKh5pyJ6K6+572ucm93LCDpgInkuoZjb2x1bW7kuYvlkI5ncmFuZHRvdGFs5Lya5pyJ5YC8XHJcblx0XHRpZiAoXHJcblx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiICYmXHJcblx0XHRcdCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzLmxlbmd0aFxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0Ly9TTVAyLTI4ODlcclxuXHRcdGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcInN1YlRvdGFsXCIpIHtcclxuXHRcdFx0Y29uc3QgdmFsdWVGaWVsZF9kYXRhID0gdGhpcy5jb25maWcueWF4aXMuc2VyaWVzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGFyZ3MuZmllbGROYW1lXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGFbMF0uc2hvd1N1YlRvdGFscyA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHRcdFx0YXJncy5za2lwRm9ybWF0dGluZyA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIpIHtcclxuXHRcdFx0Y29uc3QgdmFsdWVGaWVsZF9kYXRhID0gdGhpcy5jb25maWcueWF4aXMuc2VyaWVzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGFyZ3MuZmllbGROYW1lXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGlmICh2YWx1ZUZpZWxkX2RhdGFbMF0uc2hvd0dyYW5kVG90YWxzID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRhcmdzLnNraXBGb3JtYXR0aW5nID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vIFNNUDItMzQxNiBzdGFydFxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnplcm9Gb3JtYXREYXRhLmhnTGlzdC5pbmNsdWRlcyhhcmdzLmZpZWxkTmFtZSkgJiZcclxuXHRcdFx0YXJncy52YWx1ZSA9PT0gMFxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSBcIi1cIjtcclxuXHRcdFx0YXJncy5za2lwRm9ybWF0dGluZyA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuZW1wdHlMaXN0LmluY2x1ZGVzKGFyZ3MuZmllbGROYW1lKSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlID09PSAwXHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdGFyZ3Muc2tpcEZvcm1hdHRpbmcgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLm1pbGxpb25GaWVsZHMuaW5jbHVkZXMoYXJncy5maWVsZE5hbWUpICYmXHJcblx0XHRcdCFpc05hTihOdW1iZXIoYXJncy52YWx1ZSkpICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IDAgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gXCJcIiAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBudWxsXHJcblx0XHQpIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCIgJiZcclxuXHRcdFx0XHRhcmdzLnJvd0NlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGlmICghdGhpcy50b3RhbEZvcm1hdHRlZFthcmdzLmZpZWxkTmFtZV0pIHtcclxuXHRcdFx0XHRcdHRoaXMudG90YWxGb3JtYXR0ZWRbYXJncy5maWVsZE5hbWVdID0gdHJ1ZTtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLnZhbHVlIC8gMTAwMDAwMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUgLyAxMDAwMDAwO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU01QMi0yNDg2ICYgcGVyY2VudE51beeahGZvcm1hdOmXrumimFxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnBlcmNlbnROdW1GaWVsZHMubGVuZ3RoICYmXHJcblx0XHRcdHRoaXMucGVyY2VudE51bUZpZWxkcy5pbmNsdWRlcyhhcmdzLmZpZWxkTmFtZSkgJiZcclxuXHRcdFx0IWlzTmFOKE51bWJlcihhcmdzLnZhbHVlKSkgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gMCAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBcIlwiICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IG51bGxcclxuXHRcdCkge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5jb2x1bW5DZWxsVHlwZSA9PSBcImdyYW5kVG90YWxcIiAmJlxyXG5cdFx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnRvdGFsRm9ybWF0dGVkW2FyZ3MuZmllbGROYW1lXSkge1xyXG5cdFx0XHRcdFx0dGhpcy50b3RhbEZvcm1hdHRlZFthcmdzLmZpZWxkTmFtZV0gPSB0cnVlO1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUgLyAxMDA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLnZhbHVlIC8gMTAwO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PSBcIkNhbGN1bGF0ZWRGaWVsZFwiICYmXHJcblx0XHRcdCFpc05hTihOdW1iZXIoYXJncy52YWx1ZSkpICYmXHJcblx0XHRcdCF0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdLmZvcm1hdFxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSBOdW1iZXIoYXJncy52YWx1ZSkudG9GaXhlZCgyKTtcclxuXHRcdH1cclxuXHRcdC8vIFNNUDItMzQxNiBlbmRcclxuXHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYWxjdWxhdGVkRmlzdExhc3QoYXJncywgYWdncmVnYXRlVHlwZSwgZmllbGROYW1lKSB7XHJcblx0XHRpZiAoIWFyZ3Mucm93LmFjdHVhbFRleHQpIGFyZ3Mucm93LmFjdHVhbFRleHQgPSBhcmdzLnJvdy5mb3JtYXR0ZWRUZXh0O1xyXG5cdFx0aWYgKCFhcmdzLmNvbHVtbi5hY3R1YWxUZXh0KVxyXG5cdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ID0gYXJncy5jb2x1bW4uZm9ybWF0dGVkVGV4dDtcclxuXHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBmaWVsZE5hbWVcclxuXHRcdClbMF07XHJcblx0XHRpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJ2YWx1ZVwiICYmICFhcmdzLnJvdy5oYXNDaGlsZCkge1xyXG5cdFx0XHRpZiAoYXJncy5jZWxsU2V0c1swXSkge1xyXG5cdFx0XHRcdGlmIChhZ2dyZWdhdGVUeXBlID09PSBcIkZpcnN0XCIpIHtcclxuXHRcdFx0XHRcdGZvciAoXHJcblx0XHRcdFx0XHRcdGxldCBmaXJzdEluZGV4ID0gMDtcclxuXHRcdFx0XHRcdFx0Zmlyc3RJbmRleCA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRmaXJzdEluZGV4KytcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT1cclxuXHRcdFx0XHRcdFx0XHRcdDEgJiZcclxuXHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbkNlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwic3RyaW5nXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnZhcmNoYXJcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoXHJcblx0XHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlW2FyZ3Mucm93LnJvd0luZGV4XTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJvd09ianMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IG9iaiA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5pc0dyYW5kU3VtXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVswXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAob2JqKSBhcmdzLnZhbHVlID0gb2JqLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBudWxsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy5jZWxsU2V0c1tmaXJzdEluZGV4XVtmaWVsZE5hbWVdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm51bWJlclwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJtdWx0aXBsZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnROdW1cIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoYXJncy52YWx1ZSAhPSBudWxsKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5wYmYudGltZShhcmdzLnZhbHVlKSA+IFwiMTkwMC0wMS0wMVwiKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhcmdzLnZhbHVlKSBicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGFnZ3JlZ2F0ZVR5cGUgPT09IFwiTGFzdFwiKSB7XHJcblx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRsZXQgbGFzdEluZGV4ID0gYXJncy5jZWxsU2V0cy5sZW5ndGggLSAxO1xyXG5cdFx0XHRcdFx0XHRsYXN0SW5kZXggPj0gMDtcclxuXHRcdFx0XHRcdFx0bGFzdEluZGV4LS1cclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT1cclxuXHRcdFx0XHRcdFx0XHRcdDEgJiZcclxuXHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbkNlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwic3RyaW5nXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnZhcmNoYXJcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoXHJcblx0XHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlW2FyZ3Mucm93LnJvd0luZGV4XTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJvd09ianMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IG9iaiA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5pc0dyYW5kU3VtXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVswXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAob2JqKSBhcmdzLnZhbHVlID0gb2JqLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PyBudWxsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0OiBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICApO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy5jZWxsU2V0c1tsYXN0SW5kZXhdW2ZpZWxkTmFtZV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm51bWJlclwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJtdWx0aXBsZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnROdW1cIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoYXJncy52YWx1ZSAhPSBudWxsKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAodGhpcy5wYmYudGltZShhcmdzLnZhbHVlKSA+IFwiMTkwMC0wMS0wMVwiKSBicmVhaztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhcmdzLnZhbHVlKSBicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnVtYmVyXCIgfHxcclxuXHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibXVsdGlwbGVcIiB8fFxyXG5cdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwicGVyY2VudE51bVwiXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0aWYgKCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdCFOdW1iZXIodGhpcy5ncmFuZFRvdGFsc1tmaWVsZE5hbWVdKSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0aXNOYU4oTnVtYmVyKHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXSkpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV0gPSAwO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAoYXJncy5hZ2dyZWdhdGVUeXBlICE9PSBcIkNhbGN1bGF0ZWRGaWVsZFwiKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV0gKz0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCA9PSAxXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdC8vIFwicm93XCIgKyBhcmdzLnJvdy5hY3R1YWxUZXh0ICsgZmllbGROYW1lIOihqOekuihjZWxsOiBhcmdzLnJvd0NlbGxUeXBlID09PSBcInZhbHVlXCIgJiYgYXJncy5jb2x1bW5DZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIpXHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0IU51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICsgYXJncy5yb3cuYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHQpIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRpc05hTihcclxuXHRcdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArIGFyZ3Mucm93LmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF0gPSAwO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArIGFyZ3Mucm93LmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRdICs9IE51bWJlcihhcmdzLnZhbHVlKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0Ly8gXCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWUg6KGo56S6KGNlbGw6IGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiICYmIGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT09IFwidmFsdWVcIilcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHQhTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0KSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0aXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0XHRcdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRdID0gMDtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XSArPSBOdW1iZXIoYXJncy52YWx1ZSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJzdWJUb3RhbFwiIHx8IGFyZ3Mucm93Lmhhc0NoaWxkKSB7XHJcblx0XHRcdGNvbnN0IGRhdGFUeXBlID0gZmllbGQuZGF0YVR5cGU7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRkYXRhVHlwZSA9PT0gXCJzdHJpbmdcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09PSBcIm52YXJjaGFyXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRsZXQgdmFsdWUgPSAwO1xyXG5cdFx0XHRcdGxldCBjaGlsZEhlYWRlcnMgPSBbXTtcclxuXHRcdFx0XHRpZiAoYWdncmVnYXRlVHlwZSA9PT0gXCJGaXJzdFwiKSB7XHJcblx0XHRcdFx0XHRsZXQgZ3JvdXBOYW1lQXJyYXlzID0gW107XHJcblx0XHRcdFx0XHRsZXQgcm93cyA9IHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3M7XHJcblx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRsZXQgaW5kZXggPSBhcmdzLnJvdy5sZXZlbDtcclxuXHRcdFx0XHRcdFx0aW5kZXggPCByb3dzLmxlbmd0aDtcclxuXHRcdFx0XHRcdFx0aW5kZXgrK1xyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5wdXNoKHJvd3NbaW5kZXhdLm5hbWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0bGV0IGhlYWRlciA9IGdyb3VwTmFtZUFycmF5c1xyXG5cdFx0XHRcdFx0XHRcdC5tYXAoKG5hbWUpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGFyZ3MuY2VsbFNldHNbaV1bbmFtZV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFyZ3MuY2VsbFNldHNbaV1bbmFtZV07XHJcblx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHQuam9pbihcIi1cIik7XHJcblx0XHRcdFx0XHRcdGlmICghKGNoaWxkSGVhZGVycyBhcyBhbnkpLmluY2x1ZGVzKGhlYWRlcikpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZmlsdGVyT2JqOiBhbnkgPSB7fTtcclxuXHRcdFx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMubWFwKFxyXG5cdFx0XHRcdFx0XHRcdFx0KG5hbWUsIHgpID0+IChmaWx0ZXJPYmpbbmFtZV0gPSB2YWx1ZXNbeF0pXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgX0NlbGxTZXRzID0gX2ZpbHRlcihhcmdzLmNlbGxTZXRzLCBmaWx0ZXJPYmopO1xyXG5cdFx0XHRcdFx0XHRcdGNoaWxkSGVhZGVycy5wdXNoKGhlYWRlcik7XHJcblx0XHRcdFx0XHRcdFx0dmFsdWUgKz0gTnVtYmVyKF9DZWxsU2V0c1swXVtmaWVsZE5hbWVdKSB8fCAwO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChhZ2dyZWdhdGVUeXBlID09PSBcIkxhc3RcIikge1xyXG5cdFx0XHRcdFx0bGV0IGdyb3VwTmFtZUFycmF5cyA9IFtdO1xyXG5cdFx0XHRcdFx0bGV0IHJvd3MgPSB0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzO1xyXG5cdFx0XHRcdFx0Zm9yIChcclxuXHRcdFx0XHRcdFx0bGV0IGluZGV4ID0gYXJncy5yb3cubGV2ZWw7XHJcblx0XHRcdFx0XHRcdGluZGV4IDwgcm93cy5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdGluZGV4KytcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMucHVzaChyb3dzW2luZGV4XS5uYW1lKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSBhcmdzLmNlbGxTZXRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcblx0XHRcdFx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0bGV0IGhlYWRlciA9IGdyb3VwTmFtZUFycmF5c1xyXG5cdFx0XHRcdFx0XHRcdC5tYXAoKG5hbWUpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGFyZ3MuY2VsbFNldHNbaV1bbmFtZV0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFyZ3MuY2VsbFNldHNbaV1bbmFtZV07XHJcblx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHQuam9pbihcIi1cIik7XHJcblx0XHRcdFx0XHRcdGlmICghKGNoaWxkSGVhZGVycyBhcyBhbnkpLmluY2x1ZGVzKGhlYWRlcikpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZmlsdGVyT2JqOiBhbnkgPSB7fTtcclxuXHRcdFx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMubWFwKFxyXG5cdFx0XHRcdFx0XHRcdFx0KG5hbWUsIHgpID0+IChmaWx0ZXJPYmpbbmFtZV0gPSB2YWx1ZXNbeF0pXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgX0NlbGxTZXRzID0gX2ZpbHRlcihhcmdzLmNlbGxTZXRzLCBmaWx0ZXJPYmopO1xyXG5cdFx0XHRcdFx0XHRcdGNoaWxkSGVhZGVycy5wdXNoKGhlYWRlcik7XHJcblx0XHRcdFx0XHRcdFx0dmFsdWUgKz1cclxuXHRcdFx0XHRcdFx0XHRcdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0X0NlbGxTZXRzW19DZWxsU2V0cy5sZW5ndGggLSAxXVtmaWVsZE5hbWVdXHJcblx0XHRcdFx0XHRcdFx0XHQpIHx8IDA7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmIChhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICE9PSBcIkdyYW5kIFRvdGFsXCIpXHJcblx0XHRcdFx0XHR0aGlzLmNvbHVtblRleHRzLnB1c2goYXJncy5jb2x1bW4uYWN0dWFsVGV4dCk7XHJcblxyXG5cdFx0XHRcdGlmICghdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0IU51bWJlcih0aGlzLnN1YlRvdGFsc1tmaWVsZE5hbWVdKSB8fFxyXG5cdFx0XHRcdFx0XHRpc05hTihOdW1iZXIodGhpcy5zdWJUb3RhbHNbZmllbGROYW1lXSkpXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbZmllbGROYW1lXSA9IDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tmaWVsZE5hbWVdICs9IE51bWJlcih2YWx1ZSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoID09IDFcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0IU51bWJlcihcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHQpIHx8XHJcblx0XHRcdFx0XHRcdGlzTmFOKFxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdF0gPSAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRdICs9IE51bWJlcih2YWx1ZSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIC0tLT4gYWxsRGF0YVZhbHVl5Lit6L+Z5Liq5Y2V5YWD5qC855qE5YC85LiN5q2j56GuXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0YXJncy5jb2x1bW5DZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIgJiZcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoID09IDFcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmFsbERhdGFWYWx1ZSAmJiB0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICsgXCJHcmFuZCBUb3RhbFwiICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuY29sdW1uVGV4dHMgPSB1bmlxQnkodGhpcy5jb2x1bW5UZXh0cywgKGVsKSA9PiBlbCk7XHJcblx0XHRcdFx0XHRcdGxldCB2YWwgPSAwO1xyXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1uVGV4dHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0XHRjb25zdCBlbGVtZW50ID0gdGhpcy5jb2x1bW5UZXh0c1tpXTtcclxuXHRcdFx0XHRcdFx0XHR2YWwgKz1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICsgZWxlbWVudCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gdmFsO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gdmFsdWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiKSB7XHJcblx0XHRcdGNvbnN0IGRhdGFUeXBlID0gZmllbGQuZGF0YVR5cGU7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcInN0cmluZ1wiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT0gXCJudmFyY2hhclwiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT0gXCJkYXRlXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcImRhdGV0aW1lXCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuYWxsRGF0YVZhbHVlICYmIHRoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWVbdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRcdGlmIChyb3dPYmpzKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianNBcnIgPSBKU09OLnBhcnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0SlNPTi5zdHJpbmdpZnkocm93T2JqcylcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCBvYmpBcnIgPSByb3dPYmpzQXJyLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuYWN0dWFsVGV4dCA9PSBmaWVsZE5hbWUgJiYgZWwuaXNHcmFuZFN1bVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKG9iakFyciAmJiBvYmpBcnIubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gb2JqQXJyW29iakFyci5sZW5ndGggLSAxXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXModGhpcy5ncmFuZFRvdGFscykuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSB0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGlmIChhcmdzLmNvbHVtbkNlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIikge1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5hbGxEYXRhVmFsdWUgJiYgdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWVbdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRcdFx0aWYgKHJvd09ianMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzQXJyID0gSlNPTi5wYXJzZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0SlNPTi5zdHJpbmdpZnkocm93T2JqcylcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgb2JqQXJyID0gcm93T2Jqc0Fyci5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmlzR3JhbmRTdW1cclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAob2JqQXJyICYmIG9iakFyci5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b2JqQXJyW29iakFyci5sZW5ndGggLSAxXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKHRoaXMuZ3JhbmRUb3RhbHMpLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmFsbERhdGFWYWx1ZSAmJiB0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZVt0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0bGV0IG9iakFyciA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5pc0dyYW5kU3VtICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsLmNvbHVtbkhlYWRlcnMgPT0gYXJncy5jb2x1bW4uYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKG9iakFyciAmJiBvYmpBcnIubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gb2JqQXJyW29iakFyci5sZW5ndGggLSAxXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXModGhpcy5ncmFuZFRvdGFscykuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHRoaXMuZm9ybWF0VmFsKGFyZ3MsIGZpZWxkTmFtZSk7XHJcblx0XHRyZXR1cm4gYXJncy52YWx1ZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZm9ybWF0VmFsKGFyZ3MsIGZpZWxkTmFtZSkge1xyXG5cdFx0dGhpcy5jb25maWdGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHRcdFx0aWYgKGZpZWxkLmNvbE5hbWUgPT0gZmllbGROYW1lKSB7XHJcblx0XHRcdFx0c3dpdGNoIChmaWVsZC5kYXRhVHlwZSkge1xyXG5cdFx0XHRcdFx0Y2FzZSBcImRhdGVcIjpcclxuXHRcdFx0XHRcdGNhc2UgXCJkYXRldGltZVwiOlxyXG5cdFx0XHRcdFx0XHRpZiAoYXJncy52YWx1ZSkgYXJncy52YWx1ZSA9IG5ldyBEYXRlKGFyZ3MudmFsdWUpO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldGV4Y2x1ZGVGaWVsZHMoZmllbGRzLCBkYXRhKSB7XHJcblx0XHRsZXQgbmFtZWFycmF5ID0gW107XHJcblx0XHRsZXQgYXJyYXkgPSBbXTtcclxuXHRcdGZvciAobGV0IHByb3AgaW4gZGF0YSkge1xyXG5cdFx0XHRhcnJheS5wdXNoKHByb3ApO1xyXG5cdFx0fVxyXG5cdFx0Zm9yIChsZXQgaXRlbSBvZiBmaWVsZHMpIHtcclxuXHRcdFx0bmFtZWFycmF5LnB1c2goaXRlbS5jb2xOYW1lKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuZXhjbHVkZUZpZWxkcyA9IGRpZmZlcmVuY2VXaXRoKGFycmF5LCBuYW1lYXJyYXkpO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLmV4Y2x1ZGVGaWVsZHMubGVuZ3RoICYmXHJcblx0XHRcdHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3MgJiZcclxuXHRcdFx0dGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncy5sZW5ndGhcclxuXHRcdCkge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXhjbHVkZUZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IGVsID0gdGhpcy5leGNsdWRlRmllbGRzW2ldO1xyXG5cdFx0XHRcdGlmIChzdGFydHNXaXRoKGVsLCB0aGlzLmNvbmZpZy5ncm91cFNldHRpbmdzWzBdLm5hbWUgKyBcIl9cIikpIHtcclxuXHRcdFx0XHRcdHRoaXMuZXhjbHVkZUZpZWxkcy5zcGxpY2UoaSwgMSk7XHJcblx0XHRcdFx0XHRpLS07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldEluZm8oKSB7XHJcblx0XHR0aGlzLmRhdGVQaXBlRm9ybWF0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJkYXRlUGlwZVwiKTtcclxuXHRcdHRoaXMudHJhbnNsYXRpb24gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidHJhbnNsYXRpb25cIikpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIG9uRmllbGREcm9wKGFyZ3M6IEZpZWxkRHJvcEV2ZW50QXJncykge1xyXG5cdFx0dGhpcy5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVzID0gWy4uLmFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlc107XHJcblx0XHQvL2NoYW5nZSB0aGUgY2FsY3VhbHRlRmllbGQgbWV0aG9kIHVzZSB0aGUgY29ycmVzcG9uZGluZyBjYWxjdWxhdGVcclxuXHRcdGNvbnN0IGNhbGN1YWx0ZUZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGFyZ3MuZmllbGROYW1lICYmIGVsLmlzQ2FsY3VsYXRlZEZpZWxkXHJcblx0XHQpO1xyXG5cdFx0aWYgKGNhbGN1YWx0ZUZpZWxkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0YXJncy5kcm9wRmllbGQudHlwZSA9XHJcblx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRDYWxjdWxhdGVNZXRob2QoXHJcblx0XHRcdFx0XHRjYWxjdWFsdGVGaWVsZFswXS5jb2xOYW1lXHJcblx0XHRcdFx0KSBhcyBhbnk7XHJcblx0XHRcdGFyZ3MuZHJvcEZpZWxkLmNhcHRpb24gPSBhcmdzLmRyb3BGaWVsZC5jYXB0aW9uXHJcblx0XHRcdFx0LnJlcGxhY2UoXCJDYWxjdWxhdGVcIiwgXCJcIilcclxuXHRcdFx0XHQudHJpbSgpO1xyXG5cdFx0fVxyXG5cdFx0Zm9yIChcclxuXHRcdFx0bGV0IGkgPSAwO1xyXG5cdFx0XHRpIDwgYXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3MubGVuZ3RoO1xyXG5cdFx0XHRpKytcclxuXHRcdCkge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3NbaV0ubmFtZSA9PT1cclxuXHRcdFx0XHRcdGFyZ3MuZmllbGROYW1lICYmXHJcblx0XHRcdFx0YXJncy5kcm9wQXhpcyA9PT0gXCJcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5maWx0ZXJTZXR0aW5ncy5zcGxpY2UoaSwgMSk7XHJcblx0XHRcdFx0dGhpcy5maWx0ZXJTZXR0aW5ncyA9IGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLmZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDYWxjdWxhdGVkIGZpZWxk5LqL5Lu277ya5Yib5bu6XHJcblx0cHVibGljIGNhbGN1bGF0ZWRGaWVsZENyZWF0ZShhcmdzOiBDYWxjdWxhdGVkRmllbGRDcmVhdGVFdmVudEFyZ3MpIHtcclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5jYWxjdWxhdGVkRmllbGQubmFtZSAhPT0gXCJcIiAmJlxyXG5cdFx0XHRhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lLnRyaW0oKSAhPT0gXCJcIlxyXG5cdFx0KSB7XHJcblx0XHRcdGxldCBpbmRleCA9XHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzLmZpbmRJbmRleChcclxuXHRcdFx0XHRcdChlbCkgPT4gZWwubmFtZSA9PT0gYXJncy5jYWxjdWxhdGVkRmllbGQubmFtZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGlmIChpbmRleCAhPT0gLTEpIHtcclxuXHRcdFx0XHRpZiAoYXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybWF0U3RyaW5nID09PSBcIlwiKSB7XHJcblx0XHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3NbXHJcblx0XHRcdFx0XHRcdGluZGV4XHJcblx0XHRcdFx0XHRdLmZvcm1hdFN0cmluZyA9IFwiTjJcIjtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzW1xyXG5cdFx0XHRcdFx0XHRpbmRleFxyXG5cdFx0XHRcdFx0XS5mb3JtYXRTdHJpbmcgPSBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtYXRTdHJpbmc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtYXRTdHJpbmcgPT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm1hdFN0cmluZyA9IFwiTjJcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8g56e76Zmk6YeN5aSNXHJcblx0XHRcdGxldCBmSW5kZXggPSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMuZmluZEluZGV4KFxyXG5cdFx0XHRcdChmKSA9PiBmLm5hbWUgPT09IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLm5hbWVcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKGZJbmRleCA+IC0xKSB7XHJcblx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLnNwbGljZShmSW5kZXgsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIOWMuemFjei/kOeul+espiBGaXJzdCB8fCBMYXN0XHJcblx0XHRcdGxldCBmb3JtdWxhU3RyID0gYXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybXVsYTtcclxuXHRcdFx0bGV0IHJlZzEgPSAvXCJGaXJzdFxcKCguKz8pXFwpXCIvZztcclxuXHRcdFx0bGV0IHJlZzIgPSAvXCJMYXN0XFwoKC4rPylcXClcIi9nO1xyXG5cdFx0XHRpZiAocmVnMS50ZXN0KGZvcm11bGFTdHIpIHx8IHJlZzIudGVzdChmb3JtdWxhU3RyKSkge1xyXG5cdFx0XHRcdC8vIOWIpOaWreaYr+WQpuWtmOWcqEZpcnN0IHx8IExhc3Qg6KGo6L6+5byPXHJcblx0XHRcdFx0bGV0IG1hdGNoRmlyc3RGaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIkZpcnN0XFwoKC4rPylcXClcIi9nKSxcclxuXHRcdFx0XHRcdChtKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hTdHI6IG1bMF0sXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hXb3JkOiBtWzFdLFxyXG5cdFx0XHRcdFx0XHRcdHJlcGxhY2VWYWx1ZTogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRtYXRjaE1ldGhvZDogXCJGaXJzdFwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoTGFzdEZpZWxkcyA9IEFycmF5LmZyb20oXHJcblx0XHRcdFx0XHRmb3JtdWxhU3RyW1wibWF0Y2hBbGxcIl0oL1wiTGFzdFxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiTGFzdFwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoTWF4RmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJNYXhcXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIk1heFwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoTWluRmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJNaW5cXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIk1pblwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoU3VtRmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJTdW1cXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIlN1bVwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoQXZnRmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJBdmdcXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIkF2Z1wiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0bWF0Y2hGaXJzdEZpZWxkcy5ldmVyeSgoeCkgPT5cclxuXHRcdFx0XHRcdFx0dGhpcy5hbGxvd2VkQ2FsY3VsYXRlZEZpZWxkcy5pbmNsdWRlcyh4Lm1hdGNoV29yZClcclxuXHRcdFx0XHRcdCkgJiZcclxuXHRcdFx0XHRcdG1hdGNoTGFzdEZpZWxkcy5ldmVyeSgoeCkgPT5cclxuXHRcdFx0XHRcdFx0dGhpcy5hbGxvd2VkQ2FsY3VsYXRlZEZpZWxkcy5pbmNsdWRlcyh4Lm1hdGNoV29yZClcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdC8vIOWIpOaWrUZpcnN05ZKMTGFzdOihqOi+vuW8j+WGheeahOWtl+auteaYr+WQpuWQiOazlVxyXG5cdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtdWxhOiBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtdWxhLFxyXG5cdFx0XHRcdFx0XHRtYXRjaEZpZWxkczogW1xyXG5cdFx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaEZpcnN0RmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoTGFzdEZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaE1heEZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaE1pbkZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaFN1bUZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaEF2Z0ZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0Z3JhbmRUb3RhbDogMCxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0bGV0IGZpZWxkTmFtZSA9IChcclxuXHRcdFx0XHRcdFx0Zm9ybXVsYVN0ci5zcGxpdChcIkZpcnN0KFwiKVsxXSB8fFxyXG5cdFx0XHRcdFx0XHRmb3JtdWxhU3RyLnNwbGl0KFwiTGFzdChcIilbMV1cclxuXHRcdFx0XHRcdCkuc3BsaXQoXCIpXCIpWzBdO1xyXG5cdFx0XHRcdFx0YXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybXVsYSA9XHJcblx0XHRcdFx0XHRcdFwiJ1xcXCJcIiArIFwiU3VtKFwiICsgZmllbGROYW1lICsgJylcIj0nICsgZm9ybXVsYVN0ciArIFwiJ1wiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQ2FsY3VsYXRlZCBmaWVsZOS6i+S7tu+8muWujOaIkFxyXG5cdHB1YmxpYyBhY3Rpb25Db21wbGV0ZShhcmdzKSB7XHJcblx0XHRpZiAoXHJcblx0XHRcdGFyZ3MuYWN0aW9uTmFtZSA9PT0gXCJGaWVsZCBhZ2dyZWdhdGVkXCIgfHxcclxuXHRcdFx0YXJncy5hY3Rpb25OYW1lID09PSBcIkZpZWxkIGxpc3QgY2xvc2VkXCJcclxuXHRcdCkge1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZXMgPSBbXHJcblx0XHRcdFx0Li4uYXJncy5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVzLFxyXG5cdFx0XHRdO1xyXG5cdFx0XHR0aGlzLnNldFZhbHVlSXRlbURhdGEoKTtcclxuXHRcdH1cclxuXHRcdGlmIChhcmdzLmFjdGlvbk5hbWUgPT0gXCJGaWVsZCByZW1vdmVkXCIpIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGFyZ3MuZmllbGRJbmZvICYmXHJcblx0XHRcdFx0YXJncy5maWVsZEluZm8uZmllbGRJdGVtICYmXHJcblx0XHRcdFx0YXJncy5maWVsZEluZm8uZmllbGRJdGVtLnR5cGUgPT0gXCJDYWxjdWxhdGVkRmllbGRcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRsZXQgZmllbGQgPSBhcmdzLmZpZWxkSW5mby5maWVsZE5hbWU7XHJcblx0XHRcdFx0Ly8gUmVtb3ZlIHRoZSBkZWxldGVkIGNhbGN1bGF0ZWQgZmllbGQgZnJvbSBhbiBzdG9yZWQgYXJyYXkuXHJcblx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzID1cclxuXHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5maWx0ZXIoZnVuY3Rpb24gKG9iaikge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gb2JqLm5hbWUgIT09IGZpZWxkO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIENhbGN1bGF0ZWQgZmllbGTkuovku7bvvJrlvIDlp4tcclxuXHRwdWJsaWMgYWN0aW9uQmVnaW4oYXJncykge1xyXG5cdFx0aWYgKGFyZ3MuYWN0aW9uTmFtZSA9PT0gXCJFZGl0IGNhbGN1bGF0ZWQgZmllbGRcIikge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5uYW1lICYmXHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5maWVsZExpc3RbXHJcblx0XHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5uYW1lXHJcblx0XHRcdFx0XHRdXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5maWVsZExpc3RbXHJcblx0XHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5uYW1lXHJcblx0XHRcdFx0XHRdLmZvcm11bGEgPSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNbaV0uZm9ybXVsYTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmVzaXplU3RvcChhcmdzKSB7XHJcblx0XHRpZiAodGhpcy5jb25maWcuY29sdW1uc1dpZHRoKSB7XHJcblx0XHRcdGNvbnN0IGhlYWRlcl9maWVsZCA9IHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aC5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PiBlbC5oZWFkZXJUZXh0ID09PSBhcmdzLmNvbHVtbi5oZWFkZXJUZXh0XHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChoZWFkZXJfZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGhlYWRlcl9maWVsZFswXS53aWR0aCA9IHBhcnNlSW50KGFyZ3MuY29sdW1uLndpZHRoKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGgucHVzaCh7XHJcblx0XHRcdFx0XHRoZWFkZXJUZXh0OiBhcmdzLmNvbHVtbi5oZWFkZXJUZXh0LFxyXG5cdFx0XHRcdFx0d2lkdGg6IHBhcnNlSW50KGFyZ3MuY29sdW1uLndpZHRoKSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5jb25maWcuY29sdW1uc1dpZHRoID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aC5wdXNoKHtcclxuXHRcdFx0XHRoZWFkZXJUZXh0OiBhcmdzLmNvbHVtbi5oZWFkZXJUZXh0LFxyXG5cdFx0XHRcdHdpZHRoOiBwYXJzZUludChhcmdzLmNvbHVtbi53aWR0aCksXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgcG9ydGxldCA9IHRoaXMucG9ydGxldDtcclxuXHRcdHBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLnBvcnRsZXRzLmZpbmRJbmRleCgoeCkgPT4geC5uZXdJZCA9PT0gcG9ydGxldC5uZXdJZCk7XHJcblx0XHRpZiAoaW5kZXggPiAtMSkgdGhpcy5wb3J0bGV0c1tpbmRleF0gPSBwb3J0bGV0O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRDb2x1bW5zUmVuZGVyKGFyZ3MpIHtcclxuXHRcdGlmIChhcmdzLnN0YWNrZWRDb2x1bW5zKSB7XHJcblx0XHRcdGFyZ3Muc3RhY2tlZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0Y29sLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0KGNvbC5mb3JtYXQuaW5kZXhPZihcIk5cIikgIT09IC0xIHx8XHJcblx0XHRcdFx0XHRcdGNvbC5mb3JtYXQgPT09IFwicGVyY2VudFwiIHx8XHJcblx0XHRcdFx0XHRcdGNvbC5mb3JtYXQuaW5kZXhPZihcIlBcIikgIT09IC0xKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Y29sLnRleHRBbGlnbiA9IFwiUmlnaHRcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGgpIHtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAoYXJncyBhcyBhbnkpLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRhcmdzLmNvbHVtbnNbaV0uaGVhZGVyVGV4dCA9PT0gXCJcIiB8fFxyXG5cdFx0XHRcdFx0IWFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0XHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb2x1bW5fcm93ID0gdGhpcy5jb25maWcuY29sdW1uc1dpZHRoLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0KGVsKSA9PiBlbC5oZWFkZXJUZXh0ID09PSBhcmdzLmNvbHVtbnNbaV0uaGVhZGVyVGV4dFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGlmIChjb2x1bW5fcm93Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0YXJncy5jb2x1bW5zW2ldLndpZHRoID0gY29sdW1uX3Jvd1swXS53aWR0aDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgaGVhZGVyVGV4dCA9IGFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0XHJcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpXHJcblx0XHRcdFx0XHRcdC5zcGxpdChcIi5cIik7XHJcblx0XHRcdFx0XHRpZiAoaGVhZGVyVGV4dCAmJiBoZWFkZXJUZXh0Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb25maWcuY29sdW1uc1dpZHRoLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRlbC5oZWFkZXJUZXh0XHJcblx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdC50b0xvd2VyQ2FzZSgpID09PVxyXG5cdFx0XHRcdFx0XHRcdFx0aGVhZGVyVGV4dFtoZWFkZXJUZXh0Lmxlbmd0aCAtIDFdLnRvTG93ZXJDYXNlKClcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0aWYgKGNvbHVtbi5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS5jb2x1bW5zW2ldLndpZHRoID0gY29sdW1uWzBdLndpZHRoO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGRhdGUgZm9ybWF0IGFib3V0IHF1YXJ0ZXJseVxyXG5cdFx0XHRcdGxldCBwaXZvdFZhbHVlczogYW55ID0gdGhpcy5waXZvdE9iai5waXZvdFZhbHVlcztcclxuXHRcdFx0XHRpZiAodGhpcy5mb3JtYXREYXRlcyAmJiB0aGlzLmZvcm1hdERhdGVzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0bGV0IGRhdGVGaWVsZHMgPSB0aGlzLmZvcm1hdERhdGVzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGVsLm5hbWU7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdGZvciAobGV0IGsgPSAxOyBrIDwgcGl2b3RWYWx1ZXMubGVuZ3RoOyBrKyspIHtcclxuXHRcdFx0XHRcdFx0Zm9yIChcclxuXHRcdFx0XHRcdFx0XHRsZXQgaiA9IDA7XHJcblx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba10gIT0gbnVsbCAmJiBqIDwgcGl2b3RWYWx1ZXNba10ubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRcdGorK1xyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRwaXZvdFZhbHVlc1trXVtqXSAhPSBudWxsICYmXHJcblx0XHRcdFx0XHRcdFx0XHQoaiA9PSAwXHJcblx0XHRcdFx0XHRcdFx0XHRcdD8gZGF0ZUZpZWxkcy5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IGRhdGVGaWVsZHMuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwaXZvdFZhbHVlc1trXVtqXS5hY3R1YWxUZXh0XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKSlcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vQ3VzdG9taXplIHRoZSBSb3cgaGVhZGVycy9Db2x1bW4gaGVhZGVycyBiYXNlZCBvbiB5b3VyIG5lZWRzXHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgaGVhZGVycztcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChqID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlcnMgPSBwaXZvdFZhbHVlc1trXVtqXS5hY3R1YWxUZXh0O1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaGVhZGVycyA9IHBpdm90VmFsdWVzW2tdW2pdLmZvcm1hdHRlZFRleHQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlcnMgPSBwaXZvdFZhbHVlc1trXVtqXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChoZWFkZXJzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBkYXRlID0gbmV3IERhdGUoaGVhZGVycyk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgcXVhcnRlciA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0TWF0aC5mbG9vcihkYXRlLmdldE1vbnRoKCkgLyAzKSArIDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0O1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mb3JtYXREYXRlcy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGogPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5uYW1lID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IGVsLmZvcm1hdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5uYW1lID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLmFjdHVhbFRleHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gZWwuZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLmZvcm1hdHRlZFRleHQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ2V0UXVhcnRlclZhbHVlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1YXJ0ZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBpZih0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgb25Mb2FkKCk6IHZvaWQge1xyXG5cdFx0Ly8gU01QMi0xNTY1MSDlvIDlkK/omZrmi5/mu5rliqjlubZzb3J05YiX5ZCO77yM5p2l5Zue5rua5Yqo5Lya5a+86Ie05pWw5o2u56m655m9XHJcblx0XHQvLyDlrpjmlrnpk77mjqUgaHR0cHM6Ly9lajIuc3luY2Z1c2lvbi5jb20vYW5ndWxhci9kb2N1bWVudGF0aW9uL3Bpdm90dmlldy92aXJ0dWFsLXNjcm9sbGluZyN2aXJ0dWFsLXNjcm9sbGluZy1mb3Itc3RhdGljLWZpZWxkLWxpc3RcclxuXHRcdC8vIERlbW/pk77mjqUgaHR0cHM6Ly9zdGFja2JsaXR6LmNvbS9lZGl0L2dpdGh1Yi03Z2drMnUtNHJremIzP2ZpbGU9c3JjJTJGYXBwLmNvbXBvbmVudC50c1xyXG5cdFx0KHRoaXMuZmllbGRsaXN0T2JqIGFzIFBpdm90RmllbGRMaXN0Q29tcG9uZW50KS5waXZvdEdyaWRNb2R1bGUgPSB0aGlzXHJcblx0XHRcdC5waXZvdE9iaiBhcyBQaXZvdFZpZXdDb21wb25lbnQ7XHJcblx0fVxyXG5cclxuXHRvbmRhdGFCb3VuZCgpe1xyXG5cdFx0aWYgKEJyb3dzZXIuaXNEZXZpY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5waXZvdE9iai5lbGVtZW50LnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLnBpdm90T2JqLmFsbG93Q2FsY3VsYXRlZEZpZWxkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5waXZvdE9iai5zaG93RmllbGRMaXN0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGVuZ2luZVBvcHVsYXRlZChhcmdzKSB7XHJcblx0XHRsZXQgY2xvbmVkVmFsdWVzOiBJUGl2b3RWYWx1ZXM7XHJcblx0XHRsZXQgY3VycmVudFBpdm90VmFsdWVzOiBhbnkgPSB0aGlzLmdldENsb25lZFBpdm90VmFsdWVzKFxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5waXZvdFZhbHVlc1xyXG5cdFx0KTtcclxuXHRcdGxldCBwYWdlU2V0dGluZ3M6IElQYWdlU2V0dGluZ3MgPVxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5wYWdlU2V0dGluZ3M7XHJcblxyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmdlbmVyYXRlR3JpZERhdGEpIHtcclxuXHRcdFx0Ly8g5rKh5rOV5aSN546wIGh0dHBzOi8vcmFpc2VscC5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9TTVAyLTE3MjQg5aSE55CG55qE6L+Z5Liq6Zeu6aKY5oOF5Ya1LCDnm7TmjqXms6jph4rmjolcclxuXHRcdFx0Ly8g5LiL6Z2i6L+Z5q615Luj56CB5Lya5b2x5ZONIGh0dHBzOi8vcmFpc2VscC5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9TTVAyLTEyMTM5XHJcblx0XHRcdC8vIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmdlbmVyYXRlR3JpZERhdGEoXHJcblx0XHRcdC8vIFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MsXHJcblx0XHRcdC8vIFx0dHJ1ZVxyXG5cdFx0XHQvLyApO1xyXG5cdFx0XHRjbG9uZWRWYWx1ZXMgPSB0aGlzLmdldENsb25lZFBpdm90VmFsdWVzKFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBpdm90VmFsdWVzXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5waXZvdFZhbHVlcyA9IGN1cnJlbnRQaXZvdFZhbHVlcztcclxuXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBhZ2VTZXR0aW5ncyA9IHBhZ2VTZXR0aW5ncztcclxuXHJcblx0XHRcdC8vIEhlcmUgXCJjbG9uZWRWYWx1ZXNcIiBjb250YWlucyB0aGUgd2hvbGUgcGl2b3QgdmFsdWVzLlxyXG5cdFx0XHR0aGlzLmFsbERhdGFWYWx1ZSA9IGNsb25lZFZhbHVlcztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q2xvbmVkUGl2b3RWYWx1ZXMocGl2b3RWYWx1ZXM6IElQaXZvdFZhbHVlcyk6IElQaXZvdFZhbHVlcyB7XHJcblx0XHRsZXQgY2xvbmVkU2V0czogSVBpdm90VmFsdWVzID0gW107XHJcblx0XHRpZiAocGl2b3RWYWx1ZXMgJiYgcGl2b3RWYWx1ZXMubGVuZ3RoKSB7XHJcblx0XHRcdGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBwaXZvdFZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChwaXZvdFZhbHVlc1tpXSkge1xyXG5cdFx0XHRcdFx0Y2xvbmVkU2V0c1tpXSA9IFtdO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IHBpdm90VmFsdWVzW2ldLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdGlmIChwaXZvdFZhbHVlc1tpXVtqXSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlICovXHJcblx0XHRcdFx0XHRcdFx0Y2xvbmVkU2V0c1tpXVtqXSA9IHRoaXMuZ2V0Q2xvbmVkUGl2b3RWYWx1ZU9iaihcclxuXHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2ldW2pdIGFzIHsgW2tleTogc3RyaW5nXTogT2JqZWN0IH1cclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNsb25lZFNldHM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldENsb25lZFBpdm90VmFsdWVPYmooZGF0YTogeyBba2V5OiBzdHJpbmddOiBPYmplY3QgfSk6IHtcclxuXHRcdFtrZXk6IHN0cmluZ106IE9iamVjdDtcclxuXHR9IHtcclxuXHRcdGxldCBrZXlQb3M6IG51bWJlciA9IDA7XHJcblx0XHRsZXQgZnJhbWVkU2V0OiBhbnkgPSB7fTtcclxuXHRcdGlmICghKGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdW5kZWZpbmVkKSkge1xyXG5cdFx0XHRsZXQgZmllbGRzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGRhdGEpO1xyXG5cdFx0XHR3aGlsZSAoa2V5UG9zIDwgZmllbGRzLmxlbmd0aCkge1xyXG5cdFx0XHRcdGZyYW1lZFNldFtmaWVsZHNba2V5UG9zXV0gPSBkYXRhW2ZpZWxkc1trZXlQb3NdXTtcclxuXHRcdFx0XHRrZXlQb3MrKztcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0ZnJhbWVkU2V0ID0gZGF0YTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmcmFtZWRTZXQ7XHJcblx0fVxyXG5cclxuXHQvLyNyZWdpb24gRmlsdGVyaW5nIHRoZSBUcmVlTm9kZXNcclxuXHRwcml2YXRlIHNlYXJjaE5vZGVzKGFyZ3MpIHtcclxuXHRcdGxldCBfdGV4dCA9IGFyZ3MubWFza2VkVmFsdWU7XHJcblx0XHRsZXQgcHJlZGljYXRzID0gW10sXHJcblx0XHRcdF9hcnJheSA9IFtdLFxyXG5cdFx0XHRfZmlsdGVyID0gW107XHJcblx0XHRpZiAoX3RleHQgPT0gXCJcIikge1xyXG5cdFx0XHR0aGlzLmNoYW5nZURhdGFTb3VyY2UoXHJcblx0XHRcdFx0KCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueSkuZ2V0VHJlZURhdGEoKVxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGV0IHByZWRpY2F0ZSA9IG5ldyBQcmVkaWNhdGUoXCJjYXB0aW9uXCIsIFwiY29udGFpbnNcIiwgX3RleHQsIHRydWUpO1xyXG5cdFx0XHRsZXQgZmlsdGVyZWRMaXN0ID0gbmV3IERhdGFNYW5hZ2VyKFxyXG5cdFx0XHRcdCgodGhpcyBhcyBhbnkpLmZpZWxkbGlzdE9iai50cmVlVmlld01vZHVsZSBhcyBhbnkpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0KS5leGVjdXRlTG9jYWwobmV3IFF1ZXJ5KCkud2hlcmUocHJlZGljYXRlKSk7XHJcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgZmlsdGVyZWRMaXN0Lmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0X2ZpbHRlci5wdXNoKGZpbHRlcmVkTGlzdFtqXVtcImlkXCJdKTtcclxuXHRcdFx0XHRsZXQgZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVySXRlbXMoXHJcblx0XHRcdFx0XHRmaWx0ZXJlZExpc3Rbal0sXHJcblx0XHRcdFx0XHQoXHJcblx0XHRcdFx0XHRcdCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueVxyXG5cdFx0XHRcdFx0KS5nZXRUcmVlRGF0YSgpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0X2FycmF5LmluZGV4T2YoZmlsdGVyc1tpXSkgPT0gLTEgJiZcclxuXHRcdFx0XHRcdFx0ZmlsdGVyc1tpXSAhPSBudWxsXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0X2FycmF5LnB1c2goZmlsdGVyc1tpXSk7XHJcblx0XHRcdFx0XHRcdHByZWRpY2F0cy5wdXNoKFxyXG5cdFx0XHRcdFx0XHRcdG5ldyBQcmVkaWNhdGUoXCJpZFwiLCBcImVxdWFsXCIsIGZpbHRlcnNbaV0sIGZhbHNlKVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAocHJlZGljYXRzLmxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VEYXRhU291cmNlKFtdKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRsZXQgcXVlcnkgPSBuZXcgUXVlcnkoKS53aGVyZShQcmVkaWNhdGUub3IocHJlZGljYXRzKSk7XHJcblx0XHRcdFx0bGV0IG5ld0xpc3QgPSBuZXcgRGF0YU1hbmFnZXIoXHJcblx0XHRcdFx0XHQoXHJcblx0XHRcdFx0XHRcdCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueVxyXG5cdFx0XHRcdFx0KS5nZXRUcmVlRGF0YSgpXHJcblx0XHRcdFx0KS5leGVjdXRlTG9jYWwocXVlcnkpO1xyXG5cdFx0XHRcdHRoaXMuY2hhbmdlRGF0YVNvdXJjZShuZXdMaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly9GaW5kIHRoZSBQYXJlbnQgTm9kZXMgZm9yIGNvcnJlc3BvbmRpbmcgY2hpbGRzXHJcblx0cHVibGljIGdldEZpbHRlckl0ZW1zKGZMaXN0LCBsaXN0KSB7XHJcblx0XHRsZXQgbm9kZXMgPSBbXTtcclxuXHRcdG5vZGVzLnB1c2goZkxpc3RbXCJpZFwiXSk7XHJcblx0XHRsZXQgcXVlcnkyID0gbmV3IFF1ZXJ5KCkud2hlcmUoXCJpZFwiLCBcImVxdWFsXCIsIGZMaXN0W1wicGlkXCJdLCBmYWxzZSk7XHJcblx0XHRsZXQgZkxpc3QxID0gbmV3IERhdGFNYW5hZ2VyKGxpc3QpLmV4ZWN1dGVMb2NhbChxdWVyeTIpO1xyXG5cdFx0aWYgKGZMaXN0MS5sZW5ndGggIT0gMCkge1xyXG5cdFx0XHRsZXQgcE5vZGUgPSB0aGlzLmdldEZpbHRlckl0ZW1zKGZMaXN0MVswXSwgbGlzdCk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcE5vZGUubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRpZiAobm9kZXMuaW5kZXhPZihwTm9kZVtpXSkgPT0gLTEgJiYgcE5vZGVbaV0gIT0gbnVsbClcclxuXHRcdFx0XHRcdG5vZGVzLnB1c2gocE5vZGVbaV0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBub2RlcztcclxuXHRcdH1cclxuXHRcdHJldHVybiBub2RlcztcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBjcmVhdGVkKGFyZ3M6IGFueSkge1xyXG5cdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqICYmICF0aGlzLmZpZWxkbGlzdE9iai5lbmdpbmVNb2R1bGUuZmllbGRzKSB7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmVuZ2luZU1vZHVsZS5maWVsZHMgPSBbXTtcclxuXHRcdH1cclxuXHRcdGxldCBzZWFyY2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcblx0XHRzZWFyY2guaWQgPSBcInBpdm90U2VhcmNoQm94XCIgKyB0aGlzLmZpZWxkbGlzdE9iai5lbGVtZW50LmlkO1xyXG5cdFx0bGV0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuXHRcdFx0XCIjXCIgKyB0aGlzLmZpZWxkbGlzdE9iai5lbGVtZW50LmlkICsgXCJfQ29udGFpbmVyIC5lLWZpZWxkLXRhYmxlXCJcclxuXHRcdCk7XHJcblx0XHRpZiAoZWwpIGVsLnByZXBlbmQoc2VhcmNoKTtcclxuXHRcdHRoaXMucGl2b3RTZWFyY2hCb3ggPSBuZXcgTWFza2VkVGV4dEJveCh7XHJcblx0XHRcdHBsYWNlaG9sZGVyOiB0aGlzLnRyYW5zbGF0aW9uLlNFQVJDSCB8fCBcIi5TRUFSQ0hcIixcclxuXHRcdFx0Y3NzQ2xhc3M6IFwicGl2b3Qtc2VhcmNoXCIsXHJcblx0XHRcdGNoYW5nZTogdGhpcy5zZWFyY2hOb2Rlcy5iaW5kKHRoaXMpLFxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLnBpdm90U2VhcmNoQm94LmFwcGVuZFRvKFxyXG5cdFx0XHRcIiNwaXZvdFNlYXJjaEJveFwiICsgdGhpcy5maWVsZGxpc3RPYmouZWxlbWVudC5pZFxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyBORVcgRGFzaGJvYXJkIOeCueWHu1wiYXBwbHlcIuaXtu+8jOivt+axguaWsOaVsOaNrlxyXG5cdFx0bGV0IGFwcGx5QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQgKyBcIl9EZWZlclVwZGF0ZUJ1dHRvbjFcIlxyXG5cdFx0KTtcclxuXHJcblx0XHRhcHBseUJ0biAmJlxyXG5cdFx0XHRhcHBseUJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0RGF0YUJ5UG9ydGxldHNOZXcoXHJcblx0XHRcdFx0XHRbdGhpcy5wb3J0bGV0XSxcclxuXHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHR0aGlzLlBpdm90X0RhdGEgPVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0UmVzdWx0QnlEYXRhVGFibGUoXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBvcnRsZXQsXHJcblx0XHRcdFx0XHRcdFx0XHRmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmQuaWRcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5kYXRhU291cmNlID1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLlBpdm90X0RhdGE7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5QaXZvdF9EYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGdyb3VwcyA9IHRoaXMuY29uZmlnLnhheGlzLmdyb3VwcztcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93cyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChncm91cHMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGdpdGVtIG9mIGdyb3Vwcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGdpdGVtLm5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGZpZWxkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRnaXRlbS5zaG93U3ViVG90YWxzID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLnNob3dTdWJUb3RhbHM7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Z2l0ZW0uY2FwdGlvbiA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5sYW5nVmFsdWUgfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudHJhbnNsYXRpb25bXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdDb2RlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5sYW5nQ29kZSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2l0ZW0uY2FwdGlvbjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyb3dzLnB1c2goZ2l0ZW0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLlBpdm90X0RhdGEubWFwKChkYXRhKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRyb3dzLmZvckVhY2goKHJvdykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZGF0YVtyb3cubmFtZV0gPT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhW3Jvdy5uYW1lXSA9IFwibnVsbFwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHRmYWxzZSxcclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkLFxyXG5cdFx0XHRcdFx0ZmFsc2VcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0XHJcblx0XHQvLyDngrnlh7tcImNhbmNlbFwi5pe277yM5oGi5aSN5Y6f5aeL5pWw5o2uXHJcblx0XHRsZXQgY2FuY2VsQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQgKyBcIl9EZWZlclVwZGF0ZUJ1dHRvbjJcIlxyXG5cdFx0KTtcclxuXHJcblx0XHRjYW5jZWxCdG4gJiZcclxuXHRcdFx0Y2FuY2VsQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuZGF0YVNvdXJjZSA9XHJcblx0XHRcdFx0XHRbLi4udGhpcy5QaXZvdF9EYXRhXTtcclxuXHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0XHRcdHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdFx0fSk7XHRcdFxyXG5cdH1cclxuXHJcblx0cHVibGljIGZpZWxkTGlzdFJlZnJlc2hlZChhcmdzKSB7XHJcblx0XHRpZiAodGhpcy5waXZvdFNlYXJjaEJveCkge1xyXG5cdFx0XHR0aGlzLnBpdm90U2VhcmNoQm94LnZhbHVlID0gXCJcIjtcclxuXHRcdFx0dGhpcy5jaGFuZ2VEYXRhU291cmNlKFxyXG5cdFx0XHRcdCh0aGlzLmZpZWxkbGlzdE9iai50cmVlVmlld01vZHVsZSBhcyBhbnkpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2hhbmdlRGF0YVNvdXJjZShkYXRhKSB7XHJcblx0XHRsZXQgZmllbGRUYWJsZSA9ICh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlLmZpZWxkVGFibGU7XHJcblx0XHRpZiAoZmllbGRUYWJsZSkge1xyXG5cdFx0XHRmaWVsZFRhYmxlLmZpZWxkcyA9IHtcclxuXHRcdFx0XHRkYXRhU291cmNlOiBkYXRhLFxyXG5cdFx0XHRcdGlkOiBcImlkXCIsXHJcblx0XHRcdFx0dGV4dDogXCJjYXB0aW9uXCIsXHJcblx0XHRcdFx0aXNDaGVja2VkOiBcImlzU2VsZWN0ZWRcIixcclxuXHRcdFx0XHRwYXJlbnRJRDogXCJwaWRcIixcclxuXHRcdFx0XHRpY29uQ3NzOiBcInNwcml0ZUNzc0NsYXNzXCIsXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvL1NNUDItMjk1NyBmaXggdGhlIGRhdGUgaXNzdWUgb24gdGhlIHJhdyBkYXRhXHJcblx0cHVibGljIGRyaWxsVGhyb3VnaChhcmdzOiBEcmlsbFRocm91Z2hFdmVudEFyZ3MpIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5ncmlkQ29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBkYXRhID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gYXJncy5ncmlkQ29sdW1uc1tpXS5maWVsZFxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRkYXRhWzBdLmRhdGFUeXBlID09PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0ZGF0YVswXS5kYXRhVHlwZSA9PT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRhcmdzLmdyaWRDb2x1bW5zW2ldLnR5cGUgPSBcImRhdGVcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0Ly8jZW5kcmVnaW9uXHJcblxyXG5cdHByaXZhdGUgc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChvYmosIGRhdGEsIGNvZGUpIHtcclxuXHRcdGlmIChjb2RlID09PSAtMSkge1xyXG5cdFx0XHRvYmouc3R5bGUuY29sb3IgPSBkYXRhLm5lZ2FGb250Q29sb3I7XHJcblx0XHRcdG9iai5zdHlsZS5mb250RmFtaWx5ID0gZGF0YS5uZWdhRm9udEZhbWlseVZhbHVlO1xyXG5cdFx0XHRvYmouc3R5bGUuZm9udFNpemUgPSBkYXRhLm5lZ2FGb250U2l6ZVZhbHVlO1xyXG5cdFx0XHRvYmouc3R5bGUuYmFja2dyb3VuZENvbG9yID0gZGF0YS5uZWdhQmFja2dyb3VuZENvbG9yO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0b2JqLnN0eWxlLmNvbG9yID0gZGF0YS5mb250Q29sb3I7XHJcblx0XHRcdG9iai5zdHlsZS5mb250RmFtaWx5ID0gZGF0YS5mb250RmFtaWx5VmFsdWU7XHJcblx0XHRcdG9iai5zdHlsZS5mb250U2l6ZSA9IGRhdGEuZm9udFNpemVWYWx1ZTtcclxuXHRcdFx0b2JqLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGRhdGEuYmFja2dyb3VuZENvbG9yO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRDb21wYXJlQ29uZGl0aW9uYWwoXHJcblx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdGRhdGFcclxuXHQpIHtcclxuXHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUxKSA9PSAwKSB7XHJcblx0XHRcdHN3aXRjaCAoZGF0YS5jb21wYXJlU2VsZWN0KSB7XHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuXCI6IC8vIOWwj+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJMZXNzVGhhbk9yRXF1YWxUb1wiOiAvLyDlsI/kuo7nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5cIjogLy8g5aSn5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuT3JFcXVhbFRvXCI6IC8vIOWkp+S6juetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkdyZWF0ZXJUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEVxdWFsc1wiOiAvLyDkuI3nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQmV0d2VlblwiOiAvLyB2YWx1ZTE8PSB2YWwgPD12YWx1ZTJcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSA9PT0gMSkge1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5jb21wYXJlVmFsdWUyXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEJldHdlZW5cIjogLy8gdmFsID49IHZhbHVlMiwgdmFsIDw9IHZhbHVlMVxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpID09PSAxKSB7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTEpID09PSAxKSB7XHJcblx0XHRcdHN3aXRjaCAoZGF0YS5jb21wYXJlU2VsZWN0KSB7XHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuXCI6IC8vIOWwj+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJMZXNzVGhhbk9yRXF1YWxUb1wiOiAvLyDlsI/kuo7nrYnkuo5cclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBOdW1iZXIoZGF0YS5jb21wYXJlVmFsdWUxKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJMZXNzVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuXCI6IC8vIOWkp+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhbk9yRXF1YWxUb1wiOiAvLyDlpKfkuo7nrYnkuo5cclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IE51bWJlcihkYXRhLmNvbXBhcmVWYWx1ZTEpO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiRXF1YWxzXCI6IC8vIOetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJFcXVhbHNcIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90RXF1YWxzXCI6IC8vIOS4jeetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihkYXRhLmNvbXBhcmVWYWx1ZTEpO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0Ly8gcHVzaOi/m+aVsOe7hFxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0Ly8gcHVzaOi/m+aVsOe7hFxyXG5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkJldHdlZW5cIjogLy8gdmFsdWUxPD0gdmFsIDw9dmFsdWUyXHJcblx0XHRcdFx0XHRpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMikgPT09IDEpIHtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5jb21wYXJlVmFsdWUyXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEJldHdlZW5cIjogLy8gdmFsID49IHZhbHVlMiwgdmFsIDw9IHZhbHVlMVxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpID09PSAxKSB7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0Ly8gcHVzaOi/m+aVsOe7hFxyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMSkgPT09IC0xKSB7XHJcblx0XHRcdHN3aXRjaCAoZGF0YS5jb21wYXJlU2VsZWN0KSB7XHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuXCI6IC8vIOWwj+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJMZXNzVGhhbk9yRXF1YWxUb1wiOiAvLyDlsI/kuo7nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IGRhdGEuY29tcGFyZVNlbGVjdDtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhblwiOiAvLyDlpKfkuo5cclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5PckVxdWFsVG9cIjogLy8g5aSn5LqO562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5PckVxdWFsVG9cIjtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkVxdWFsc1wiOiAvLyDnrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiRXF1YWxzXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEVxdWFsc1wiOiAvLyDkuI3nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTm90RXF1YWxzXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQmV0d2VlblwiOiAvLyB2YWx1ZTE8PSB2YWwgPD12YWx1ZTJcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSkge1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMjtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUyO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJOb3RCZXR3ZWVuXCI6IC8vIHZhbCA+PSB2YWx1ZTIsIHZhbCA8PSB2YWx1ZTFcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSkge1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTI7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkdyZWF0ZXJUaGFuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBkYXRhLmNvbXBhcmVWYWx1ZTI7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJOb3RCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldFF1YXJ0ZXJWYWx1ZShmb3JtYXQsIGRhdGUsIHF1YXJ0ZXIpIHtcclxuXHRcdGxldCB5ZWFyOiBhbnk7XHJcblx0XHRzd2l0Y2ggKGZvcm1hdCkge1xyXG5cdFx0XHRjYXNlIFwiUTEgMjAyMVwiOlxyXG5cdFx0XHRcdHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcblx0XHRcdFx0cmV0dXJuIFwiUVwiICsgcXVhcnRlciArIFwiIFwiICsgeWVhcjtcclxuXHRcdFx0Y2FzZSBcIlExIDIxXCI6XHJcblx0XHRcdFx0eWVhciA9IChkYXRlIGFzIGFueSkuZ2V0WWVhcigpIC0gMTAwO1xyXG5cdFx0XHRcdHJldHVybiBcIlFcIiArIHF1YXJ0ZXIgKyBcIiBcIiArIHllYXI7XHJcblx0XHRcdGNhc2UgXCIyMDIxIFExXCI6XHJcblx0XHRcdFx0eWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuXHRcdFx0XHRyZXR1cm4geWVhciArIFwiIFwiICsgXCJRXCIgKyBxdWFydGVyO1xyXG5cdFx0XHRjYXNlIFwiMjEgUTFcIjpcclxuXHRcdFx0XHR5ZWFyID0gKGRhdGUgYXMgYW55KS5nZXRZZWFyKCkgLSAxMDA7XHJcblx0XHRcdFx0cmV0dXJuIHllYXIgKyBcIiBcIiArIFwiUVwiICsgcXVhcnRlcjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGN1c3RvbWlzZUNlbGwoYXJnczogUXVlcnlDZWxsSW5mb0V2ZW50QXJncykge1xyXG5cdFx0aWYgKGFyZ3MuY29sdW1uLnR5cGUgPT09IFwiZGF0ZVwiIHx8IGFyZ3MuY29sdW1uLnR5cGUgPT09IFwiZGF0ZVRpbWVcIikge1xyXG5cdFx0XHRjb25zdCB7IGZpZWxkIH0gPSBhcmdzLmNvbHVtbjtcclxuXHRcdFx0aWYgKCFhcmdzLmRhdGFbZmllbGRdKSB7XHJcblx0XHRcdFx0YXJncy5jb2x1bW4udHlwZSA9IFwic3RyaW5nXCI7XHJcblx0XHRcdFx0YXJncy5jb2x1bW4uZm9ybWF0ID0gXCJcIjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIHRpbWVBcnJheSDmlbDnu4Tlr7nosaEgW3tcImRhdGVcIjpcIjIwMjEtMDEtMDFcIn0se1wiZGF0ZVwiOlwiMjAyMS0wMi0wMVwifV1cclxuXHQgKiBAcGFyYW0gZW5kRGF0ZSDmiKroh7Pml7bpl7RcclxuXHQgKiBAcGFyYW0gaW50ZXJ2YWwg5pe26Ze06Ze06ZqUIHllYXIgLyBxdWFydGVyIC8gbW9udGhcclxuXHQgKiBAcGFyYW0gdGltZUtleSDml7bpl7TlrZfmrrXlkI0gZGF0ZVxyXG5cdCAqIEByZXR1cm5zIOWIkuWIhuWQjueahOaXtumXtOWIhue7hOWvueixoVxyXG5cdCAqL1xyXG5cdGdldFRpbWVSYW5nZXModGltZUFycmF5LCBlbmREYXRlLCBpbnRlcnZhbCwgdGltZUtleSkge1xyXG5cdFx0Ly8g5bCG5pe26Ze05a2X56ym5Liy6L2s5o2i5Li6IG1vbWVudCDlr7nosaFcclxuXHRcdGNvbnN0IGRhdGVzID0gdGltZUFycmF5Lm1hcCgoaXRlbSkgPT4gbW9tZW50KGl0ZW1bdGltZUtleSB8fCBcImRhdGVcIl0pKTtcclxuXHJcblx0XHQvLyDliIbpmpTnrKZcclxuXHRcdGNvbnN0IGRlbGltaXRlciA9IFwiLVwiO1xyXG5cclxuXHRcdC8vIOaJvuWIsOacgOWwj+aXtumXtOWSjOacgOWkp+aXtumXtFxyXG5cdFx0Y29uc3QgbWluRGF0ZSA9IG1vbWVudC5taW4oZGF0ZXMpO1xyXG5cdFx0Y29uc3QgbWF4RGF0ZSA9IG1vbWVudChlbmREYXRlKTtcclxuXHJcblx0XHQvLyDliJ3lp4vljJbnu5Pmnpzlr7nosaFcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdC8vIOagueaNruWFpeWPgui/m+ihjOWIkuWIhlxyXG5cdFx0aWYgKGludGVydmFsID09PSBcInllYXJcIikge1xyXG5cdFx0XHRjb25zdCBzdGFydFllYXIgPSBtaW5EYXRlLnllYXIoKTtcclxuXHRcdFx0Y29uc3QgZW5kWWVhciA9IG1heERhdGUueWVhcigpO1xyXG5cclxuXHRcdFx0Zm9yIChsZXQgeWVhciA9IHN0YXJ0WWVhcjsgeWVhciA8PSBlbmRZZWFyOyB5ZWFyKyspIHtcclxuXHRcdFx0XHRyZXN1bHRbeWVhcl0gPSBbXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZGF0ZXMuZm9yRWFjaCgoZGF0ZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCB5ZWFyID0gZGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0cmVzdWx0W3llYXJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIGlmIChpbnRlcnZhbCA9PT0gXCJxdWFydGVyXCIpIHtcclxuXHRcdFx0Ly8g5a2Y5YKo5a2j5bqm5a2X56ym5LiyXHJcblx0XHRcdGNvbnN0IHF1YXJ0ZXJzID0gW107XHJcblxyXG5cdFx0XHQvLyDpgJDkuIDpgY3ljobmr4/kuKrlraPluqZcclxuXHRcdFx0Zm9yIChcclxuXHRcdFx0XHRsZXQgY3VycmVudERhdGUgPSBtaW5EYXRlLmNsb25lKCk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuaXNTYW1lT3JCZWZvcmUobWF4RGF0ZSk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuYWRkKDMsIFwibW9udGhzXCIpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0Y29uc3QgcXVhcnRlciA9IE1hdGguY2VpbCgoY3VycmVudERhdGUubW9udGgoKSArIDEpIC8gMyk7IC8vIOiuoeeul+Wto+W6plxyXG5cdFx0XHRcdHF1YXJ0ZXJzLnB1c2goYCR7eWVhcn0ke2RlbGltaXRlcn1RJHtxdWFydGVyfWApOyAvLyDmoLzlvI/ljJblubbmt7vliqDliLDmlbDnu4RcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8g6L6T5Ye65omA5pyJ5a2j5bqmXHJcblx0XHRcdHF1YXJ0ZXJzLmZvckVhY2goKHF1YXJ0ZXIsIGluZGV4KSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0W3F1YXJ0ZXJdID0gW107XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0ZGF0ZXMuZm9yRWFjaCgoZGF0ZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCB5ZWFyID0gZGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0Y29uc3QgcXVhcnRlciA9IGRhdGUucXVhcnRlcigpOyAvLyDojrflj5blraPluqZcclxuXHRcdFx0XHRpZiAocXVhcnRlciA9PT0gMSlcclxuXHRcdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgXCJRMVwiXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHRcdGVsc2UgaWYgKHF1YXJ0ZXIgPT09IDIpXHJcblx0XHRcdFx0XHRyZXN1bHRbeWVhciArIGRlbGltaXRlciArIFwiUTJcIl0ucHVzaCh0aW1lQXJyYXlbaW5kZXhdKTtcclxuXHRcdFx0XHRlbHNlIGlmIChxdWFydGVyID09PSAzKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3llYXIgKyBkZWxpbWl0ZXIgKyBcIlEzXCJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdFx0ZWxzZSBpZiAocXVhcnRlciA9PT0gNClcclxuXHRcdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgXCJRNFwiXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0gZWxzZSBpZiAoaW50ZXJ2YWwgPT09IFwibW9udGhcIikge1xyXG5cdFx0XHQvLyDlrZjlgqjmnIjku73lrZfnrKbkuLJcclxuXHRcdFx0Y29uc3QgbW9udGhzID0gW107XHJcblxyXG5cdFx0XHQvLyDpgJDkuIDpgY3ljobmr4/kuKrmnIhcclxuXHRcdFx0Zm9yIChcclxuXHRcdFx0XHRsZXQgY3VycmVudERhdGUgPSBtaW5EYXRlLmNsb25lKCk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuaXNTYW1lT3JCZWZvcmUobWF4RGF0ZSk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuYWRkKDEsIFwibW9udGhzXCIpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdG1vbnRocy5wdXNoKGN1cnJlbnREYXRlLmZvcm1hdChgWVlZWSR7ZGVsaW1pdGVyfU1NYCkpOyAvLyDmoLzlvI/ljJblubbmt7vliqDliLDmlbDnu4RcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8g6L6T5Ye65omA5pyJ5pyI5Lu9XHJcblx0XHRcdG1vbnRocy5mb3JFYWNoKChtb250aCwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRyZXN1bHRbbW9udGhdID0gW107XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0ZGF0ZXMuZm9yRWFjaCgoZGF0ZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCB5ZWFyID0gZGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0Y29uc3QgbW9udGggPSAoZGF0ZS5tb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIik7IC8vIDAtMTFcclxuXHRcdFx0XHRyZXN1bHRbeWVhciArIGRlbGltaXRlciArIG1vbnRoXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICog6K6h566X5Yeg5L2V566X5pWw5bmz5pa55pu0XHJcblx0ICogQHBhcmFtIHZhbHVlcyDmlbDnu4QgWzAsIDAsIDAuMjU3NV1cclxuXHQgKiBAcmV0dXJuc1xyXG5cdCAqL1xyXG5cdGNhbGN1bGF0ZUdyb3d0aFJhdGUodmFsdWVzKSB7XHJcblx0XHRjb25zdCBwcm9kdWN0ID0gdmFsdWVzLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyAqICgxICsgdmFsKSwgMSk7XHJcblx0XHRpZiAocHJvZHVjdCA+PSAwKSB7XHJcblx0XHRcdHJldHVybiBNYXRoLnBvdyhwcm9kdWN0LCAxIC8gdmFsdWVzLmxlbmd0aCkgLSAxO1xyXG5cdFx0fSBlbHNlIGlmIChwcm9kdWN0IDwgMCkge1xyXG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCAlIDIgPT0gMCkge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLm50aHJvb3QocHJvZHVjdCwgdmFsdWVzLmxlbmd0aCkgLSAxO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdG50aHJvb3QoeCwgbikge1xyXG5cdFx0bGV0IG5nID0gbiAlIDI7XHJcblx0XHRpZiAobmcgPT0gMSB8fCB4IDwgMCkgeCA9IC14O1xyXG5cdFx0dmFyIHIgPSBNYXRoLnBvdyh4LCAxIC8gbik7XHJcblx0XHRuID0gTWF0aC5wb3cociwgbik7XHJcblxyXG5cdFx0aWYgKE1hdGguYWJzKHggLSBuKSA8IDEgJiYgeCA+IDAgPT09IG4gPiAwKSByZXR1cm4gbmcgPyAtciA6IHI7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiDmoIflh4blgY/lt65cclxuXHQgKiBAcGFyYW0gdmFsdWVzIOaVsOe7hCBbMCwgMCwgLTAuNDc3NV1cclxuXHQgKiBAcmV0dXJucyAwLjI3NTY4NDc1MzUzODA0NjNcclxuXHQgKi9cclxuXHRjYWxjdWxhdGVTdGFuZGFyZERldmlhdGlvbih2YWx1ZXMpIHtcclxuXHRcdGNvbnN0IG4gPSB2YWx1ZXMubGVuZ3RoO1xyXG5cclxuXHRcdC8vIOajgOafpeaVsOaNrueCueaVsOmHj1xyXG5cdFx0aWYgKG4gPCAyKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIuiHs+WwkemcgOimgeS4pOS4quaVsOaNrueCueadpeiuoeeul+agt+acrOagh+WHhuWBj+W3rlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyDorqHnrpflnYflgLxcclxuXHRcdGNvbnN0IG1lYW4gPSB2YWx1ZXMucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICsgdmFsLCAwKSAvIG47XHJcblxyXG5cdFx0Ly8g6K6h566X5pa55beuXHJcblx0XHRjb25zdCB2YXJpYW5jZSA9XHJcblx0XHRcdHZhbHVlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyBNYXRoLnBvdyh2YWwgLSBtZWFuLCAyKSwgMCkgL1xyXG5cdFx0XHQobiAtIDEpO1xyXG5cclxuXHRcdC8vIOi/lOWbnuagh+WHhuWBj+W3rlxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCh2YXJpYW5jZSk7XHJcblx0fVxyXG59XHJcbiJdfQ==
4941
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3JhaXNlLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvZGFzaGJvYXJkL2dhZGdldC1ncm91cC9nYWRnZXQtcGl2b3QvZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ04saUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUNULHVCQUF1QixFQUN2QixNQUFNLEVBQ04sUUFBUSxHQUNSLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFTix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBR2xCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUV0QixrQkFBa0IsRUFHbEIsb0JBQW9CLEVBSXBCLG1CQUFtQixHQUduQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFDTixJQUFJLEVBQ0osWUFBWSxFQUNaLE9BQU8sR0FDUCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFDTixNQUFNLEVBQ04sY0FBYyxFQUNkLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sSUFBSSxPQUFPLEVBQ2pCLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sR0FDTixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQix1QkFBdUIsR0FDdkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FB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LEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFOztJQTY3SC9DLDJCQUFDO0NBQUEsQUExOUhELElBMDlIQztTQTM4SFksb0JBQW9COzs7SUFDaEMsdUNBQWlCOztJQUNqQix5Q0FBbUI7O0lBQ25CLHdDQUFrQjs7Ozs7SUFDbEIsMENBQStCOzs7OztJQUMvQixzQ0FBZTs7SUFDZixrREFBd0M7O0lBQ3hDLDRDQUFrQzs7Ozs7SUFDbEMsNkNBQTJCOzs7OztJQUMzQiw4Q0FBNEI7Ozs7O0lBQzVCLDhDQUF1Qjs7SUFDdkIsMkNBQW1COzs7OztJQUNuQix3Q0FDcUM7O0lBQ3JDLDRDQUM2Qzs7Ozs7SUFDN0MsMENBQXNDOzs7OztJQUN0QywyQ0FBeUI7Ozs7O0lBQ3pCLHlDQUF1Qjs7Ozs7SUFDdkIsb0NBQThCOzs7OztJQUM5Qiw0Q0FBNEI7Ozs7O0lBQzVCLDZDQUEyQzs7Ozs7SUFDM0MsNENBQXFCOzs7OztJQUVyQixzQ0FBK0I7Ozs7O0lBQy9CLDhDQUFzQzs7SUFDdEMsK0NBRUU7Ozs7O0lBQ0YsMkNBQXlCOzs7OztJQUN6Qiw0Q0FBMEI7Ozs7O0lBQzFCLDZDQVNFOztJQUNGLDRDQUVFOztJQUNGLG1EQU1FOzs7OztJQUNGLDJDQUF5Qjs7Ozs7SUFDekIsc0RBQTJDOzs7OztJQUMzQyx1REFBNEM7Ozs7O0lBQzVDLDhDQUdFOzs7OztJQUNGLDZDQUEyQjs7Ozs7SUFDM0IsNkNBQTJCOztJQUMzQiw4Q0FBc0I7O0lBQ3RCLDBDQUFtQzs7SUFDbkMsMkNBQXdCOzs7OztJQUN4QixnREFBOEI7O0lBQzlCLDJDQUFtQjs7SUF1L0NuQiw4Q0FBb0I7Ozs7O0lBcC9DbkIsdURBQXdEOzs7OztJQUN4RCxnREFBMEM7Ozs7O0lBQzFDLG1DQUE4Qjs7Ozs7SUFDOUIsbUNBQStDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRDaGFuZ2VEZXRlY3RvclJlZixcclxuXHRDb21wb25lbnQsXHJcblx0SW5wdXQsXHJcblx0T25Jbml0LFxyXG5cdFZpZXdDaGlsZCxcclxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuXHRJbmplY3QsXHJcblx0T3B0aW9uYWwsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7XHJcblx0SURhdGFPcHRpb25zLFxyXG5cdFBpdm90RmllbGRMaXN0Q29tcG9uZW50LFxyXG5cdFBpdm90Vmlld0NvbXBvbmVudCxcclxuXHRFbmdpbmVQb3B1bGF0ZWRFdmVudEFyZ3MsXHJcblx0SURhdGFTZXQsXHJcblx0VG9vbGJhclNlcnZpY2UsXHJcblx0RmllbGRMaXN0U2VydmljZSxcclxuXHROdW1iZXJGb3JtYXR0aW5nU2VydmljZSxcclxuXHRDYWxjdWxhdGVkRmllbGRTZXJ2aWNlLFxyXG5cdENhbGN1bGF0ZWRGaWVsZENyZWF0ZUV2ZW50QXJncyxcclxuXHRHcm91cGluZ0JhclNlcnZpY2UsXHJcblx0RmllbGREcm9wRXZlbnRBcmdzLFxyXG5cdElTb3J0LFxyXG5cdFZpcnR1YWxTY3JvbGxTZXJ2aWNlLFxyXG5cdElQaXZvdFZhbHVlcyxcclxuXHRJUGFnZVNldHRpbmdzLFxyXG5cdERyaWxsVGhyb3VnaEV2ZW50QXJncyxcclxuXHREcmlsbFRocm91Z2hTZXJ2aWNlLFxyXG5cdFBpdm90QWN0aW9uRmFpbHVyZUV2ZW50QXJncyxcclxuXHRRdWVyeUNlbGxJbmZvRXZlbnRBcmdzLFxyXG59IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYW5ndWxhci1waXZvdHZpZXdcIjtcclxuaW1wb3J0IHtcclxuXHRMMTBuLFxyXG5cdGVuYWJsZVJpcHBsZSxcclxuXHRCcm93c2VyLFxyXG59IGZyb20gXCJAc3luY2Z1c2lvbi9lajItYmFzZVwiO1xyXG5pbXBvcnQgeyBHcmlkU2V0dGluZ3MgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLXBpdm90dmlldy9zcmMvcGl2b3R2aWV3L21vZGVsL2dyaWRzZXR0aW5nc1wiO1xyXG5pbXBvcnQge1xyXG5cdHNvcnRCeSxcclxuXHRkaWZmZXJlbmNlV2l0aCxcclxuXHRzdGFydHNXaXRoLFxyXG5cdGNsb25lRGVlcCxcclxuXHR1bmlxQnksXHJcblx0ZmlsdGVyIGFzIF9maWx0ZXIsXHJcblx0bWF4QnksXHJcblx0bWluQnksXHJcblx0c3VtQnksXHJcblx0bWVhbkJ5LFxyXG59IGZyb20gXCJsb2Rhc2hcIjtcclxuaW1wb3J0IHsgRGFzaGJvYXJkU2VydmljZSB9IGZyb20gXCIuLi8uLi9kYXNoYm9hcmQuc2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG5cdEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdEFMTF9BR0dSRUdBVEVfVFlQRVMsXHJcblx0RGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UsXHJcbn0gZnJvbSBcIi4uLy4uL2Rhc2hib2FyZFBvcmxldHMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBNYXNrZWRUZXh0Qm94IH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1pbnB1dHMvc3JjL21hc2tlZHRleHRib3gvbWFza2VkdGV4dGJveFwiO1xyXG5pbXBvcnQgeyBEYXRhTWFuYWdlciB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItZGF0YS9zcmMvbWFuYWdlclwiO1xyXG5pbXBvcnQgeyBQcmVkaWNhdGUsIFF1ZXJ5IH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1kYXRhL3NyYy9xdWVyeVwiO1xyXG5pbXBvcnQgeyBEYXRhVXRpbCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItZGF0YVwiO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHsgUEJGX1RPS0VOIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2UvSW5qZWN0aW9uVG9rZW5cIjtcclxuaW1wb3J0IHsgZ2V0VHJhbnNsYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvdXRpbHNcIjtcclxuXHJcbmVuYWJsZVJpcHBsZShmYWxzZSk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogXCJycy1nYWRnZXQtcGl2b3RcIixcclxuXHR0ZW1wbGF0ZVVybDogXCIuL2dhZGdldC1waXZvdC5jb21wb25lbnQuaHRtbFwiLFxyXG5cdHN0eWxlVXJsczogW1wiLi9nYWRnZXQtcGl2b3QuY29tcG9uZW50LnNjc3NcIl0sXHJcblx0cHJvdmlkZXJzOiBbXHJcblx0XHRUb29sYmFyU2VydmljZSxcclxuXHRcdEZpZWxkTGlzdFNlcnZpY2UsXHJcblx0XHROdW1iZXJGb3JtYXR0aW5nU2VydmljZSxcclxuXHRcdENhbGN1bGF0ZWRGaWVsZFNlcnZpY2UsXHJcblx0XHRHcm91cGluZ0JhclNlcnZpY2UsXHJcblx0XHRWaXJ0dWFsU2Nyb2xsU2VydmljZSxcclxuXHRcdERyaWxsVGhyb3VnaFNlcnZpY2UsXHJcblx0XSxcclxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdhZGdldFBpdm90Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHRASW5wdXQoKSBwb3J0bGV0O1xyXG5cdEBJbnB1dCgpIGRhc2hib2FyZDtcclxuXHRASW5wdXQoKSBwb3J0bGV0cztcclxuXHRwcml2YXRlIFBpdm90X0RhdGE6IElEYXRhU2V0W107XHJcblx0cHJpdmF0ZSBjb25maWc7XHJcblx0cHVibGljIGRhdGFTb3VyY2VTZXR0aW5nczogSURhdGFPcHRpb25zO1xyXG5cdHB1YmxpYyBncmlkU2V0dGluZ3M6IEdyaWRTZXR0aW5ncztcclxuXHRwcml2YXRlIGV4Y2x1ZGVGaWVsZHMgPSBbXTtcclxuXHRwcml2YXRlIGZpbHRlclNldHRpbmdzID0gW107XHJcblx0cHJpdmF0ZSBkYXRlUGlwZUZvcm1hdDtcclxuXHRwdWJsaWMgdHJhbnNsYXRpb247XHJcblx0QFZpZXdDaGlsZChcInBpdm90dmlld1wiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuXHRwcml2YXRlIHBpdm90T2JqOiBQaXZvdFZpZXdDb21wb25lbnQ7XHJcblx0QFZpZXdDaGlsZChcInBpdm90ZmllbGRsaXN0XCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG5cdHB1YmxpYyBmaWVsZGxpc3RPYmo6IFBpdm90RmllbGRMaXN0Q29tcG9uZW50O1xyXG5cdHByaXZhdGUgb2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKCk7XHJcblx0cHJpdmF0ZSBncmFuZFRvdGFscyA9IHt9O1xyXG5cdHByaXZhdGUgc3ViVG90YWxzID0ge307XHJcblx0cHJpdmF0ZSBmbGFnOiBib29sZWFuID0gZmFsc2U7XHJcblx0cHJpdmF0ZSBwcmV2aW91c1NvcnQ6IElTb3J0O1xyXG5cdHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHRwcml2YXRlIGFsbERhdGFWYWx1ZTtcclxuXHQvLyBwcml2YXRlIGNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzO1xyXG5cdHByaXZhdGUgaXNJbml0OiBib29sZWFuID0gdHJ1ZTtcclxuXHRwcml2YXRlIHBpdm90U2VhcmNoQm94OiBNYXNrZWRUZXh0Qm94O1xyXG5cdHB1YmxpYyB0b29sdGlwU2V0dGluZ3MgPSB7XHJcblx0XHRlbmFibGU6IGZhbHNlLFxyXG5cdH07XHJcblx0cHJpdmF0ZSBjb2x1bW5UZXh0cyA9IFtdO1xyXG5cdHByaXZhdGUgY29uZmlnRmllbGRzID0gW107XHJcblx0cHJpdmF0ZSBxdWFydGVyRm9ybWF0ID0gW1xyXG5cdFx0eyB2YWx1ZTogXCIwMy8yMDIxXCIsIGZvcm1hdDogXCJNTS95eXl5XCIgfSxcclxuXHRcdHsgdmFsdWU6IFwiMDMvMjFcIiwgZm9ybWF0OiBcIk1NL2RkXCIgfSxcclxuXHRcdHsgdmFsdWU6IFwiMy8yMDIxXCIsIGZvcm1hdDogXCJNL3l5eXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCIzLzIxXCIsIGZvcm1hdDogXCJNL3l5XCIgfSxcclxuXHRcdHsgdmFsdWU6IFwiTWFyY2ggMjAyMVwiLCBmb3JtYXQ6IFwiTU1NTSB5eXl5XCIgfSxcclxuXHRcdHsgdmFsdWU6IFwiTWFyLCAyMDIxXCIsIGZvcm1hdDogXCJNTU0sIHl5eXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCJNYXJjaCwgMjAyMVwiLCBmb3JtYXQ6IFwiTU1NTSwgeXl5eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIjIwMjFcIiwgZm9ybWF0OiBcInl5eXlcIiB9LFxyXG5cdF07XHJcblx0em9vbVNldHRpbmdzID0ge1xyXG5cdFx0ZW5hYmxlOiBmYWxzZSxcclxuXHR9O1xyXG5cdGl0ZW1EYXRhVHlwZVNvcnRBcnIgPSBbXHJcblx0XHRcIkFzc2V0c1wiLFxyXG5cdFx0XCJMaWFiaWxpdGllc1wiLFxyXG5cdFx0XCJFcXVpdHlcIixcclxuXHRcdFwiUCZMXCIsXHJcblx0XHRcIkNhc2hmbG93XCIsXHJcblx0XTtcclxuXHRwcml2YXRlIGZvcm1hdERhdGVzID0gW107XHJcblx0cHJpdmF0ZSBjdXN0b21DYWxjdWxhdGVkRmllbGRzOiBhbnlbXSA9IFtdOyAvLyDoh6rlrprkuYnorqHnrpfliJdcclxuXHRwcml2YXRlIGFsbG93ZWRDYWxjdWxhdGVkRmllbGRzOiBhbnlbXSA9IFtdOyAvLyDlhYHorrjoh6rlrprkuYnnrpfms5XnmoTlrZfmrrVcclxuXHRwcml2YXRlIHplcm9Gb3JtYXREYXRhID0ge1xyXG5cdFx0ZW1wdHlMaXN0OiBbXSxcclxuXHRcdGhnTGlzdDogW10sXHJcblx0fTtcclxuXHRwcml2YXRlIG1pbGxpb25GaWVsZHMgPSBbXTtcclxuXHRwcml2YXRlIHRlbXBTdWJ0b3RhbHMgPSBbXTtcclxuXHRwdWJsaWMgb3JkZXJCeUNvbHVtbnM7IC8vIEVnOiBcIkR1ZURhdGUsIFNlcXVlbmNlXCJcclxuXHRwdWJsaWMgaXNBcHBseUlSUjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHB1YmxpYyBjYWxjSVJSRGF0YTogYW55O1xyXG5cdHByaXZhdGUgcGVyY2VudE51bUZpZWxkcyA9IFtdO1xyXG5cdHB1YmxpYyBwYWdlTG9hZGluZztcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIGRhc2hib2FyZFBvcmxldHNTZXJ2aWNlOiBEYXNoYm9hcmRQb3JsZXRzU2VydmljZSxcclxuXHRcdHByaXZhdGUgZGFzaGJvYXJkU2VydmljZTogRGFzaGJvYXJkU2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuXHRcdEBPcHRpb25hbCgpIEBJbmplY3QoUEJGX1RPS0VOKSBwcml2YXRlIHBiZjogYW55LFxyXG5cclxuXHQpIHt9XHJcblxyXG5cdG5nT25Jbml0KCkge1xyXG5cdFx0dGhpcy5nZXRJbmZvKCk7XHJcblx0XHRMMTBuLmxvYWQoe1xyXG5cdFx0XHRcImVuLVVTXCI6IHtcclxuXHRcdFx0XHRwaXZvdHZpZXc6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHRcdHBpdm90ZmllbGRsaXN0OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0fSxcclxuXHRcdFx0emg6IHtcclxuXHRcdFx0XHRwaXZvdHZpZXc6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHRcdHBpdm90ZmllbGRsaXN0OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0fSxcclxuXHRcdFx0XCJ6aC1IYW50LUhLXCI6IHtcclxuXHRcdFx0XHRwaXZvdHZpZXc6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHRcdHBpdm90ZmllbGRsaXN0OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0fSxcclxuXHRcdFx0amE6IHtcclxuXHRcdFx0XHRwaXZvdHZpZXc6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHRcdHBpdm90ZmllbGRsaXN0OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0fSxcclxuXHRcdFx0a286IHtcclxuXHRcdFx0XHRwaXZvdHZpZXc6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHRcdHBpdm90ZmllbGRsaXN0OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0fSxcclxuXHRcdFx0ZnI6IHtcclxuXHRcdFx0XHRwaXZvdHZpZXc6IEFHR1JFR0FURV9UWVBFU19URVhULFxyXG5cdFx0XHRcdHBpdm90ZmllbGRsaXN0OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5nZXREYXRhKCk7XHJcblx0fVxyXG5cclxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldGNoYW5nZVBpdm90KCkuc3Vic2NyaWJlKCh1cGRhdGVkKSA9PiB7XHJcblx0XHRcdFx0aWYgKHVwZGF0ZWQgPT09IHRoaXMucG9ydGxldC5uZXdJZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5nZXREYXRhKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldFN0YXJ0UmVmcmVzaCgpLnN1YnNjcmliZSgoZGFzaGJvYXJkSWQpID0+IHtcclxuXHRcdFx0XHRpZiAoZGFzaGJvYXJkSWQgPT09IHRoaXMuZGFzaGJvYXJkLmlkKSB7XHJcblx0XHRcdFx0XHR0aGlzLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuXHRcdFx0XHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRVcGRhdGVkKCkuc3Vic2NyaWJlKChuZXdJZCkgPT4ge1xyXG5cdFx0XHRcdGlmIChuZXdJZCA9PT0gdGhpcy5wb3J0bGV0Lm5ld0lkIHx8IG5ld0lkID09PSB0aGlzLnBvcnRsZXQuaWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0UmVmcmVzaEdhZGdldCgpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG5cdFx0XHRcdGlmICghZSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBpZCA9IGVbXCJuZXdJZFwiXTtcclxuXHRcdFx0XHRpZiAoaWQgPT09IHRoaXMucG9ydGxldC5uZXdJZCB8fCBpZCA9PT0gdGhpcy5wb3J0bGV0LmlkKSB7XHJcblx0XHRcdFx0XHR0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcblx0XHRcdFx0XHR0aGlzLmdldERhdGEoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0VGFibGVGb3JtYXQoKS5zdWJzY3JpYmUoKHVwZGF0ZWQpID0+IHtcclxuXHRcdFx0XHRpZiAodXBkYXRlZCA9PT0gdGhpcy5wb3J0bGV0Lm5ld0lkKSB7XHJcblx0XHRcdFx0XHR0aGlzLmdldERhdGEoKTtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRTZXJ2aWNlXHJcblx0XHRcdFx0LmNsZWFyRmllbGRMaXN0T2JzZXJ2YWJsZSgpXHJcblx0XHRcdFx0LnN1YnNjcmliZSgodXBkYXRlZCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHVwZGF0ZWQgPT09IHRoaXMucG9ydGxldC5uZXdJZCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5kYXRhU291cmNlID0gW107XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmZpZWxkbGlzdE9iailcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai51cGRhdGVEYXRhU291cmNlKCk7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0Ly8gdGl0bGUgY2hhbmdlXHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZVBvcnRsZXRUaXRsZSgpLnN1YnNjcmliZSgodXBkYXRlZCkgPT4ge1xyXG5cdFx0XHRcdGlmICh1cGRhdGVkKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNvbmZpZyA9IEpTT04ucGFyc2UodGhpcy5wb3J0bGV0LmNvbmZpZyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xyXG5cdH1cclxuXHJcblx0b25NZW1iZXJFZGl0b3JPcGVuKGFyZ3M6IGFueSk6IHZvaWQge1xyXG5cdFx0Ly8g5L2g5Y+v5Lul5Zyo6L+Z6YeM5qC55o2u6ZyA6KaB5L+u5pS5YXJnc+adpeiHquWumuS5iei/h+a7pOeql+WPo+eahOihjOS4ulxyXG5cdFx0Ly8gMTEyNDcg5LiT6Zeo5Li6aXRlbSBkYXRhIHR5cGXogIzorr7nva5cclxuXHRcdGlmIChhcmdzLmZpZWxkTmFtZSA9PT0gXCJBY2NvdW50VHlwZUNvZGVcIikge1xyXG5cdFx0XHRsZXQgcmVzID0gbmV3IEFycmF5KDUpLmZpbGwobnVsbCk7XHJcblx0XHRcdGNvbnN0IGZpZWxkTWVtYmVycyA9IFsuLi5hcmdzLmZpZWxkTWVtYmVyc107XHJcblxyXG5cdFx0XHRmb3IgKGxldCBpID0gZmllbGRNZW1iZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcblx0XHRcdFx0bGV0IGluZGV4ID0gLTE7XHJcblx0XHRcdFx0Y29uc3QgaXRlbSA9IHRoaXMuaXRlbURhdGFUeXBlU29ydEFyci5maW5kKChuYW1lLCBpbmQpID0+IHtcclxuXHRcdFx0XHRcdGlmIChmaWVsZE1lbWJlcnNbaV0uYWN0dWFsVGV4dCA9PT0gbmFtZSkge1xyXG5cdFx0XHRcdFx0XHRpbmRleCA9IGluZDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHJldHVybiBmaWVsZE1lbWJlcnNbaV0uYWN0dWFsVGV4dCA9PT0gbmFtZTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRpZiAoIWl0ZW0pIHtcclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBmaWxsSXRlbSA9IGZpZWxkTWVtYmVycy5zcGxpY2UoaSwgMSk7XHJcblx0XHRcdFx0cmVzW2luZGV4XSA9IGZpbGxJdGVtWzBdO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJlcyA9IHJlcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0pIHx8IFtdO1xyXG5cdFx0XHRhcmdzLmZpZWxkTWVtYmVycyA9IFsuLi5yZXMsIC4uLmZpZWxkTWVtYmVyc107XHJcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGVsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZS1tZW1iZXItZWRpdG9yLWRpYWxvZ1wiKTtcclxuXHRcdFx0XHRpZiAoZWxlKSB7XHJcblx0XHRcdFx0XHRlbGUucXVlcnlTZWxlY3RvcihcIi5lLWZpbHRlci1zb3J0XCIpLnNldEF0dHJpYnV0ZShcclxuXHRcdFx0XHRcdFx0XCJzdHlsZVwiLFxyXG5cdFx0XHRcdFx0XHRcImRpc3BsYXk6IG5vbmVcIlxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRHcmlkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLmdyaWRTZXR0aW5ncyA9IHtcclxuXHRcdFx0Y29sdW1uV2lkdGg6IDE0MCxcclxuXHRcdFx0cm93SGVpZ2h0OiA0MCxcclxuXHRcdFx0YWxsb3dTZWxlY3Rpb246IHRydWUsXHJcblx0XHRcdHNlbGVjdGlvblNldHRpbmdzOiB7XHJcblx0XHRcdFx0bW9kZTogXCJDZWxsXCIsXHJcblx0XHRcdFx0dHlwZTogXCJNdWx0aXBsZVwiLFxyXG5cdFx0XHRcdGNlbGxTZWxlY3Rpb25Nb2RlOiBcIkJveFwiLFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRjb2x1bW5SZW5kZXI6IHRoaXMub2JzZXJ2YWJsZS5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcclxuXHRcdFx0XHR0aGlzLnNldENvbHVtbnNSZW5kZXIoYXJncyk7XHJcblx0XHRcdH0pIGFzIGFueSxcclxuXHRcdFx0Ly8g5Y2H57qn5ZCOIOm7mOiupOS8muacieWvvOWHuuagt+W8j+imhueblu+8jOmcgOimgeaJi+WKqOiuvue9ruWvvOWHuuagh+mimOagt+W8j1xyXG5cdFx0XHRleGNlbEhlYWRlclF1ZXJ5Q2VsbEluZm86IHRoaXMub2JzZXJ2YWJsZS5zdWJzY3JpYmUoKGFyZ3M6IGFueSkgPT4ge1xyXG5cdFx0XHRcdC8vIGFyZ3Muc3R5bGXmmK/kuKpFeGNlbFN0eWxl57G75Z6LXHJcblx0XHRcdFx0YXJncy5zdHlsZSA9IHtcclxuXHRcdFx0XHRcdGJvbGQ6IHRydWUsIC8vIOWtl+S9k+WKoOeyl1xyXG5cdFx0XHRcdFx0dkFsaWduOiBcIkNlbnRlclwiLFxyXG5cdFx0XHRcdFx0d3JhcFRleHQ6IGZhbHNlLCAvLyDkuI3mjaLooYxcclxuXHRcdFx0XHRcdGluZGVudDogMCxcclxuXHRcdFx0XHRcdGJvcmRlcnM6IG51bGwsIC8vIOS4jemcgOimgWJvcmRlclxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH0pIGFzIGFueSxcclxuXHRcdFx0Ly8g5Y2H57qn5ZCOIOm7mOiupOS8muacieWvvOWHuuagt+W8j+imhueblu+8jOmcgOimgeaJi+WKqOiuvue9ruWvvOWHuuWGheWuueagt+W8j1xyXG5cdFx0XHRleGNlbFF1ZXJ5Q2VsbEluZm86IHRoaXMub2JzZXJ2YWJsZS5zdWJzY3JpYmUoKGFyZ3M6IGFueSkgPT4ge1xyXG5cdFx0XHRcdC8vICNmNDg2Y2ZmZiDov5nph4zovpPlh7rnmoTmmK9SR0JBIOminOiJsuagvOW8j++8jCB4bHN46YeM5LiN6ZyA6KaB6YCP5piO5bqmLOWOu+aOieWwvumDqGZmXHJcblx0XHRcdFx0aWYgKGFyZ3Muc3R5bGUgJiYgYXJncy5zdHlsZS5iYWNrQ29sb3IpIHtcclxuXHRcdFx0XHRcdGFyZ3Muc3R5bGUuYmFja0NvbG9yID0gYXJncy5zdHlsZS5iYWNrQ29sb3Iuc3Vic3RyaW5nKDAsIDcpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRsZXQgX3N0eWxlOiBhbnkgPSB7XHJcblx0XHRcdFx0XHRib2xkOiBmYWxzZSxcclxuXHRcdFx0XHRcdHdyYXBUZXh0OiBmYWxzZSxcclxuXHRcdFx0XHRcdGJvcmRlcnM6IG51bGwsXHJcblx0XHRcdFx0XHRmb250Q29sb3I6IGFyZ3Muc3R5bGUuZm9udENvbG9yLFxyXG5cdFx0XHRcdFx0YmFja0NvbG9yOiBhcmdzLnN0eWxlLmJhY2tDb2xvcixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGxldCBjb2xJbmRleCA9IGFyZ3MuY2VsbC5jb2xJbmRleDtcclxuXHRcdFx0XHRsZXQgcm93SW5kZXggPSBhcmdzLmNlbGwucm93SW5kZXg7XHJcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscykge1xyXG5cdFx0XHRcdFx0Ly8gR3JhbmRUb3RhbOS4jemcgOimgeminOiJslxyXG5cdFx0XHRcdFx0aWYgKGFyZ3MuZGF0YS5sZW5ndGggPT09IHJvd0luZGV4ICsgMSkge1xyXG5cdFx0XHRcdFx0XHRkZWxldGUgX3N0eWxlLmZvbnRDb2xvcjtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIF9zdHlsZS5iYWNrQ29sb3I7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChhcmdzLmRhdGFbcm93SW5kZXhdW2NvbEluZGV4XS5mb3JtYXR0ZWRUZXh0ID09IFwiXCIpIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRhcmdzLnN0eWxlID0gT2JqZWN0LmFzc2lnbihhcmdzLnN0eWxlLCBfc3R5bGUpO1xyXG5cdFx0XHRcdGlmIChhcmdzLnZhbHVlID09PSBcIlwiICYmIGFyZ3Muc3R5bGUubnVtYmVyRm9ybWF0KSB7XHJcblx0XHRcdFx0XHRhcmdzLnN0eWxlLm51bWJlckZvcm1hdCA9IG51bGw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh0aGlzLmZvcm1hdERhdGVzICYmIHRoaXMuZm9ybWF0RGF0ZXMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRsZXQgZGF0ZUZpZWxkcyA9IHRoaXMuZm9ybWF0RGF0ZXMubWFwKChlbCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZWwubmFtZTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLnZhbHVlICYmXHJcblx0XHRcdFx0XHRcdCgoYXJncyBhcyBhbnkpLmNlbGwuY29sSW5kZXggPT09IDBcclxuXHRcdFx0XHRcdFx0XHQ/IGRhdGVGaWVsZHMuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdChhcmdzIGFzIGFueSkuY2VsbC52YWx1ZVNvcnQuYXhpc1xyXG5cdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdDogZGF0ZUZpZWxkcy5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS5jZWxsLmFjdHVhbFRleHRcclxuXHRcdFx0XHRcdFx0XHQgICkpXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0Ly9DdXN0b21pemUgdGhlIFJvdyBoZWFkZXJzL0NvbHVtbiBoZWFkZXJzIGJhc2VkIG9uIHlvdXIgbmVlZHNcclxuXHRcdFx0XHRcdFx0bGV0IGhlYWRlcnM7XHJcblx0XHRcdFx0XHRcdGlmICgoYXJncyBhcyBhbnkpLmNlbGwuY29sSW5kZXggPT09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRoZWFkZXJzID0gKGFyZ3MgYXMgYW55KS5jZWxsLmFjdHVhbFRleHQ7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gaGVhZGVycyA9IHBpdm90VmFsdWVzW2tdW2pdLmZvcm1hdHRlZFRleHQ7XHJcblx0XHRcdFx0XHRcdFx0aGVhZGVycyA9IChhcmdzIGFzIGFueSkudmFsdWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKGhlYWRlcnMpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZGF0ZSA9IG5ldyBEYXRlKGhlYWRlcnMpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRsZXQgcXVhcnRlciA9IE1hdGguZmxvb3IoZGF0ZS5nZXRNb250aCgpIC8gMykgKyAxO1xyXG5cclxuXHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0O1xyXG5cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZvcm1hdERhdGVzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICgoYXJncyBhcyBhbnkpLmNlbGwuY29sSW5kZXggPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwubmFtZSA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChhcmdzIGFzIGFueSkuY2VsbC52YWx1ZVNvcnQuYXhpc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gZWwuZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsLm5hbWUgPT0gKGFyZ3MgYXMgYW55KS5jZWxsLmFjdHVhbFRleHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IGVsLmZvcm1hdDtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLnZhbHVlID0gdGhpcy5nZXRRdWFydGVyVmFsdWUoXHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXQsXHJcblx0XHRcdFx0XHRcdFx0XHRkYXRlLFxyXG5cdFx0XHRcdFx0XHRcdFx0cXVhcnRlclxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pIGFzIGFueSxcclxuXHRcdH0gYXMgR3JpZFNldHRpbmdzO1xyXG5cdH1cclxuXHJcblx0YmVmb3JlRXhwb3J0KGV4cG9ydERhdGEpIHtcclxuXHRcdGlmIChleHBvcnREYXRhKSB7XHJcblx0XHRcdGNvbnN0IGtleU1hcCA9IHt9O1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2VTZXR0aW5ncy5mb3JtYXRTZXR0aW5ncy5mb3JFYWNoKChkYXRhKSA9PiB7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZGF0YS5mb3JtYXQgPT09IFwiIywjIyMsLC4wOygjLCMjIywsLjApXCIgfHxcclxuXHRcdFx0XHRcdGRhdGEuZm9ybWF0ID09PSBcIiMsIyMjLCw7KCMsIyMjLCwpXCIgfHxcclxuXHRcdFx0XHRcdGRhdGEuZm9ybWF0ID09PSBcIiMsIyMjLCwuMDA7KCMsIyMjLCwuMDApXCJcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGtleU1hcFtkYXRhLm5hbWVdID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0ZXhwb3J0RGF0YS5kYXRhQ29sbGVjdGlvbnMgJiZcclxuXHRcdFx0XHRleHBvcnREYXRhLmRhdGFDb2xsZWN0aW9ucy5sZW5ndGhcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0ZXhwb3J0RGF0YS5kYXRhQ29sbGVjdGlvbnNbMF0uZm9yRWFjaCgocm93KSA9PiB7XHJcblx0XHRcdFx0XHRyb3cuZm9yRWFjaCgoY2VsbCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAoa2V5TWFwW2NlbGwuYWN0dWFsVGV4dF0pIHtcclxuXHRcdFx0XHRcdFx0XHRjZWxsLnZhbHVlID0gY2VsbC5hY3R1YWxWYWx1ZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBjZWxsLnZhbHVlID09PSBcIm9iamVjdFwiICYmXHJcblx0XHRcdFx0XHRcdFx0dHlwZW9mIGNlbGwuZm9ybWF0dGVkVGV4dCA9PT0gXCJzdHJpbmdcIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRjZWxsLnZhbHVlID0gY2VsbC5mb3JtYXR0ZWRUZXh0O1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBnZXREYXRhKCkge1xyXG5cdFx0dGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG5cdFx0bGV0IGNvbHVtbnMgPSBbXTtcclxuXHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdGxldCBmb3JtYXRTZXR0aW5ncyA9IFtdO1xyXG5cdFx0bGV0IHJvd3MgPSBbXTtcclxuXHRcdGxldCBmaWVsZE1hcHBpbmcgPSBbXTtcclxuXHRcdC8vIOa4heepumdyYW5kVG90YWxz5ZKMc3ViVG90YWxzXHJcblx0XHR0aGlzLmdyYW5kVG90YWxzID0ge307XHJcblx0XHR0aGlzLnN1YlRvdGFscyA9IHt9O1xyXG5cdFx0dGhpcy5jb25maWcgPSBKU09OLnBhcnNlKHRoaXMucG9ydGxldC5jb25maWcpO1xyXG5cdFx0dGhpcy5zZXRHcmlkU2V0dGluZ3MoKTtcclxuXHRcdGlmICh0aGlzLmNvbmZpZy5maWVsZHMpIHtcclxuXHRcdFx0aWYgKHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuYWxsRmllbGRzT2JqW3RoaXMucG9ydGxldC5pZF0pIHtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZ0ZpZWxkcyA9XHJcblx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnNldENvbmZpZ0ZpZWxkcyhcclxuXHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5hbGxGaWVsZHNPYmpbXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wb3J0bGV0LmlkXHJcblx0XHRcdFx0XHRcdF0sXHJcblx0XHRcdFx0XHRcdHRoaXMuY29uZmlnLmZpZWxkc1xyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZ0ZpZWxkcyA9IFsuLi50aGlzLmNvbmZpZy5maWVsZHNdO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5QaXZvdF9EYXRhID0gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRSZXN1bHRCeURhdGFUYWJsZShcclxuXHRcdFx0dGhpcy5wb3J0bGV0LFxyXG5cdFx0XHRmYWxzZSxcclxuXHRcdFx0ZmFsc2UsXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkLmlkXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMub3JkZXJCeUNvbHVtbnMgPSB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldE9yZGVyQnlDb2x1bW5zTmV3KFxyXG5cdFx0XHR0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSxcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5QaXZvdF9EYXRhID0gRGF0YVV0aWwucGFyc2UucGFyc2VKc29uKHRoaXMuUGl2b3RfRGF0YSk7XHJcblx0XHRpZiAodGhpcy5QaXZvdF9EYXRhICYmIHRoaXMuUGl2b3RfRGF0YS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdC8vIOenu+mZpOWIl+WQjeWSjOaVsOaNrmtleeS4jeWMuemFjeeahOmhuVxyXG5cdFx0XHR0aGlzLmdldGV4Y2x1ZGVGaWVsZHModGhpcy5jb25maWdGaWVsZHMsIHRoaXMuUGl2b3RfRGF0YVswXSk7XHJcblx0XHRcdGlmICghdGhpcy5hbGxvd2VkQ2FsY3VsYXRlZEZpZWxkcy5sZW5ndGgpIHtcclxuXHRcdFx0XHR0aGlzLmFsbG93ZWRDYWxjdWxhdGVkRmllbGRzID0gT2JqZWN0LmtleXModGhpcy5QaXZvdF9EYXRhWzBdKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIHRoaXMuY29uZmlnRmllbGRzKSB7XHJcblx0XHRcdFx0Ly8g5a2X5q615YiG57uEIGh0dHBzOi8vZWoyLnN5bmNmdXNpb24uY29tL2FuZ3VsYXIvZG9jdW1lbnRhdGlvbi9waXZvdHZpZXcvZmllbGQtbGlzdD9zZWFyY2g9ZmllbGRNYXBwaW5nI2dyb3VwLWZpZWxkcy11bmRlci1kZXNpcmVkLWZvbGRlci1uYW1lXHJcblx0XHRcdFx0ZmllbGRNYXBwaW5nLnB1c2goe1xyXG5cdFx0XHRcdFx0bmFtZTogaXRlbS5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0Y2FwdGlvbjogaXRlbS5hZGR0aW9uTmFtZVxyXG5cdFx0XHRcdFx0XHQ/IGAke2l0ZW0ubGFuZ1ZhbHVlfSAke2l0ZW0uYWRkdGlvbk5hbWV9YFxyXG5cdFx0XHRcdFx0XHQ6IGl0ZW0ubGFuZ1ZhbHVlXHJcblx0XHRcdFx0XHRcdD8gaXRlbS5sYW5nVmFsdWVcclxuXHRcdFx0XHRcdFx0OiB0aGlzLnRyYW5zbGF0aW9uW2l0ZW0ubGFuZ0NvZGVdIHx8IGl0ZW0ubGFuZ0NvZGUsXHJcblxyXG5cdFx0XHRcdFx0ZGF0YVR5cGU6IGl0ZW0uZGF0YVR5cGUsXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmNvbmZpZ0ZpZWxkcykge1xyXG5cdFx0XHR0aGlzLnBlcmNlbnROdW1GaWVsZHMgPSBbXTtcclxuXHRcdFx0dGhpcy5mb3JtYXREYXRlcyA9IFtdO1xyXG5cdFx0XHR0aGlzLnplcm9Gb3JtYXREYXRhLmhnTGlzdCA9IFtdO1xyXG5cdFx0XHR0aGlzLnplcm9Gb3JtYXREYXRhLmVtcHR5TGlzdCA9IFtdO1xyXG5cdFx0XHR0aGlzLm1pbGxpb25GaWVsZHMgPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWdGaWVsZHMubWFwKChlbCkgPT4ge1xyXG5cdFx0XHRcdC8vIFNNUDItMjQ4NiAmIHBlcmNlbnROdW3nmoRmb3JtYXTpl67pophcclxuXHRcdFx0XHRpZiAoZWwuZGF0YVR5cGUgPT0gXCJwZXJjZW50TnVtXCIpIHtcclxuXHRcdFx0XHRcdHRoaXMucGVyY2VudE51bUZpZWxkcy5wdXNoKGVsLmNvbE5hbWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkICYmXHJcblx0XHRcdFx0XHRbMiwgNSwgOCwgMTEsIDE0LCAxN10uaW5jbHVkZXMoZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0KVxyXG5cdFx0XHRcdClcclxuXHRcdFx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuaGdMaXN0LnB1c2goZWwuY29sTmFtZSk7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRlbC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCAmJlxyXG5cdFx0XHRcdFx0WzMsIDYsIDksIDEyLCAxNSwgMThdLmluY2x1ZGVzKGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdClcclxuXHRcdFx0XHQpXHJcblx0XHRcdFx0XHR0aGlzLnplcm9Gb3JtYXREYXRhLmVtcHR5TGlzdC5wdXNoKGVsLmNvbE5hbWUpO1xyXG5cdFx0XHRcdC8vICBwaXZvdFRhYmxlZm9ybWF0UGVyY2VudCDnmb7liIbmr5TkuZ/mnIkxMCwxMSwxMiDkvYbmmK/lroPmmK/mmL7npLowLjAweOeahOagvOW8j++8jOaJgOS7peW+l+aOkumZpFxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmRhdGFUeXBlICE9PSBcInBlcmNlbnRcIiAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRlbC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCAmJlxyXG5cdFx0XHRcdFx0WzEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMThdLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHQpXHJcblx0XHRcdFx0XHR0aGlzLm1pbGxpb25GaWVsZHMucHVzaChlbC5jb2xOYW1lKTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRlbC5kYXRhVHlwZSA9PT0gXCJudW1iZXJcIiAmJlxyXG5cdFx0XHRcdFx0KCFlbC5mb3JtYXQgfHxcclxuXHRcdFx0XHRcdFx0KGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQhZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQpKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0bmFtZTogZWwuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0Ly9TTVAyLTMwMjYgYW5kIFNNUDItMzA1OVxyXG5cdFx0XHRcdFx0XHRmb3JtYXQ6XHJcblx0XHRcdFx0XHRcdFx0ZWwuY29sTmFtZSAhPT0gXCJQb3J0SW52U3RrXCIgJiZcclxuXHRcdFx0XHRcdFx0XHRlbC5jb2xOYW1lICE9PSBcIlBvcnRGZEludlN0a1wiXHJcblx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmRwXHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogXCIjIzAuIyMjIyMjIzBcIixcclxuXHRcdFx0XHRcdFx0dXNlR3JvdXBpbmc6IHRydWUsXHJcblx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdChlbC5kYXRhVHlwZSA9PT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdFx0ZWwuZGF0YVR5cGUgPT09IFwicGVyY2VudE51bVwiKSAmJlxyXG5cdFx0XHRcdFx0KCFlbC5mb3JtYXQgfHxcclxuXHRcdFx0XHRcdFx0KGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQhZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQpKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0bmFtZTogZWwuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0Zm9ybWF0OiB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0ZWwuZHBcclxuXHRcdFx0XHRcdFx0KSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5wdXNoKGZvcm1hdERhdGEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRlbC5kYXRhVHlwZSA9PT0gXCJtdWx0aXBsZVwiICYmXHJcblx0XHRcdFx0XHQoIWVsLmZvcm1hdCB8fFxyXG5cdFx0XHRcdFx0XHQoZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCFlbC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCkpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtYXQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0TXVsdGlwbGUoXHJcblx0XHRcdFx0XHRcdFx0ZWwuZHBcclxuXHRcdFx0XHRcdFx0KSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5wdXNoKGZvcm1hdERhdGEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoZWwuZGF0YVR5cGUgPT09IFwiZGF0ZXRpbWVcIiB8fCBlbC5kYXRhVHlwZSA9PT0gXCJkYXRlXCIpIHtcclxuXHRcdFx0XHRcdGxldCBmb3JtYXQgPSBcIlwiO1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRlbC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGlmIChlbC5mb3JtYXRbMF0uZGF0ZVR5cGUgPT0gXCJRdWFydGVyXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0XyA9IGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXk7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZvcm1hdEluZm8gPSB0aGlzLnF1YXJ0ZXJGb3JtYXQuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0KHF1cikgPT4gcXVyLnZhbHVlID09IGZvcm1hdF9cclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChmb3JtYXRJbmZvLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gZm9ybWF0SW5mb1swXS5mb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IGVsLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdDogZm9ybWF0XyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJkYXRlXCIsXHJcblx0XHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5mb3JtYXREYXRlcy5wdXNoKGZvcm1hdERhdGEpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChlbC5mb3JtYXRbMF0uZGF0ZVR5cGUgPT0gXCJEYXRlXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZnJvbUlkeCA9XHJcblx0XHRcdFx0XHRcdFx0XHRlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5LmluZGV4T2YoXCIoXCIpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCB0b0lkeCA9XHJcblx0XHRcdFx0XHRcdFx0XHRlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5LmluZGV4T2YoXCIpXCIpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmb3JtYXRfID1cclxuXHRcdFx0XHRcdFx0XHRcdGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuc2xpY2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZyb21JZHggKyAxLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0b0lkeFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGZvcm1hdF8pIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJERC9NTS9ZWVlZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiZGQvTU0veXl5eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJERC9NTS9ZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcImRkL01NL3l5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIk1NL0REL1lZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJNTS9kZC95eXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIk1NL0REL1lZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiTU0vZGQveXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiWVlZWS1NTS1ERFwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcInl5eXktTU0tZGRcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiWVktTU0tRERcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJ5eS1NTS1kZFwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJERC1NTS1ZWVlZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiZGQtTU0teXl5eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJERC1NTS1ZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcImRkLU1NLXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIk1NLURELVlZWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJNTS1kZC15eXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIk1NLURELVlZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiTU0tZGQteXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiTU1NIERELCBZWVlZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiTU1NIGRkLCB5eXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIkRELU1NTS1ZWVlZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiZGQtTU1NLXl5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICghZm9ybWF0KSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdFx0bmFtZTogZWwuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXQ6IHRoaXMuZGF0ZVBpcGVGb3JtYXQsXHJcblx0XHRcdFx0XHRcdFx0dHlwZTogXCJkYXRlXCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0RGF0YSk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdG5hbWU6IGVsLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdFx0Zm9ybWF0OiBmb3JtYXQsXHJcblx0XHRcdFx0XHRcdFx0dHlwZTogXCJkYXRlXCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5wdXNoKGZvcm1hdERhdGEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHQvL2NhbGN1bGF0ZWRGaWVsZFNldHRpbmdzIGZvcm1hdCBwdXNoIHRvIGZvcm1hdFNldHRpbmdzXHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzICYmXHJcblx0XHRcdHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzLmxlbmd0aCA+IDBcclxuXHRcdCkge1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0aWYgKGVsLmZvcm1hdFN0cmluZyAhPT0gXCJcIikge1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IGZvcm1hdFNldHRpbmdzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcblx0XHRcdFx0XHRcdGlmIChmb3JtYXRTZXR0aW5nc1tpXS5uYW1lID09PSBlbC5uYW1lKSB7XHJcblx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3Muc3BsaWNlKGksIDEpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5wdXNoKHtcclxuXHRcdFx0XHRcdFx0bmFtZTogZWwubmFtZSxcclxuXHRcdFx0XHRcdFx0Zm9ybWF0OiBlbC5mb3JtYXRTdHJpbmcsXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHNlcmllcyA9IHRoaXMuY29uZmlnLnlheGlzLnNlcmllcztcclxuXHRcdGlmIChzZXJpZXMpIHtcclxuXHRcdFx0Zm9yIChsZXQgaXRlbSBvZiBzZXJpZXMpIHtcclxuXHRcdFx0XHRjb25zdCB2YWx1ZSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGl0ZW0uY29sTmFtZSxcclxuXHRcdFx0XHRcdGNhcHRpb246IHRoaXMuZ2V0Q2FwdGlvbkJ5TmFtZShpdGVtLmNvbE5hbWUpIHx8IGl0ZW0udGl0bGUsXHJcblx0XHRcdFx0XHR0eXBlOiBpdGVtLmNhbE1ldGhvZCxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHZhbHVlcy5wdXNoKHZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0bGV0IGdyb3VwcyA9IHRoaXMuY29uZmlnLnhheGlzLmdyb3VwcztcclxuXHRcdGlmIChncm91cHMpIHtcclxuXHRcdFx0Zm9yIChsZXQgZ2l0ZW0gb2YgZ3JvdXBzKSB7XHJcblx0XHRcdFx0Y29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGdpdGVtLm5hbWVcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChmaWVsZC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRnaXRlbS5zaG93U3ViVG90YWxzID0gZmllbGRbMF0uc2hvd1N1YlRvdGFscztcclxuXHRcdFx0XHRcdGdpdGVtLmNhcHRpb24gPVxyXG5cdFx0XHRcdFx0XHRmaWVsZFswXS5sYW5nVmFsdWUgfHxcclxuXHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGlvbltmaWVsZFswXS5sYW5nQ29kZV0gfHxcclxuXHRcdFx0XHRcdFx0Z2l0ZW0uY2FwdGlvbiB8fFxyXG5cdFx0XHRcdFx0XHRmaWVsZFswXS5sYW5nQ29kZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cm93cy5wdXNoKGdpdGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuY29uZmlnLmNvbHVtbkdyb3VwICYmIHRoaXMuY29uZmlnLmNvbHVtbkdyb3VwLmxlbmd0aCkge1xyXG5cdFx0XHRmb3IgKGxldCBpdGVtIG9mIHRoaXMuY29uZmlnLmNvbHVtbkdyb3VwKSB7XHJcblx0XHRcdFx0Y29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGl0ZW0ubmFtZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKGZpZWxkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdGl0ZW0uc2hvd1N1YlRvdGFscyA9IGZpZWxkWzBdLnNob3dTdWJUb3RhbHM7XHJcblx0XHRcdFx0XHRpdGVtLmNhcHRpb24gPVxyXG5cdFx0XHRcdFx0XHRmaWVsZFswXS5sYW5nVmFsdWUgfHxcclxuXHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGlvbltmaWVsZFswXS5sYW5nQ29kZV0gfHxcclxuXHRcdFx0XHRcdFx0ZmllbGRbMF0ubGFuZ0NvZGUgfHxcclxuXHRcdFx0XHRcdFx0aXRlbS5jYXB0aW9uO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb2x1bW5zLnB1c2goaXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGxldCBjb25kaXRpb25hbEZvcm1hdFNldHRpbmdzID0gW107XHJcblx0XHR0aGlzLmNvbmZpZ0ZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cdFx0XHRpZiAoZmllbGQuZm9ybWF0ICYmIGZpZWxkLmZvcm1hdC5sZW5ndGgpIHtcclxuXHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0WzBdLmZvbnRTZXR0aW5nQ2hlY2tlZCkge1xyXG5cdFx0XHRcdFx0bGV0IGNvbmRpdGlvbmFsRm9ybWF0T2JqID0ge1xyXG5cdFx0XHRcdFx0XHRhcHBseUdyYW5kVG90YWxzOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRtZWFzdXJlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTE6IG51bGwsXHJcblx0XHRcdFx0XHRcdHZhbHVlMjogbnVsbCxcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uczogXCJcIixcclxuXHRcdFx0XHRcdFx0c3R5bGU6IHtcclxuXHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0Y29sb3I6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0Zm9udEZhbWlseTogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRmb250U2l6ZTogXCJcIixcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRsZXQgbmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqID0ge1xyXG5cdFx0XHRcdFx0XHRhcHBseUdyYW5kVG90YWxzOiB0cnVlLFxyXG5cdFx0XHRcdFx0XHRtZWFzdXJlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTE6IG51bGwsXHJcblx0XHRcdFx0XHRcdHZhbHVlMjogbnVsbCxcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uczogXCJcIixcclxuXHRcdFx0XHRcdFx0c3R5bGU6IHtcclxuXHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0Y29sb3I6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0Zm9udEZhbWlseTogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRmb250U2l6ZTogXCJcIixcclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHQvLyBmb250IHNldHRpbmcgc3RhcnRcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5tZWFzdXJlID1cclxuXHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRmllbGQ7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5tZWFzdXJlID1cclxuXHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRmllbGQ7XHJcblxyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCAmJlxyXG5cdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uY29tcGFyZVNlbGVjdFxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Q29tcGFyZUNvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF1cclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGRlbGV0ZSBjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTI7XHJcblx0XHRcdFx0XHRcdGRlbGV0ZSBuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkdyZWF0ZXJUaGFuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0sXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRTZXR0aW5ncy5wdXNoKG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaik7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdFNldHRpbmdzLnVuc2hpZnQoY29uZGl0aW9uYWxGb3JtYXRPYmopO1xyXG5cdFx0XHRcdFx0Ly8gZm9udCBzZXR0aW5nIGVuZFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRsZXQgZm9ybWF0U2V0dGluZ3NPYmogPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBcIlwiLFxyXG5cdFx0XHRcdFx0Zm9ybWF0OiBcIlwiLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0aWYgKGZpZWxkLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkKSB7XHJcblx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5uYW1lID0gZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRmllbGQ7XHJcblx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRzd2l0Y2ggKGZpZWxkLmZvcm1hdFswXS5kYXRhVHlwZSkge1xyXG5cdFx0XHRcdFx0XHRjYXNlIFwibnVtYmVyXCI6XHJcblx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0ID1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlIFwiaW50ZWdlclwiOlxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRJbnRlZ2VyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJwZXJjZW50TnVtXCI6XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJwZXJjZW50XCI6XHJcblx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0ID1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSBcIm11bHRpcGxlXCI6XHJcblx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0ID1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdE11bHRpcGxlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJkYXRlXCI6XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJkYXRldGltZVwiOlxyXG5cdFx0XHRcdFx0XHRcdGxldCBmb3JtYXQgPSBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChmaWVsZC5mb3JtYXQgJiYgZmllbGQuZm9ybWF0Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGZpZWxkLmZvcm1hdFswXS5kYXRlVHlwZSA9PSBcIlF1YXJ0ZXJcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGZpZWxkLmZvcm1hdFswXS5kYXRlVHlwZSA9PSBcIkRhdGVcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgZnJvbUlkeCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5pbmRleE9mKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCIoXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgdG9JZHggPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuaW5kZXhPZihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5LnNsaWNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnJvbUlkeCArIDEsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b0lkeFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGlmIChmb3JtYXQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiBmaWVsZC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQ6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZmllbGQuZGF0YVR5cGUgPSBcInN0cmluZ1wiO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPSB0aGlzLmRhdGVQaXBlRm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmpbXCJ0eXBlXCJdID0gXCJkYXRlXCI7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uZGF0YVR5cGUgIT09IFwic3RyaW5nXCIgJiZcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdFxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXRTZXR0aW5nc09iaik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcyA9IHRoaXMuY29uZmlnLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNcclxuXHRcdFx0PyB0aGlzLmNvbmZpZy5jdXN0b21DYWxjdWxhdGVkRmllbGRzXHJcblx0XHRcdDogW107XHJcblxyXG5cdFx0Ly8gU01QMi00NTgyIEFHSUMgLSBEYXNoYm9hcmQgaXRlbSBzZXF1ZW5jZVxyXG5cdFx0bGV0IGlzRXhpc3RTZXEgPSBmYWxzZTtcclxuXHRcdGxldCBzb3J0U2V0dGluZ3MgPSB0aGlzLmNvbmZpZy5zb3J0U2V0dGluZ3MgfHwgW107XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YSAmJlxyXG5cdFx0XHR0aGlzLlBpdm90X0RhdGFbMF0gJiZcclxuXHRcdFx0dGhpcy5QaXZvdF9EYXRhWzBdLlNlcSAhPT0gbnVsbFxyXG5cdFx0KSB7XHJcblx0XHRcdC8vIOWPlua2iE5hbWXnmoTpu5jorqTmjpLluo/vvIzmoLnmja5TZXHmnaXmjpLluo9cclxuXHRcdFx0c29ydFNldHRpbmdzLnB1c2goeyBuYW1lOiBcIk5hbWVcIiwgb3JkZXI6IFwiTm9uZVwiIH0pO1xyXG5cdFx0XHRpc0V4aXN0U2VxID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGxldCBmaWx0ZXJTZXR0aW5ncyA9IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuY2hlY2tGaWx0ZXJTZXR0aW5ncyhcclxuXHRcdFx0dGhpcy5jb25maWcsXHJcblx0XHRcdHRoaXMuY29uZmlnRmllbGRzLFxyXG5cdFx0XHR0aGlzLlBpdm90X0RhdGFcclxuXHRcdCk7XHJcblx0XHRsZXQgbmFtZUZpbHRlciA9IGZpbHRlclNldHRpbmdzLmZpbmQoKHgpID0+IHgubmFtZSA9PT0gXCJOYW1lXCIpO1xyXG5cdFx0Ly8g5a2Y5ZyoIE5hbWXnmoRmaWx0ZXLml7bvvIzkvJrmjInnhafpu5jorqTmjpLluo/vvIzpnIDopoHlr7lOYW1l6L+b6KGMU2Vx5o6S5bqP5aSE55CGXHJcblx0XHRpZiAoaXNFeGlzdFNlcSAmJiBuYW1lRmlsdGVyICYmIHJvd3Muc29tZSgoeCkgPT4geC5uYW1lID09PSBcIk5hbWVcIikpIHtcclxuXHRcdFx0bGV0IGl0ZW1zID0gbmFtZUZpbHRlci5pdGVtczsgLy8g5ou/5Yiw5b2T5YmN5o6S5bqP77yM6buY6K6kQS1aXHJcblx0XHRcdGxldCBzZXFBcnIgPSBbXTtcclxuXHRcdFx0aXRlbXMuZm9yRWFjaCgobmFtZSkgPT4ge1xyXG5cdFx0XHRcdGxldCBvYmogPSB0aGlzLlBpdm90X0RhdGEuZmluZCgoeCkgPT4geC5OYW1lID09PSBuYW1lKTtcclxuXHRcdFx0XHRsZXQgaXRlbTogYW55ID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogbmFtZSxcclxuXHRcdFx0XHRcdHNlcTogb2JqLlNlcSxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHNlcUFyci5wdXNoKGl0ZW0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0c2VxQXJyLnNvcnQoKGEsIGIpID0+IGEuc2VxIC0gYi5zZXEpO1xyXG5cdFx0XHRuYW1lRmlsdGVyLml0ZW1zID0gc2VxQXJyLm1hcCgoeCkgPT4geC5uYW1lKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBhbGxGaWVsZHMgPVxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmFsbEZpZWxkc09ialt0aGlzLnBvcnRsZXQuaWRdO1xyXG5cdFx0aWYgKGFsbEZpZWxkcykge1xyXG5cdFx0XHR2YWx1ZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcclxuXHRcdFx0XHRjb25zdCBpdGVtID0gYWxsRmllbGRzLmZpbmQoXHJcblx0XHRcdFx0XHQoZmllbGQpID0+IGZpZWxkLmNvbE5hbWUgPT09IHZhbHVlLm5hbWVcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChpdGVtKSB7XHJcblx0XHRcdFx0XHR2YWx1ZS5jYXB0aW9uID1cclxuXHRcdFx0XHRcdFx0KGl0ZW0uZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0aXRlbS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0aXRlbS5mb3JtYXRbMF0uZGlzcGxheU5hbWUpIHx8XHJcblx0XHRcdFx0XHRcdGl0ZW0ubGFuZ1ZhbHVlIHx8XHJcblx0XHRcdFx0XHRcdHRoaXMudHJhbnNsYXRpb25baXRlbS5sYW5nQ29kZV0gfHxcclxuXHRcdFx0XHRcdFx0aXRlbS5sYW5nQ29kZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGhhc0l0ZW1EYXRhVHlwZSA9IGZhbHNlO1xyXG5cdFx0aWYgKHRoaXMuUGl2b3RfRGF0YSkge1xyXG5cdFx0XHR0aGlzLlBpdm90X0RhdGEubWFwKChkYXRhKSA9PiB7XHJcblx0XHRcdFx0aWYgKGRhdGFbXCJBY2NvdW50VHlwZUNvZGVcIl0pIHtcclxuXHRcdFx0XHRcdGhhc0l0ZW1EYXRhVHlwZSA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZGF0YVtyb3cubmFtZV0gPT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdFx0ZGF0YVtyb3cubmFtZV0gPSBcIm51bGxcIjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRpZiAoaGFzSXRlbURhdGFUeXBlKSB7XHJcblx0XHRcdHNvcnRTZXR0aW5ncy5wdXNoKHtcclxuXHRcdFx0XHRuYW1lOiBcIkFjY291bnRUeXBlQ29kZVwiLFxyXG5cdFx0XHRcdG9yZGVyOiBcIkFzY2VuZGluZ1wiLFxyXG5cdFx0XHRcdG1lbWJlcnNPcmRlcjogWy4uLnRoaXMuaXRlbURhdGFUeXBlU29ydEFycl0sXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5jb25maWcuZmlsdGVycy5mb3JFYWNoKChmaWx0ZXIpID0+IHtcclxuXHRcdFx0ZmlsdGVyLmNhcHRpb24gPVxyXG5cdFx0XHRcdHRoaXMuZ2V0Q2FwdGlvbkJ5TmFtZShmaWx0ZXIubmFtZSkgfHwgZmlsdGVyLmNhcHRpb247XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzID0ge1xyXG5cdFx0XHRkYXRhU291cmNlOiB0aGlzLlBpdm90X0RhdGEgfHwgW10sXHJcblx0XHRcdHJvd3M6IHJvd3MgfHwgW10sXHJcblx0XHRcdGNvbHVtbnM6IGNvbHVtbnMgfHwgW10sXHJcblx0XHRcdHZhbHVlczogdmFsdWVzIHx8IFtdLFxyXG5cdFx0XHRmaWx0ZXJzOiB0aGlzLmNvbmZpZy5maWx0ZXJzLFxyXG5cdFx0XHRmaWx0ZXJTZXR0aW5nczogZmlsdGVyU2V0dGluZ3MsXHJcblx0XHRcdGV4Y2x1ZGVGaWVsZHM6IHRoaXMuZXhjbHVkZUZpZWxkcyxcclxuXHRcdFx0Zm9ybWF0U2V0dGluZ3M6IGZvcm1hdFNldHRpbmdzLFxyXG5cdFx0XHRjb25kaXRpb25hbEZvcm1hdFNldHRpbmdzOiBjb25kaXRpb25hbEZvcm1hdFNldHRpbmdzLFxyXG5cdFx0XHQvLyDnlKjkuo7mlLbotbflsZXlvIDmjIflrprlsYLnuqcsIOi/meeOqeaEj+WPquiDveWxleW8gOesrOS4gOWxgixcclxuXHRcdFx0Ly8g5b+F6aG76K6+5a6aZXhwYW5kQWxsIOS4umZhbHNl77yI6buY6K6k5pivZmFsc2XvvInvvIwg6L+Z5qC35a2Q5omN6IO95a6e546w5Y+q5bGV5byA5Lik5bGCXHJcblx0XHRcdC8vIGRyaWxsZWRNZW1iZXJzLFxyXG5cdFx0XHRleHBhbmRBbGw6IHRydWUsXHJcblx0XHRcdGVuYWJsZVNvcnRpbmc6IHRydWUsXHJcblx0XHRcdGZpZWxkTWFwcGluZzogZmllbGRNYXBwaW5nLFxyXG5cdFx0XHRjYWxjdWxhdGVkRmllbGRTZXR0aW5nczogdGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MsXHJcblx0XHRcdHNvcnRTZXR0aW5nczogc29ydFNldHRpbmdzLFxyXG5cdFx0XHQvLyBncm91cFNldHRpbmdzOiB0aGlzLmNvbmZpZy5ncm91cFNldHRpbmdzLFxyXG5cdFx0XHR2YWx1ZVNvcnRTZXR0aW5nczogdGhpcy5jb25maWcudmFsdWVTb3J0U2V0dGluZ3MsXHJcblx0XHRcdHNob3dHcmFuZFRvdGFsczogdGhpcy5jb25maWcuc2hvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRzaG93Um93R3JhbmRUb3RhbHM6IHRoaXMuY29uZmlnLnNob3dSb3dHcmFuZFRvdGFscyxcclxuXHRcdFx0c2hvd0NvbHVtbkdyYW5kVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93Q29sdW1uR3JhbmRUb3RhbHMsXHJcblx0XHRcdHNob3dTdWJUb3RhbHM6IHRoaXMuY29uZmlnLnNob3dTdWJUb3RhbHMsXHJcblx0XHRcdHNob3dSb3dTdWJUb3RhbHM6IHRoaXMuY29uZmlnLnNob3dSb3dTdWJUb3RhbHMsXHJcblx0XHRcdHNob3dDb2x1bW5TdWJUb3RhbHM6IHRoaXMuY29uZmlnLnNob3dDb2x1bW5TdWJUb3RhbHMsXHJcblx0XHR9O1xyXG5cdFx0Y29uc29sZS5sb2coXCJ0aGlzLmRhdGFTb3VyY2VTZXR0aW5nc1wiLCB0aGlzLmRhdGFTb3VyY2VTZXR0aW5ncyk7XHJcblxyXG5cdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0fVxyXG5cclxuXHRnZXRDYXB0aW9uQnlOYW1lKG5hbWVTdHJpbmcpIHtcclxuXHRcdGlmICghbmFtZVN0cmluZykgcmV0dXJuIFwiXCI7XHJcblx0XHRjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbmQoKGVsKSA9PiBlbC5jb2xOYW1lID09PSBuYW1lU3RyaW5nKTtcclxuXHJcblx0XHRyZXR1cm4gZmllbGRcclxuXHRcdFx0PyBmaWVsZC5sYW5nVmFsdWUgfHxcclxuXHRcdFx0XHRcdHRoaXMudHJhbnNsYXRpb25bZmllbGQgJiYgZmllbGQubGFuZ0NvZGVdIHx8XHJcblx0XHRcdFx0XHRmaWVsZC5sYW5nQ29kZVxyXG5cdFx0XHQ6IFwiXCI7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYWZ0ZXJQb3B1bGF0ZShhcmdzOiBFbmdpbmVQb3B1bGF0ZWRFdmVudEFyZ3MpOiB2b2lkIHtcclxuXHRcdHRoaXMudGVtcFN1YnRvdGFscyA9IFtdO1xyXG5cdFx0dGhpcy5ncmFuZFRvdGFscyA9IHt9O1xyXG5cdFx0dGhpcy5zdWJUb3RhbHMgPSB7fTtcclxuXHRcdGxldCB0ZW1wc2hvd0FycmF5ID0gW107XHJcblx0XHR0aGlzLmNvbmZpZy55YXhpcy5zZXJpZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0aXRlbS5oYXNPd25Qcm9wZXJ0eShcInNob3dTdWJUb3RhbHNcIikgJiZcclxuXHRcdFx0XHRpdGVtLmhhc093blByb3BlcnR5KFwic2hvd0dyYW5kVG90YWxzXCIpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHRlbXBzaG93QXJyYXkucHVzaCh7XHJcblx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRjYWxNZXRob2Q6IGl0ZW0uY2FsTWV0aG9kLFxyXG5cdFx0XHRcdFx0c2hvd1N1YlRvdGFsczogaXRlbS5zaG93U3ViVG90YWxzLFxyXG5cdFx0XHRcdFx0c2hvd0dyYW5kVG90YWxzOiBpdGVtLnNob3dHcmFuZFRvdGFscyxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eShcInNob3dHcmFuZFRvdGFsc1wiKSkge1xyXG5cdFx0XHRcdFx0dGVtcHNob3dBcnJheS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0bmFtZTogaXRlbS5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRjYWxNZXRob2Q6IGl0ZW0uY2FsTWV0aG9kLFxyXG5cdFx0XHRcdFx0XHRzaG93R3JhbmRUb3RhbHM6IGl0ZW0uc2hvd0dyYW5kVG90YWxzLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChpdGVtLmhhc093blByb3BlcnR5KFwic2hvd1N1YlRvdGFsc1wiKSkge1xyXG5cdFx0XHRcdFx0dGVtcHNob3dBcnJheS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0bmFtZTogaXRlbS5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRjYWxNZXRob2Q6IGl0ZW0uY2FsTWV0aG9kLFxyXG5cdFx0XHRcdFx0XHRzaG93U3ViVG90YWxzOiBpdGVtLnNob3dTdWJUb3RhbHMsXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdGlmICh0aGlzLmZpZWxkbGlzdE9iaiAmJiB0aGlzLnBpdm90T2JqKSB7XHJcblx0XHRcdHRoaXMuY29uZmlnLmNvbHVtbkdyb3VwID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLnhheGlzLmdyb3VwcyA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy55YXhpcy5zZXJpZXMgPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcuZmlsdGVycyA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5maWx0ZXJTZXR0aW5ncyA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncyA9IFtdO1xyXG5cdFx0XHRsZXQgZ3JvdXBTZXR0aW5ncyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcImdyb3VwU2V0dGluZ3NcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRsZXQgY29sdW1ucyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcImNvbHVtbnNcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRsZXQgcm93cyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcInJvd3NcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRsZXQgZmlsdGVycyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcImZpbHRlcnNcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRsZXQgZmlsdGVyU2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJmaWx0ZXJTZXR0aW5nc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCB2YWx1ZXMgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJ2YWx1ZXNcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRsZXQgc29ydFNldHRpbmdzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwic29ydFNldHRpbmdzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IGNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3NcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAoZ3JvdXBTZXR0aW5ncy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0XHRmb3IgKGxldCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRcdFx0dGhpcy5jb25maWcuY29sdW1uR3JvdXAucHVzaCh7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGNvbHVtbi5uYW1lLFxyXG5cdFx0XHRcdFx0XHRjYXB0aW9uOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FwdGlvbkJ5TmFtZShjb2x1bW4ubmFtZSkgfHxcclxuXHRcdFx0XHRcdFx0XHRjb2x1bW4uY2FwdGlvbixcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvL0lmIHRoZXJlIGlzIGEgZ3JvdXAsIGZpcnN0IGZpbHRlciB0aGUgY29sdW1ucyBvZiB0aGUgZ3JvdXAgZmllbGQsIGFuZCB0aGVuIG9ubHkgc2F2ZSB0aGUgbGFzdCBvbmVcclxuXHRcdFx0XHRmb3IgKGxldCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG5cdFx0XHRcdFx0aWYgKCFzdGFydHNXaXRoKGNvbHVtbi5uYW1lLCBncm91cFNldHRpbmdzWzBdLm5hbWUgKyBcIl9cIikpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5jb25maWcuY29sdW1uR3JvdXAucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0bmFtZTogY29sdW1uLm5hbWUsXHJcblx0XHRcdFx0XHRcdFx0Y2FwdGlvbjpcclxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtbi5uYW1lID09PSBncm91cFNldHRpbmdzWzBdLm5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0PyBcIlwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdDogdGhpcy5nZXRDYXB0aW9uQnlOYW1lKGNvbHVtbi5uYW1lKSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIGNvbHVtbi5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgcm93IG9mIHJvd3MpIHtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZy54YXhpcy5ncm91cHMucHVzaCh7XHJcblx0XHRcdFx0XHRuYW1lOiByb3cubmFtZSxcclxuXHRcdFx0XHRcdGNhcHRpb246IHRoaXMuZ2V0Q2FwdGlvbkJ5TmFtZShyb3cubmFtZSkgfHwgcm93LmNhcHRpb24sXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgZmlsdGVyIG9mIGZpbHRlcnMpIHtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZy5maWx0ZXJzLnB1c2goe1xyXG5cdFx0XHRcdFx0bmFtZTogZmlsdGVyLm5hbWUsXHJcblx0XHRcdFx0XHRjYXB0aW9uOlxyXG5cdFx0XHRcdFx0XHR0aGlzLmdldENhcHRpb25CeU5hbWUoZmlsdGVyLm5hbWUpIHx8IGZpbHRlci5jYXB0aW9uLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLmZpbHRlclNldHRpbmdzICYmIHRoaXMuZmlsdGVyU2V0dGluZ3MubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLmZpbHRlclNldHRpbmdzID0gdGhpcy5maWx0ZXJTZXR0aW5ncztcclxuXHRcdFx0XHR0aGlzLmNvbmZpZy5maWx0ZXJTZXR0aW5ncyA9IHRoaXMuZmlsdGVyU2V0dGluZ3M7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMuZmlsdGVyU2V0dGluZ3M7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5jb25maWcuZmlsdGVyU2V0dGluZ3MgPSBmaWx0ZXJTZXR0aW5ncztcclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcclxuXHRcdFx0XHRsZXQgc2VyaWVzRGF0YTtcclxuXHRcdFx0XHRsZXQgdGVtcFNob3dPYmo7XHJcblx0XHRcdFx0bGV0IGZpbHRlclRlbXBzaG93QXJyYXkgPSBbXTtcclxuXHRcdFx0XHRpZiAodGVtcHNob3dBcnJheS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGZpbHRlclRlbXBzaG93QXJyYXkgPSB0ZW1wc2hvd0FycmF5LmZpbHRlcihcclxuXHRcdFx0XHRcdFx0KGl0ZW0pID0+XHJcblx0XHRcdFx0XHRcdFx0aXRlbS5uYW1lID09PSB2YWx1ZS5uYW1lICYmXHJcblx0XHRcdFx0XHRcdFx0aXRlbS5jYWxNZXRob2QgPT09IHZhbHVlLnR5cGVcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRpZiAoZmlsdGVyVGVtcHNob3dBcnJheS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0dGVtcFNob3dPYmogPSBmaWx0ZXJUZW1wc2hvd0FycmF5WzBdO1xyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0dGVtcFNob3dPYmouaGFzT3duUHJvcGVydHkoXCJzaG93U3ViVG90YWxzXCIpICYmXHJcblx0XHRcdFx0XHRcdFx0dGVtcFNob3dPYmouaGFzT3duUHJvcGVydHkoXCJzaG93R3JhbmRUb3RhbHNcIilcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0c2VyaWVzRGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbE5hbWU6IHZhbHVlLm5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRjYWxNZXRob2Q6IHZhbHVlLnR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdmFsdWUuY2FwdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdHNob3dTdWJUb3RhbHM6IHRlbXBTaG93T2JqLnNob3dTdWJUb3RhbHMsXHJcblx0XHRcdFx0XHRcdFx0XHRzaG93R3JhbmRUb3RhbHM6IHRlbXBTaG93T2JqLnNob3dHcmFuZFRvdGFscyxcclxuXHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGlmICh0ZW1wU2hvd09iai5oYXNPd25Qcm9wZXJ0eShcInNob3dHcmFuZFRvdGFsc1wiKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0c2VyaWVzRGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sTmFtZTogdmFsdWUubmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiB2YWx1ZS50eXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdmFsdWUuY2FwdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0dyYW5kVG90YWxzOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRlbXBTaG93T2JqLnNob3dHcmFuZFRvdGFscyxcclxuXHRcdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGlmICh0ZW1wU2hvd09iai5oYXNPd25Qcm9wZXJ0eShcInNob3dTdWJUb3RhbHNcIikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHNlcmllc0RhdGEgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbE5hbWU6IHZhbHVlLm5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhbE1ldGhvZDogdmFsdWUudHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHZhbHVlLmNhcHRpb24sXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNob3dTdWJUb3RhbHM6IHRlbXBTaG93T2JqLnNob3dTdWJUb3RhbHMsXHJcblx0XHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoIXNlcmllc0RhdGEpIHtcclxuXHRcdFx0XHRcdHNlcmllc0RhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGNvbE5hbWU6IHZhbHVlLm5hbWUsXHJcblx0XHRcdFx0XHRcdHRpdGxlOiB2YWx1ZS5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0XHRjYWxNZXRob2Q6IHZhbHVlLnR5cGUsXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLmNvbmZpZy55YXhpcy5zZXJpZXMucHVzaChzZXJpZXNEYXRhKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKGxldCBjYWxjdWxhdGUgb2YgY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MpIHtcclxuXHRcdFx0XHRjb25zdCBjYWxjdWxhdGVEYXRhID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogY2FsY3VsYXRlLm5hbWUsXHJcblx0XHRcdFx0XHRmb3JtdWxhOiBjYWxjdWxhdGUuZm9ybXVsYSxcclxuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzpcclxuXHRcdFx0XHRcdFx0Y2FsY3VsYXRlLmZvcm1hdFN0cmluZyA9PT0gXCJcIlxyXG5cdFx0XHRcdFx0XHRcdD8gXCJOMlwiXHJcblx0XHRcdFx0XHRcdFx0OiBjYWxjdWxhdGUuZm9ybWF0U3RyaW5nLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0dGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MucHVzaChjYWxjdWxhdGVEYXRhKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmNvbmZpZy5jdXN0b21DYWxjdWxhdGVkRmllbGRzID0gdGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5zb3J0U2V0dGluZ3MgPSBzb3J0U2V0dGluZ3M7XHJcblx0XHRcdHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3MgPSBncm91cFNldHRpbmdzO1xyXG5cdFx0XHR0aGlzLmZpZWxkbGlzdE9iai51cGRhdGVWaWV3KHRoaXMucGl2b3RPYmopO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5wb3J0bGV0LmNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnKTtcclxuXHRcdC8vcmVtb3ZlIHRoZSBzb3J0XHJcblx0XHRpZiAodGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Muc29ydFNldHRpbmdzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0dGhpcy5wcmV2aW91c1NvcnQgPSB0aGlzLmZpZWxkbGlzdE9iai5sYXN0U29ydEluZm87XHJcblx0XHRcdCh0aGlzLmZpZWxkbGlzdE9iaiBhcyBhbnkpLmxhc3RTb3J0SW5mbyA9IFtdO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGFmdGVyRW5naW5lUG9wdWxhdGUoYXJnczogYW55KSB7XHJcblx0XHRpZiAoIUJyb3dzZXIuaXNEZXZpY2UgJiYgdGhpcy5maWVsZGxpc3RPYmogJiYgdGhpcy5waXZvdE9iaikge1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5ncm91cFNldHRpbmdzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmosXHJcblx0XHRcdFx0XCJncm91cFNldHRpbmdzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0dGhpcy5wb3J0bGV0LmNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnKTtcclxuXHRcdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqKSB0aGlzLmZpZWxkbGlzdE9iai51cGRhdGUodGhpcy5waXZvdE9iaik7XHJcblx0XHRcdHRoaXMucGl2b3RPYmouZ3JpZC5xdWVyeUNlbGxJbmZvID0gdGhpcy5xdWVyeUNlbGwuYmluZCh0aGlzKTtcclxuXHRcdFx0dGhpcy5waXZvdE9iai5ncmlkLmhlYWRlckNlbGxJbmZvID0gdGhpcy5oZWFkZXJDZWxsLmJpbmQodGhpcyk7XHJcblx0XHRcdC8vIFNNUDItMzkyOSByb2xsYmFja1xyXG5cdFx0XHQvLyBpZiAoIXRoaXMuaXNBcHBseUlSUilcclxuXHRcdFx0Ly8gXHR0aGlzLmdldENhbGN1bGF0aW9uUmVzdWx0QnlEYXNoYm9hcmREYXRhVGFibGVJZCgpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuUGl2b3RfRGF0YSAmJiB0aGlzLlBpdm90X0RhdGEubGVuZ3RoKSB7XHJcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuZW5naW5lUG9wdWxhdGVkKGFyZ3MpO1xyXG5cdFx0XHR9LCAxNTAwKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChvYmosIGtleSkge1xyXG5cdFx0bGV0IHByb3AgPSBudWxsO1xyXG5cdFx0aWYgKG9iaiAmJiBvYmouZGF0YVNvdXJjZVNldHRpbmdzKSB7XHJcblx0XHRcdHByb3AgPSBvYmouZGF0YVNvdXJjZVNldHRpbmdzW2tleV07XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvcCkgPT09IFwiW29iamVjdCBBcnJheV1cIiAmJlxyXG5cdFx0XHRcdHByb3AubGVuZ3RoID4gMFxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRwcm9wID0gcHJvcC5tYXAoKGl0ZW0pID0+IGl0ZW0ucHJvcGVydGllcyB8fCBpdGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHByb3A7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZW5naW5lUG9wdWxhdGluZyhhcmdzKSB7XHJcblx0XHR0aGlzLmdyYW5kVG90YWxzID0ge307XHJcblx0XHR0aGlzLnN1YlRvdGFscyA9IHt9O1xyXG5cdFx0dGhpcy5hbGxEYXRhVmFsdWUgPSBbXTtcclxuXHRcdC8vIGlmIChhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5zb3J0U2V0dGluZ3MubGVuZ3RoKSB7XHJcblx0XHQvLyBcdGZvciAoXHJcblx0XHQvLyBcdFx0bGV0IGkgPSAwO1xyXG5cdFx0Ly8gXHRcdGkgPCBhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5zb3J0U2V0dGluZ3MubGVuZ3RoO1xyXG5cdFx0Ly8gXHRcdGkrK1xyXG5cdFx0Ly8gXHQpIHtcclxuXHRcdC8vIFx0XHRpZiAoXHJcblx0XHQvLyBcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5sYXN0U29ydEluZm8gJiZcclxuXHRcdC8vIFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mby5uYW1lID09PVxyXG5cdFx0Ly8gXHRcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5zb3J0U2V0dGluZ3NbaV0ubmFtZSAmJlxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvLm9yZGVyID09PSBcIkFzY2VuZGluZ1wiICYmXHJcblx0XHQvLyBcdFx0XHQhKFxyXG5cdFx0Ly8gXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5sYXN0U29ydEluZm8ubmFtZSA9PT1cclxuXHRcdC8vIFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzU29ydC5uYW1lICYmXHJcblx0XHQvLyBcdFx0XHRcdHRoaXMucHJldmlvdXNTb3J0Lm9yZGVyID09PSBcIk5vbmVcIlxyXG5cdFx0Ly8gXHRcdFx0KVxyXG5cdFx0Ly8gXHRcdCkge1xyXG5cdFx0Ly8gXHRcdFx0YXJncy5kYXRhU291cmNlU2V0dGluZ3Muc29ydFNldHRpbmdzW2ldLm9yZGVyID0gXCJOb25lXCI7XHJcblx0XHQvLyBcdFx0fSBlbHNlIGlmIChcclxuXHRcdC8vIFx0XHRcdHRoaXMucHJldmlvdXNTb3J0ICYmXHJcblx0XHQvLyBcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5sYXN0U29ydEluZm8gJiZcclxuXHRcdC8vIFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mby5uYW1lID09PVxyXG5cdFx0Ly8gXHRcdFx0XHR0aGlzLnByZXZpb3VzU29ydC5uYW1lICYmXHJcblx0XHQvLyBcdFx0XHR0aGlzLnByZXZpb3VzU29ydC5vcmRlciA9PT0gXCJBc2NlbmRpbmdcIlxyXG5cdFx0Ly8gXHRcdCkge1xyXG5cdFx0Ly8gXHRcdFx0YXJncy5kYXRhU291cmNlU2V0dGluZ3Muc29ydFNldHRpbmdzW2ldLm9yZGVyID0gXCJBc2NlbmRpbmdcIjtcclxuXHRcdC8vIFx0XHR9XHJcblx0XHQvLyBcdH1cclxuXHRcdC8vIH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBjZWxsQ2xpY2soYXJncykge1xyXG5cdFx0aWYgKGFyZ3MuY3VycmVudENlbGwuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZS1oZWFkZXJjZWxsXCIpKSB7XHJcblx0XHRcdHRoaXMuZmxhZyA9IHRydWU7XHJcblx0XHR9XHJcblx0XHQvLyDmuIXpmaTmjpLluo9cclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVTb3J0U2V0dGluZ3Muc29ydE9yZGVyICYmXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlU29ydFNldHRpbmdzLmhlYWRlclRleHQgJiZcclxuXHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVTb3J0U2V0dGluZ3Muc29ydE9yZGVyID09PVxyXG5cdFx0XHRcdFwiRGVzY2VuZGluZ1wiICYmXHJcblx0XHRcdGFyZ3MuZGF0YS52YWx1ZVNvcnQgJiZcclxuXHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVTb3J0U2V0dGluZ3MuaGVhZGVyVGV4dCA9PT1cclxuXHRcdFx0XHRhcmdzLmRhdGEudmFsdWVTb3J0LmxldmVsTmFtZVxyXG5cdFx0KSB7XHJcblx0XHRcdHRoaXMucGl2b3RPYmouc2V0UHJvcGVydGllcyhcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRkYXRhU291cmNlU2V0dGluZ3M6IHtcclxuXHRcdFx0XHRcdFx0dmFsdWVTb3J0U2V0dGluZ3M6IHtcclxuXHRcdFx0XHRcdFx0XHRzb3J0T3JkZXI6IFwiRGVzY2VuZGluZ1wiLFxyXG5cdFx0XHRcdFx0XHRcdGhlYWRlclRleHQ6IFwiXCIsXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dHJ1ZVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHR0aGlzLmZsYWcgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5jb25maWcudmFsdWVTb3J0U2V0dGluZ3MgPSB7fTtcclxuXHRcdFx0dGhpcy5wb3J0bGV0LmNvbmZpZyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcXVlcnlDZWxsKGFyZ3M6IGFueSk6IHZvaWQge1xyXG5cdFx0KHRoaXMucGl2b3RPYmoucmVuZGVyTW9kdWxlIGFzIGFueSkucm93Q2VsbEJvdW5kRXZlbnQoYXJncyk7XHJcblx0XHRsZXQgcm93SW5kZXggPSBOdW1iZXIoYXJncy5jZWxsLmdldEF0dHJpYnV0ZShcImluZGV4XCIpKTtcclxuXHRcdC8vIOaWsOeJiOacrDI2LnjkuK0gYXJpYS1jb2xpbmRleCDkvJrmr5Tml6fniYjmnKx2MjAueCDlpJoxXHJcblx0XHRsZXQgY29sSW5kZXggPSBwYXJzZUludChhcmdzLmNlbGwuZ2V0QXR0cmlidXRlKFwiYXJpYS1jb2xpbmRleFwiKSkgLSAxO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHQhdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29uZGl0aW9uYWxGb3JtYXRTZXR0aW5ncy5sZW5ndGhcclxuXHRcdCkge1xyXG5cdFx0XHRpZiAoYXJncy5kYXRhICYmIGFyZ3MuZGF0YVswXS5mb3JtYXR0ZWRUZXh0ID09PSBcIkdyYW5kIFRvdGFsXCIpIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcImdyYW5kLWNsYXNzXCIpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFxyXG5cdFx0XHRcdFx0cm93SW5kZXggJSAyID8gXCJvZGQtY2xhc3NcIiA6IFwiZXZlbi1jbGFzc1wiXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGV0IG1lYXN1cmVBcnIgPVxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MubWFwKFxyXG5cdFx0XHRcdFx0KG9iaikgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gb2JqLm1lYXN1cmU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdG1lYXN1cmVBcnIuaW5jbHVkZXMoYXJncy5kYXRhW2NvbEluZGV4XS5hY3R1YWxUZXh0KSAmJlxyXG5cdFx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0uc3R5bGVcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0YXJncy5jZWxsLnN0eWxlLmNzc1RleHQgKz0gYGJhY2tncm91bmQtY29sb3I6ICR7YXJncy5kYXRhW2NvbEluZGV4XS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3J9ICFpbXBvcnRhbnRgO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChhcmdzLmRhdGEgJiYgYXJncy5kYXRhWzBdLmZvcm1hdHRlZFRleHQgPT09IFwiR3JhbmQgVG90YWxcIilcclxuXHRcdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcImUtY3VzdG9tY2xhc3NcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGFyZ3MuZGF0YSAmJiBhcmdzLmRhdGFbMF0uZm9ybWF0dGVkVGV4dCA9PT0gXCJHcmFuZCBUb3RhbFwiKSB7XHJcblx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwiZ3JhbmQtY2xhc3NcIik7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAocm93SW5kZXggJSAyKSB7XHJcblx0XHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJvZGQtY2xhc3NcIik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJldmVuLWNsYXNzXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9nZXQgc29ydGluZyBkYXRhXHJcblx0XHRpZiAodGhpcy5mbGFnKSB7XHJcblx0XHRcdHRoaXMuZmxhZyA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy52YWx1ZVNvcnRTZXR0aW5ncyA9XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVTb3J0U2V0dGluZ3NbXHJcblx0XHRcdFx0XHRcInByb3BlcnRpZXNcIlxyXG5cdFx0XHRcdF07XHJcblx0XHRcdHRoaXMucG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblx0XHR9XHJcblx0XHQvL2N1c3RvbWl6ZSB0aGUgaGVhZGVyIHRleHRcclxuXHRcdGlmICh0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5kYXRhICYmXHJcblx0XHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XSAmJlxyXG5cdFx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0uYXhpcyA9PT0gXCJyb3dcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwucXVlcnlTZWxlY3RvcihcIi5lLWNlbGx2YWx1ZVwiKS5pbm5lclRleHQgPVxyXG5cdFx0XHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XS5mb3JtYXR0ZWRUZXh0O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU01QMi0yOTEyIHN1YnRvdGFs5a2X5L2T5Yqg57KXXHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3MubGVuZ3RoICYmXHJcblx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0gJiZcclxuXHRcdFx0YXJncy5kYXRhWzBdLmxldmVsICE9PVxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3MubGVuZ3RoIC0gMSAmJlxyXG5cdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdLnJvd0hlYWRlcnMgIT09IFwiXCIgJiZcclxuXHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XS5heGlzID09IFwidmFsdWVcIlxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwiZS1jdXN0b21jbGFzc1wiKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaGVhZGVyQ2VsbChhcmdzOiBhbnkpOiB2b2lkIHtcclxuXHRcdCh0aGlzLnBpdm90T2JqLnJlbmRlck1vZHVsZSBhcyBhbnkpLmNvbHVtbkNlbGxCb3VuZEV2ZW50KGFyZ3MpO1xyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdGxldCBub2RlID0gYXJncy5ub2RlLnF1ZXJ5U2VsZWN0b3IoXHJcblx0XHRcdFx0XCIuZS1oZWFkZXJjZWxsZGl2IC5lLWhlYWRlcnRleHRcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAobm9kZSkgbm9kZS5pbm5lclRleHQgPSBhcmdzLmNlbGwuY29sdW1uLmhlYWRlclRleHQ7XHJcblx0XHR9XHJcblx0XHRjb25zdCB0ZXh0QWxpZ24gPSBhcmdzLmNlbGwuY29sdW1uLnRleHRBbGlnbjtcclxuXHRcdGFyZ3MuY2VsbC5jb2x1bW4uaGVhZGVyVGV4dEFsaWduID0gdGV4dEFsaWduO1xyXG5cdFx0YXJncy5ub2RlLnN0eWxlLnRleHRBbGlnbiA9IHRleHRBbGlnbiA9PT0gXCJSaWdodFwiID8gXCJyaWdodFwiIDogXCJsZWZ0XCI7IC8vIEFsaWduIHJpZ2h0IGZvciBudW1lcmljIGNvbHVtbnNcclxuXHRcdGlmICh0ZXh0QWxpZ24gPT09IFwiUmlnaHRcIikge1xyXG5cdFx0XHRhcmdzLm5vZGUuY2xhc3NMaXN0LmFkZChcImhlYWRlci1hbGlnbi1yaWdodFwiKTtcclxuXHRcdH1cclxuXHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGRhdGFCb3VuZChlKSB7XHJcblx0XHRpZiAodGhpcy5pc0luaXQpIHtcclxuXHRcdFx0dGhpcy5pc0luaXQgPSBmYWxzZTtcclxuXHRcdH1cclxuXHRcdHRoaXMuZ3JhbmRUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuc3ViVG90YWxzID0ge307XHJcblx0XHRpZiAodGhpcy5waXZvdE9iai5ncmlkKSB7XHJcblx0XHRcdHRoaXMucGl2b3RPYmouZ3JpZC5yZXNpemVTdG9wID0gdGhpcy5yZXNpemVTdG9wLmJpbmQodGhpcyk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5waXZvdE9iaikge1xyXG5cdFx0XHR2YXIgaW5kZXggPSBbXTtcclxuXHRcdFx0Ly8gR2V0IHRoZSBlbXB0eSByb3cgaGVhZGVycyBoZXJlLlxyXG5cdFx0XHR2YXIgZW1wdHlSb3dIZWFkZXI6IGFueSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcblx0XHRcdFx0J3RkW2FyaWEtbGFiZWw9XCIgY29sdW1uIGhlYWRlciBcIl0nXHJcblx0XHRcdCk7XHJcblx0XHRcdGZvciAodmFyIGVsZSBvZiBlbXB0eVJvd0hlYWRlcikge1xyXG5cdFx0XHRcdGlmIChlbGUpIHtcclxuXHRcdFx0XHRcdGluZGV4LnB1c2goZWxlLmdldEF0dHJpYnV0ZShcImluZGV4XCIpKTtcclxuXHRcdFx0XHRcdC8vIFJlbW92ZSBhbGwgdGhlIGVtcHR5IHJvdyBoZWFkZXJzIGhlcmUuXHJcblx0XHRcdFx0XHRlbGUuY2xvc2VzdChcInRyXCIpLnJlbW92ZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGluZGV4Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Ly8gR2V0IHRoZSBlbXB0eSB2YWx1ZXMgaGVyZS5cclxuXHRcdFx0XHR2YXIgZW1wdHlWYWx1ZXMgPSB0aGlzLnBpdm90T2JqLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuXHRcdFx0XHRcdGB0ZFtpbmRleD1cIiR7aW5kZXhbaV19XCJdYFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKGVtcHR5VmFsdWVzWzBdKSB7XHJcblx0XHRcdFx0XHQvLyBSZW1vdmUgYWxsIHRoZSBlbXB0eSB2YWx1ZSByb3dzIGhlcmUuXHJcblx0XHRcdFx0XHRlbXB0eVZhbHVlc1swXS5jbG9zZXN0KFwidHJcIikucmVtb3ZlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqICYmXHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLnBpdm90QnV0dG9uTW9kdWxlICYmXHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLnBpdm90QnV0dG9uTW9kdWxlLm1lbnVPcHRpb25cclxuXHRcdCkge1xyXG5cdFx0XHQoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmoucGl2b3RCdXR0b25Nb2R1bGUubWVudU9wdGlvbiBhcyBhbnlcclxuXHRcdFx0KS5zdHJpbmdBZ2dyZWdhdGVUeXBlcyA9IFtcclxuXHRcdFx0XHRcIkNvdW50XCIsXHJcblx0XHRcdFx0XCJEaXN0aW5jdENvdW50XCIsXHJcblx0XHRcdFx0XCJGaXJzdFwiLFxyXG5cdFx0XHRcdFwiTGFzdFwiLFxyXG5cdFx0XHRdO1xyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLnBpdm90QnV0dG9uTW9kdWxlICYmXHJcblx0XHRcdHRoaXMucGl2b3RPYmoucGl2b3RCdXR0b25Nb2R1bGUubWVudU9wdGlvblxyXG5cdFx0KSB7XHJcblx0XHRcdChcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLnBpdm90QnV0dG9uTW9kdWxlLm1lbnVPcHRpb24gYXMgYW55XHJcblx0XHRcdCkuc3RyaW5nQWdncmVnYXRlVHlwZXMgPSBbXHJcblx0XHRcdFx0XCJDb3VudFwiLFxyXG5cdFx0XHRcdFwiRGlzdGluY3RDb3VudFwiLFxyXG5cdFx0XHRcdFwiRmlyc3RcIixcclxuXHRcdFx0XHRcIkxhc3RcIixcclxuXHRcdFx0XTtcclxuXHRcdH1cclxuXHRcdGxldCBhbGxTdW1tYXJ5VHlwZSA9IEFMTF9BR0dSRUdBVEVfVFlQRVMgYXMgYW55O1xyXG5cdFx0dGhpcy5waXZvdE9iai5nZXRBbGxTdW1tYXJ5VHlwZSA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0cmV0dXJuIGFsbFN1bW1hcnlUeXBlO1xyXG5cdFx0fTtcclxuXHRcdGlmICh0aGlzLmZpZWxkbGlzdE9iaikge1xyXG5cdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5hZ2dyZWdhdGVUeXBlcyA9IGFsbFN1bW1hcnlUeXBlO1xyXG5cdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5nZXRBbGxTdW1tYXJ5VHlwZSA9IGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRyZXR1cm4gYWxsU3VtbWFyeVR5cGU7XHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0XHR0aGlzLnNldFZhbHVlSXRlbURhdGEoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2V0VmFsdWVJdGVtRGF0YSgpIHtcclxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRjb25zdCBmaWVsZERvbSA9IHRoaXMuZmllbGRsaXN0T2JqLmZpZWxkTGlzdFNwaW5uZXJFbGVtZW50O1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZXMuZm9yRWFjaCgodmFsdWU6IGFueSkgPT4ge1xyXG5cdFx0XHRcdGlmICh2YWx1ZS50eXBlICE9PSBcIkZpcnN0XCIgJiYgdmFsdWUudHlwZSAhPT0gXCJMYXN0XCIpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgdmFsdWVzRG9tID0gZmllbGREb20ucXVlcnlTZWxlY3RvcihcclxuXHRcdFx0XHRcdGAuZS12YWx1ZXMgLiR7dmFsdWUubmFtZX0gLmUtcHZ0LWJ0bi1jb250ZW50YFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0dmFsdWVzRG9tLmlubmVySFRNTCAhPT0gYCR7dmFsdWUudHlwZX0gb2YgJHt2YWx1ZS5jYXB0aW9ufWBcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdHZhbHVlc0RvbS5pbm5lckhUTUwgPSBgJHt2YWx1ZS50eXBlfSBvZiAke3ZhbHVlLmNhcHRpb259YDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNhbGN1bGF0ZWRDZWxsU2V0cyhhcmdzLCBjdXJGaWVsZHMpIHtcclxuXHRcdGxldCBtYXRjaEZpZWxkcyA9IGN1ckZpZWxkc1tcIm1hdGNoRmllbGRzXCJdO1xyXG5cdFx0bGV0IGZvcm11bGEgPSBjdXJGaWVsZHNbXCJmb3JtdWxhXCJdO1xyXG5cdFx0bGV0IHZhbHVlID0gMDtcclxuXHRcdGxldCByb3dzID0gdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cztcclxuXHRcdGxldCBpbnZhbGlkVHlwZXMgPSBbXCJzdHJpbmdcIiwgXCJudmFyY2hhclwiLCBcImRhdGVcIiwgXCJkYXRldGltZVwiXTtcclxuXHRcdGxldCBpc0ludmFsaWQgPSBtYXRjaEZpZWxkcy5zb21lKChmKSA9PlxyXG5cdFx0XHRpbnZhbGlkVHlwZXMuaW5jbHVkZXMoXHJcblx0XHRcdFx0dGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKChlbCkgPT4gZWwuY29sTmFtZSA9PT0gZi5tYXRjaFdvcmQpWzBdW1xyXG5cdFx0XHRcdFx0XCJkYXRhVHlwZVwiXHJcblx0XHRcdFx0XVxyXG5cdFx0XHQpXHJcblx0XHQpO1xyXG5cdFx0bGV0IGN1cnJlbnRyb3dDZWxsVHlwZSA9IGFyZ3Mucm93Q2VsbFR5cGU7XHJcblx0XHRpZiAoaXNJbnZhbGlkKSByZXR1cm4gXCItXCI7XHJcblx0XHRpZiAoXHJcblx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwic3ViVG90YWxcIiB8fFxyXG5cdFx0XHRhcmdzLnJvd0NlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIlxyXG5cdFx0KSB7XHJcblx0XHRcdGxldCBjaGlsZEhlYWRlcnMgPSBbXTtcclxuXHRcdFx0bGV0IHN1bSA9IDA7XHJcblx0XHRcdGxldCBjbG9uZUNlbGxTZXRzID0gY2xvbmVEZWVwKGFyZ3MuY2VsbFNldHMpO1xyXG5cdFx0XHRsZXQgZ3JvdXBOYW1lQXJyYXlzID0gW107XHJcblx0XHRcdGZvciAobGV0IGluZGV4ID0gYXJncy5yb3cubGV2ZWw7IGluZGV4IDwgcm93cy5sZW5ndGg7IGluZGV4KyspIHtcclxuXHRcdFx0XHRncm91cE5hbWVBcnJheXMucHVzaChyb3dzW2luZGV4XS5uYW1lKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNsb25lQ2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRcdFx0bGV0IGhlYWRlciA9IGdyb3VwTmFtZUFycmF5c1xyXG5cdFx0XHRcdFx0Lm1hcCgobmFtZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaChjbG9uZUNlbGxTZXRzW2ldW25hbWVdKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGNsb25lQ2VsbFNldHNbaV1bbmFtZV07XHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0LmpvaW4oXCItXCIpO1xyXG5cdFx0XHRcdGlmICghKGNoaWxkSGVhZGVycyBhcyBhbnkpLmluY2x1ZGVzKGhlYWRlcikpIHtcclxuXHRcdFx0XHRcdGNoaWxkSGVhZGVycy5wdXNoKGhlYWRlcik7XHJcblx0XHRcdFx0XHRsZXQgZmlsdGVyT2JqOiBhbnkgPSB7fTtcclxuXHRcdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5tYXAoXHJcblx0XHRcdFx0XHRcdChuYW1lLCBpKSA9PiAoZmlsdGVyT2JqW25hbWVdID0gdmFsdWVzW2ldKVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGFyZ3MuY2VsbFNldHMgPSBfZmlsdGVyKGNsb25lQ2VsbFNldHMsIGZpbHRlck9iaik7XHJcblx0XHRcdFx0XHRhcmdzLnJvd0NlbGxUeXBlID0gXCJ2YWx1ZVwiO1xyXG5cdFx0XHRcdFx0c3VtICs9IHRoaXMuY2FsY3VsYXRlZFZhbHVlcyhhcmdzLCBtYXRjaEZpZWxkcywgZm9ybXVsYSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPSBjdXJyZW50cm93Q2VsbFR5cGU7XHJcblxyXG5cdFx0XHQvLyDmmoLlrZjlvZPliY1TdWJUb3RhbO+8jCDnlKjkuo7mlLbnvKnml7bor7vlj5ZcclxuXHRcdFx0bGV0IHByZWZpeEhlYWRlciA9IHRoaXMuZ2V0Q2FsY0hlYWRlcihhcmdzLCBmb3JtdWxhKTtcclxuXHRcdFx0dGhpcy51cGRhdGVUZW1wU3VidG90YWxzKHByZWZpeEhlYWRlciwgc3VtKTtcclxuXHRcdFx0cmV0dXJuIHN1bTtcclxuXHRcdH0gZWxzZSBpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJ2YWx1ZVwiKSB7XHJcblx0XHRcdGlmIChhcmdzLnJvdy5oYXNDaGlsZCkge1xyXG5cdFx0XHRcdC8vIGNvbGxhcHNlIOivu+WPllN1YlRvdGFsXHJcblx0XHRcdFx0bGV0IGhlYWRlciA9IHRoaXMuZ2V0Q2FsY0hlYWRlcihhcmdzLCBmb3JtdWxhKTtcclxuXHRcdFx0XHRsZXQgaW5kZXggPSB0aGlzLnRlbXBTdWJ0b3RhbHMuZmluZEluZGV4KFxyXG5cdFx0XHRcdFx0KGl0ZW0pID0+IGl0ZW0ucm93TmFtZSA9PT0gaGVhZGVyXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoaW5kZXggPiAtMSkge1xyXG5cdFx0XHRcdFx0dmFsdWUgPSB0aGlzLnRlbXBTdWJ0b3RhbHNbaW5kZXhdLnJvd1ZhbHVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBleHBhbmRcclxuXHRcdFx0XHR2YWx1ZSA9IHRoaXMuY2FsY3VsYXRlZFZhbHVlcyhhcmdzLCBtYXRjaEZpZWxkcywgZm9ybXVsYSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGFjdGlvbkZhaWx1cmUoYXJnczogUGl2b3RBY3Rpb25GYWlsdXJlRXZlbnRBcmdzKTogdm9pZCB7XHJcblx0XHRpZiAoYXJncy5hY3Rpb25OYW1lID09IFwiRHJpbGwgZG93blwiIHx8IGFyZ3MuYWN0aW9uTmFtZSA9PSBcIkRyaWxsIHVwXCIpIHtcclxuXHRcdFx0Ly8gVHJpZ2dlcnMgd2hlbiB0aGUgY3VycmVudCBVSSBhY3Rpb24gZmFpbHMgdG8gYWNoaWV2ZSB0aGUgZGVzaXJlZCByZXN1bHQuXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldENhbGNIZWFkZXIoYXJncywgZm9ybXVsYT8pIHtcclxuXHRcdGxldCBoZWFkZXIgPSBcIlwiO1xyXG5cdFx0bGV0IHJvd3MgPSB0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzO1xyXG5cdFx0bGV0IGdyb3VwTmFtZUFycmF5cyA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFyZ3Mucm93LmxldmVsOyBpbmRleCsrKSB7XHJcblx0XHRcdGdyb3VwTmFtZUFycmF5cy5wdXNoKHJvd3NbaW5kZXhdLm5hbWUpO1xyXG5cdFx0fVxyXG5cdFx0aGVhZGVyID0gZ3JvdXBOYW1lQXJyYXlzLmxlbmd0aFxyXG5cdFx0XHQ/IGdyb3VwTmFtZUFycmF5c1xyXG5cdFx0XHRcdFx0Lm1hcCgobmFtZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gYXJncy5jZWxsU2V0c1swXVtuYW1lXTtcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHQuam9pbihcIi1cIikgK1xyXG5cdFx0XHQgIFwiLVwiICtcclxuXHRcdFx0ICBhcmdzLnJvdy5hY3R1YWxUZXh0XHJcblx0XHRcdDogYXJncy5yb3cuYWN0dWFsVGV4dDtcclxuXHRcdGlmIChmb3JtdWxhKSBoZWFkZXIgKz0gXCJfX19cIiArIGZvcm11bGE7XHJcblx0XHRyZXR1cm4gaGVhZGVyO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB1cGRhdGVUZW1wU3VidG90YWxzKHJvd05hbWUsIHJvd1ZhbHVlKSB7XHJcblx0XHRsZXQgaW5kZXggPSB0aGlzLnRlbXBTdWJ0b3RhbHMuZmluZEluZGV4KFxyXG5cdFx0XHQoaXRlbSkgPT4gaXRlbS5yb3dOYW1lID09PSByb3dOYW1lXHJcblx0XHQpO1xyXG5cdFx0bGV0IHRlbXA6IGFueSA9IHt9O1xyXG5cdFx0dGVtcC5yb3dOYW1lID0gcm93TmFtZTtcclxuXHRcdHRlbXAucm93VmFsdWUgPSByb3dWYWx1ZTtcclxuXHRcdGlmIChpbmRleCA+IC0xKSB7XHJcblx0XHRcdHRoaXMudGVtcFN1YnRvdGFscy5zcGxpY2UoaW5kZXgsIDEsIHRlbXApO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy50ZW1wU3VidG90YWxzLnB1c2godGVtcCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNhbGN1bGF0ZWRWYWx1ZXMoYXJncywgbWF0Y2hGaWVsZHMsIGZvcm11bGEpIHtcclxuXHRcdGlmIChtYXRjaEZpZWxkcy5sZW5ndGgpIHtcclxuXHRcdFx0bGV0IGNhbGN1bGVkTWF0Y2hGaWVsZHMgPSBtYXRjaEZpZWxkcy5tYXAoKGYpID0+IHtcclxuXHRcdFx0XHRzd2l0Y2ggKGYubWF0Y2hNZXRob2QpIHtcclxuXHRcdFx0XHRcdGNhc2UgXCJGaXJzdFwiOlxyXG5cdFx0XHRcdFx0Y2FzZSBcIkxhc3RcIjpcclxuXHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgPSB0aGlzLmNhbGN1bGF0ZWRGaXN0TGFzdChcclxuXHRcdFx0XHRcdFx0XHRhcmdzLFxyXG5cdFx0XHRcdFx0XHRcdGYubWF0Y2hNZXRob2QsXHJcblx0XHRcdFx0XHRcdFx0Zi5tYXRjaFdvcmRcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRjYXNlIFwiTWF4XCI6XHJcblx0XHRcdFx0XHRcdGYucmVwbGFjZVZhbHVlID0gbWF4QnkoYXJncy5jZWxsU2V0cywgKG8pID0+XHJcblx0XHRcdFx0XHRcdFx0TnVtYmVyKG9bZi5tYXRjaFdvcmRdKVxyXG5cdFx0XHRcdFx0XHQpW2YubWF0Y2hXb3JkXTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRjYXNlIFwiTWluXCI6XHJcblx0XHRcdFx0XHRcdGYucmVwbGFjZVZhbHVlID0gbWluQnkoYXJncy5jZWxsU2V0cywgKG8pID0+XHJcblx0XHRcdFx0XHRcdFx0TnVtYmVyKG9bZi5tYXRjaFdvcmRdKVxyXG5cdFx0XHRcdFx0XHQpW2YubWF0Y2hXb3JkXTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRjYXNlIFwiU3VtXCI6XHJcblx0XHRcdFx0XHRcdGYucmVwbGFjZVZhbHVlID0gc3VtQnkoYXJncy5jZWxsU2V0cywgKG8pID0+XHJcblx0XHRcdFx0XHRcdFx0TnVtYmVyKG9bZi5tYXRjaFdvcmRdKVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHQvLyBTTVAyLTQwOTQgVW5pY29ybiAtIEwzIEFkanVzdGVkIE5BViB2YWx1ZSBpc3N1ZXNcclxuXHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdGYucmVwbGFjZVZhbHVlICYmIGYucmVwbGFjZVZhbHVlLnRvRml4ZWQoMTApO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgXCJBdmdcIjpcclxuXHRcdFx0XHRcdFx0Zi5yZXBsYWNlVmFsdWUgPSBtZWFuQnkoYXJncy5jZWxsU2V0cywgKG8pID0+XHJcblx0XHRcdFx0XHRcdFx0TnVtYmVyKG9bZi5tYXRjaFdvcmRdKVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gZjtcclxuXHRcdFx0fSk7XHJcblx0XHRcdGxldCByZXN1bHRGb3JtdWxhID0gZm9ybXVsYTtcclxuXHRcdFx0aWYgKGNhbGN1bGVkTWF0Y2hGaWVsZHMubGVuZ3RoKSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjYWxjdWxlZE1hdGNoRmllbGRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRyZXN1bHRGb3JtdWxhID0gcmVzdWx0Rm9ybXVsYS5yZXBsYWNlKFxyXG5cdFx0XHRcdFx0XHRjYWxjdWxlZE1hdGNoRmllbGRzW2ldLm1hdGNoU3RyLFxyXG5cdFx0XHRcdFx0XHRcIihcIiArIGNhbGN1bGVkTWF0Y2hGaWVsZHNbaV0ucmVwbGFjZVZhbHVlICsgXCIpXCJcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0bGV0IHJlc3VsdCA9IG5ldyBGdW5jdGlvbihcclxuXHRcdFx0XHRcdFwicmV0dXJuIFwiICsgcmVzdWx0Rm9ybXVsYS5yZXBsYWNlKC9bXi08Pj86KClcXGQvKisuXS9nLCBcIlwiKVxyXG5cdFx0XHRcdCkoKTtcclxuXHRcdFx0XHRpZiAoaXNOYU4ocmVzdWx0KSB8fCAhaXNGaW5pdGUocmVzdWx0KSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIDA7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRcdHJldHVybiBOYU47XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxuXHJcblx0dG90YWxGb3JtYXR0ZWQgPSB7fTtcclxuXHRwdWJsaWMgYWdncmVnYXRlQ2VsbEluZm8oYXJncykge1xyXG5cdFx0bGV0IGFzT2ZEYXRlID0gdGhpcy5wYmYudGltZSh0aGlzLmRhc2hib2FyZC5hc09mRGF0ZSk7XHJcblx0XHQvLyBpZiBjYWxjdWxhdGVkIGZpZWxkXHJcblx0XHRpZiAoYXJncy5hZ2dyZWdhdGVUeXBlID09IFwiQ2FsY3VsYXRlZEZpZWxkXCIpIHtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRpZiAoYXJncy5maWVsZE5hbWUgPT0gdGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzW2ldLm5hbWUpIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSB0aGlzLmNhbGN1bGF0ZWRDZWxsU2V0cyhcclxuXHRcdFx0XHRcdFx0YXJncyxcclxuXHRcdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzW2ldXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChcclxuXHRcdFx0W1xyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlSVJSXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVJUlJCZWZvcmVDYXJyaWVkXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVJUlJJUlJEYXRlXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVJUlJNVERcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUlFURFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlSVJSWVREXCIsXHJcblx0XHRcdF0uaW5jbHVkZXMoYXJncy5hZ2dyZWdhdGVUeXBlKVxyXG5cdFx0KSB7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiPT09PT09PT09PT09PT09PT09PT09PT09PT1cIik7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiYXJnczpcIiwgYXJncyk7XHJcblx0XHRcdGxldCB2YWx1ZUZpZWxkO1xyXG5cdFx0XHRsZXQgZGF0ZUZpZWxkO1xyXG5cdFx0XHRsZXQgc3RhcnREYXRlO1xyXG5cdFx0XHRsZXQgZW5kRGF0ZTtcclxuXHRcdFx0c3dpdGNoIChhcmdzLmFnZ3JlZ2F0ZVR5cGUpIHtcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSXCI6XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSTVREXCI6XHJcblx0XHRcdFx0XHRzdGFydERhdGUgPSBtb21lbnQoYXNPZkRhdGUpXHJcblx0XHRcdFx0XHRcdC5zdGFydE9mKFwibW9udGhcIilcclxuXHRcdFx0XHRcdFx0LmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblx0XHRcdFx0XHRlbmREYXRlID0gbW9tZW50KGFzT2ZEYXRlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cdFx0XHRcdFx0dmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVcIjtcclxuXHRcdFx0XHRcdGRhdGVGaWVsZCA9IFwiSVJSRGF0ZVwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZUlSUlFURFwiOlxyXG5cdFx0XHRcdFx0c3RhcnREYXRlID0gbW9tZW50KGFzT2ZEYXRlKVxyXG5cdFx0XHRcdFx0XHQuc3RhcnRPZihcInF1YXJ0ZXJcIilcclxuXHRcdFx0XHRcdFx0LmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblx0XHRcdFx0XHRlbmREYXRlID0gbW9tZW50KGFzT2ZEYXRlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cdFx0XHRcdFx0dmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVcIjtcclxuXHRcdFx0XHRcdGRhdGVGaWVsZCA9IFwiSVJSRGF0ZVwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZUlSUllURFwiOlxyXG5cdFx0XHRcdFx0c3RhcnREYXRlID0gbW9tZW50KGFzT2ZEYXRlKVxyXG5cdFx0XHRcdFx0XHQuc3RhcnRPZihcInllYXJcIilcclxuXHRcdFx0XHRcdFx0LmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblx0XHRcdFx0XHRlbmREYXRlID0gbW9tZW50KGFzT2ZEYXRlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cdFx0XHRcdFx0dmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVcIjtcclxuXHRcdFx0XHRcdGRhdGVGaWVsZCA9IFwiSVJSRGF0ZVwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZUlSUklSUkRhdGVcIjpcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdFx0XHRkYXRlRmllbGQgPSBcIkNhbGN1bGF0ZUlSUkRhdGVcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJCZWZvcmVDYXJyaWVkXCI6XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZUJlZm9yZUNhcnJ5XCI7XHJcblx0XHRcdFx0XHRkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgTkFWQWRqID0gMDtcclxuXHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRsZXQgYmVmb3JlU3RhcnROQVZBZGogPSAwOyAvLyDlrZjlgqjkuIrkuIDkuKrpmLbmrrXnmoROQVZBZGrmgLvlkoxcclxuXHRcdFx0bGV0IGJlZm9yZVN0YXJ0VmFsdWVzID0gW107IC8vIOWtmOWCqOS4iuS4gOS4qumYtuauteeahOe0r+iuoembhuWQiCAo5Y+q5piv5Li65LqG5omT5Y2w77yM5rKh5pyJ5a6e6ZmF55So6YCUKVxyXG5cdFx0XHRsZXQgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0ZWwuY29sTmFtZSA9PT1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0QWdncmVnYXRlVHlwZShcclxuXHRcdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSB7XHJcblx0XHRcdFx0XHRhbW91bnQ6IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBbW91bnRcIl0sXHJcblx0XHRcdFx0XHRkYXRlOlxyXG5cdFx0XHRcdFx0XHR0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bZGF0ZUZpZWxkXSkgPT09XHJcblx0XHRcdFx0XHRcdFwiSW52YWxpZCBkYXRlXCJcclxuXHRcdFx0XHRcdFx0XHQ/IGFzT2ZEYXRlXHJcblx0XHRcdFx0XHRcdFx0OiB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bZGF0ZUZpZWxkXSksXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHQvLyBTTVAyLTE2OTIwXHJcblx0XHRcdFx0Ly8gSWYgSVJSIERhdGUgPiBEYXNoYm9hcmQgcmVwb3J0IGRhdGUgPSBUYWtlcyBhcyBvZiBkYXNoYm9hcmQgcmVwb3J0IGRhdGVcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlSVJSSVJSRGF0ZVwiICYmXHJcblx0XHRcdFx0XHRhc09mRGF0ZSA8IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtkYXRlRmllbGRdKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0ZGF0YS5kYXRlID0gYXNPZkRhdGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdE5BVkFkaiArPSBhcmdzLmNlbGxTZXRzW2ldW3ZhbHVlRmllbGRdO1xyXG5cdFx0XHRcdC8vIFNNUDItMTcyMTkgTVREIFFURCBZVEQgSVJSXHJcblx0XHRcdFx0aWYgKHN0YXJ0RGF0ZSAmJiBlbmREYXRlKSB7XHJcblx0XHRcdFx0XHRpZiAobW9tZW50KGRhdGEuZGF0ZSkuaXNCZWZvcmUoc3RhcnREYXRlKSkge1xyXG5cdFx0XHRcdFx0XHRkYXRhW3ZhbHVlRmllbGRdID0gYXJncy5jZWxsU2V0c1tpXVt2YWx1ZUZpZWxkXTtcclxuXHRcdFx0XHRcdFx0YmVmb3JlU3RhcnRWYWx1ZXMucHVzaChkYXRhKTtcclxuXHRcdFx0XHRcdFx0YmVmb3JlU3RhcnROQVZBZGogKz0gZGF0YVt2YWx1ZUZpZWxkXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0IW1vbWVudChkYXRhLmRhdGUpLmlzQmV0d2VlbihcclxuXHRcdFx0XHRcdFx0XHRzdGFydERhdGUsXHJcblx0XHRcdFx0XHRcdFx0ZW5kRGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRudWxsLFxyXG5cdFx0XHRcdFx0XHRcdFwiW11cIlxyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChkYXRhLmFtb3VudCAhPSAwKSB7XHJcblx0XHRcdFx0XHR2YWx1ZXMucHVzaChkYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKE5BVkFkaiA+IDAuMDAwMSB8fCBOQVZBZGogPCAtMC4wMDAxKSB7XHJcblx0XHRcdFx0dmFsdWVzLnB1c2goe1xyXG5cdFx0XHRcdFx0YW1vdW50OiBOQVZBZGosXHJcblx0XHRcdFx0XHRkYXRlOiBhc09mRGF0ZSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YWx1ZXMgPSBzb3J0QnkodmFsdWVzLCBcImRhdGVcIik7XHJcblx0XHRcdC8vIOWmguaenOaYr01URCxRVEQsWVREIOWImemcgOimgeaKiuW9k+WJjemYtuauteS7peWJjeeahOaJgOacieaVsOaNrui/m+ihjOaxh+aAu++8jOWKoOWFpeiuoeeul1xyXG5cdFx0XHRpZiAoc3RhcnREYXRlICYmIGVuZERhdGUpIHtcclxuXHRcdFx0XHR2YWx1ZXMudW5zaGlmdCh7XHJcblx0XHRcdFx0XHRhbW91bnQ6IC1iZWZvcmVTdGFydE5BVkFkaiwgLy8g5byA5aeL55qE5pWw5o2u6ZyA6KaB5Y+W5Y+NXHJcblx0XHRcdFx0XHRkYXRlOiB0aGlzLnBiZi50aW1lKHN0YXJ0RGF0ZSksXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJiZWZvcmVTdGFydFZhbHVlczpcIiwgYmVmb3JlU3RhcnRWYWx1ZXMpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcInZhbHVlczpcIiwgdmFsdWVzKTtcclxuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0bGV0IGd1ZXNzID0gMC4xO1xyXG5cdFx0XHRcdGNvbnN0IHN1bUFtb3VudCA9IHZhbHVlc1xyXG5cdFx0XHRcdFx0Lm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpXHJcblx0XHRcdFx0XHQucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMCk7XHJcblx0XHRcdFx0aWYgKHN1bUFtb3VudCA8IDApIHtcclxuXHRcdFx0XHRcdGd1ZXNzID0gLTAuMTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly9TTVAyLTIyNDkgZml4ZWQgdGhlIGJpZyBpcnIgaXNzdWVcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50ID09PSAwKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVJdGVtcyA9IHZhbHVlcy5zbGljZSgwLCB2YWx1ZXMubGVuZ3RoIC0gMSk7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5hbW91bnQpO1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0ZUxpc3QgPSB2YWx1ZUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRlKTtcclxuXHRcdFx0XHRcdGNvbnN0IGxhc3RJdGVtID0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdGNvbnN0IG5hdkFkanVzdCA9IGxhc3RJdGVtLmFtb3VudDtcclxuXHRcdFx0XHRcdGNvbnN0IGxhdGVzdERhdGUgPSBsYXN0SXRlbS5kYXRlO1xyXG5cdFx0XHRcdFx0bGV0IGlyciA9XHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuRXhjZWxGb3JtdWxhcy5fQ2FsY3VsYXRlWGlycihcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0ZGF0ZUxpc3QsXHJcblx0XHRcdFx0XHRcdFx0bmF2QWRqdXN0LFxyXG5cdFx0XHRcdFx0XHRcdGxhdGVzdERhdGVcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBpcnIgPT09IG51bGwgPyBcIlwiIDogaXJyO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcImFyZ3MudmFsdWU6XCIsIGFyZ3MudmFsdWUpO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUgJiZcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdO1xyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBhcmdzLmZpZWxkTmFtZSxcclxuXHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZmllbGRbMF0uZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBcIlAyXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vICBTTVAyLTE2NTIwIFRXUiDmnIgv5a2jL+W5tCAmJiBTTVAyLTE2NjgzIFZBUlxyXG5cdFx0aWYgKFxyXG5cdFx0XHRbXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVUV1JNVERcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVRXUlFURFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVFdSWVREXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJNVERfOTlcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUlFURF85OVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSWVREXzk5XCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJNVERfOTVcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUlFURF85NVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSWVREXzk1XCIsXHJcblx0XHRcdF0uaW5jbHVkZXMoYXJncy5hZ2dyZWdhdGVUeXBlKVxyXG5cdFx0KSB7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiPT09PT09PT09PT09PT09PT09PT09PT09PT1cIik7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiYXJnczpcIiwgYXJncyk7XHJcblx0XHRcdGxldCB2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRsZXQgZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdGxldCB0aW1lUmFuZ2U7XHJcblx0XHRcdHN3aXRjaCAoYXJncy5hZ2dyZWdhdGVUeXBlKSB7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVRXUk1URFwiOlxyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVWQVJNVERfOTlcIjpcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVkFSTVREXzk1XCI6XHJcblx0XHRcdFx0XHR0aW1lUmFuZ2UgPSBcIm1vbnRoXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVFdSUVREXCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUlFURF85OVwiOlxyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVWQVJRVERfOTVcIjpcclxuXHRcdFx0XHRcdHRpbWVSYW5nZSA9IFwicXVhcnRlclwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVRXUllURFwiOlxyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVWQVJZVERfOTlcIjpcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVkFSWVREXzk1XCI6XHJcblx0XHRcdFx0XHR0aW1lUmFuZ2UgPSBcInllYXJcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgdmFsdWVzID0gW107IC8vIOi/meS4qumYtuauteeahOe0r+iuoembhuWQiFxyXG5cdFx0XHRsZXQgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0ZWwuY29sTmFtZSA9PT1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0QWdncmVnYXRlVHlwZShcclxuXHRcdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IGRhdGEgPSB7XHJcblx0XHRcdFx0XHRbdmFsdWVGaWVsZF06IGFyZ3MuY2VsbFNldHNbaV1bdmFsdWVGaWVsZF0sXHJcblx0XHRcdFx0XHRkYXRlOlxyXG5cdFx0XHRcdFx0XHR0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bZGF0ZUZpZWxkXSkgPT09XHJcblx0XHRcdFx0XHRcdFwiSW52YWxpZCBkYXRlXCJcclxuXHRcdFx0XHRcdFx0XHQ/IGFzT2ZEYXRlXHJcblx0XHRcdFx0XHRcdFx0OiB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bZGF0ZUZpZWxkXSksXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaChkYXRhKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8g5aaC5p6cYXNPZkRhdGXkuI3mmK8g5pys5pyIL+Wto+W6pi/lubQg55qE5pyA5ZCO5LiA5aSp77yM6YO95piv5oiq6IezIOS4iuS4quaciC/lraPluqYv5bm0IOeahOacgOWQjuS4gOWkqeeahOaVsOaNruWOu+iuoeeul1xyXG5cdFx0XHRsZXQgX2FzT2ZEYXRlID0gbW9tZW50KGFzT2ZEYXRlKTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJfYXNPZkRhdGU6XCIsIF9hc09mRGF0ZSk7XHJcblx0XHRcdGxldCBpc0VuZE9mUGVyaW9kID0gKHVuaXQpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gKFxyXG5cdFx0XHRcdFx0X2FzT2ZEYXRlLmZvcm1hdChcIllZWVktTU0tRERcIikgPT09XHJcblx0XHRcdFx0XHRfYXNPZkRhdGUuZW5kT2YodW5pdCkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH07XHJcblx0XHRcdGxldCBlbmREYXRlID0gaXNFbmRPZlBlcmlvZCh0aW1lUmFuZ2UpXHJcblx0XHRcdFx0PyBtb21lbnQoYXNPZkRhdGUpLmZvcm1hdChcIllZWVktTU0tRERcIilcclxuXHRcdFx0XHQ6IG1vbWVudChhc09mRGF0ZSlcclxuXHRcdFx0XHRcdFx0LnN1YnRyYWN0KDEsIHRpbWVSYW5nZSlcclxuXHRcdFx0XHRcdFx0LmVuZE9mKHRpbWVSYW5nZSlcclxuXHRcdFx0XHRcdFx0LmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcblxyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcImVuZERhdGU6XCIsIGVuZERhdGUpO1xyXG5cdFx0XHR2YWx1ZXMgPSB2YWx1ZXMuZmlsdGVyKChpdGVtKSA9PlxyXG5cdFx0XHRcdG1vbWVudChpdGVtLmRhdGUpLmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpXHJcblx0XHRcdCk7XHJcblx0XHRcdHZhbHVlcyA9IHNvcnRCeSh2YWx1ZXMsIFwiZGF0ZVwiKTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJ2YWx1ZXM6XCIsIHZhbHVlcyk7XHJcblxyXG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRsZXQgcmVzdWx0ID0gdGhpcy5nZXRUaW1lUmFuZ2VzKFxyXG5cdFx0XHRcdFx0dmFsdWVzLFxyXG5cdFx0XHRcdFx0ZW5kRGF0ZSxcclxuXHRcdFx0XHRcdHRpbWVSYW5nZSxcclxuXHRcdFx0XHRcdFwiZGF0ZVwiXHJcblx0XHRcdFx0KTsgLy8g5ZCE5Liq6Zi25q6155qE5pWw5o2uXHJcblx0XHRcdFx0bGV0IHJlc3VsdFRvdGFsID0ge307IC8vIOWQhOS4qumYtuauteaAu+WSjFxyXG5cdFx0XHRcdGZvciAoY29uc3QgcHJvcCBpbiByZXN1bHQpIHtcclxuXHRcdFx0XHRcdHJlc3VsdFRvdGFsW3Byb3BdID0gcmVzdWx0W3Byb3BdLnJlZHVjZSgoYWNjLCBjdXIpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGFjYyArIChjdXJbdmFsdWVGaWVsZF0gfHwgMCk7XHJcblx0XHRcdFx0XHR9LCAwKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJyZXN1bHQ6XCIsIHJlc3VsdCk7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJyZXN1bHRUb3RhbDpcIiwgcmVzdWx0VG90YWwpO1xyXG5cclxuXHRcdFx0XHRjb25zdCBjdW11bGF0aXZlU3VtID0ge307IC8vIOWQhOS4qumYtuautee0r+iuoeWSjFxyXG5cdFx0XHRcdGxldCBzdW0gPSAwO1xyXG5cdFx0XHRcdGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlc3VsdFRvdGFsKSkge1xyXG5cdFx0XHRcdFx0c3VtICs9IHJlc3VsdFRvdGFsW2tleV07XHJcblx0XHRcdFx0XHRjdW11bGF0aXZlU3VtW2Ake2tleX1gXSA9IHN1bTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJjdW11bGF0aXZlU3VtOlwiLCBjdW11bGF0aXZlU3VtKTtcclxuXHJcblx0XHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGN1bXVsYXRpdmVTdW0pO1xyXG5cdFx0XHRcdGxldCB0d3JMaXN0ID0gW107XHJcblx0XHRcdFx0Ly8g6YGN5Y6G5q+P5Lik5Liq6Zi25q61IOiuoeeul1RXUlxyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGggLSAxOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGtleTEgPSBrZXlzW2ldO1xyXG5cdFx0XHRcdFx0Y29uc3Qga2V5MiA9IGtleXNbaSArIDFdO1xyXG5cclxuXHRcdFx0XHRcdC8vIOiuoeeul+S4pOS4qumYtuauteS5i+mXtOeahOmAkuWinumHjywg5Ye65pWw5LiN6IO95Li6MFxyXG5cdFx0XHRcdFx0aWYgKGN1bXVsYXRpdmVTdW1ba2V5MV0gIT0gMCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBpbmNyZW1lbnQgPVxyXG5cdFx0XHRcdFx0XHRcdGN1bXVsYXRpdmVTdW1ba2V5Ml0gLSBjdW11bGF0aXZlU3VtW2tleTFdO1xyXG5cdFx0XHRcdFx0XHRsZXQgdHdyID0gaW5jcmVtZW50IC8gY3VtdWxhdGl2ZVN1bVtrZXkxXTtcclxuXHRcdFx0XHRcdFx0dHdyTGlzdC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRkYXRlOiBrZXkyLFxyXG5cdFx0XHRcdFx0XHRcdHR3cjogdHdyLFxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8g6K6h566XQXZlcmFnZSBUV1JcclxuXHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcInR3ckxpc3Q6XCIsIHR3ckxpc3QpO1xyXG5cdFx0XHRcdGxldCBhdmVyYWdlVFdSID0gdGhpcy5jYWxjdWxhdGVHcm93dGhSYXRlKFxyXG5cdFx0XHRcdFx0dHdyTGlzdC5tYXAoKHgpID0+IHgudHdyKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCLorqHnrpdBdmVyYWdlIFRXUjpcIiwgYXZlcmFnZVRXUik7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0W1xyXG5cdFx0XHRcdFx0XHRcIkNhbGN1bGF0ZVRXUk1URFwiLFxyXG5cdFx0XHRcdFx0XHRcIkNhbGN1bGF0ZVRXUlFURFwiLFxyXG5cdFx0XHRcdFx0XHRcIkNhbGN1bGF0ZVRXUllURFwiLFxyXG5cdFx0XHRcdFx0XS5pbmNsdWRlcyhhcmdzLmFnZ3JlZ2F0ZVR5cGUpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHQvLyBTTVAyLTE2NTIwIFRXUiDmnIgv5a2jL+W5tFxyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdGlzTmFOKGF2ZXJhZ2VUV1IpIHx8IGF2ZXJhZ2VUV1IgPT0gbnVsbFxyXG5cdFx0XHRcdFx0XHRcdD8gXCJcIlxyXG5cdFx0XHRcdFx0XHRcdDogTnVtYmVyKGF2ZXJhZ2VUV1IpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAoaXNOYU4oYXZlcmFnZVRXUikgfHwgYXZlcmFnZVRXUiA9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Ly8gU01QMi0xNjY4MyBWQVIg5Yy65YiGOTkl5ZKMOTUlXHJcblx0XHRcdFx0XHRcdGxldCBaU2NvcmUgPSBbXHJcblx0XHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVWQVJNVERfOTlcIixcclxuXHRcdFx0XHRcdFx0XHRcIkNhbGN1bGF0ZVZBUlFURF85OVwiLFxyXG5cdFx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVkFSWVREXzk5XCIsXHJcblx0XHRcdFx0XHRcdF0uaW5jbHVkZXMoYXJncy5hZ2dyZWdhdGVUeXBlKVxyXG5cdFx0XHRcdFx0XHRcdD8gMi4zM1xyXG5cdFx0XHRcdFx0XHRcdDogMS42NTtcclxuXHRcdFx0XHRcdFx0aWYgKHR3ckxpc3QubGVuZ3RoIDwgMikge1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBTRCA9IHRoaXMuY2FsY3VsYXRlU3RhbmRhcmREZXZpYXRpb24oXHJcblx0XHRcdFx0XHRcdFx0XHR0d3JMaXN0Lm1hcCgoeCkgPT4geC50d3IpXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhcImNhbGN1bGF0ZVN0YW5kYXJkRGV2aWF0aW9uOlwiLCBTRCk7XHJcblx0XHRcdFx0XHRcdFx0bGV0IFZBUiA9IGF2ZXJhZ2VUV1IgLSBTRCAqIFpTY29yZTtcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gTnVtYmVyKFZBUik7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJhcmdzLnZhbHVlOlwiLCBhcmdzLnZhbHVlKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlICYmXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXTtcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogYXJncy5maWVsZE5hbWUsXHJcblx0XHRcdFx0XHRmb3JtYXQ6XHJcblx0XHRcdFx0XHRcdGZpZWxkLmxlbmd0aCA+IDBcclxuXHRcdFx0XHRcdFx0XHQ/IGZpZWxkWzBdLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0WzBdLmZvcm1hdENoZWNrZWRcclxuXHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZHBcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdDogXCJQMlwiLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvL1NNUDItMjcwMVxyXG5cdFx0aWYgKGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVJUlJBY3R1YWxBdWRpdGVkXCIpIHtcclxuXHRcdFx0bGV0IE5BVkFkaiA9IDA7XHJcblx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0bGV0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdGVsLmNvbE5hbWUgPT09XHJcblx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldEFnZ3JlZ2F0ZVR5cGUoXHJcblx0XHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0XHQvL1NNUDItMjcxMyBvbmx5IGp1ZGdlIGZvciB0aGlzIGRhdGFNYXJ0KEdyb3NzTmV0KVxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGUgPT09IFwiR3Jvc3NOZXRcIiB8fFxyXG5cdFx0XHRcdHRoaXMucG9ydGxldC5maWd1cmVDb2RlID09PVxyXG5cdFx0XHRcdFx0XCJDb21iaW5lZEludmVzdG1lbnRGdW5kTkNvbXBhbnlDYXNoZmxvd1wiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0YW1vdW50OiBhcmdzLmNlbGxTZXRzW2ldW1wiSVJSQW1vdW50XCJdLFxyXG5cdFx0XHRcdFx0XHRkYXRlOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtcIklSUkRhdGVcIl0pID09PVxyXG5cdFx0XHRcdFx0XHRcdFwiSW52YWxpZCBkYXRlXCJcclxuXHRcdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSksXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0TkFWQWRqICs9IGFyZ3MuY2VsbFNldHNbaV1bXCJBY3R1YWxBdWRpdGVkTkFWXCJdO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGEuYW1vdW50ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vZmlsdGVyIHRoZSBkYXRhIGJ5IHRoZSBEYXRhVHlwZShBY3R1YWwgUmVwb3J0ZWQgQXVkaXRlZClcclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0bGV0IGFyZ3NkYXRhID0gYXJncy5jZWxsU2V0cy5maWx0ZXIoXHJcblx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdGVsLkRhdGFUeXBlID09PSBcIkFDVFVBTF9BVURJVEVEXCIgfHxcclxuXHRcdFx0XHRcdFx0ZWwuRGF0YVR5cGUgPT09IFwiUkVQT1JURURcIlxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzZGF0YS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0YW1vdW50OiBhcmdzZGF0YVtpXVtcIklSUkFtb3VudFwiXSxcclxuXHRcdFx0XHRcdFx0ZGF0ZTpcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBiZi50aW1lKGFyZ3NkYXRhW2ldW1wiSVJSRGF0ZVwiXSkgPT09XHJcblx0XHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLnBiZi50aW1lKGFyZ3NkYXRhW2ldW1wiSVJSRGF0ZVwiXSksXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0TkFWQWRqICs9IGFyZ3NkYXRhW2ldW1wiSVJSQWRqVmFsdWVcIl07XHJcblx0XHRcdFx0XHRpZiAoZGF0YS5hbW91bnQgIT0gMCkge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaChkYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKE5BVkFkaiA+IDAuMDAwMSB8fCBOQVZBZGogPCAtMC4wMDAxKSB7XHJcblx0XHRcdFx0dmFsdWVzLnB1c2goe1xyXG5cdFx0XHRcdFx0YW1vdW50OiBOQVZBZGosXHJcblx0XHRcdFx0XHRkYXRlOiBhc09mRGF0ZSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YWx1ZXMgPSBzb3J0QnkodmFsdWVzLCBcImRhdGVcIik7XHJcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGxldCBndWVzcyA9IDAuMTtcclxuXHRcdFx0XHRjb25zdCBzdW1BbW91bnQgPSB2YWx1ZXNcclxuXHRcdFx0XHRcdC5tYXAoKGl0ZW0pID0+IGl0ZW0uYW1vdW50KVxyXG5cdFx0XHRcdFx0LnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIsIDApO1xyXG5cdFx0XHRcdGlmIChzdW1BbW91bnQgPCAwKSB7XHJcblx0XHRcdFx0XHRndWVzcyA9IC0wLjE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vU01QMi0yMjQ5IGZpeGVkIHRoZSBiaWcgaXJyIGlzc3VlXHJcblx0XHRcdFx0aWYgKHN1bUFtb3VudCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IDA7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlSXRlbXMgPSB2YWx1ZXMuc2xpY2UoMCwgdmFsdWVzLmxlbmd0aCAtIDEpO1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0ID0gdmFsdWVJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uYW1vdW50KTtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGVMaXN0ID0gdmFsdWVJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uZGF0ZSk7XHJcblx0XHRcdFx0XHRjb25zdCBsYXN0SXRlbSA9IHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRjb25zdCBuYXZBZGp1c3QgPSBsYXN0SXRlbS5hbW91bnQ7XHJcblx0XHRcdFx0XHRjb25zdCBsYXRlc3REYXRlID0gbGFzdEl0ZW0uZGF0ZTtcclxuXHRcdFx0XHRcdGxldCBpcnIgPVxyXG5cdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLkV4Y2VsRm9ybXVsYXMuX0NhbGN1bGF0ZVhpcnIoXHJcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0LFxyXG5cdFx0XHRcdFx0XHRcdGRhdGVMaXN0LFxyXG5cdFx0XHRcdFx0XHRcdG5hdkFkanVzdCxcclxuXHRcdFx0XHRcdFx0XHRsYXRlc3REYXRlXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXJyID09PSBudWxsID8gMCA6IGlycjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IDA7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlICYmXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXTtcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogYXJncy5maWVsZE5hbWUsXHJcblx0XHRcdFx0XHRmb3JtYXQ6XHJcblx0XHRcdFx0XHRcdGZpZWxkLmxlbmd0aCA+IDBcclxuXHRcdFx0XHRcdFx0XHQ/IGZpZWxkWzBdLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0WzBdLmZvcm1hdENoZWNrZWRcclxuXHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZHBcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdDogXCJQMlwiLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdC8vU01QMi0zNDExXHJcblx0XHRpZiAoYXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZUlSUlJlcG9ydGVkXCIpIHtcclxuXHRcdFx0bGV0IE5BVkFkaiA9IDA7XHJcblx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0bGV0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdGVsLmNvbE5hbWUgPT09XHJcblx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldEFnZ3JlZ2F0ZVR5cGUoXHJcblx0XHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGUgPT09IFwiR3Jvc3NOZXRcIiB8fFxyXG5cdFx0XHRcdHRoaXMucG9ydGxldC5maWd1cmVDb2RlID09PVxyXG5cdFx0XHRcdFx0XCJDb21iaW5lZEludmVzdG1lbnRGdW5kTkNvbXBhbnlDYXNoZmxvd1wiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0YW1vdW50OiBhcmdzLmNlbGxTZXRzW2ldW1wiSVJSQW1vdW50XCJdLFxyXG5cdFx0XHRcdFx0XHRkYXRlOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtcIklSUkRhdGVcIl0pID09PVxyXG5cdFx0XHRcdFx0XHRcdFwiSW52YWxpZCBkYXRlXCJcclxuXHRcdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSksXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0TkFWQWRqICs9IGFyZ3MuY2VsbFNldHNbaV1bXCJSZXBvcnRlZE5BVlwiXTtcclxuXHRcdFx0XHRcdGlmIChkYXRhLmFtb3VudCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGFtb3VudDogYXJncy5jZWxsU2V0c1tpXVtcIklSUkFtb3VudFwiXSxcclxuXHRcdFx0XHRcdFx0ZGF0ZTpcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSA9PT1cclxuXHRcdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ/IGFzT2ZEYXRlXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtcIklSUkRhdGVcIl0pLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdE5BVkFkaiArPSBhcmdzLmNlbGxTZXRzW2ldW1wiSVJSQWRqVmFsdWVcIl07XHJcblx0XHRcdFx0XHRpZiAoZGF0YS5hbW91bnQgIT0gMCkge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaChkYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKE5BVkFkaiA+IDAuMDAwMSB8fCBOQVZBZGogPCAtMC4wMDAxKSB7XHJcblx0XHRcdFx0dmFsdWVzLnB1c2goe1xyXG5cdFx0XHRcdFx0YW1vdW50OiBOQVZBZGosXHJcblx0XHRcdFx0XHRkYXRlOiBhc09mRGF0ZSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YWx1ZXMgPSBzb3J0QnkodmFsdWVzLCBcImRhdGVcIik7XHJcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGxldCBndWVzcyA9IDAuMTtcclxuXHRcdFx0XHRjb25zdCBzdW1BbW91bnQgPSB2YWx1ZXNcclxuXHRcdFx0XHRcdC5tYXAoKGl0ZW0pID0+IGl0ZW0uYW1vdW50KVxyXG5cdFx0XHRcdFx0LnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIsIDApO1xyXG5cdFx0XHRcdGlmIChzdW1BbW91bnQgPCAwKSB7XHJcblx0XHRcdFx0XHRndWVzcyA9IC0wLjE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vU01QMi0yMjQ5IGZpeGVkIHRoZSBiaWcgaXJyIGlzc3VlXHJcblx0XHRcdFx0aWYgKHN1bUFtb3VudCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IDA7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlSXRlbXMgPSB2YWx1ZXMuc2xpY2UoMCwgdmFsdWVzLmxlbmd0aCAtIDEpO1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0ID0gdmFsdWVJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uYW1vdW50KTtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGVMaXN0ID0gdmFsdWVJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uZGF0ZSk7XHJcblx0XHRcdFx0XHRjb25zdCBsYXN0SXRlbSA9IHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRjb25zdCBuYXZBZGp1c3QgPSBsYXN0SXRlbS5hbW91bnQ7XHJcblx0XHRcdFx0XHRjb25zdCBsYXRlc3REYXRlID0gbGFzdEl0ZW0uZGF0ZTtcclxuXHRcdFx0XHRcdGxldCBpcnIgPVxyXG5cdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLkV4Y2VsRm9ybXVsYXMuX0NhbGN1bGF0ZVhpcnIoXHJcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0LFxyXG5cdFx0XHRcdFx0XHRcdGRhdGVMaXN0LFxyXG5cdFx0XHRcdFx0XHRcdG5hdkFkanVzdCxcclxuXHRcdFx0XHRcdFx0XHRsYXRlc3REYXRlXHJcblx0XHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IGlyciA9PT0gbnVsbCA/IDAgOiBpcnI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSAwO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZSAmJlxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV1cclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV07XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGFyZ3MuZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0Zm9ybWF0OlxyXG5cdFx0XHRcdFx0XHRmaWVsZC5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0PyBmaWVsZFswXS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmRwXHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHQ6IFwiUDJcIixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVNdWx0aXBsZVwiIHx8XHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVQSUNcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlRFBJXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZVRWUElcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlUlZQSVwiIHx8XHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVNQWN0dWFsQXVkaXRlZFwiIHx8XHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVNUmVwb3J0ZWRcIlxyXG5cdFx0KSB7XHJcblx0XHRcdGxldCB0b3RhbE51bWVyYXRvciA9IDA7XHJcblx0XHRcdGxldCB0b3RhbERlbm9taW5hdG9yID0gMDtcclxuXHRcdFx0bGV0IG51bWVyYXRvck5hbWU7XHJcblx0XHRcdGxldCBkZW5vbWluYXRvck5hbWU7XHJcblx0XHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRlbC5jb2xOYW1lID09PVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRBZ2dyZWdhdGVUeXBlKFxyXG5cdFx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKGZpZWxkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRjb25zdCBmb3JtdWxhQXJyYXkgPSBmaWVsZFswXS5mb3JtdWxhLnNwbGl0KFwiL1wiKTtcclxuXHRcdFx0XHRudW1lcmF0b3JOYW1lID0gZm9ybXVsYUFycmF5WzBdO1xyXG5cdFx0XHRcdGRlbm9taW5hdG9yTmFtZSA9IGZvcm11bGFBcnJheVsxXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHR0b3RhbE51bWVyYXRvciArPSBhcmdzLmNlbGxTZXRzW2pdW251bWVyYXRvck5hbWVdO1xyXG5cdFx0XHRcdHRvdGFsRGVub21pbmF0b3IgKz0gYXJncy5jZWxsU2V0c1tqXVtkZW5vbWluYXRvck5hbWVdO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0b3RhbERlbm9taW5hdG9yICE9PSAwKSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IHRvdGFsTnVtZXJhdG9yIC8gdG90YWxEZW5vbWluYXRvcjtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZSAmJlxyXG5cdFx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1tcclxuXHRcdFx0XHRcdFx0YXJncy5maWVsZE5hbWVcclxuXHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdID0ge1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBhcmdzLmZpZWxkTmFtZSxcclxuXHRcdFx0XHRcdFx0Zm9ybWF0OlxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmxlbmd0aCA+IDBcclxuXHRcdFx0XHRcdFx0XHRcdD8gZmllbGRbMF0uZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0WzBdLmZvcm1hdENoZWNrZWRcclxuXHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRNdWx0aXBsZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdE11bHRpcGxlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZHBcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IFwiIyMjMC4wMCd4J1wiLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoYXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkZpcnN0XCIgfHwgYXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkxhc3RcIikge1xyXG5cdFx0XHRhcmdzLnZhbHVlID0gdGhpcy5jYWxjdWxhdGVkRmlzdExhc3QoXHJcblx0XHRcdFx0YXJncyxcclxuXHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUsXHJcblx0XHRcdFx0YXJncy5maWVsZE5hbWVcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDb3VudFwiIHx8XHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJEaXN0aW5jdENvdW50XCJcclxuXHRcdCkge1xyXG5cdFx0XHRpZiAoYXJncy52YWx1ZSkge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLnZhbHVlLnRvRml4ZWQoMik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdCFhcmdzLnZhbHVlICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IDAgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gZmFsc2UgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gXCJmYWxzZVwiXHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy5za2lwRm9ybWF0dGluZyA9IHRydWU7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0fVxyXG5cdFx0Ly8g5paw5bu6cGl2b3QgdGFibGUsIOi/mOayoeacieiuvue9rnJvdywg6YCJ5LqGY29sdW1u5LmL5ZCOZ3JhbmR0b3RhbOS8muacieWAvFxyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcmdzLnJvd0NlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIiAmJlxyXG5cdFx0XHQhdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGhcclxuXHRcdCkge1xyXG5cdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdH1cclxuXHRcdC8vU01QMi0yODg5XHJcblx0XHRpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJzdWJUb3RhbFwiKSB7XHJcblx0XHRcdGNvbnN0IHZhbHVlRmllbGRfZGF0YSA9IHRoaXMuY29uZmlnLnlheGlzLnNlcmllcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBhcmdzLmZpZWxkTmFtZVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAodmFsdWVGaWVsZF9kYXRhLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRpZiAodmFsdWVGaWVsZF9kYXRhWzBdLnNob3dTdWJUb3RhbHMgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdGFyZ3Muc2tpcEZvcm1hdHRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiKSB7XHJcblx0XHRcdGNvbnN0IHZhbHVlRmllbGRfZGF0YSA9IHRoaXMuY29uZmlnLnlheGlzLnNlcmllcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBhcmdzLmZpZWxkTmFtZVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAodmFsdWVGaWVsZF9kYXRhLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRpZiAodmFsdWVGaWVsZF9kYXRhWzBdLnNob3dHcmFuZFRvdGFscyA9PT0gZmFsc2UpIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHRcdFx0YXJncy5za2lwRm9ybWF0dGluZyA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHQvLyBTTVAyLTM0MTYgc3RhcnRcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5oZ0xpc3QuaW5jbHVkZXMoYXJncy5maWVsZE5hbWUpICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgPT09IDBcclxuXHRcdCkge1xyXG5cdFx0XHRhcmdzLnZhbHVlID0gXCItXCI7XHJcblx0XHRcdGFyZ3Muc2tpcEZvcm1hdHRpbmcgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnplcm9Gb3JtYXREYXRhLmVtcHR5TGlzdC5pbmNsdWRlcyhhcmdzLmZpZWxkTmFtZSkgJiZcclxuXHRcdFx0YXJncy52YWx1ZSA9PT0gMFxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHRhcmdzLnNraXBGb3JtYXR0aW5nID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5taWxsaW9uRmllbGRzLmluY2x1ZGVzKGFyZ3MuZmllbGROYW1lKSAmJlxyXG5cdFx0XHQhaXNOYU4oTnVtYmVyKGFyZ3MudmFsdWUpKSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSAwICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IFwiXCIgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gbnVsbFxyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRhcmdzLmNvbHVtbkNlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiICYmXHJcblx0XHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9PSBcImdyYW5kVG90YWxcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRpZiAoIXRoaXMudG90YWxGb3JtYXR0ZWRbYXJncy5maWVsZE5hbWVdKSB7XHJcblx0XHRcdFx0XHR0aGlzLnRvdGFsRm9ybWF0dGVkW2FyZ3MuZmllbGROYW1lXSA9IHRydWU7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy52YWx1ZSAvIDEwMDAwMDA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLnZhbHVlIC8gMTAwMDAwMDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNNUDItMjQ4NiAmIHBlcmNlbnROdW3nmoRmb3JtYXTpl67pophcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5wZXJjZW50TnVtRmllbGRzLmxlbmd0aCAmJlxyXG5cdFx0XHR0aGlzLnBlcmNlbnROdW1GaWVsZHMuaW5jbHVkZXMoYXJncy5maWVsZE5hbWUpICYmXHJcblx0XHRcdCFpc05hTihOdW1iZXIoYXJncy52YWx1ZSkpICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IDAgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gXCJcIiAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBudWxsXHJcblx0XHQpIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCIgJiZcclxuXHRcdFx0XHRhcmdzLnJvd0NlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGlmICghdGhpcy50b3RhbEZvcm1hdHRlZFthcmdzLmZpZWxkTmFtZV0pIHtcclxuXHRcdFx0XHRcdHRoaXMudG90YWxGb3JtYXR0ZWRbYXJncy5maWVsZE5hbWVdID0gdHJ1ZTtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLnZhbHVlIC8gMTAwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy52YWx1ZSAvIDEwMDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT0gXCJDYWxjdWxhdGVkRmllbGRcIiAmJlxyXG5cdFx0XHQhaXNOYU4oTnVtYmVyKGFyZ3MudmFsdWUpKSAmJlxyXG5cdFx0XHQhdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXS5mb3JtYXRcclxuXHRcdCkge1xyXG5cdFx0XHRhcmdzLnZhbHVlID0gTnVtYmVyKGFyZ3MudmFsdWUpLnRvRml4ZWQoMik7XHJcblx0XHR9XHJcblx0XHQvLyBTTVAyLTM0MTYgZW5kXHJcblx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHRcdHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2FsY3VsYXRlZEZpc3RMYXN0KGFyZ3MsIGFnZ3JlZ2F0ZVR5cGUsIGZpZWxkTmFtZSkge1xyXG5cdFx0aWYgKCFhcmdzLnJvdy5hY3R1YWxUZXh0KSBhcmdzLnJvdy5hY3R1YWxUZXh0ID0gYXJncy5yb3cuZm9ybWF0dGVkVGV4dDtcclxuXHRcdGlmICghYXJncy5jb2x1bW4uYWN0dWFsVGV4dClcclxuXHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCA9IGFyZ3MuY29sdW1uLmZvcm1hdHRlZFRleHQ7XHJcblx0XHRsZXQgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gZmllbGROYW1lXHJcblx0XHQpWzBdO1xyXG5cdFx0aWYgKGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwidmFsdWVcIiAmJiAhYXJncy5yb3cuaGFzQ2hpbGQpIHtcclxuXHRcdFx0aWYgKGFyZ3MuY2VsbFNldHNbMF0pIHtcclxuXHRcdFx0XHRpZiAoYWdncmVnYXRlVHlwZSA9PT0gXCJGaXJzdFwiKSB7XHJcblx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRsZXQgZmlyc3RJbmRleCA9IDA7XHJcblx0XHRcdFx0XHRcdGZpcnN0SW5kZXggPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDtcclxuXHRcdFx0XHRcdFx0Zmlyc3RJbmRleCsrXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoID09XHJcblx0XHRcdFx0XHRcdFx0XHQxICYmXHJcblx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW5DZWxsVHlwZSA9PSBcImdyYW5kVG90YWxcIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInN0cmluZ1wiIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm52YXJjaGFyXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGV0aW1lXCJcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aFxyXG5cdFx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZVthcmdzLnJvdy5yb3dJbmRleF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyb3dPYmpzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianNBcnIgPSBKU09OLnBhcnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0SlNPTi5zdHJpbmdpZnkocm93T2JqcylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBvYmogPSByb3dPYmpzQXJyLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuYWN0dWFsVGV4dCA9PSBmaWVsZE5hbWUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuaXNHcmFuZFN1bVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdClbMF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9iaikgYXJncy52YWx1ZSA9IG9iai52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IGlzTmFOKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwicm93XCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gbnVsbFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwicm93XCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MuY2VsbFNldHNbZmlyc3RJbmRleF1bZmllbGROYW1lXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJudW1iZXJcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibXVsdGlwbGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwicGVyY2VudFwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50TnVtXCJcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGFyZ3MudmFsdWUgIT0gbnVsbCkgYnJlYWs7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGV0aW1lXCJcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMucGJmLnRpbWUoYXJncy52YWx1ZSkgPiBcIjE5MDAtMDEtMDFcIikgYnJlYWs7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYXJncy52YWx1ZSkgYnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChhZ2dyZWdhdGVUeXBlID09PSBcIkxhc3RcIikge1xyXG5cdFx0XHRcdFx0Zm9yIChcclxuXHRcdFx0XHRcdFx0bGV0IGxhc3RJbmRleCA9IGFyZ3MuY2VsbFNldHMubGVuZ3RoIC0gMTtcclxuXHRcdFx0XHRcdFx0bGFzdEluZGV4ID49IDA7XHJcblx0XHRcdFx0XHRcdGxhc3RJbmRleC0tXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoID09XHJcblx0XHRcdFx0XHRcdFx0XHQxICYmXHJcblx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW5DZWxsVHlwZSA9PSBcImdyYW5kVG90YWxcIlxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInN0cmluZ1wiIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm52YXJjaGFyXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGV0aW1lXCJcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aFxyXG5cdFx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZVthcmdzLnJvdy5yb3dJbmRleF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChyb3dPYmpzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianNBcnIgPSBKU09OLnBhcnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0SlNPTi5zdHJpbmdpZnkocm93T2JqcylcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCBvYmogPSByb3dPYmpzQXJyLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuYWN0dWFsVGV4dCA9PSBmaWVsZE5hbWUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuaXNHcmFuZFN1bVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdClbMF07XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9iaikgYXJncy52YWx1ZSA9IG9iai52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IGlzTmFOKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwicm93XCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD8gbnVsbFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDogTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwicm93XCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCAgKTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MuY2VsbFNldHNbbGFzdEluZGV4XVtmaWVsZE5hbWVdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJudW1iZXJcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibXVsdGlwbGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwicGVyY2VudFwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50TnVtXCJcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGFyZ3MudmFsdWUgIT0gbnVsbCkgYnJlYWs7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGV0aW1lXCJcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMucGJmLnRpbWUoYXJncy52YWx1ZSkgPiBcIjE5MDAtMDEtMDFcIikgYnJlYWs7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYXJncy52YWx1ZSkgYnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm51bWJlclwiIHx8XHJcblx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm11bHRpcGxlXCIgfHxcclxuXHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwicGVyY2VudFwiIHx8XHJcblx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnROdW1cIlxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3MubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdGlmICghdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHQhTnVtYmVyKHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXSkgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGlzTmFOKE51bWJlcih0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV0pKVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tmaWVsZE5hbWVdID0gMDtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0aWYgKGFyZ3MuYWdncmVnYXRlVHlwZSAhPT0gXCJDYWxjdWxhdGVkRmllbGRcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tmaWVsZE5hbWVdICs9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZVxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT0gMVxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyBcInJvd1wiICsgYXJncy5yb3cuYWN0dWFsVGV4dCArIGZpZWxkTmFtZSDooajnpLooY2VsbDogYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJ2YWx1ZVwiICYmIGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiKVxyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdCFOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArIGFyZ3Mucm93LmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0KSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0aXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0XHRcdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJyb3dcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFwicm93XCIgKyBhcmdzLnJvdy5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRdID0gMDtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFwicm93XCIgKyBhcmdzLnJvdy5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XSArPSBOdW1iZXIoYXJncy52YWx1ZSk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdC8vIFwiY29sXCIgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lIOihqOekuihjZWxsOiBhcmdzLnJvd0NlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIiAmJiBhcmdzLmNvbHVtbkNlbGxUeXBlID09PSBcInZhbHVlXCIpXHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0IU51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdCkgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGlzTmFOKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICsgYXJncy5jb2x1bW4uYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XSA9IDA7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICsgYXJncy5jb2x1bW4uYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdF0gKz0gTnVtYmVyKGFyZ3MudmFsdWUpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwic3ViVG90YWxcIiB8fCBhcmdzLnJvdy5oYXNDaGlsZCkge1xyXG5cdFx0XHRjb25zdCBkYXRhVHlwZSA9IGZpZWxkLmRhdGFUeXBlO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0ZGF0YVR5cGUgPT09IFwic3RyaW5nXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PT0gXCJudmFyY2hhclwiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT0gXCJkYXRlXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcImRhdGV0aW1lXCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0bGV0IHZhbHVlID0gMDtcclxuXHRcdFx0XHRsZXQgY2hpbGRIZWFkZXJzID0gW107XHJcblx0XHRcdFx0aWYgKGFnZ3JlZ2F0ZVR5cGUgPT09IFwiRmlyc3RcIikge1xyXG5cdFx0XHRcdFx0bGV0IGdyb3VwTmFtZUFycmF5cyA9IFtdO1xyXG5cdFx0XHRcdFx0bGV0IHJvd3MgPSB0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzO1xyXG5cdFx0XHRcdFx0Zm9yIChcclxuXHRcdFx0XHRcdFx0bGV0IGluZGV4ID0gYXJncy5yb3cubGV2ZWw7XHJcblx0XHRcdFx0XHRcdGluZGV4IDwgcm93cy5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdGluZGV4KytcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMucHVzaChyb3dzW2luZGV4XS5uYW1lKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRcdFx0XHRcdGxldCBoZWFkZXIgPSBncm91cE5hbWVBcnJheXNcclxuXHRcdFx0XHRcdFx0XHQubWFwKChuYW1lKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZXMucHVzaChhcmdzLmNlbGxTZXRzW2ldW25hbWVdKTtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBhcmdzLmNlbGxTZXRzW2ldW25hbWVdO1xyXG5cdFx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHRcdFx0LmpvaW4oXCItXCIpO1xyXG5cdFx0XHRcdFx0XHRpZiAoIShjaGlsZEhlYWRlcnMgYXMgYW55KS5pbmNsdWRlcyhoZWFkZXIpKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZpbHRlck9iajogYW55ID0ge307XHJcblx0XHRcdFx0XHRcdFx0Z3JvdXBOYW1lQXJyYXlzLm1hcChcclxuXHRcdFx0XHRcdFx0XHRcdChuYW1lLCB4KSA9PiAoZmlsdGVyT2JqW25hbWVdID0gdmFsdWVzW3hdKVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0bGV0IF9DZWxsU2V0cyA9IF9maWx0ZXIoYXJncy5jZWxsU2V0cywgZmlsdGVyT2JqKTtcclxuXHRcdFx0XHRcdFx0XHRjaGlsZEhlYWRlcnMucHVzaChoZWFkZXIpO1xyXG5cdFx0XHRcdFx0XHRcdHZhbHVlICs9IE51bWJlcihfQ2VsbFNldHNbMF1bZmllbGROYW1lXSkgfHwgMDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYWdncmVnYXRlVHlwZSA9PT0gXCJMYXN0XCIpIHtcclxuXHRcdFx0XHRcdGxldCBncm91cE5hbWVBcnJheXMgPSBbXTtcclxuXHRcdFx0XHRcdGxldCByb3dzID0gdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cztcclxuXHRcdFx0XHRcdGZvciAoXHJcblx0XHRcdFx0XHRcdGxldCBpbmRleCA9IGFyZ3Mucm93LmxldmVsO1xyXG5cdFx0XHRcdFx0XHRpbmRleCA8IHJvd3MubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRpbmRleCsrXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0Z3JvdXBOYW1lQXJyYXlzLnB1c2gocm93c1tpbmRleF0ubmFtZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gYXJncy5jZWxsU2V0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG5cdFx0XHRcdFx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRcdFx0XHRcdGxldCBoZWFkZXIgPSBncm91cE5hbWVBcnJheXNcclxuXHRcdFx0XHRcdFx0XHQubWFwKChuYW1lKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZXMucHVzaChhcmdzLmNlbGxTZXRzW2ldW25hbWVdKTtcclxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBhcmdzLmNlbGxTZXRzW2ldW25hbWVdO1xyXG5cdFx0XHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0XHRcdFx0LmpvaW4oXCItXCIpO1xyXG5cdFx0XHRcdFx0XHRpZiAoIShjaGlsZEhlYWRlcnMgYXMgYW55KS5pbmNsdWRlcyhoZWFkZXIpKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZpbHRlck9iajogYW55ID0ge307XHJcblx0XHRcdFx0XHRcdFx0Z3JvdXBOYW1lQXJyYXlzLm1hcChcclxuXHRcdFx0XHRcdFx0XHRcdChuYW1lLCB4KSA9PiAoZmlsdGVyT2JqW25hbWVdID0gdmFsdWVzW3hdKVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0bGV0IF9DZWxsU2V0cyA9IF9maWx0ZXIoYXJncy5jZWxsU2V0cywgZmlsdGVyT2JqKTtcclxuXHRcdFx0XHRcdFx0XHRjaGlsZEhlYWRlcnMucHVzaChoZWFkZXIpO1xyXG5cdFx0XHRcdFx0XHRcdHZhbHVlICs9XHJcblx0XHRcdFx0XHRcdFx0XHROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdF9DZWxsU2V0c1tfQ2VsbFNldHMubGVuZ3RoIC0gMV1bZmllbGROYW1lXVxyXG5cdFx0XHRcdFx0XHRcdFx0KSB8fCAwO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRpZiAoYXJncy5jb2x1bW4uYWN0dWFsVGV4dCAhPT0gXCJHcmFuZCBUb3RhbFwiKVxyXG5cdFx0XHRcdFx0dGhpcy5jb2x1bW5UZXh0cy5wdXNoKGFyZ3MuY29sdW1uLmFjdHVhbFRleHQpO1xyXG5cclxuXHRcdFx0XHRpZiAoIXRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdCFOdW1iZXIodGhpcy5zdWJUb3RhbHNbZmllbGROYW1lXSkgfHxcclxuXHRcdFx0XHRcdFx0aXNOYU4oTnVtYmVyKHRoaXMuc3ViVG90YWxzW2ZpZWxkTmFtZV0pKVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW2ZpZWxkTmFtZV0gPSAwO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbZmllbGROYW1lXSArPSBOdW1iZXIodmFsdWUpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCA9PSAxXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdCFOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0KSB8fFxyXG5cdFx0XHRcdFx0XHRpc05hTihcclxuXHRcdFx0XHRcdFx0XHROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRdID0gMDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICsgYXJncy5jb2x1bW4uYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XSArPSBOdW1iZXIodmFsdWUpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvLyAtLS0+IGFsbERhdGFWYWx1ZeS4rei/meS4quWNleWFg+agvOeahOWAvOS4jeato+ehrlxyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiICYmXHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCA9PSAxXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5hbGxEYXRhVmFsdWUgJiYgdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArIFwiR3JhbmQgVG90YWxcIiArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbHVtblRleHRzID0gdW5pcUJ5KHRoaXMuY29sdW1uVGV4dHMsIChlbCkgPT4gZWwpO1xyXG5cdFx0XHRcdFx0XHRsZXQgdmFsID0gMDtcclxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbHVtblRleHRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IHRoaXMuY29sdW1uVGV4dHNbaV07XHJcblx0XHRcdFx0XHRcdFx0dmFsICs9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArIGVsZW1lbnQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IHZhbDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IHZhbHVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIikge1xyXG5cdFx0XHRjb25zdCBkYXRhVHlwZSA9IGZpZWxkLmRhdGFUeXBlO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0ZGF0YVR5cGUgPT0gXCJzdHJpbmdcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09IFwibnZhcmNoYXJcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmICghdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLmFsbERhdGFWYWx1ZSAmJiB0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHJvd09ianMgPVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlW3RoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCAtIDFdO1xyXG5cdFx0XHRcdFx0XHRpZiAocm93T2Jqcykge1xyXG5cdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzQXJyID0gSlNPTi5wYXJzZShcclxuXHRcdFx0XHRcdFx0XHRcdEpTT04uc3RyaW5naWZ5KHJvd09ianMpXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgb2JqQXJyID0gcm93T2Jqc0Fyci5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsLmFjdHVhbFRleHQgPT0gZmllbGROYW1lICYmIGVsLmlzR3JhbmRTdW1cclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChvYmpBcnIgJiYgb2JqQXJyLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IG9iakFycltvYmpBcnIubGVuZ3RoIC0gMV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKHRoaXMuZ3JhbmRUb3RhbHMpLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSB0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV07XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gdGhpcy5ncmFuZFRvdGFsc1tmaWVsZE5hbWVdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpZiAoYXJncy5jb2x1bW5DZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIpIHtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuYWxsRGF0YVZhbHVlICYmIHRoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzID1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlW3RoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCAtIDFdO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChyb3dPYmpzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdEpTT04uc3RyaW5naWZ5KHJvd09ianMpXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0bGV0IG9iakFyciA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuYWN0dWFsVGV4dCA9PSBmaWVsZE5hbWUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5pc0dyYW5kU3VtXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9iakFyciAmJiBvYmpBcnIubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9iakFycltvYmpBcnIubGVuZ3RoIC0gMV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRPYmplY3Qua2V5cyh0aGlzLmdyYW5kVG90YWxzKS5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5hbGxEYXRhVmFsdWUgJiYgdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWVbdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianNBcnIgPSBKU09OLnBhcnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0SlNPTi5zdHJpbmdpZnkocm93T2JqcylcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCBvYmpBcnIgPSByb3dPYmpzQXJyLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuYWN0dWFsVGV4dCA9PSBmaWVsZE5hbWUgJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuaXNHcmFuZFN1bSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5jb2x1bW5IZWFkZXJzID09IGFyZ3MuY29sdW1uLmFjdHVhbFRleHRcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChvYmpBcnIgJiYgb2JqQXJyLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IG9iakFycltvYmpBcnIubGVuZ3RoIC0gMV0udmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKHRoaXMuZ3JhbmRUb3RhbHMpLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICsgYXJncy5jb2x1bW4uYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgKyBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHR0aGlzLmZvcm1hdFZhbChhcmdzLCBmaWVsZE5hbWUpO1xyXG5cdFx0cmV0dXJuIGFyZ3MudmFsdWU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGZvcm1hdFZhbChhcmdzLCBmaWVsZE5hbWUpIHtcclxuXHRcdHRoaXMuY29uZmlnRmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblx0XHRcdGlmIChmaWVsZC5jb2xOYW1lID09IGZpZWxkTmFtZSkge1xyXG5cdFx0XHRcdHN3aXRjaCAoZmllbGQuZGF0YVR5cGUpIHtcclxuXHRcdFx0XHRcdGNhc2UgXCJkYXRlXCI6XHJcblx0XHRcdFx0XHRjYXNlIFwiZGF0ZXRpbWVcIjpcclxuXHRcdFx0XHRcdFx0aWYgKGFyZ3MudmFsdWUpIGFyZ3MudmFsdWUgPSBuZXcgRGF0ZShhcmdzLnZhbHVlKTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRleGNsdWRlRmllbGRzKGZpZWxkcywgZGF0YSkge1xyXG5cdFx0bGV0IG5hbWVhcnJheSA9IFtdO1xyXG5cdFx0bGV0IGFycmF5ID0gW107XHJcblx0XHRmb3IgKGxldCBwcm9wIGluIGRhdGEpIHtcclxuXHRcdFx0YXJyYXkucHVzaChwcm9wKTtcclxuXHRcdH1cclxuXHRcdGZvciAobGV0IGl0ZW0gb2YgZmllbGRzKSB7XHJcblx0XHRcdG5hbWVhcnJheS5wdXNoKGl0ZW0uY29sTmFtZSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLmV4Y2x1ZGVGaWVsZHMgPSBkaWZmZXJlbmNlV2l0aChhcnJheSwgbmFtZWFycmF5KTtcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5leGNsdWRlRmllbGRzLmxlbmd0aCAmJlxyXG5cdFx0XHR0aGlzLmNvbmZpZy5ncm91cFNldHRpbmdzICYmXHJcblx0XHRcdHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3MubGVuZ3RoXHJcblx0XHQpIHtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmV4Y2x1ZGVGaWVsZHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRjb25zdCBlbCA9IHRoaXMuZXhjbHVkZUZpZWxkc1tpXTtcclxuXHRcdFx0XHRpZiAoc3RhcnRzV2l0aChlbCwgdGhpcy5jb25maWcuZ3JvdXBTZXR0aW5nc1swXS5uYW1lICsgXCJfXCIpKSB7XHJcblx0XHRcdFx0XHR0aGlzLmV4Y2x1ZGVGaWVsZHMuc3BsaWNlKGksIDEpO1xyXG5cdFx0XHRcdFx0aS0tO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRJbmZvKCkge1xyXG5cdFx0dGhpcy5kYXRlUGlwZUZvcm1hdCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZGF0ZVBpcGVcIik7XHJcblx0XHR0aGlzLnRyYW5zbGF0aW9uID0gZ2V0VHJhbnNsYXRpb24oKVxyXG5cdH1cclxuXHJcblx0cHVibGljIG9uRmllbGREcm9wKGFyZ3M6IEZpZWxkRHJvcEV2ZW50QXJncykge1xyXG5cdFx0dGhpcy5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVzID0gWy4uLmFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlc107XHJcblx0XHQvL2NoYW5nZSB0aGUgY2FsY3VhbHRlRmllbGQgbWV0aG9kIHVzZSB0aGUgY29ycmVzcG9uZGluZyBjYWxjdWxhdGVcclxuXHRcdGNvbnN0IGNhbGN1YWx0ZUZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGFyZ3MuZmllbGROYW1lICYmIGVsLmlzQ2FsY3VsYXRlZEZpZWxkXHJcblx0XHQpO1xyXG5cdFx0aWYgKGNhbGN1YWx0ZUZpZWxkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0YXJncy5kcm9wRmllbGQudHlwZSA9XHJcblx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRDYWxjdWxhdGVNZXRob2QoXHJcblx0XHRcdFx0XHRjYWxjdWFsdGVGaWVsZFswXS5jb2xOYW1lXHJcblx0XHRcdFx0KSBhcyBhbnk7XHJcblx0XHRcdGFyZ3MuZHJvcEZpZWxkLmNhcHRpb24gPSBhcmdzLmRyb3BGaWVsZC5jYXB0aW9uXHJcblx0XHRcdFx0LnJlcGxhY2UoXCJDYWxjdWxhdGVcIiwgXCJcIilcclxuXHRcdFx0XHQudHJpbSgpO1xyXG5cdFx0fVxyXG5cdFx0Zm9yIChcclxuXHRcdFx0bGV0IGkgPSAwO1xyXG5cdFx0XHRpIDwgYXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3MubGVuZ3RoO1xyXG5cdFx0XHRpKytcclxuXHRcdCkge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3NbaV0ubmFtZSA9PT1cclxuXHRcdFx0XHRcdGFyZ3MuZmllbGROYW1lICYmXHJcblx0XHRcdFx0YXJncy5kcm9wQXhpcyA9PT0gXCJcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5maWx0ZXJTZXR0aW5ncy5zcGxpY2UoaSwgMSk7XHJcblx0XHRcdFx0dGhpcy5maWx0ZXJTZXR0aW5ncyA9IGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLmZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDYWxjdWxhdGVkIGZpZWxk5LqL5Lu277ya5Yib5bu6XHJcblx0cHVibGljIGNhbGN1bGF0ZWRGaWVsZENyZWF0ZShhcmdzOiBDYWxjdWxhdGVkRmllbGRDcmVhdGVFdmVudEFyZ3MpIHtcclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5jYWxjdWxhdGVkRmllbGQubmFtZSAhPT0gXCJcIiAmJlxyXG5cdFx0XHRhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lLnRyaW0oKSAhPT0gXCJcIlxyXG5cdFx0KSB7XHJcblx0XHRcdGxldCBpbmRleCA9XHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzLmZpbmRJbmRleChcclxuXHRcdFx0XHRcdChlbCkgPT4gZWwubmFtZSA9PT0gYXJncy5jYWxjdWxhdGVkRmllbGQubmFtZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGlmIChpbmRleCAhPT0gLTEpIHtcclxuXHRcdFx0XHRpZiAoYXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybWF0U3RyaW5nID09PSBcIlwiKSB7XHJcblx0XHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3NbXHJcblx0XHRcdFx0XHRcdGluZGV4XHJcblx0XHRcdFx0XHRdLmZvcm1hdFN0cmluZyA9IFwiTjJcIjtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzW1xyXG5cdFx0XHRcdFx0XHRpbmRleFxyXG5cdFx0XHRcdFx0XS5mb3JtYXRTdHJpbmcgPSBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtYXRTdHJpbmc7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtYXRTdHJpbmcgPT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm1hdFN0cmluZyA9IFwiTjJcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8g56e76Zmk6YeN5aSNXHJcblx0XHRcdGxldCBmSW5kZXggPSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMuZmluZEluZGV4KFxyXG5cdFx0XHRcdChmKSA9PiBmLm5hbWUgPT09IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLm5hbWVcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKGZJbmRleCA+IC0xKSB7XHJcblx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLnNwbGljZShmSW5kZXgsIDEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIOWMuemFjei/kOeul+espiBGaXJzdCB8fCBMYXN0XHJcblx0XHRcdGxldCBmb3JtdWxhU3RyID0gYXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybXVsYTtcclxuXHRcdFx0bGV0IHJlZzEgPSAvXCJGaXJzdFxcKCguKz8pXFwpXCIvZztcclxuXHRcdFx0bGV0IHJlZzIgPSAvXCJMYXN0XFwoKC4rPylcXClcIi9nO1xyXG5cdFx0XHRpZiAocmVnMS50ZXN0KGZvcm11bGFTdHIpIHx8IHJlZzIudGVzdChmb3JtdWxhU3RyKSkge1xyXG5cdFx0XHRcdC8vIOWIpOaWreaYr+WQpuWtmOWcqEZpcnN0IHx8IExhc3Qg6KGo6L6+5byPXHJcblx0XHRcdFx0bGV0IG1hdGNoRmlyc3RGaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIkZpcnN0XFwoKC4rPylcXClcIi9nKSxcclxuXHRcdFx0XHRcdChtKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hTdHI6IG1bMF0sXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hXb3JkOiBtWzFdLFxyXG5cdFx0XHRcdFx0XHRcdHJlcGxhY2VWYWx1ZTogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRtYXRjaE1ldGhvZDogXCJGaXJzdFwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoTGFzdEZpZWxkcyA9IEFycmF5LmZyb20oXHJcblx0XHRcdFx0XHRmb3JtdWxhU3RyW1wibWF0Y2hBbGxcIl0oL1wiTGFzdFxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiTGFzdFwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoTWF4RmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJNYXhcXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIk1heFwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoTWluRmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJNaW5cXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIk1pblwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoU3VtRmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJTdW1cXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIlN1bVwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0bGV0IG1hdGNoQXZnRmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJBdmdcXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIkF2Z1wiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0bWF0Y2hGaXJzdEZpZWxkcy5ldmVyeSgoeCkgPT5cclxuXHRcdFx0XHRcdFx0dGhpcy5hbGxvd2VkQ2FsY3VsYXRlZEZpZWxkcy5pbmNsdWRlcyh4Lm1hdGNoV29yZClcclxuXHRcdFx0XHRcdCkgJiZcclxuXHRcdFx0XHRcdG1hdGNoTGFzdEZpZWxkcy5ldmVyeSgoeCkgPT5cclxuXHRcdFx0XHRcdFx0dGhpcy5hbGxvd2VkQ2FsY3VsYXRlZEZpZWxkcy5pbmNsdWRlcyh4Lm1hdGNoV29yZClcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdC8vIOWIpOaWrUZpcnN05ZKMTGFzdOihqOi+vuW8j+WGheeahOWtl+auteaYr+WQpuWQiOazlVxyXG5cdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lLFxyXG5cdFx0XHRcdFx0XHRmb3JtdWxhOiBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtdWxhLFxyXG5cdFx0XHRcdFx0XHRtYXRjaEZpZWxkczogW1xyXG5cdFx0XHRcdFx0XHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaEZpcnN0RmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoTGFzdEZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaE1heEZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaE1pbkZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaFN1bUZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XHQuLi5tYXRjaEF2Z0ZpZWxkcyxcclxuXHRcdFx0XHRcdFx0XSxcclxuXHRcdFx0XHRcdFx0Z3JhbmRUb3RhbDogMCxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0bGV0IGZpZWxkTmFtZSA9IChcclxuXHRcdFx0XHRcdFx0Zm9ybXVsYVN0ci5zcGxpdChcIkZpcnN0KFwiKVsxXSB8fFxyXG5cdFx0XHRcdFx0XHRmb3JtdWxhU3RyLnNwbGl0KFwiTGFzdChcIilbMV1cclxuXHRcdFx0XHRcdCkuc3BsaXQoXCIpXCIpWzBdO1xyXG5cdFx0XHRcdFx0YXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybXVsYSA9XHJcblx0XHRcdFx0XHRcdFwiJ1xcXCJcIiArIFwiU3VtKFwiICsgZmllbGROYW1lICsgJylcIj0nICsgZm9ybXVsYVN0ciArIFwiJ1wiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQ2FsY3VsYXRlZCBmaWVsZOS6i+S7tu+8muWujOaIkFxyXG5cdHB1YmxpYyBhY3Rpb25Db21wbGV0ZShhcmdzKSB7XHJcblx0XHRpZiAoXHJcblx0XHRcdGFyZ3MuYWN0aW9uTmFtZSA9PT0gXCJGaWVsZCBhZ2dyZWdhdGVkXCIgfHxcclxuXHRcdFx0YXJncy5hY3Rpb25OYW1lID09PSBcIkZpZWxkIGxpc3QgY2xvc2VkXCJcclxuXHRcdCkge1xyXG5cdFx0XHR0aGlzLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZXMgPSBbXHJcblx0XHRcdFx0Li4uYXJncy5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVzLFxyXG5cdFx0XHRdO1xyXG5cdFx0XHR0aGlzLnNldFZhbHVlSXRlbURhdGEoKTtcclxuXHRcdH1cclxuXHRcdGlmIChhcmdzLmFjdGlvbk5hbWUgPT0gXCJGaWVsZCByZW1vdmVkXCIpIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGFyZ3MuZmllbGRJbmZvICYmXHJcblx0XHRcdFx0YXJncy5maWVsZEluZm8uZmllbGRJdGVtICYmXHJcblx0XHRcdFx0YXJncy5maWVsZEluZm8uZmllbGRJdGVtLnR5cGUgPT0gXCJDYWxjdWxhdGVkRmllbGRcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRsZXQgZmllbGQgPSBhcmdzLmZpZWxkSW5mby5maWVsZE5hbWU7XHJcblx0XHRcdFx0Ly8gUmVtb3ZlIHRoZSBkZWxldGVkIGNhbGN1bGF0ZWQgZmllbGQgZnJvbSBhbiBzdG9yZWQgYXJyYXkuXHJcblx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzID1cclxuXHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5maWx0ZXIoZnVuY3Rpb24gKG9iaikge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gb2JqLm5hbWUgIT09IGZpZWxkO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIENhbGN1bGF0ZWQgZmllbGTkuovku7bvvJrlvIDlp4tcclxuXHRwdWJsaWMgYWN0aW9uQmVnaW4oYXJncykge1xyXG5cdFx0aWYgKGFyZ3MuYWN0aW9uTmFtZSA9PT0gXCJFZGl0IGNhbGN1bGF0ZWQgZmllbGRcIikge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5uYW1lICYmXHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5maWVsZExpc3RbXHJcblx0XHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5uYW1lXHJcblx0XHRcdFx0XHRdXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5maWVsZExpc3RbXHJcblx0XHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5uYW1lXHJcblx0XHRcdFx0XHRdLmZvcm11bGEgPSB0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHNbaV0uZm9ybXVsYTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmVzaXplU3RvcChhcmdzKSB7XHJcblx0XHRpZiAodGhpcy5jb25maWcuY29sdW1uc1dpZHRoKSB7XHJcblx0XHRcdGNvbnN0IGhlYWRlcl9maWVsZCA9IHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aC5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PiBlbC5oZWFkZXJUZXh0ID09PSBhcmdzLmNvbHVtbi5oZWFkZXJUZXh0XHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChoZWFkZXJfZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGhlYWRlcl9maWVsZFswXS53aWR0aCA9IHBhcnNlSW50KGFyZ3MuY29sdW1uLndpZHRoKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGgucHVzaCh7XHJcblx0XHRcdFx0XHRoZWFkZXJUZXh0OiBhcmdzLmNvbHVtbi5oZWFkZXJUZXh0LFxyXG5cdFx0XHRcdFx0d2lkdGg6IHBhcnNlSW50KGFyZ3MuY29sdW1uLndpZHRoKSxcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5jb25maWcuY29sdW1uc1dpZHRoID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aC5wdXNoKHtcclxuXHRcdFx0XHRoZWFkZXJUZXh0OiBhcmdzLmNvbHVtbi5oZWFkZXJUZXh0LFxyXG5cdFx0XHRcdHdpZHRoOiBwYXJzZUludChhcmdzLmNvbHVtbi53aWR0aCksXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgcG9ydGxldCA9IHRoaXMucG9ydGxldDtcclxuXHRcdHBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLnBvcnRsZXRzLmZpbmRJbmRleCgoeCkgPT4geC5uZXdJZCA9PT0gcG9ydGxldC5uZXdJZCk7XHJcblx0XHRpZiAoaW5kZXggPiAtMSkgdGhpcy5wb3J0bGV0c1tpbmRleF0gPSBwb3J0bGV0O1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRDb2x1bW5zUmVuZGVyKGFyZ3MpIHtcclxuXHRcdGlmIChhcmdzLnN0YWNrZWRDb2x1bW5zKSB7XHJcblx0XHRcdGFyZ3Muc3RhY2tlZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0Y29sLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0KGNvbC5mb3JtYXQuaW5kZXhPZihcIk5cIikgIT09IC0xIHx8XHJcblx0XHRcdFx0XHRcdGNvbC5mb3JtYXQgPT09IFwicGVyY2VudFwiIHx8XHJcblx0XHRcdFx0XHRcdGNvbC5mb3JtYXQuaW5kZXhPZihcIlBcIikgIT09IC0xKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Y29sLnRleHRBbGlnbiA9IFwiUmlnaHRcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGgpIHtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAoYXJncyBhcyBhbnkpLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRhcmdzLmNvbHVtbnNbaV0uaGVhZGVyVGV4dCA9PT0gXCJcIiB8fFxyXG5cdFx0XHRcdFx0IWFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0XHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb2x1bW5fcm93ID0gdGhpcy5jb25maWcuY29sdW1uc1dpZHRoLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0KGVsKSA9PiBlbC5oZWFkZXJUZXh0ID09PSBhcmdzLmNvbHVtbnNbaV0uaGVhZGVyVGV4dFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGlmIChjb2x1bW5fcm93Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0YXJncy5jb2x1bW5zW2ldLndpZHRoID0gY29sdW1uX3Jvd1swXS53aWR0aDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y29uc3QgaGVhZGVyVGV4dCA9IGFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0XHJcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpXHJcblx0XHRcdFx0XHRcdC5zcGxpdChcIi5cIik7XHJcblx0XHRcdFx0XHRpZiAoaGVhZGVyVGV4dCAmJiBoZWFkZXJUZXh0Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgY29sdW1uID0gdGhpcy5jb25maWcuY29sdW1uc1dpZHRoLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRlbC5oZWFkZXJUZXh0XHJcblx0XHRcdFx0XHRcdFx0XHRcdC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpXHJcblx0XHRcdFx0XHRcdFx0XHRcdC50b0xvd2VyQ2FzZSgpID09PVxyXG5cdFx0XHRcdFx0XHRcdFx0aGVhZGVyVGV4dFtoZWFkZXJUZXh0Lmxlbmd0aCAtIDFdLnRvTG93ZXJDYXNlKClcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0aWYgKGNvbHVtbi5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS5jb2x1bW5zW2ldLndpZHRoID0gY29sdW1uWzBdLndpZHRoO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGRhdGUgZm9ybWF0IGFib3V0IHF1YXJ0ZXJseVxyXG5cdFx0XHRcdGxldCBwaXZvdFZhbHVlczogYW55ID0gdGhpcy5waXZvdE9iai5waXZvdFZhbHVlcztcclxuXHRcdFx0XHRpZiAodGhpcy5mb3JtYXREYXRlcyAmJiB0aGlzLmZvcm1hdERhdGVzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0bGV0IGRhdGVGaWVsZHMgPSB0aGlzLmZvcm1hdERhdGVzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGVsLm5hbWU7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdGZvciAobGV0IGsgPSAxOyBrIDwgcGl2b3RWYWx1ZXMubGVuZ3RoOyBrKyspIHtcclxuXHRcdFx0XHRcdFx0Zm9yIChcclxuXHRcdFx0XHRcdFx0XHRsZXQgaiA9IDA7XHJcblx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba10gIT0gbnVsbCAmJiBqIDwgcGl2b3RWYWx1ZXNba10ubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRcdGorK1xyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRwaXZvdFZhbHVlc1trXVtqXSAhPSBudWxsICYmXHJcblx0XHRcdFx0XHRcdFx0XHQoaiA9PSAwXHJcblx0XHRcdFx0XHRcdFx0XHRcdD8gZGF0ZUZpZWxkcy5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IGRhdGVGaWVsZHMuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwaXZvdFZhbHVlc1trXVtqXS5hY3R1YWxUZXh0XHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKSlcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vQ3VzdG9taXplIHRoZSBSb3cgaGVhZGVycy9Db2x1bW4gaGVhZGVycyBiYXNlZCBvbiB5b3VyIG5lZWRzXHJcblx0XHRcdFx0XHRcdFx0XHRsZXQgaGVhZGVycztcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChqID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlcnMgPSBwaXZvdFZhbHVlc1trXVtqXS5hY3R1YWxUZXh0O1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaGVhZGVycyA9IHBpdm90VmFsdWVzW2tdW2pdLmZvcm1hdHRlZFRleHQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGhlYWRlcnMgPSBwaXZvdFZhbHVlc1trXVtqXS52YWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdGlmIChoZWFkZXJzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBkYXRlID0gbmV3IERhdGUoaGVhZGVycyk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgcXVhcnRlciA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0TWF0aC5mbG9vcihkYXRlLmdldE1vbnRoKCkgLyAzKSArIDE7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0O1xyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mb3JtYXREYXRlcy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGogPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5uYW1lID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLnZhbHVlU29ydC5heGlzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IGVsLmZvcm1hdDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5uYW1lID09XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLmFjdHVhbFRleHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gZWwuZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLmZvcm1hdHRlZFRleHQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ2V0UXVhcnRlclZhbHVlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0LFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1YXJ0ZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBpZih0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgb25Mb2FkKCk6IHZvaWQge1xyXG5cdFx0Ly8gU01QMi0xNTY1MSDlvIDlkK/omZrmi5/mu5rliqjlubZzb3J05YiX5ZCO77yM5p2l5Zue5rua5Yqo5Lya5a+86Ie05pWw5o2u56m655m9XHJcblx0XHQvLyDlrpjmlrnpk77mjqUgaHR0cHM6Ly9lajIuc3luY2Z1c2lvbi5jb20vYW5ndWxhci9kb2N1bWVudGF0aW9uL3Bpdm90dmlldy92aXJ0dWFsLXNjcm9sbGluZyN2aXJ0dWFsLXNjcm9sbGluZy1mb3Itc3RhdGljLWZpZWxkLWxpc3RcclxuXHRcdC8vIERlbW/pk77mjqUgaHR0cHM6Ly9zdGFja2JsaXR6LmNvbS9lZGl0L2dpdGh1Yi03Z2drMnUtNHJremIzP2ZpbGU9c3JjJTJGYXBwLmNvbXBvbmVudC50c1xyXG5cdFx0KHRoaXMuZmllbGRsaXN0T2JqIGFzIFBpdm90RmllbGRMaXN0Q29tcG9uZW50KS5waXZvdEdyaWRNb2R1bGUgPSB0aGlzXHJcblx0XHRcdC5waXZvdE9iaiBhcyBQaXZvdFZpZXdDb21wb25lbnQ7XHJcblx0fVxyXG5cclxuXHRvbmRhdGFCb3VuZCgpe1xyXG5cdFx0aWYgKEJyb3dzZXIuaXNEZXZpY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5waXZvdE9iai5lbGVtZW50LnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgICB0aGlzLnBpdm90T2JqLmFsbG93Q2FsY3VsYXRlZEZpZWxkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5waXZvdE9iai5zaG93RmllbGRMaXN0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGVuZ2luZVBvcHVsYXRlZChhcmdzKSB7XHJcblx0XHRsZXQgY2xvbmVkVmFsdWVzOiBJUGl2b3RWYWx1ZXM7XHJcblx0XHRsZXQgY3VycmVudFBpdm90VmFsdWVzOiBhbnkgPSB0aGlzLmdldENsb25lZFBpdm90VmFsdWVzKFxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5waXZvdFZhbHVlc1xyXG5cdFx0KTtcclxuXHRcdGxldCBwYWdlU2V0dGluZ3M6IElQYWdlU2V0dGluZ3MgPVxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5wYWdlU2V0dGluZ3M7XHJcblxyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmdlbmVyYXRlR3JpZERhdGEpIHtcclxuXHRcdFx0Ly8g5rKh5rOV5aSN546wIGh0dHBzOi8vcmFpc2VscC5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9TTVAyLTE3MjQg5aSE55CG55qE6L+Z5Liq6Zeu6aKY5oOF5Ya1LCDnm7TmjqXms6jph4rmjolcclxuXHRcdFx0Ly8g5LiL6Z2i6L+Z5q615Luj56CB5Lya5b2x5ZONIGh0dHBzOi8vcmFpc2VscC5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9TTVAyLTEyMTM5XHJcblx0XHRcdC8vIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmdlbmVyYXRlR3JpZERhdGEoXHJcblx0XHRcdC8vIFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MsXHJcblx0XHRcdC8vIFx0dHJ1ZVxyXG5cdFx0XHQvLyApO1xyXG5cdFx0XHRjbG9uZWRWYWx1ZXMgPSB0aGlzLmdldENsb25lZFBpdm90VmFsdWVzKFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBpdm90VmFsdWVzXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5waXZvdFZhbHVlcyA9IGN1cnJlbnRQaXZvdFZhbHVlcztcclxuXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBhZ2VTZXR0aW5ncyA9IHBhZ2VTZXR0aW5ncztcclxuXHJcblx0XHRcdC8vIEhlcmUgXCJjbG9uZWRWYWx1ZXNcIiBjb250YWlucyB0aGUgd2hvbGUgcGl2b3QgdmFsdWVzLlxyXG5cdFx0XHR0aGlzLmFsbERhdGFWYWx1ZSA9IGNsb25lZFZhbHVlcztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q2xvbmVkUGl2b3RWYWx1ZXMocGl2b3RWYWx1ZXM6IElQaXZvdFZhbHVlcyk6IElQaXZvdFZhbHVlcyB7XHJcblx0XHRsZXQgY2xvbmVkU2V0czogSVBpdm90VmFsdWVzID0gW107XHJcblx0XHRpZiAocGl2b3RWYWx1ZXMgJiYgcGl2b3RWYWx1ZXMubGVuZ3RoKSB7XHJcblx0XHRcdGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBwaXZvdFZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChwaXZvdFZhbHVlc1tpXSkge1xyXG5cdFx0XHRcdFx0Y2xvbmVkU2V0c1tpXSA9IFtdO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgajogbnVtYmVyID0gMDsgaiA8IHBpdm90VmFsdWVzW2ldLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0XHRcdGlmIChwaXZvdFZhbHVlc1tpXVtqXSkge1xyXG5cdFx0XHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlICovXHJcblx0XHRcdFx0XHRcdFx0Y2xvbmVkU2V0c1tpXVtqXSA9IHRoaXMuZ2V0Q2xvbmVkUGl2b3RWYWx1ZU9iaihcclxuXHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2ldW2pdIGFzIHsgW2tleTogc3RyaW5nXTogT2JqZWN0IH1cclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNsb25lZFNldHM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldENsb25lZFBpdm90VmFsdWVPYmooZGF0YTogeyBba2V5OiBzdHJpbmddOiBPYmplY3QgfSk6IHtcclxuXHRcdFtrZXk6IHN0cmluZ106IE9iamVjdDtcclxuXHR9IHtcclxuXHRcdGxldCBrZXlQb3M6IG51bWJlciA9IDA7XHJcblx0XHRsZXQgZnJhbWVkU2V0OiBhbnkgPSB7fTtcclxuXHRcdGlmICghKGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdW5kZWZpbmVkKSkge1xyXG5cdFx0XHRsZXQgZmllbGRzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGRhdGEpO1xyXG5cdFx0XHR3aGlsZSAoa2V5UG9zIDwgZmllbGRzLmxlbmd0aCkge1xyXG5cdFx0XHRcdGZyYW1lZFNldFtmaWVsZHNba2V5UG9zXV0gPSBkYXRhW2ZpZWxkc1trZXlQb3NdXTtcclxuXHRcdFx0XHRrZXlQb3MrKztcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0ZnJhbWVkU2V0ID0gZGF0YTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmcmFtZWRTZXQ7XHJcblx0fVxyXG5cclxuXHQvLyNyZWdpb24gRmlsdGVyaW5nIHRoZSBUcmVlTm9kZXNcclxuXHRwcml2YXRlIHNlYXJjaE5vZGVzKGFyZ3MpIHtcclxuXHRcdGxldCBfdGV4dCA9IGFyZ3MubWFza2VkVmFsdWU7XHJcblx0XHRsZXQgcHJlZGljYXRzID0gW10sXHJcblx0XHRcdF9hcnJheSA9IFtdLFxyXG5cdFx0XHRfZmlsdGVyID0gW107XHJcblx0XHRpZiAoX3RleHQgPT0gXCJcIikge1xyXG5cdFx0XHR0aGlzLmNoYW5nZURhdGFTb3VyY2UoXHJcblx0XHRcdFx0KCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueSkuZ2V0VHJlZURhdGEoKVxyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0bGV0IHByZWRpY2F0ZSA9IG5ldyBQcmVkaWNhdGUoXCJjYXB0aW9uXCIsIFwiY29udGFpbnNcIiwgX3RleHQsIHRydWUpO1xyXG5cdFx0XHRsZXQgZmlsdGVyZWRMaXN0ID0gbmV3IERhdGFNYW5hZ2VyKFxyXG5cdFx0XHRcdCgodGhpcyBhcyBhbnkpLmZpZWxkbGlzdE9iai50cmVlVmlld01vZHVsZSBhcyBhbnkpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0KS5leGVjdXRlTG9jYWwobmV3IFF1ZXJ5KCkud2hlcmUocHJlZGljYXRlKSk7XHJcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgZmlsdGVyZWRMaXN0Lmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0X2ZpbHRlci5wdXNoKGZpbHRlcmVkTGlzdFtqXVtcImlkXCJdKTtcclxuXHRcdFx0XHRsZXQgZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVySXRlbXMoXHJcblx0XHRcdFx0XHRmaWx0ZXJlZExpc3Rbal0sXHJcblx0XHRcdFx0XHQoXHJcblx0XHRcdFx0XHRcdCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueVxyXG5cdFx0XHRcdFx0KS5nZXRUcmVlRGF0YSgpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlcnMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0X2FycmF5LmluZGV4T2YoZmlsdGVyc1tpXSkgPT0gLTEgJiZcclxuXHRcdFx0XHRcdFx0ZmlsdGVyc1tpXSAhPSBudWxsXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0X2FycmF5LnB1c2goZmlsdGVyc1tpXSk7XHJcblx0XHRcdFx0XHRcdHByZWRpY2F0cy5wdXNoKFxyXG5cdFx0XHRcdFx0XHRcdG5ldyBQcmVkaWNhdGUoXCJpZFwiLCBcImVxdWFsXCIsIGZpbHRlcnNbaV0sIGZhbHNlKVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAocHJlZGljYXRzLmxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VEYXRhU291cmNlKFtdKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRsZXQgcXVlcnkgPSBuZXcgUXVlcnkoKS53aGVyZShQcmVkaWNhdGUub3IocHJlZGljYXRzKSk7XHJcblx0XHRcdFx0bGV0IG5ld0xpc3QgPSBuZXcgRGF0YU1hbmFnZXIoXHJcblx0XHRcdFx0XHQoXHJcblx0XHRcdFx0XHRcdCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueVxyXG5cdFx0XHRcdFx0KS5nZXRUcmVlRGF0YSgpXHJcblx0XHRcdFx0KS5leGVjdXRlTG9jYWwocXVlcnkpO1xyXG5cdFx0XHRcdHRoaXMuY2hhbmdlRGF0YVNvdXJjZShuZXdMaXN0KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly9GaW5kIHRoZSBQYXJlbnQgTm9kZXMgZm9yIGNvcnJlc3BvbmRpbmcgY2hpbGRzXHJcblx0cHVibGljIGdldEZpbHRlckl0ZW1zKGZMaXN0LCBsaXN0KSB7XHJcblx0XHRsZXQgbm9kZXMgPSBbXTtcclxuXHRcdG5vZGVzLnB1c2goZkxpc3RbXCJpZFwiXSk7XHJcblx0XHRsZXQgcXVlcnkyID0gbmV3IFF1ZXJ5KCkud2hlcmUoXCJpZFwiLCBcImVxdWFsXCIsIGZMaXN0W1wicGlkXCJdLCBmYWxzZSk7XHJcblx0XHRsZXQgZkxpc3QxID0gbmV3IERhdGFNYW5hZ2VyKGxpc3QpLmV4ZWN1dGVMb2NhbChxdWVyeTIpO1xyXG5cdFx0aWYgKGZMaXN0MS5sZW5ndGggIT0gMCkge1xyXG5cdFx0XHRsZXQgcE5vZGUgPSB0aGlzLmdldEZpbHRlckl0ZW1zKGZMaXN0MVswXSwgbGlzdCk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcE5vZGUubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRpZiAobm9kZXMuaW5kZXhPZihwTm9kZVtpXSkgPT0gLTEgJiYgcE5vZGVbaV0gIT0gbnVsbClcclxuXHRcdFx0XHRcdG5vZGVzLnB1c2gocE5vZGVbaV0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBub2RlcztcclxuXHRcdH1cclxuXHRcdHJldHVybiBub2RlcztcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBjcmVhdGVkKGFyZ3M6IGFueSkge1xyXG5cdFx0aWYgKHRoaXMuZmllbGRsaXN0T2JqICYmICF0aGlzLmZpZWxkbGlzdE9iai5lbmdpbmVNb2R1bGUuZmllbGRzKSB7XHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmVuZ2luZU1vZHVsZS5maWVsZHMgPSBbXTtcclxuXHRcdH1cclxuXHRcdGxldCBzZWFyY2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XHJcblx0XHRzZWFyY2guaWQgPSBcInBpdm90U2VhcmNoQm94XCIgKyB0aGlzLmZpZWxkbGlzdE9iai5lbGVtZW50LmlkO1xyXG5cdFx0bGV0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuXHRcdFx0XCIjXCIgKyB0aGlzLmZpZWxkbGlzdE9iai5lbGVtZW50LmlkICsgXCJfQ29udGFpbmVyIC5lLWZpZWxkLXRhYmxlXCJcclxuXHRcdCk7XHJcblx0XHRpZiAoZWwpIGVsLnByZXBlbmQoc2VhcmNoKTtcclxuXHRcdHRoaXMucGl2b3RTZWFyY2hCb3ggPSBuZXcgTWFza2VkVGV4dEJveCh7XHJcblx0XHRcdHBsYWNlaG9sZGVyOiB0aGlzLnRyYW5zbGF0aW9uLlNFQVJDSCB8fCBcIi5TRUFSQ0hcIixcclxuXHRcdFx0Y3NzQ2xhc3M6IFwicGl2b3Qtc2VhcmNoXCIsXHJcblx0XHRcdGNoYW5nZTogdGhpcy5zZWFyY2hOb2Rlcy5iaW5kKHRoaXMpLFxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLnBpdm90U2VhcmNoQm94LmFwcGVuZFRvKFxyXG5cdFx0XHRcIiNwaXZvdFNlYXJjaEJveFwiICsgdGhpcy5maWVsZGxpc3RPYmouZWxlbWVudC5pZFxyXG5cdFx0KTtcclxuXHJcblx0XHQvLyBORVcgRGFzaGJvYXJkIOeCueWHu1wiYXBwbHlcIuaXtu+8jOivt+axguaWsOaVsOaNrlxyXG5cdFx0bGV0IGFwcGx5QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQgKyBcIl9EZWZlclVwZGF0ZUJ1dHRvbjFcIlxyXG5cdFx0KTtcclxuXHJcblx0XHRhcHBseUJ0biAmJlxyXG5cdFx0XHRhcHBseUJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMucGFnZUxvYWRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0RGF0YUJ5UG9ydGxldHNOZXcoXHJcblx0XHRcdFx0XHRbdGhpcy5wb3J0bGV0XSxcclxuXHRcdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHR0aGlzLlBpdm90X0RhdGEgPVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0UmVzdWx0QnlEYXRhVGFibGUoXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBvcnRsZXQsXHJcblx0XHRcdFx0XHRcdFx0XHRmYWxzZSxcclxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmQuaWRcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5kYXRhU291cmNlID1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLlBpdm90X0RhdGE7XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5QaXZvdF9EYXRhKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGdyb3VwcyA9IHRoaXMuY29uZmlnLnhheGlzLmdyb3VwcztcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93cyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChncm91cHMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGdpdGVtIG9mIGdyb3Vwcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGdpdGVtLm5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGZpZWxkLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRnaXRlbS5zaG93U3ViVG90YWxzID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLnNob3dTdWJUb3RhbHM7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Z2l0ZW0uY2FwdGlvbiA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5sYW5nVmFsdWUgfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudHJhbnNsYXRpb25bXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdDb2RlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5sYW5nQ29kZSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2l0ZW0uY2FwdGlvbjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRyb3dzLnB1c2goZ2l0ZW0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLlBpdm90X0RhdGEubWFwKChkYXRhKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRyb3dzLmZvckVhY2goKHJvdykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZGF0YVtyb3cubmFtZV0gPT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhW3Jvdy5uYW1lXSA9IFwibnVsbFwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdG51bGwsXHJcblx0XHRcdFx0XHRmYWxzZSxcclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkLFxyXG5cdFx0XHRcdFx0ZmFsc2VcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0XHJcblx0XHQvLyDngrnlh7tcImNhbmNlbFwi5pe277yM5oGi5aSN5Y6f5aeL5pWw5o2uXHJcblx0XHRsZXQgY2FuY2VsQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcblx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQgKyBcIl9EZWZlclVwZGF0ZUJ1dHRvbjJcIlxyXG5cdFx0KTtcclxuXHJcblx0XHRjYW5jZWxCdG4gJiZcclxuXHRcdFx0Y2FuY2VsQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuZGF0YVNvdXJjZSA9XHJcblx0XHRcdFx0XHRbLi4udGhpcy5QaXZvdF9EYXRhXTtcclxuXHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0XHRcdHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdFx0fSk7XHRcdFxyXG5cdH1cclxuXHJcblx0cHVibGljIGZpZWxkTGlzdFJlZnJlc2hlZChhcmdzKSB7XHJcblx0XHRpZiAodGhpcy5waXZvdFNlYXJjaEJveCkge1xyXG5cdFx0XHR0aGlzLnBpdm90U2VhcmNoQm94LnZhbHVlID0gXCJcIjtcclxuXHRcdFx0dGhpcy5jaGFuZ2VEYXRhU291cmNlKFxyXG5cdFx0XHRcdCh0aGlzLmZpZWxkbGlzdE9iai50cmVlVmlld01vZHVsZSBhcyBhbnkpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2hhbmdlRGF0YVNvdXJjZShkYXRhKSB7XHJcblx0XHRsZXQgZmllbGRUYWJsZSA9ICh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlLmZpZWxkVGFibGU7XHJcblx0XHRpZiAoZmllbGRUYWJsZSkge1xyXG5cdFx0XHRmaWVsZFRhYmxlLmZpZWxkcyA9IHtcclxuXHRcdFx0XHRkYXRhU291cmNlOiBkYXRhLFxyXG5cdFx0XHRcdGlkOiBcImlkXCIsXHJcblx0XHRcdFx0dGV4dDogXCJjYXB0aW9uXCIsXHJcblx0XHRcdFx0aXNDaGVja2VkOiBcImlzU2VsZWN0ZWRcIixcclxuXHRcdFx0XHRwYXJlbnRJRDogXCJwaWRcIixcclxuXHRcdFx0XHRpY29uQ3NzOiBcInNwcml0ZUNzc0NsYXNzXCIsXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvL1NNUDItMjk1NyBmaXggdGhlIGRhdGUgaXNzdWUgb24gdGhlIHJhdyBkYXRhXHJcblx0cHVibGljIGRyaWxsVGhyb3VnaChhcmdzOiBEcmlsbFRocm91Z2hFdmVudEFyZ3MpIHtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5ncmlkQ29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBkYXRhID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gYXJncy5ncmlkQ29sdW1uc1tpXS5maWVsZFxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRkYXRhWzBdLmRhdGFUeXBlID09PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0ZGF0YVswXS5kYXRhVHlwZSA9PT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRhcmdzLmdyaWRDb2x1bW5zW2ldLnR5cGUgPSBcImRhdGVcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0Ly8jZW5kcmVnaW9uXHJcblxyXG5cdHByaXZhdGUgc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChvYmosIGRhdGEsIGNvZGUpIHtcclxuXHRcdGlmIChjb2RlID09PSAtMSkge1xyXG5cdFx0XHRvYmouc3R5bGUuY29sb3IgPSBkYXRhLm5lZ2FGb250Q29sb3I7XHJcblx0XHRcdG9iai5zdHlsZS5mb250RmFtaWx5ID0gZGF0YS5uZWdhRm9udEZhbWlseVZhbHVlO1xyXG5cdFx0XHRvYmouc3R5bGUuZm9udFNpemUgPSBkYXRhLm5lZ2FGb250U2l6ZVZhbHVlO1xyXG5cdFx0XHRvYmouc3R5bGUuYmFja2dyb3VuZENvbG9yID0gZGF0YS5uZWdhQmFja2dyb3VuZENvbG9yO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0b2JqLnN0eWxlLmNvbG9yID0gZGF0YS5mb250Q29sb3I7XHJcblx0XHRcdG9iai5zdHlsZS5mb250RmFtaWx5ID0gZGF0YS5mb250RmFtaWx5VmFsdWU7XHJcblx0XHRcdG9iai5zdHlsZS5mb250U2l6ZSA9IGRhdGEuZm9udFNpemVWYWx1ZTtcclxuXHRcdFx0b2JqLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGRhdGEuYmFja2dyb3VuZENvbG9yO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRDb21wYXJlQ29uZGl0aW9uYWwoXHJcblx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdGRhdGFcclxuXHQpIHtcclxuXHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUxKSA9PSAwKSB7XHJcblx0XHRcdHN3aXRjaCAoZGF0YS5jb21wYXJlU2VsZWN0KSB7XHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuXCI6IC8vIOWwj+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJMZXNzVGhhbk9yRXF1YWxUb1wiOiAvLyDlsI/kuo7nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5cIjogLy8g5aSn5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuT3JFcXVhbFRvXCI6IC8vIOWkp+S6juetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkdyZWF0ZXJUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEVxdWFsc1wiOiAvLyDkuI3nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQmV0d2VlblwiOiAvLyB2YWx1ZTE8PSB2YWwgPD12YWx1ZTJcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSA9PT0gMSkge1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5jb21wYXJlVmFsdWUyXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEJldHdlZW5cIjogLy8gdmFsID49IHZhbHVlMiwgdmFsIDw9IHZhbHVlMVxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpID09PSAxKSB7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTEpID09PSAxKSB7XHJcblx0XHRcdHN3aXRjaCAoZGF0YS5jb21wYXJlU2VsZWN0KSB7XHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuXCI6IC8vIOWwj+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJMZXNzVGhhbk9yRXF1YWxUb1wiOiAvLyDlsI/kuo7nrYnkuo5cclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBOdW1iZXIoZGF0YS5jb21wYXJlVmFsdWUxKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJMZXNzVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuXCI6IC8vIOWkp+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhbk9yRXF1YWxUb1wiOiAvLyDlpKfkuo7nrYnkuo5cclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IE51bWJlcihkYXRhLmNvbXBhcmVWYWx1ZTEpO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiRXF1YWxzXCI6IC8vIOetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJFcXVhbHNcIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90RXF1YWxzXCI6IC8vIOS4jeetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihkYXRhLmNvbXBhcmVWYWx1ZTEpO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0Ly8gcHVzaOi/m+aVsOe7hFxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0Ly8gcHVzaOi/m+aVsOe7hFxyXG5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkJldHdlZW5cIjogLy8gdmFsdWUxPD0gdmFsIDw9dmFsdWUyXHJcblx0XHRcdFx0XHRpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMikgPT09IDEpIHtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5jb21wYXJlVmFsdWUyXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEJldHdlZW5cIjogLy8gdmFsID49IHZhbHVlMiwgdmFsIDw9IHZhbHVlMVxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpID09PSAxKSB7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0Ly8gcHVzaOi/m+aVsOe7hFxyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMSkgPT09IC0xKSB7XHJcblx0XHRcdHN3aXRjaCAoZGF0YS5jb21wYXJlU2VsZWN0KSB7XHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuXCI6IC8vIOWwj+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJMZXNzVGhhbk9yRXF1YWxUb1wiOiAvLyDlsI/kuo7nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IGRhdGEuY29tcGFyZVNlbGVjdDtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhblwiOiAvLyDlpKfkuo5cclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5PckVxdWFsVG9cIjogLy8g5aSn5LqO562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5PckVxdWFsVG9cIjtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkVxdWFsc1wiOiAvLyDnrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiRXF1YWxzXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEVxdWFsc1wiOiAvLyDkuI3nrYnkuo5cclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTm90RXF1YWxzXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQmV0d2VlblwiOiAvLyB2YWx1ZTE8PSB2YWwgPD12YWx1ZTJcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSkge1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMjtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUyO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJOb3RCZXR3ZWVuXCI6IC8vIHZhbCA+PSB2YWx1ZTIsIHZhbCA8PSB2YWx1ZTFcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSkge1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTI7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkdyZWF0ZXJUaGFuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBkYXRhLmNvbXBhcmVWYWx1ZTI7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJOb3RCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldFF1YXJ0ZXJWYWx1ZShmb3JtYXQsIGRhdGUsIHF1YXJ0ZXIpIHtcclxuXHRcdGxldCB5ZWFyOiBhbnk7XHJcblx0XHRzd2l0Y2ggKGZvcm1hdCkge1xyXG5cdFx0XHRjYXNlIFwiUTEgMjAyMVwiOlxyXG5cdFx0XHRcdHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcblx0XHRcdFx0cmV0dXJuIFwiUVwiICsgcXVhcnRlciArIFwiIFwiICsgeWVhcjtcclxuXHRcdFx0Y2FzZSBcIlExIDIxXCI6XHJcblx0XHRcdFx0eWVhciA9IChkYXRlIGFzIGFueSkuZ2V0WWVhcigpIC0gMTAwO1xyXG5cdFx0XHRcdHJldHVybiBcIlFcIiArIHF1YXJ0ZXIgKyBcIiBcIiArIHllYXI7XHJcblx0XHRcdGNhc2UgXCIyMDIxIFExXCI6XHJcblx0XHRcdFx0eWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuXHRcdFx0XHRyZXR1cm4geWVhciArIFwiIFwiICsgXCJRXCIgKyBxdWFydGVyO1xyXG5cdFx0XHRjYXNlIFwiMjEgUTFcIjpcclxuXHRcdFx0XHR5ZWFyID0gKGRhdGUgYXMgYW55KS5nZXRZZWFyKCkgLSAxMDA7XHJcblx0XHRcdFx0cmV0dXJuIHllYXIgKyBcIiBcIiArIFwiUVwiICsgcXVhcnRlcjtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGN1c3RvbWlzZUNlbGwoYXJnczogUXVlcnlDZWxsSW5mb0V2ZW50QXJncykge1xyXG5cdFx0aWYgKGFyZ3MuY29sdW1uLnR5cGUgPT09IFwiZGF0ZVwiIHx8IGFyZ3MuY29sdW1uLnR5cGUgPT09IFwiZGF0ZVRpbWVcIikge1xyXG5cdFx0XHRjb25zdCB7IGZpZWxkIH0gPSBhcmdzLmNvbHVtbjtcclxuXHRcdFx0aWYgKCFhcmdzLmRhdGFbZmllbGRdKSB7XHJcblx0XHRcdFx0YXJncy5jb2x1bW4udHlwZSA9IFwic3RyaW5nXCI7XHJcblx0XHRcdFx0YXJncy5jb2x1bW4uZm9ybWF0ID0gXCJcIjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHBhcmFtIHRpbWVBcnJheSDmlbDnu4Tlr7nosaEgW3tcImRhdGVcIjpcIjIwMjEtMDEtMDFcIn0se1wiZGF0ZVwiOlwiMjAyMS0wMi0wMVwifV1cclxuXHQgKiBAcGFyYW0gZW5kRGF0ZSDmiKroh7Pml7bpl7RcclxuXHQgKiBAcGFyYW0gaW50ZXJ2YWwg5pe26Ze06Ze06ZqUIHllYXIgLyBxdWFydGVyIC8gbW9udGhcclxuXHQgKiBAcGFyYW0gdGltZUtleSDml7bpl7TlrZfmrrXlkI0gZGF0ZVxyXG5cdCAqIEByZXR1cm5zIOWIkuWIhuWQjueahOaXtumXtOWIhue7hOWvueixoVxyXG5cdCAqL1xyXG5cdGdldFRpbWVSYW5nZXModGltZUFycmF5LCBlbmREYXRlLCBpbnRlcnZhbCwgdGltZUtleSkge1xyXG5cdFx0Ly8g5bCG5pe26Ze05a2X56ym5Liy6L2s5o2i5Li6IG1vbWVudCDlr7nosaFcclxuXHRcdGNvbnN0IGRhdGVzID0gdGltZUFycmF5Lm1hcCgoaXRlbSkgPT4gbW9tZW50KGl0ZW1bdGltZUtleSB8fCBcImRhdGVcIl0pKTtcclxuXHJcblx0XHQvLyDliIbpmpTnrKZcclxuXHRcdGNvbnN0IGRlbGltaXRlciA9IFwiLVwiO1xyXG5cclxuXHRcdC8vIOaJvuWIsOacgOWwj+aXtumXtOWSjOacgOWkp+aXtumXtFxyXG5cdFx0Y29uc3QgbWluRGF0ZSA9IG1vbWVudC5taW4oZGF0ZXMpO1xyXG5cdFx0Y29uc3QgbWF4RGF0ZSA9IG1vbWVudChlbmREYXRlKTtcclxuXHJcblx0XHQvLyDliJ3lp4vljJbnu5Pmnpzlr7nosaFcclxuXHRcdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRcdC8vIOagueaNruWFpeWPgui/m+ihjOWIkuWIhlxyXG5cdFx0aWYgKGludGVydmFsID09PSBcInllYXJcIikge1xyXG5cdFx0XHRjb25zdCBzdGFydFllYXIgPSBtaW5EYXRlLnllYXIoKTtcclxuXHRcdFx0Y29uc3QgZW5kWWVhciA9IG1heERhdGUueWVhcigpO1xyXG5cclxuXHRcdFx0Zm9yIChsZXQgeWVhciA9IHN0YXJ0WWVhcjsgeWVhciA8PSBlbmRZZWFyOyB5ZWFyKyspIHtcclxuXHRcdFx0XHRyZXN1bHRbeWVhcl0gPSBbXTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0ZGF0ZXMuZm9yRWFjaCgoZGF0ZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCB5ZWFyID0gZGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0cmVzdWx0W3llYXJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIGlmIChpbnRlcnZhbCA9PT0gXCJxdWFydGVyXCIpIHtcclxuXHRcdFx0Ly8g5a2Y5YKo5a2j5bqm5a2X56ym5LiyXHJcblx0XHRcdGNvbnN0IHF1YXJ0ZXJzID0gW107XHJcblxyXG5cdFx0XHQvLyDpgJDkuIDpgY3ljobmr4/kuKrlraPluqZcclxuXHRcdFx0Zm9yIChcclxuXHRcdFx0XHRsZXQgY3VycmVudERhdGUgPSBtaW5EYXRlLmNsb25lKCk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuaXNTYW1lT3JCZWZvcmUobWF4RGF0ZSk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuYWRkKDMsIFwibW9udGhzXCIpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0Y29uc3QgcXVhcnRlciA9IE1hdGguY2VpbCgoY3VycmVudERhdGUubW9udGgoKSArIDEpIC8gMyk7IC8vIOiuoeeul+Wto+W6plxyXG5cdFx0XHRcdHF1YXJ0ZXJzLnB1c2goYCR7eWVhcn0ke2RlbGltaXRlcn1RJHtxdWFydGVyfWApOyAvLyDmoLzlvI/ljJblubbmt7vliqDliLDmlbDnu4RcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8g6L6T5Ye65omA5pyJ5a2j5bqmXHJcblx0XHRcdHF1YXJ0ZXJzLmZvckVhY2goKHF1YXJ0ZXIsIGluZGV4KSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0W3F1YXJ0ZXJdID0gW107XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0ZGF0ZXMuZm9yRWFjaCgoZGF0ZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCB5ZWFyID0gZGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0Y29uc3QgcXVhcnRlciA9IGRhdGUucXVhcnRlcigpOyAvLyDojrflj5blraPluqZcclxuXHRcdFx0XHRpZiAocXVhcnRlciA9PT0gMSlcclxuXHRcdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgXCJRMVwiXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHRcdGVsc2UgaWYgKHF1YXJ0ZXIgPT09IDIpXHJcblx0XHRcdFx0XHRyZXN1bHRbeWVhciArIGRlbGltaXRlciArIFwiUTJcIl0ucHVzaCh0aW1lQXJyYXlbaW5kZXhdKTtcclxuXHRcdFx0XHRlbHNlIGlmIChxdWFydGVyID09PSAzKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3llYXIgKyBkZWxpbWl0ZXIgKyBcIlEzXCJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdFx0ZWxzZSBpZiAocXVhcnRlciA9PT0gNClcclxuXHRcdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgXCJRNFwiXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0gZWxzZSBpZiAoaW50ZXJ2YWwgPT09IFwibW9udGhcIikge1xyXG5cdFx0XHQvLyDlrZjlgqjmnIjku73lrZfnrKbkuLJcclxuXHRcdFx0Y29uc3QgbW9udGhzID0gW107XHJcblxyXG5cdFx0XHQvLyDpgJDkuIDpgY3ljobmr4/kuKrmnIhcclxuXHRcdFx0Zm9yIChcclxuXHRcdFx0XHRsZXQgY3VycmVudERhdGUgPSBtaW5EYXRlLmNsb25lKCk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuaXNTYW1lT3JCZWZvcmUobWF4RGF0ZSk7XHJcblx0XHRcdFx0Y3VycmVudERhdGUuYWRkKDEsIFwibW9udGhzXCIpXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdG1vbnRocy5wdXNoKGN1cnJlbnREYXRlLmZvcm1hdChgWVlZWSR7ZGVsaW1pdGVyfU1NYCkpOyAvLyDmoLzlvI/ljJblubbmt7vliqDliLDmlbDnu4RcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8g6L6T5Ye65omA5pyJ5pyI5Lu9XHJcblx0XHRcdG1vbnRocy5mb3JFYWNoKChtb250aCwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRyZXN1bHRbbW9udGhdID0gW107XHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0ZGF0ZXMuZm9yRWFjaCgoZGF0ZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRjb25zdCB5ZWFyID0gZGF0ZS55ZWFyKCk7XHJcblx0XHRcdFx0Y29uc3QgbW9udGggPSAoZGF0ZS5tb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIik7IC8vIDAtMTFcclxuXHRcdFx0XHRyZXN1bHRbeWVhciArIGRlbGltaXRlciArIG1vbnRoXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICog6K6h566X5Yeg5L2V566X5pWw5bmz5pa55pu0XHJcblx0ICogQHBhcmFtIHZhbHVlcyDmlbDnu4QgWzAsIDAsIDAuMjU3NV1cclxuXHQgKiBAcmV0dXJuc1xyXG5cdCAqL1xyXG5cdGNhbGN1bGF0ZUdyb3d0aFJhdGUodmFsdWVzKSB7XHJcblx0XHRjb25zdCBwcm9kdWN0ID0gdmFsdWVzLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyAqICgxICsgdmFsKSwgMSk7XHJcblx0XHRpZiAocHJvZHVjdCA+PSAwKSB7XHJcblx0XHRcdHJldHVybiBNYXRoLnBvdyhwcm9kdWN0LCAxIC8gdmFsdWVzLmxlbmd0aCkgLSAxO1xyXG5cdFx0fSBlbHNlIGlmIChwcm9kdWN0IDwgMCkge1xyXG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCAlIDIgPT0gMCkge1xyXG5cdFx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLm50aHJvb3QocHJvZHVjdCwgdmFsdWVzLmxlbmd0aCkgLSAxO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdG50aHJvb3QoeCwgbikge1xyXG5cdFx0bGV0IG5nID0gbiAlIDI7XHJcblx0XHRpZiAobmcgPT0gMSB8fCB4IDwgMCkgeCA9IC14O1xyXG5cdFx0dmFyIHIgPSBNYXRoLnBvdyh4LCAxIC8gbik7XHJcblx0XHRuID0gTWF0aC5wb3cociwgbik7XHJcblxyXG5cdFx0aWYgKE1hdGguYWJzKHggLSBuKSA8IDEgJiYgeCA+IDAgPT09IG4gPiAwKSByZXR1cm4gbmcgPyAtciA6IHI7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiDmoIflh4blgY/lt65cclxuXHQgKiBAcGFyYW0gdmFsdWVzIOaVsOe7hCBbMCwgMCwgLTAuNDc3NV1cclxuXHQgKiBAcmV0dXJucyAwLjI3NTY4NDc1MzUzODA0NjNcclxuXHQgKi9cclxuXHRjYWxjdWxhdGVTdGFuZGFyZERldmlhdGlvbih2YWx1ZXMpIHtcclxuXHRcdGNvbnN0IG4gPSB2YWx1ZXMubGVuZ3RoO1xyXG5cclxuXHRcdC8vIOajgOafpeaVsOaNrueCueaVsOmHj1xyXG5cdFx0aWYgKG4gPCAyKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIuiHs+WwkemcgOimgeS4pOS4quaVsOaNrueCueadpeiuoeeul+agt+acrOagh+WHhuWBj+W3rlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyDorqHnrpflnYflgLxcclxuXHRcdGNvbnN0IG1lYW4gPSB2YWx1ZXMucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICsgdmFsLCAwKSAvIG47XHJcblxyXG5cdFx0Ly8g6K6h566X5pa55beuXHJcblx0XHRjb25zdCB2YXJpYW5jZSA9XHJcblx0XHRcdHZhbHVlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyBNYXRoLnBvdyh2YWwgLSBtZWFuLCAyKSwgMCkgL1xyXG5cdFx0XHQobiAtIDEpO1xyXG5cclxuXHRcdC8vIOi/lOWbnuagh+WHhuWBj+W3rlxyXG5cdFx0cmV0dXJuIE1hdGguc3FydCh2YXJpYW5jZSk7XHJcblx0fVxyXG59XHJcbiJdfQ==