@magic-xpa/gui 4.800.0 → 4.801.0-dev000.0

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 (128) hide show
  1. package/{esm2015/index.js → esm2020/index.mjs} +0 -0
  2. package/{esm2015/magic-xpa-gui.js → esm2020/magic-xpa-gui.mjs} +0 -0
  3. package/esm2020/src/Commands.mjs +186 -0
  4. package/esm2020/src/Events.mjs +420 -0
  5. package/esm2020/src/EventsProcessor.mjs +67 -0
  6. package/esm2020/src/FocusManager.mjs +34 -0
  7. package/{esm2015/src/GuiConstants.js → esm2020/src/GuiConstants.mjs} +0 -0
  8. package/{esm2015/src/GuiEnums.js → esm2020/src/GuiEnums.mjs} +0 -0
  9. package/{esm2015/src/GuiEnvironment.js → esm2020/src/GuiEnvironment.mjs} +0 -0
  10. package/{esm2015/src/IFlowMonitorQueue.js → esm2020/src/IFlowMonitorQueue.mjs} +2 -1
  11. package/esm2020/src/Manager.mjs +192 -0
  12. package/{esm2015/src/UIBridge.js → esm2020/src/UIBridge.mjs} +0 -0
  13. package/{esm2015/src/env/IEnvironment.js → esm2020/src/env/IEnvironment.mjs} +1 -0
  14. package/{esm2015/src/gui/ControlBase.js → esm2020/src/gui/ControlBase.mjs} +0 -0
  15. package/{esm2015/src/gui/GuiMgControl.js → esm2020/src/gui/GuiMgControl.mjs} +0 -0
  16. package/{esm2015/src/gui/GuiMgForm.js → esm2020/src/gui/GuiMgForm.mjs} +0 -0
  17. package/{esm2015/src/gui/KeyboardItem.js → esm2020/src/gui/KeyboardItem.mjs} +0 -0
  18. package/{esm2015/src/gui/LastFocusedVal.js → esm2020/src/gui/LastFocusedVal.mjs} +0 -0
  19. package/{esm2015/src/gui/MgValue.js → esm2020/src/gui/MgValue.mjs} +0 -0
  20. package/{esm2015/src/gui/PropParentInterface.js → esm2020/src/gui/PropParentInterface.mjs} +1 -0
  21. package/{esm2015/src/gui/low/DialogHandler.js → esm2020/src/gui/low/DialogHandler.mjs} +0 -0
  22. package/{esm2015/src/gui/low/GuiCommand.js → esm2020/src/gui/low/GuiCommand.mjs} +0 -0
  23. package/{esm2015/src/gui/low/GuiCommandQueue.js → esm2020/src/gui/low/GuiCommandQueue.mjs} +0 -0
  24. package/esm2020/src/gui/low/GuiInteractive.mjs +545 -0
  25. package/{esm2015/src/gui/low/Style.js → esm2020/src/gui/low/Style.mjs} +0 -0
  26. package/{esm2015/src/management/RuntimeContextBase.js → esm2020/src/management/RuntimeContextBase.mjs} +0 -0
  27. package/{esm2015/src/management/data/BlobType.js → esm2020/src/management/data/BlobType.mjs} +0 -0
  28. package/esm2020/src/management/data/DcValues.mjs +214 -0
  29. package/esm2020/src/management/data/DcValuesBuilderBase.mjs +97 -0
  30. package/{esm2015/src/management/data/FieldDef.js → esm2020/src/management/data/FieldDef.mjs} +0 -0
  31. package/{esm2015/src/management/data/FieldsTable.js → esm2020/src/management/data/FieldsTable.mjs} +0 -0
  32. package/esm2020/src/management/data/GuiDataViewBase.mjs +90 -0
  33. package/esm2020/src/management/data/GuiFieldBase.mjs +82 -0
  34. package/{esm2015/src/management/data/IRecord.js → esm2020/src/management/data/IRecord.mjs} +1 -0
  35. package/{esm2015/src/management/data/IReferencedObject.js → esm2020/src/management/data/IReferencedObject.mjs} +1 -0
  36. package/{esm2015/src/management/data/NUM_TYPE.js → esm2020/src/management/data/NUM_TYPE.mjs} +0 -0
  37. package/esm2020/src/management/data/ObjectReferenceBase.mjs +48 -0
  38. package/{esm2015/src/management/data/ObjectReferencesCollection.js → esm2020/src/management/data/ObjectReferencesCollection.mjs} +0 -0
  39. package/esm2020/src/management/data/RecordUtils.mjs +361 -0
  40. package/{esm2015/src/management/data/VectorType.js → esm2020/src/management/data/VectorType.mjs} +0 -0
  41. package/{esm2015/src/management/data/VectorTypeBase.js → esm2020/src/management/data/VectorTypeBase.mjs} +0 -0
  42. package/{esm2015/src/management/events/IActionManager.js → esm2020/src/management/events/IActionManager.mjs} +1 -0
  43. package/esm2020/src/management/events/IGuiEventsManager.mjs +2 -0
  44. package/{esm2015/src/management/exp/ExpressionInterface.js → esm2020/src/management/exp/ExpressionInterface.mjs} +0 -0
  45. package/esm2020/src/management/exp/GuiExpressionEvaluator.mjs +333 -0
  46. package/{esm2015/src/management/gui/ControlTable.js → esm2020/src/management/gui/ControlTable.mjs} +0 -0
  47. package/esm2020/src/management/gui/DisplayConvertor.mjs +1706 -0
  48. package/esm2020/src/management/gui/FieldValidator.mjs +1507 -0
  49. package/esm2020/src/management/gui/GuiControlPropertyAdapter.mjs +22 -0
  50. package/{esm2015/src/management/gui/GuiFormPropertyAdapter.js → esm2020/src/management/gui/GuiFormPropertyAdapter.mjs} +0 -0
  51. package/{esm2015/src/management/gui/HebrewDate.js → esm2020/src/management/gui/HebrewDate.mjs} +0 -0
  52. package/{esm2015/src/management/gui/Helps.js → esm2020/src/management/gui/Helps.mjs} +0 -0
  53. package/esm2020/src/management/gui/MgControlBase.mjs +1873 -0
  54. package/esm2020/src/management/gui/MgFormBase.mjs +748 -0
  55. package/{esm2015/src/management/gui/PIC.js → esm2020/src/management/gui/PIC.mjs} +0 -0
  56. package/esm2020/src/management/gui/PropDefaults.mjs +230 -0
  57. package/{esm2015/src/management/gui/PropInterface.js → esm2020/src/management/gui/PropInterface.mjs} +0 -0
  58. package/esm2020/src/management/gui/PropTable.mjs +221 -0
  59. package/esm2020/src/management/gui/Property.mjs +1382 -0
  60. package/{esm2015/src/management/gui/ValidationDetails.js → esm2020/src/management/gui/ValidationDetails.mjs} +0 -0
  61. package/{esm2015/src/management/gui/ValidationDetailsBase.js → esm2020/src/management/gui/ValidationDetailsBase.mjs} +0 -0
  62. package/{esm2015/src/management/gui/WrongFormatException.js → esm2020/src/management/gui/WrongFormatException.mjs} +0 -0
  63. package/{esm2015/src/management/tasks/GuiDataCollection.js → esm2020/src/management/tasks/GuiDataCollection.mjs} +0 -0
  64. package/esm2020/src/management/tasks/GuiTaskBase.mjs +502 -0
  65. package/{esm2015/src/management/tasks/IMGDataTable.js → esm2020/src/management/tasks/IMGDataTable.mjs} +1 -0
  66. package/{esm2015/src/management/tasks/ITask.js → esm2020/src/management/tasks/ITask.mjs} +1 -0
  67. package/esm2020/src/management/tasks/MgTimer.mjs +21 -0
  68. package/{esm2015/src/management/tasks/TaskDefinitionId.js → esm2020/src/management/tasks/TaskDefinitionId.mjs} +0 -0
  69. package/esm2020/src/management/tasks/TaskDefinitionIdTableSaxHandler.mjs +41 -0
  70. package/{esm2015/src/util/AuthenticationDialogHandler.js → esm2020/src/util/AuthenticationDialogHandler.mjs} +0 -0
  71. package/{esm2015/src/util/MemoryUtil.js → esm2020/src/util/MemoryUtil.mjs} +0 -0
  72. package/{esm2015/src/util/ObjectReference.js → esm2020/src/util/ObjectReference.mjs} +0 -0
  73. package/esm2020/src/util/ProcessLauncher.mjs +32 -0
  74. package/esm2020/src/util/UsernamePasswordCredentials.mjs +52 -0
  75. package/fesm2015/{magic-xpa-gui.js → magic-xpa-gui.mjs} +133 -175
  76. package/fesm2015/magic-xpa-gui.mjs.map +1 -0
  77. package/fesm2020/magic-xpa-gui.mjs +17805 -0
  78. package/fesm2020/magic-xpa-gui.mjs.map +1 -0
  79. package/package.json +27 -14
  80. package/src/Events.d.ts +2 -2
  81. package/src/EventsProcessor.d.ts +1 -1
  82. package/src/IFlowMonitorQueue.d.ts +1 -1
  83. package/src/Manager.d.ts +2 -3
  84. package/src/management/data/DcValues.d.ts +1 -1
  85. package/src/management/data/DcValuesBuilderBase.d.ts +1 -1
  86. package/src/management/data/RecordUtils.d.ts +0 -3
  87. package/src/management/events/IGuiEventsManager.d.ts +5 -5
  88. package/src/management/exp/GuiExpressionEvaluator.d.ts +2 -2
  89. package/src/management/gui/DisplayConvertor.d.ts +6 -6
  90. package/src/management/gui/GuiControlPropertyAdapter.d.ts +6 -6
  91. package/src/management/gui/MgControlBase.d.ts +2 -4
  92. package/src/management/gui/MgFormBase.d.ts +1 -1
  93. package/src/management/gui/PropTable.d.ts +1 -1
  94. package/src/management/gui/Property.d.ts +2 -2
  95. package/src/management/tasks/GuiTaskBase.d.ts +3 -3
  96. package/src/util/ProcessLauncher.d.ts +1 -3
  97. package/bundles/magic-xpa-gui.umd.js +0 -19431
  98. package/bundles/magic-xpa-gui.umd.js.map +0 -1
  99. package/bundles/magic-xpa-gui.umd.min.js +0 -16
  100. package/bundles/magic-xpa-gui.umd.min.js.map +0 -1
  101. package/esm2015/src/Commands.js +0 -189
  102. package/esm2015/src/Events.js +0 -420
  103. package/esm2015/src/EventsProcessor.js +0 -68
  104. package/esm2015/src/FocusManager.js +0 -41
  105. package/esm2015/src/Manager.js +0 -197
  106. package/esm2015/src/gui/low/GuiInteractive.js +0 -545
  107. package/esm2015/src/management/data/DcValues.js +0 -214
  108. package/esm2015/src/management/data/DcValuesBuilderBase.js +0 -97
  109. package/esm2015/src/management/data/GuiDataViewBase.js +0 -90
  110. package/esm2015/src/management/data/GuiFieldBase.js +0 -85
  111. package/esm2015/src/management/data/ObjectReferenceBase.js +0 -48
  112. package/esm2015/src/management/data/RecordUtils.js +0 -447
  113. package/esm2015/src/management/events/IGuiEventsManager.js +0 -1
  114. package/esm2015/src/management/exp/GuiExpressionEvaluator.js +0 -333
  115. package/esm2015/src/management/gui/DisplayConvertor.js +0 -1706
  116. package/esm2015/src/management/gui/FieldValidator.js +0 -1507
  117. package/esm2015/src/management/gui/GuiControlPropertyAdapter.js +0 -4
  118. package/esm2015/src/management/gui/MgControlBase.js +0 -1981
  119. package/esm2015/src/management/gui/MgFormBase.js +0 -763
  120. package/esm2015/src/management/gui/PropDefaults.js +0 -230
  121. package/esm2015/src/management/gui/PropTable.js +0 -224
  122. package/esm2015/src/management/gui/Property.js +0 -1402
  123. package/esm2015/src/management/tasks/GuiTaskBase.js +0 -506
  124. package/esm2015/src/management/tasks/MgTimer.js +0 -21
  125. package/esm2015/src/management/tasks/TaskDefinitionIdTableSaxHandler.js +0 -41
  126. package/esm2015/src/util/ProcessLauncher.js +0 -32
  127. package/esm2015/src/util/UsernamePasswordCredentials.js +0 -52
  128. package/fesm2015/magic-xpa-gui.js.map +0 -1
@@ -1 +0,0 @@
1
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUd1aUV2ZW50c01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZXZlbnRzL0lHdWlFdmVudHNNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01nQ29udHJvbEJhc2V9IGZyb20gXCIuLi9ndWkvTWdDb250cm9sQmFzZVwiO1xyXG5pbXBvcnQge1ByaW9yaXR5fSBmcm9tIFwiQG1hZ2ljLXhwYS91dGlsc1wiO1xyXG5pbXBvcnQge01nRm9ybUJhc2V9IGZyb20gXCIuLi9ndWkvTWdGb3JtQmFzZVwiO1xyXG5pbXBvcnQge01vZGlmaWVycywgUmFpc2VkQnl9IGZyb20gXCIuLi8uLi9HdWlFbnVtc1wiO1xyXG5pbXBvcnQge0lUYXNrfSBmcm9tIFwiLi4vdGFza3MvSVRhc2tcIjtcclxuaW1wb3J0IHsgS2V5Ym9hcmRJdGVtIH0gZnJvbSBcIi4uLy4uL2d1aS9LZXlib2FyZEl0ZW1cIjtcclxuXHJcbi8vLyA8c3VtbWFyeT5cclxuLy8vIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgYnkgdGhlIEdVSSBuYW1lc3BhY2UgZnJvbSB0aGUgRXZlbnRzTWFuYWdlciBjbGFzcy5cclxuLy8vIDwvc3VtbWFyeT5cclxuZXhwb3J0IGludGVyZmFjZSBJR3VpRXZlbnRzTWFuYWdlciB7XHJcbiAgLy8vIDxzdW1tYXJ5Pjwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjdHJsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJEaXNwbGF5TGluZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29kZVwiPjwvcGFyYW0+XHJcbiAgYWRkSW50ZXJuYWxFdmVudFdpdGhDdHJsQW5kRGlzcGxheUxpbmVBbmRDb2RlKGN0cmw6IE1nQ29udHJvbEJhc2UsIERpc3BsYXlMaW5lOiBudW1iZXIsIGNvZGU6IG51bWJlcik6IHZvaWQ7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT48L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3RybFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29kZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicHJpb3JpdHlcIj48L3BhcmFtPlxyXG4gIGFkZEludGVybmFsRXZlbnRXaXRoQ3RybEFuZENvZGVBbmRQcmlvcml0eShjdHJsOiBNZ0NvbnRyb2xCYXNlLCBjb2RlOiBudW1iZXIsIHByaW9yaXR5OiBQcmlvcml0eSk6IHZvaWQ7XHJcblxyXG4gIC8vLyA8c3VtbWFyeT48L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiZm9ybVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3RybFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibW9kaWZpZXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImtleUNvZGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN0YXJ0XCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJlbmRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRleHRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImltXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpc0FjdENoYXJcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInN1Z2dlc3RlZFZhbHVlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb2RlXCI+PC9wYXJhbT5cclxuICBBZGRLZXlib2FyZEV2ZW50KGZvcm06IE1nRm9ybUJhc2UsIGN0cmw6IE1nQ29udHJvbEJhc2UsIG1vZGlmaWVyOiBNb2RpZmllcnMsIGtleUNvZGU6IG51bWJlciwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHRleHQ6IHN0cmluZywgaXNBY3RDaGFyOiBib29sZWFuLCBzdWdnZXN0ZWRWYWx1ZTogc3RyaW5nLCBjb2RlOiBudW1iZXIpOiB2b2lkO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+IEFkZCBpbnRlcm5hbCBldmVudCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgR1VJIHF1ZXVlIHRvIHRoZSBxdWV1ZSA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY3RybFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29kZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwibGluZVwiPjwvcGFyYW0+XHJcbiAgYWRkR3VpVHJpZ2dlcmVkRXZlbnRXaXRoQ3RybEFuZENvZGVBbmRMaW5lKGN0cmw6IE1nQ29udHJvbEJhc2UsIGNvZGU6IG51bWJlciwgbGluZTogbnVtYmVyKTogdm9pZDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBBZGQgaW50ZXJuYWwgZXZlbnQgdGhhdCB3YXMgdHJpZ2dlcmVkIGJ5IEdVSSBxdWV1ZSB0byB0aGUgcXVldWUgPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImN0cmxcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvZGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIGFkZEd1aVRyaWdnZXJlZEV2ZW50V2l0aEN0cmxBbmRDb2RlQW5kTGluZUFuZE1vZGlmaWVyKGN0cmw6IE1nQ29udHJvbEJhc2UsIGNvZGU6IG51bWJlciwgbGluZTogbnVtYmVyLCBtb2RpZmllcjogTW9kaWZpZXJzKTogdm9pZDtcclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT4gQWRkIGludGVybmFsIGV2ZW50IHRoYXQgd2FzIHRyaWdnZXJlZCBieSBHVUkgcXVldWUgdG8gdGhlIHF1ZXVlIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0YXNrXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb2RlXCI+PC9wYXJhbT5cclxuICBhZGRHdWlUcmlnZ2VyZWRFdmVudFdpdGhUYXNrQW5kQ29kZSh0YXNrOiBJVGFzaywgY29kZTogbnVtYmVyKTogdm9pZDtcclxuXHJcbiAgLy8vIDxzdW1tYXJ5PiBBZGQgaW50ZXJuYWwgZXZlbnQgdGhhdCB3YXMgdHJpZ2dlcmVkIGJ5IEdVSSBxdWV1ZSB0byB0aGUgcXVldWUgPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInRhc2tcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvZGVcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImxpbmVcIj48L3BhcmFtPlxyXG4gIGFkZEd1aVRyaWdnZXJlZEV2ZW50V2l0aFRhc2tBbmRDb2RlQW5kTGluZSh0YXNrOiBJVGFzaywgY29kZTogbnVtYmVyLCBsaW5lOiBudW1iZXIpOiB2b2lkO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIEFkZCBpbnRlcm5hbCBldmVudCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgR1VJIHF1ZXVlIHRvIHRoZSBxdWV1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGFza1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29kZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib25NdWx0aU1hcmtcIj4gdHJ1ZSBpZiBtdXRpbWFyayBjb250aW51ZXM8L3BhcmFtPlxyXG4gIGFkZEd1aVRyaWdnZXJlZEV2ZW50V2l0aFRhc2tBbmRDb2RlQW5kT25NdWx0aU1hcmsodGFzazogSVRhc2ssIGNvZGU6IG51bWJlciwgb25NdWx0aU1hcms6IGJvb2xlYW4pOiB2b2lkO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+IEFkZCBpbnRlcm5hbCBldmVudCB0aGF0IHdhcyB0cmlnZ2VyZWQgYnkgR1VJIHF1ZXVlIHRvIHRoZSBxdWV1ZSA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidGFza1wiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiY29kZVwiPjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwicmFpc2VkQnlcIj48L3BhcmFtPlxyXG4gIGFkZEd1aVRyaWdnZXJlZEV2ZW50VGFza0FuZENvZGVBbmRSYWlzZWRCeSh0YXNrOiBJVGFzaywgY29kZTogbnVtYmVyLCByYWlzZWRCeTogUmFpc2VkQnkpOiB2b2lkO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+IGhhbmRsZSBDb2x1bW4gQ2xpY2sgZXZlbnQgb24gQ29sdW1uIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJjb2x1bW5DdHJsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJkaXJlY3Rpb25cIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImNvbHVtbkhlYWRlclwiPjwvcGFyYW0+XHJcbiAgQWRkQ29sdW1uQ2xpY2tFdmVudChjb2x1bW5DdHJsOiBNZ0NvbnRyb2xCYXNlLCBkaXJlY3Rpb246IG51bWJlciwgY29sdW1uSGVhZGVyOiBzdHJpbmcpOiB2b2lkO1xyXG5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInRhc2tcIj48L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwia2JJdG1cIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIGxhc3QgZW5hYmxlZCBhY3Rpb24gZm9yIHRoZSBzcGVjaWZpYyBrZXkgKGluIGtiSXRlbSk8L3JldHVybnM+XHJcbiAgLy8vIDxjaGVja0FjY2Vzc0tleUluTWVudXM6PiAgaWYgdG8gY2hlY2sgdGhlIGtleWJvYXJkIGluIHRoZSBtZW51IDwvY2hlY2tBY2Nlc3NLZXlJbk1lbnVzOj5cclxuICBnZXRNYXRjaGluZ0FjdGlvbih0YXNrOiBJVGFzaywga2JJdG06IEtleWJvYXJkSXRlbSwgY2hlY2tBY2Nlc3NLZXlJbk1lbnVzOiBib29sZWFuKTogbnVtYmVyO1xyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIFwiaWdub3JlIHVua25vd24gYWJvcnRcIiBmbGFnXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBpZ25vcmVVbmtub3duQWJvcnQoKTogYm9vbGVhbjtcclxufVxyXG4iXX0=
@@ -1,333 +0,0 @@
1
- import { ApplicationException, NString } from '@magic-xpa/mscorelib';
2
- import { Rtf, StorageAttribute, StorageAttributeCheck, StrUtil } from '@magic-xpa/utils';
3
- import { Manager } from '../../Manager';
4
- import { Commands } from '../../Commands';
5
- import { NUM_TYPE } from '../data/NUM_TYPE';
6
- import { BlobType } from '../data/BlobType';
7
- import { DisplayConvertor } from '../gui/DisplayConvertor';
8
- export class GuiExpressionEvaluator {
9
- constructor() {
10
- this.ExpTask = null;
11
- this.Events = null;
12
- }
13
- eval_op_statusbar_set_text(resVal, statusBarText) {
14
- resVal.Attr = StorageAttribute.UNICODE;
15
- resVal.StrVal = Manager.GetCurrentRuntimeContext().DefaultStatusMsg;
16
- if (Manager.GetCurrentRuntimeContext().DefaultStatusMsg === null) {
17
- resVal.StrVal = '';
18
- }
19
- else {
20
- resVal.StrVal = Manager.GetCurrentRuntimeContext().DefaultStatusMsg;
21
- }
22
- resVal.IsNull = false;
23
- if (!(statusBarText.Attr !== StorageAttribute.ALPHA && statusBarText.Attr !== StorageAttribute.UNICODE)) {
24
- if (!statusBarText.IsNull) {
25
- let text = statusBarText.StrVal;
26
- let task = this.ExpTask.GetContextTask();
27
- if (task.getForm() === null && Manager.GetCurrentRuntimeContext().FrameForm !== null) {
28
- task = Manager.GetCurrentRuntimeContext().FrameForm.getTask();
29
- }
30
- task.WriteToMessagePane(text, false);
31
- Manager.GetCurrentRuntimeContext().DefaultStatusMsg = text;
32
- }
33
- }
34
- }
35
- IsParallel(task) {
36
- return false;
37
- }
38
- eval_op_browserExecute_DO(resVal, controlName, text, sync, language) {
39
- resVal.Attr = StorageAttribute.BOOLEAN;
40
- resVal.BoolVal = false;
41
- let form = this.ExpTask.getForm();
42
- let sCtrlName = StrUtil.rtrim(controlName.StrVal);
43
- let control = this.ExpTask.getForm().GetCtrl(sCtrlName);
44
- if (control !== null && control.isBrowserControl()) {
45
- resVal.BoolVal = Commands.browserExecute(control, text.StrVal, sync.BoolVal, language);
46
- }
47
- }
48
- eval_op_ctrl_name(resVal) {
49
- let lastClickedCtrlName = Manager.GetCurrentRuntimeContext().LastClickedCtrlName;
50
- resVal.StrVal = (NString.IsNullOrEmpty(lastClickedCtrlName) ? '' : lastClickedCtrlName);
51
- resVal.Attr = StorageAttribute.ALPHA;
52
- }
53
- eval_op_formStateClear(formName, resVal) {
54
- }
55
- eval_op_gotoCtrl(ctrlName, rowNum, generation, retVal) {
56
- retVal.Attr = StorageAttribute.BOOLEAN;
57
- retVal.BoolVal = false;
58
- let task = this.GetContextTask(generation.MgNumVal.NUM_2_LONG());
59
- if (task === null || task.getForm() === null)
60
- return;
61
- let iRowNum = rowNum.MgNumVal.NUM_2_LONG();
62
- let sCtrlName = StrUtil.rtrim(ctrlName.StrVal);
63
- let ctrl = task.getForm().GetCtrl(sCtrlName);
64
- retVal.BoolVal = this.HandleControlGoto(task, ctrl, iRowNum);
65
- }
66
- static GetContextTask(currTask, generation) {
67
- let task = null;
68
- let taskBase = currTask.GetContextTask();
69
- if (generation === GuiExpressionEvaluator.TRIGGER_TASK) {
70
- task = taskBase;
71
- }
72
- else {
73
- if (generation < taskBase.GetTaskDepth()) {
74
- task = taskBase.GetTaskAncestor(generation);
75
- }
76
- }
77
- return task;
78
- }
79
- GetContextTask(generation) {
80
- return GuiExpressionEvaluator.GetContextTask(this.ExpTask, generation);
81
- }
82
- ConstructMagicNum(resVal, i, attr) {
83
- resVal.MgNumVal = new NUM_TYPE();
84
- resVal.MgNumVal.NUM_4_LONG(i);
85
- resVal.Attr = attr;
86
- }
87
- SetNULL(resVal, attr) {
88
- resVal.IsNull = true;
89
- resVal.Attr = attr;
90
- switch (attr) {
91
- case StorageAttribute.ALPHA:
92
- case StorageAttribute.UNICODE:
93
- resVal.StrVal = null;
94
- break;
95
- case StorageAttribute.TIME:
96
- case StorageAttribute.DATE:
97
- case StorageAttribute.NUMERIC:
98
- resVal.MgNumVal = null;
99
- break;
100
- case StorageAttribute.BOOLEAN:
101
- resVal.BoolVal = false;
102
- break;
103
- default:
104
- break;
105
- }
106
- }
107
- GetValidatedValue(currCtrl, oldValue, newValue) {
108
- let vd = currCtrl.buildCopyPicture(oldValue, newValue);
109
- vd.evaluate();
110
- let validationFailed = vd.ValidationFailed;
111
- let ctrlValue;
112
- if (validationFailed) {
113
- let field = currCtrl.getField();
114
- ctrlValue = ((field.getType() === StorageAttribute.BLOB_VECTOR) ? field.getCellDefualtValue() : field.getDefaultValue());
115
- }
116
- else {
117
- ctrlValue = vd.getDispValue();
118
- }
119
- return ctrlValue;
120
- }
121
- SetVal(resVal, type, val, pic) {
122
- switch (type) {
123
- case StorageAttribute.ALPHA:
124
- case StorageAttribute.BLOB:
125
- case StorageAttribute.BLOB_VECTOR:
126
- case StorageAttribute.UNICODE:
127
- resVal.Attr = type;
128
- resVal.StrVal = val;
129
- if (type === StorageAttribute.BLOB || type === StorageAttribute.BLOB_VECTOR)
130
- resVal.IncludeBlobPrefix = true;
131
- break;
132
- case StorageAttribute.NUMERIC:
133
- case StorageAttribute.DATE:
134
- case StorageAttribute.TIME:
135
- resVal.Attr = type;
136
- if (val == null)
137
- resVal.MgNumVal = null;
138
- else if (pic == null)
139
- resVal.MgNumVal = new NUM_TYPE(val);
140
- else
141
- resVal.MgNumVal = new NUM_TYPE(val, pic, (this.ExpTask).getCompIdx());
142
- break;
143
- case StorageAttribute.BOOLEAN:
144
- resVal.Attr = type;
145
- resVal.BoolVal = DisplayConvertor.toBoolean(val);
146
- break;
147
- default:
148
- this.SetNULL(resVal, type);
149
- this.Events.WriteExceptionToLog('ExpressionEvaluator.SetVal() there is no such type : ' + type);
150
- break;
151
- }
152
- }
153
- static exp_build_string(val) {
154
- let name = '';
155
- if (val.StrVal !== null) {
156
- let len = val.StrVal.length;
157
- if (len > 0) {
158
- name = StrUtil.ZstringMake(val.StrVal, len);
159
- }
160
- }
161
- return name;
162
- }
163
- static isExpVal(obj) {
164
- return obj instanceof ExpVal;
165
- }
166
- BlobStringConversion(val, expectedType) {
167
- if (StorageAttributeCheck.IsTypeAlphaOrUnicode(expectedType)) {
168
- if (val.Attr === StorageAttribute.BLOB) {
169
- let includeBlobPrefix = val.IncludeBlobPrefix;
170
- if (includeBlobPrefix) {
171
- let contentType = BlobType.getContentType(val.StrVal);
172
- val.StrVal = BlobType.getString(val.StrVal);
173
- val.IncludeBlobPrefix = false;
174
- if (contentType !== BlobType.CONTENT_TYPE_BINARY && Rtf.isRtf(val.StrVal)) {
175
- val.StrVal = StrUtil.GetPlainTextfromRtf(val.StrVal);
176
- }
177
- }
178
- val.Attr = expectedType;
179
- }
180
- else {
181
- if (val.Attr === StorageAttribute.BLOB_VECTOR) {
182
- let includeBlobPrefix2 = val.IncludeBlobPrefix;
183
- if (includeBlobPrefix2) {
184
- val.StrVal = BlobType.removeBlobPrefix(val.StrVal);
185
- val.IncludeBlobPrefix = false;
186
- }
187
- val.Attr = expectedType;
188
- }
189
- }
190
- }
191
- else {
192
- if (expectedType === StorageAttribute.BLOB) {
193
- if (StorageAttributeCheck.IsTypeAlphaOrUnicode(val.Attr)) {
194
- let contentType = (val.Attr === StorageAttribute.ALPHA) ? BlobType.CONTENT_TYPE_ANSI : BlobType.CONTENT_TYPE_UNICODE;
195
- val.StrVal = BlobType.createFromString(val.StrVal, contentType);
196
- val.IncludeBlobPrefix = true;
197
- val.Attr = expectedType;
198
- }
199
- }
200
- }
201
- }
202
- eval_op_zimeread(resVal) {
203
- resVal.Attr = StorageAttribute.ALPHA;
204
- resVal.StrVal = '';
205
- let utilImeJpn = Manager.UtilImeJpn;
206
- if (utilImeJpn !== null) {
207
- let strImeRead = utilImeJpn.StrImeRead;
208
- if (!NString.IsNullOrEmpty(utilImeJpn.StrImeRead)) {
209
- resVal.StrVal = strImeRead;
210
- }
211
- }
212
- }
213
- eval_op_win_help(expFilePath, expHelpCmd, expHelpKey, resVal) {
214
- let filePath = expFilePath.StrVal;
215
- let helpCmd = expHelpCmd.MgNumVal.NUM_2_LONG();
216
- let helpKey = expHelpKey.StrVal;
217
- resVal.Attr = StorageAttribute.BOOLEAN;
218
- try {
219
- Manager.ShowWindowHelp(filePath, helpCmd, helpKey);
220
- resVal.BoolVal = true;
221
- }
222
- catch (ex) {
223
- resVal.BoolVal = false;
224
- }
225
- }
226
- ConvertExpVal(val, expectedType) {
227
- if (StorageAttributeCheck.StorageFldAlphaUnicodeOrBlob(val.Attr, expectedType)) {
228
- this.BlobStringConversion(val, expectedType);
229
- }
230
- }
231
- }
232
- GuiExpressionEvaluator.TRIGGER_TASK = 500000;
233
- export class ExpVal {
234
- constructor(attr, isNull, mgVal) {
235
- this.Attr = StorageAttribute.NONE;
236
- this.IsNull = false;
237
- this.MgNumVal = null;
238
- this.StrVal = null;
239
- this.BoolVal = false;
240
- this.IncludeBlobPrefix = false;
241
- this.OriginalNull = false;
242
- this.VectorField = null;
243
- if (arguments.length === 0) {
244
- this.constructor_0();
245
- return;
246
- }
247
- this.constructor_1(attr, isNull, mgVal);
248
- }
249
- constructor_0() {
250
- this.Attr = StorageAttribute.NONE;
251
- }
252
- constructor_1(attr, isNull, mgVal) {
253
- this.Init(attr, isNull, mgVal);
254
- }
255
- Copy(src) {
256
- this.Attr = src.Attr;
257
- this.BoolVal = src.BoolVal;
258
- this.IncludeBlobPrefix = src.IncludeBlobPrefix;
259
- this.IsNull = src.IsNull;
260
- this.MgNumVal = src.MgNumVal;
261
- this.StrVal = src.StrVal;
262
- this.VectorField = src.VectorField;
263
- this.OriginalNull = src.OriginalNull;
264
- }
265
- Nullify() {
266
- this.Init(StorageAttribute.NONE, true, null);
267
- }
268
- Init(attr, isNull, mgVal) {
269
- this.Attr = attr;
270
- this.IsNull = isNull;
271
- switch (this.Attr) {
272
- case StorageAttribute.ALPHA:
273
- case StorageAttribute.UNICODE:
274
- this.StrVal = mgVal;
275
- break;
276
- case StorageAttribute.BLOB:
277
- case StorageAttribute.BLOB_VECTOR:
278
- this.StrVal = mgVal;
279
- this.IncludeBlobPrefix = true;
280
- break;
281
- case StorageAttribute.NUMERIC:
282
- case StorageAttribute.DATE:
283
- case StorageAttribute.TIME:
284
- this.MgNumVal = ((mgVal !== null) ? new NUM_TYPE(mgVal) : null);
285
- break;
286
- case StorageAttribute.BOOLEAN:
287
- this.BoolVal = (mgVal !== null && mgVal === '1');
288
- break;
289
- case StorageAttribute.NONE:
290
- this.BoolVal = false;
291
- this.StrVal = null;
292
- this.MgNumVal = null;
293
- this.OriginalNull = true;
294
- this.VectorField = null;
295
- this.IncludeBlobPrefix = false;
296
- break;
297
- case StorageAttribute.DOTNET:
298
- this.StrVal = mgVal;
299
- break;
300
- default:
301
- throw new ApplicationException('in ExpVal.ExpVal() illegal attribute: \'' + this.Attr + '\'');
302
- }
303
- }
304
- ToMgVal() {
305
- let str;
306
- switch (this.Attr) {
307
- case StorageAttribute.ALPHA:
308
- case StorageAttribute.BLOB:
309
- case StorageAttribute.BLOB_VECTOR:
310
- case StorageAttribute.UNICODE:
311
- str = this.StrVal;
312
- break;
313
- case StorageAttribute.NUMERIC:
314
- case StorageAttribute.DATE:
315
- case StorageAttribute.TIME:
316
- str = this.MgNumVal.toXMLrecord();
317
- break;
318
- case StorageAttribute.BOOLEAN:
319
- str = this.BoolVal
320
- ? '1'
321
- : '0';
322
- break;
323
- default:
324
- str = '[illegal attribute: ' + this.Attr + ']';
325
- break;
326
- }
327
- return str;
328
- }
329
- isEmptyString() {
330
- return (this.Attr === StorageAttribute.ALPHA || this.Attr === StorageAttribute.UNICODE) && this.StrVal === '';
331
- }
332
- }
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpRXhwcmVzc2lvbkV2YWx1YXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1aS9zcmMvbWFuYWdlbWVudC9leHAvR3VpRXhwcmVzc2lvbkV2YWx1YXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQVEsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0UsT0FBTyxFQUFlLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUdsSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzNELE1BQU0sT0FBZ0Isc0JBQXNCO0lBMlUxQztRQXpVQSxZQUFPLEdBQWdCLElBQUksQ0FBQztRQUNwQixXQUFNLEdBQVEsSUFBSSxDQUFDO0lBMFUzQixDQUFDO0lBN1RELDBCQUEwQixDQUFDLE1BQWMsRUFBRSxhQUFxQjtRQUM5RCxNQUFNLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztRQUN2QyxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1FBRXBFLElBQUksT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFO1lBQ2hFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQ3BCO2FBQU07WUFDTCxNQUFNLENBQUMsTUFBTSxHQUFH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QWdCLENBQUMsSUFBSSxDQUFDO1lBQzNCLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxDQUFDO1lBQ2xDLEtBQUssZ0JBQWdCLENBQUMsT0FBTztnQkFDM0IsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ2xCLE1BQU07WUFFUixLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztZQUM5QixLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUMzQixLQUFLLGdCQUFnQixDQUFDLElBQUk7Z0JBQ3hCLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNsQyxNQUFNO1lBRVIsS0FBSyxnQkFBZ0IsQ0FBQyxPQUFPO2dCQUMzQixHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU87b0JBQ2hCLENBQUMsQ0FBQyxHQUFHO29CQUNMLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ1IsTUFBTTtZQUVSO2dCQUNFLEdBQUcsR0FBRyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztnQkFDL0MsTUFBTTtTQUNUO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBTUQsYUFBYTtRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO0lBQ2hILENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uRXhjZXB0aW9uLCBMaXN0LCBOU3RyaW5nIH0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQgeyBIZWxwQ29tbWFuZCwgUnRmLCBTdG9yYWdlQXR0cmlidXRlLCBTdG9yYWdlQXR0cmlidXRlQ2hlY2ssIFN0clV0aWwsIFV0aWxJbWVKcG4gfSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHsgR3VpVGFza0Jhc2UgfSBmcm9tICcuLi90YXNrcy9HdWlUYXNrQmFzZSc7XHJcbmltcG9ydCB7IElUYXNrIH0gZnJvbSAnLi4vdGFza3MvSVRhc2snO1xyXG5pbXBvcnQgeyBNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vTWFuYWdlcic7XHJcbmltcG9ydCB7IE1nRm9ybUJhc2UgfSBmcm9tICcuLi9ndWkvTWdGb3JtQmFzZSc7XHJcbmltcG9ydCB7IE1nQ29udHJvbEJhc2UgfSBmcm9tICcuLi9ndWkvTWdDb250cm9sQmFzZSc7XHJcbmltcG9ydCB7IENvbW1hbmRzIH0gZnJvbSAnLi4vLi4vQ29tbWFuZHMnO1xyXG5pbXBvcnQgeyBOVU1fVFlQRSB9IGZyb20gJy4uL2RhdGEvTlVNX1RZUEUnO1xyXG5pbXBvcnQgeyBHdWlGaWVsZEJhc2UgfSBmcm9tICcuLi9kYXRhL0d1aUZpZWxkQmFzZSc7XHJcblxyXG5pbXBvcnQgeyBCbG9iVHlwZSB9IGZyb20gJy4uL2RhdGEvQmxvYlR5cGUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uRGV0YWlscyB9IGZyb20gJy4uL2d1aS9WYWxpZGF0aW9uRGV0YWlscyc7XHJcbmltcG9ydCB7IFBJQyB9IGZyb20gJy4uL2d1aS9QSUMnO1xyXG5pbXBvcnQgeyBEaXNwbGF5Q29udmVydG9yIH0gZnJvbSAnLi4vZ3VpL0Rpc3BsYXlDb252ZXJ0b3InO1xyXG5cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHdWlFeHByZXNzaW9uRXZhbHVhdG9yIHtcclxuICBzdGF0aWMgVFJJR0dFUl9UQVNLOiBudW1iZXIgPSA1MDAwMDA7XHJcbiAgRXhwVGFzazogR3VpVGFza0Jhc2UgPSBudWxsO1xyXG4gIHByaXZhdGUgRXZlbnRzOiBhbnkgPSBudWxsO1xyXG5cclxuICBhYnN0cmFjdCBHZXRUb3BNb3N0Rm9ybXMoY29udGV4dElkOiBudW1iZXIpOiBMaXN0PE1nRm9ybUJhc2U+O1xyXG5cclxuICBhYnN0cmFjdCBIYW5kbGVDb250cm9sR290byh0YXNrOiBJVGFzaywgY3RybDogTWdDb250cm9sQmFzZSwgcm93Tm86IG51bWJlcik6IGJvb2xlYW47XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gc2V0cyB0aGUgc3RhdHVzIGJhciB0ZXh0IHdpdGggdGhlIGdpdmVuIHRleHQgYW5kXHJcbiAgLy8vIHNldHMgdGhlIHJlc3VsdCB3aXRoIHRoZSBsYXN0IHRleHQgdGhhdCB3YXMgc2V0IHRvIHRoZSBzdGF0dXMgYmFyIGJ5IHRoZSB1c2Ugb2YgdGhpcyBmdW5jdGlvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj5sYXN0IHRleHQgb2Ygc3RhdHVzIGJhcjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJzdGF0dXNCYXJUZXh0XCI+dGhlIHRleHQgdG8gYmUgc2V0IGF0IHN0YXR1cyBiYXI8L3BhcmFtPlxyXG4gIGV2YWxfb3Bfc3RhdHVzYmFyX3NldF90ZXh0KHJlc1ZhbDogRXhwVmFsLCBzdGF0dXNCYXJUZXh0OiBFeHBWYWwpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9IE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuRGVmYXVsdFN0YXR1c01zZztcclxuXHJcbiAgICBpZiAoTWFuYWdlci5HZXRDdXJyZW50UnVudGltZUNvbnRleHQoKS5EZWZhdWx0U3RhdHVzTXNnID09PSBudWxsKSB7XHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc1ZhbC5TdHJWYWwgPSBNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLkRlZmF1bHRTdGF0dXNNc2c7XHJcbiAgICB9XHJcbiAgICByZXNWYWwuSXNOdWxsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKCEoc3RhdHVzQmFyVGV4dC5BdHRyICE9PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBICYmIHN0YXR1c0JhclRleHQuQXR0ciAhPT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSkge1xyXG4gICAgICBpZiAoIXN0YXR1c0JhclRleHQuSXNOdWxsKSB7XHJcbiAgICAgICAgbGV0IHRleHQ6IHN0cmluZyA9IHN0YXR1c0JhclRleHQuU3RyVmFsO1xyXG4gICAgICAgIGxldCB0YXNrOiBHdWlUYXNrQmFzZSA9IDxHdWlUYXNrQmFzZT50aGlzLkV4cFRhc2suR2V0Q29udGV4dFRhc2soKTtcclxuXHJcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBub24gaW50ZXJhY3RpdmUgdGFza3MsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGFzayBoYXMgb3BlbiB3aW5kb3cgPSBObywgU28gZGlzcGxheSB0aGUgc3RhdHVzIGJhciBtc2cgb24gZnJhbWUgd2luZG93LlxyXG4gICAgICAgIGlmICh0YXNrLmdldEZvcm0oKSA9PT0gbnVsbCAmJiBNYW5hZ2VyLkdldEN1cnJlbnRSdW50aW1lQ29udGV4dCgpLkZyYW1lRm9ybSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGFzayA9IE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuRnJhbWVGb3JtLmdldFRhc2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGFzay5Xcml0ZVRvTWVzc2FnZVBhbmUodGV4dCwgZmFsc2UpO1xyXG4gICAgICAgIE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuRGVmYXVsdFN0YXR1c01zZyA9IHRleHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBJc1BhcmFsbGVsKHRhc2s6IEd1aVRhc2tCYXNlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgZXZhbF9vcF9icm93c2VyRXhlY3V0ZV9ETyhyZXNWYWw6IEV4cFZhbCwgY29udHJvbE5hbWU6IEV4cFZhbCwgdGV4dDogRXhwVmFsLCBzeW5jOiBFeHBWYWwsIGxhbmd1YWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgcmVzVmFsLkJvb2xWYWwgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBGaW5kIHRoZSBicm93c2VyIGNvbnRyb2wgYnkgdGhlIGNvbnRyb2wgbmFtZVxyXG4gICAgbGV0IGZvcm06IE1nRm9ybUJhc2UgPSB0aGlzLkV4cFRhc2suZ2V0Rm9ybSgpO1xyXG4gICAgbGV0IHNDdHJsTmFtZTogc3RyaW5nID0gU3RyVXRpbC5ydHJpbShjb250cm9sTmFtZS5TdHJWYWwpO1xyXG4gICAgbGV0IGNvbnRyb2w6IE1nQ29udHJvbEJhc2UgPSB0aGlzLkV4cFRhc2suZ2V0Rm9ybSgpLkdldEN0cmwoc0N0cmxOYW1lKTtcclxuICAgIGlmIChjb250cm9sICE9PSBudWxsICYmIGNvbnRyb2wuaXNCcm93c2VyQ29udHJvbCgpKSB7XHJcbiAgICAgIHJlc1ZhbC5Cb29sVmFsID0gQ29tbWFuZHMuYnJvd3NlckV4ZWN1dGUoY29udHJvbCwgdGV4dC5TdHJWYWwsIHN5bmMuQm9vbFZhbCwgbGFuZ3VhZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vIHJldHVybiB0aGUgY29udHJvbCBuYW1lIG9mIGxhc3QgY2xpY2tlZCBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBldmFsX29wX2N0cmxfbmFtZShyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgbGV0IGxhc3RDbGlja2VkQ3RybE5hbWU6IHN0cmluZyA9IE1hbmFnZXIuR2V0Q3VycmVudFJ1bnRpbWVDb250ZXh0KCkuTGFzdENsaWNrZWRDdHJsTmFtZTtcclxuICAgIHJlc1ZhbC5TdHJWYWwgPSAoTlN0cmluZy5Jc051bGxPckVtcHR5KGxhc3RDbGlja2VkQ3RybE5hbWUpID8gJycgOiBsYXN0Q2xpY2tlZEN0cmxOYW1lKTtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHJvdGVjdGVkKVxyXG4gIC8vLyAgIENsZWFycyB0aGUgZm9ybSB1c2VyIHN0YXRlXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJmb3JtTmFtZVwiPmZvcm0gbmFtZSAoY3VycmVudCBmb3JtKCcnKSAvYWxsIGZvcm1zKCopKSA8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInJlc1ZhbFwiPnN1Y2NlZWQgb3IgZmFpbGVkPC9wYXJhbT5cclxuICBldmFsX29wX2Zvcm1TdGF0ZUNsZWFyKGZvcm1OYW1lOiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gTW92ZXMgdGhlIGNhcmV0IHRvIHNwZWNpZmllZCBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN0cmxOYW1lXCI+dGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIGNvbnRyb2w8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicm93TnVtXCI+dGhlIHJvdyBpbiB0aGUgdGFibGUgIDAgcmVwcmVzZW50cyBjdXJyZW50IHJvdzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJnZW5lcmF0aW9uXCI+dGhlIHRhc2sgZ2VuZXJhdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXRWYWxcIj50aGUgcmVzdWx0PC9wYXJhbT5cclxuICBldmFsX29wX2dvdG9DdHJsKGN0cmxOYW1lOiBFeHBWYWwsIHJvd051bTogRXhwVmFsLCBnZW5lcmF0aW9uOiBFeHBWYWwsIHJldFZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICByZXRWYWwuQXR0ciA9IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjtcclxuICAgIHJldFZhbC5Cb29sVmFsID0gZmFsc2U7XHJcbiAgICBsZXQgdGFzazogR3VpVGFza0Jhc2UgPSB0aGlzLkdldENvbnRleHRUYXNrKGdlbmVyYXRpb24uTWdOdW1WYWwuTlVNXzJfTE9ORygpKTtcclxuICAgIGlmICh0YXNrID09PSBudWxsIHx8IHRhc2suZ2V0Rm9ybSgpID09PSBudWxsKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgbGV0IGlSb3dOdW06IG51bWJlciA9IHJvd051bS5NZ051bVZhbC5OVU1fMl9MT05HKCk7XHJcbiAgICBsZXQgc0N0cmxOYW1lOiBzdHJpbmcgPSBTdHJVdGlsLnJ0cmltKGN0cmxOYW1lLlN0clZhbCk7XHJcbiAgICBsZXQgY3RybDogTWdDb250cm9sQmFzZSA9IHRhc2suZ2V0Rm9ybSgpLkdldEN0cmwoc0N0cmxOYW1lKTtcclxuICAgIHJldFZhbC5Cb29sVmFsID0gdGhpcy5IYW5kbGVDb250cm9sR290byh0YXNrLCBjdHJsLCBpUm93TnVtKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHJvdGVjdGVkKVxyXG4gIC8vLyBnZXQgY29udGV4dCB0YXNrIGJ5IGEgc3BlY2lmaWVkIGdlbmVyYXRpb25cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3VyclRhc2tcIj5jdXJyZW50IHRhc2s8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZ2VuZXJhdGlvblwiPnRhc2sgZ2VuZXJhdGlvbjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiB0YXNrIGF0IHNwZWNpZmllZCBnZW5lcmF0aW9uPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBHZXRDb250ZXh0VGFzayhjdXJyVGFzazogR3VpVGFza0Jhc2UsIGdlbmVyYXRpb246IG51bWJlcik6IEd1aVRhc2tCYXNlIHtcclxuICAgIGxldCB0YXNrOiBHdWlUYXNrQmFzZSA9IG51bGw7XHJcbiAgICBsZXQgdGFza0Jhc2U6IEd1aVRhc2tCYXNlID0gPEd1aVRhc2tCYXNlPiBjdXJyVGFzay5HZXRDb250ZXh0VGFzaygpO1xyXG4gICAgaWYgKGdlbmVyYXRpb24gPT09IEd1aUV4cHJlc3Npb25FdmFsdWF0b3IuVFJJR0dFUl9UQVNLKSB7XHJcbiAgICAgIHRhc2sgPSB0YXNrQmFzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChnZW5lcmF0aW9uIDwgdGFza0Jhc2UuR2V0VGFza0RlcHRoKCkpIHtcclxuICAgICAgICB0YXNrID0gPEd1aVRhc2tCYXNlPnRhc2tCYXNlLkdldFRhc2tBbmNlc3RvcihnZW5lcmF0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRhc2s7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHByb3RlY3RlZClcclxuICAvLy8gZ2V0IGNvbnRleHQgdGFzayBieSBhIHNwZWNpZmllZCBnZW5lcmF0aW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImdlbmVyYXRpb25cIj50YXNrIGdlbmVyYXRpb248L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz4gdGFzayBhdCBzcGVjaWZpZWQgZ2VuZXJhdGlvbjwvcmV0dXJucz5cclxuICBHZXRDb250ZXh0VGFzayhnZW5lcmF0aW9uOiBudW1iZXIpOiBHdWlUYXNrQmFzZSB7XHJcbiAgICByZXR1cm4gR3VpRXhwcmVzc2lvbkV2YWx1YXRvci5HZXRDb250ZXh0VGFzayh0aGlzLkV4cFRhc2ssIGdlbmVyYXRpb24pO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vIENyZWF0ZSBhIE5VTV9UWVBFIHdpdGggdGhlIHZhbHVlIG9mIGkgYW5kIHNldCB0aGUgRXhwVmFsIHdpdGggaXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIENvbnN0cnVjdE1hZ2ljTnVtKHJlc1ZhbDogRXhwVmFsLCBpOiBudW1iZXIsIGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUpOiB2b2lkIHtcclxuICAgIHJlc1ZhbC5NZ051bVZhbCA9IG5ldyBOVU1fVFlQRSgpO1xyXG4gICAgcmVzVmFsLk1nTnVtVmFsLk5VTV80X0xPTkcoaSk7XHJcbiAgICByZXNWYWwuQXR0ciA9IGF0dHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+KHB1YmxpYylcclxuICAvLy8gc2V0IG51bGwgdmFsdWUgdG8gRXhwcmVzc2lvbiBFdmFsdWF0b3JcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicmVzVmFsXCI+dG8gc2V0IGl0IE5VTEw8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiYXR0clwiPmF0dHJpYnV0ZSBvZiBFeHBWYWx1ZTwvcGFyYW0+XHJcbiAgU2V0TlVMTChyZXNWYWw6IEV4cFZhbCwgYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSk6IHZvaWQge1xyXG4gICAgcmVzVmFsLklzTnVsbCA9IHRydWU7XHJcbiAgICByZXNWYWwuQXR0ciA9IGF0dHI7XHJcblxyXG4gICAgc3dpdGNoIChhdHRyKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkRBVEU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICByZXNWYWwuQm9vbFZhbCA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB2YWxpZGF0ZSB2YWx1ZSBvZiB0aGUgY29udHJvbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdXJyQ3RybFwiPmNvbnRyb2wgd2hvc2UgdmFsdWUgbmVlZCB0byBiZSBldmFsdWF0ZWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwib2xkVmFsdWVcIj5vbGQgdmFsdWUgb2YgdGhlIGNvbnRyb2w8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmV3VmFsdWVcIj5uZXcgdmFsdWUgb2YgdGhlIGNvbnRyb2w8L3BhcmFtPlxyXG4gIEdldFZhbGlkYXRlZFZhbHVlKGN1cnJDdHJsOiBNZ0NvbnRyb2xCYXNlLCBvbGRWYWx1ZTogc3RyaW5nLCBuZXdWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCB2ZDogVmFsaWRhdGlvbkRldGFpbHMgPSBjdXJyQ3RybC5idWlsZENvcHlQaWN0dXJlKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XHJcbiAgICB2ZC5ldmFsdWF0ZSgpO1xyXG4gICAgbGV0IHZhbGlkYXRpb25GYWlsZWQ6IGJvb2xlYW4gPSB2ZC5WYWxpZGF0aW9uRmFpbGVkO1xyXG4gICAgbGV0IGN0cmxWYWx1ZTogc3RyaW5nO1xyXG4gICAgaWYgKHZhbGlkYXRpb25GYWlsZWQpIHtcclxuICAgICAgbGV0IGZpZWxkOiBHdWlGaWVsZEJhc2UgPSBjdXJyQ3RybC5nZXRGaWVsZCgpO1xyXG4gICAgICBjdHJsVmFsdWUgPSAoKGZpZWxkLmdldFR5cGUoKSA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUikgPyBmaWVsZC5nZXRDZWxsRGVmdWFsdFZhbHVlKCkgOiBmaWVsZC5nZXREZWZhdWx0VmFsdWUoKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdHJsVmFsdWUgPSB2ZC5nZXREaXNwVmFsdWUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjdHJsVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgc2V0IGV4cFZhbHVlIG9mIG5lZWRlZCB0eXBlIC4gdGhlIHZhbHVlIGlzIGluaXRlZCBieSB2YWx1ZVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXNWYWxcIj5uZWVkIGJlIGV2YWx1YXRlZC9pbml0aWFsaXplZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ0eXBlXCI+b2YgcmVzVmFsIChBbHBoYXxOdW1lcmljfExvZ2ljYWx8RGF0ZXxUaW1lfEJsb2J8VmVjdG9yKTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJ2YWxcIj5zdHJpbmcvaGV4YSBzdHJpbmc8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGljXCI+Zm9yIHN0cmluZyBldmFsdWF0aW9uPC9wYXJhbT5cclxuICBTZXRWYWwocmVzVmFsOiBFeHBWYWwsIHR5cGU6IFN0b3JhZ2VBdHRyaWJ1dGUsIHZhbDogc3RyaW5nLCBwaWM6IFBJQyk6IHZvaWQge1xyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IHR5cGU7XHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IHZhbDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQiB8fCB0eXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKVxyXG4gICAgICAgICAgcmVzVmFsLkluY2x1ZGVCbG9iUHJlZml4ID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgcmVzVmFsLkF0dHIgPSB0eXBlO1xyXG4gICAgICAgIGlmICh2YWwgPT0gbnVsbClcclxuICAgICAgICAgIHJlc1ZhbC5NZ051bVZhbCA9IG51bGw7XHJcbiAgICAgICAgZWxzZSBpZiAocGljID09IG51bGwpXHJcbiAgICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUodmFsKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICByZXNWYWwuTWdOdW1WYWwgPSBuZXcgTlVNX1RZUEUodmFsLCBwaWMsICh0aGlzLkV4cFRhc2spLmdldENvbXBJZHgoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICByZXNWYWwuQXR0ciA9IHR5cGU7XHJcbiAgICAgICAgcmVzVmFsLkJvb2xWYWwgPSBEaXNwbGF5Q29udmVydG9yLnRvQm9vbGVhbih2YWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLlNldE5VTEwocmVzVmFsLCB0eXBlKTtcclxuXHJcbiAgICAgICAgdGhpcy5FdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZygnRXhwcmVzc2lvbkV2YWx1YXRvci5TZXRWYWwoKSB0aGVyZSBpcyBubyBzdWNoIHR5cGUgOiAnICsgdHlwZSk7XHJcblxyXG4gICAgICAgIC8vIENsaWVudE1hbmFnZXIuSW5zdGFuY2UuV3JpdGVFcnJvclRvTG9nKFwiRXhwcmVzc2lvbkV2YWx1YXRvci5TZXRWYWwoKSB0aGVyZSBpcyBubyBzdWNoIHR5cGUgOiBcIiArIHR5cGUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5Pihwcm90ZWN0ZWQpXHJcbiAgLy8vIHRyaW1zIGFuZCByZXR1cm5zIHRoZSBzdHJpbmcuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInZhbFwiPmNvbnRhaW5pbmcgc3RyaW5nIHRvIGJlIHRyaW1tZWQgKHN0clZhbF8gbWVtYmVyIG9mIEV4cFZhbCk8L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz50cmltbWVkIHN0cmluZzwvcmV0dXJucz5cclxuICBzdGF0aWMgZXhwX2J1aWxkX3N0cmluZyh2YWw6IEV4cFZhbCk6IHN0cmluZyB7XHJcbiAgICBsZXQgbmFtZTogc3RyaW5nID0gJyc7XHJcbiAgICBpZiAodmFsLlN0clZhbCAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgbGVuOiBudW1iZXIgPSA8bnVtYmVyPnZhbC5TdHJWYWwubGVuZ3RoO1xyXG4gICAgICBpZiAobGVuID4gMCkge1xyXG4gICAgICAgIG5hbWUgPSBTdHJVdGlsLlpzdHJpbmdNYWtlKHZhbC5TdHJWYWwsIDxudW1iZXI+bGVuKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5hbWU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNoZWNrcyBpZiB0aGUgb2JqZWN0IGlzIGluc3RhbmNlIG9mIEV4cFZhbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwib2JqXCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBpc0V4cFZhbChvYmo6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEV4cFZhbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT4ocHJpdmF0ZSlcclxuICAvLy8gaGFuZGxlIGNvbnZlcnNpb25zIGJldHdlZW4gYmxvYiBhbmQgdW5pY29kZS9hbHBoYVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwidmFsXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJleHBlY3RlZFR5cGVcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgQmxvYlN0cmluZ0NvbnZlcnNpb24odmFsOiBFeHBWYWwsIGV4cGVjdGVkVHlwZTogU3RvcmFnZUF0dHJpYnV0ZSk6IHZvaWQge1xyXG4gICAgaWYgKFN0b3JhZ2VBdHRyaWJ1dGVDaGVjay5Jc1R5cGVBbHBoYU9yVW5pY29kZShleHBlY3RlZFR5cGUpKSB7XHJcbiAgICAgIGlmICh2YWwuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5CTE9CKSB7XHJcbiAgICAgICAgbGV0IGluY2x1ZGVCbG9iUHJlZml4OiBib29sZWFuID0gdmFsLkluY2x1ZGVCbG9iUHJlZml4O1xyXG4gICAgICAgIGlmIChpbmNsdWRlQmxvYlByZWZpeCkge1xyXG4gICAgICAgICAgbGV0IGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBCbG9iVHlwZS5nZXRDb250ZW50VHlwZSh2YWwuU3RyVmFsKTtcclxuICAgICAgICAgIHZhbC5TdHJWYWwgPSBCbG9iVHlwZS5nZXRTdHJpbmcodmFsLlN0clZhbCk7XHJcbiAgICAgICAgICB2YWwuSW5jbHVkZUJsb2JQcmVmaXggPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChjb250ZW50VHlwZSAhPT0gQmxvYlR5cGUuQ09OVEVOVF9UWVBFX0JJTkFSWSAmJiBSdGYuaXNSdGYodmFsLlN0clZhbCkpIHtcclxuICAgICAgICAgICAgdmFsLlN0clZhbCA9IFN0clV0aWwuR2V0UGxhaW5UZXh0ZnJvbVJ0Zih2YWwuU3RyVmFsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFsLkF0dHIgPSBleHBlY3RlZFR5cGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbC5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkJMT0JfVkVDVE9SKSB7XHJcbiAgICAgICAgICBsZXQgaW5jbHVkZUJsb2JQcmVmaXgyOiBib29sZWFuID0gdmFsLkluY2x1ZGVCbG9iUHJlZml4O1xyXG4gICAgICAgICAgaWYgKGluY2x1ZGVCbG9iUHJlZml4Mikge1xyXG4gICAgICAgICAgICB2YWwuU3RyVmFsID0gQmxvYlR5cGUucmVtb3ZlQmxvYlByZWZpeCh2YWwuU3RyVmFsKTtcclxuICAgICAgICAgICAgdmFsLkluY2x1ZGVCbG9iUHJlZml4ID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB2YWwuQXR0ciA9IGV4cGVjdGVkVHlwZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChleHBlY3RlZFR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQikge1xyXG4gICAgICAgIGlmIChTdG9yYWdlQXR0cmlidXRlQ2hlY2suSXNUeXBlQWxwaGFPclVuaWNvZGUodmFsLkF0dHIpKSB7XHJcbiAgICAgICAgICBsZXQgY29udGVudFR5cGU6IHN0cmluZyA9ICh2YWwuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQSkgPyBCbG9iVHlwZS5DT05URU5UX1RZUEVfQU5TSSA6IEJsb2JUeXBlLkNPTlRFTlRfVFlQRV9VTklDT0RFO1xyXG4gICAgICAgICAgdmFsLlN0clZhbCA9IEJsb2JUeXBlLmNyZWF0ZUZyb21TdHJpbmcodmFsLlN0clZhbCwgY29udGVudFR5cGUpO1xyXG4gICAgICAgICAgdmFsLkluY2x1ZGVCbG9iUHJlZml4ID0gdHJ1ZTtcclxuICAgICAgICAgIHZhbC5BdHRyID0gZXhwZWN0ZWRUeXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXZhbF9vcF96aW1lcmVhZChyZXNWYWw6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgcmVzVmFsLkF0dHIgPSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBO1xyXG4gICAgcmVzVmFsLlN0clZhbCA9ICcnO1xyXG4gICAgbGV0IHV0aWxJbWVKcG46IFV0aWxJbWVKcG4gPSBNYW5hZ2VyLlV0aWxJbWVKcG47XHJcbiAgICBpZiAodXRpbEltZUpwbiAhPT0gbnVsbCkge1xyXG4gICAgICBsZXQgc3RySW1lUmVhZDogc3RyaW5nID0gdXRpbEltZUpwbi5TdHJJbWVSZWFkO1xyXG4gICAgICBpZiAoIU5TdHJpbmcuSXNOdWxsT3JFbXB0eSh1dGlsSW1lSnBuLlN0ckltZVJlYWQpKSB7XHJcbiAgICAgICAgcmVzVmFsLlN0clZhbCA9IHN0ckltZVJlYWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV2YWxfb3Bfd2luX2hlbHAoZXhwRmlsZVBhdGg6IEV4cFZhbCwgZXhwSGVscENtZDogRXhwVmFsLCBleHBIZWxwS2V5OiBFeHBWYWwsIHJlc1ZhbDogRXhwVmFsKTogdm9pZCB7XHJcbiAgICBsZXQgZmlsZVBhdGg6IHN0cmluZyA9IGV4cEZpbGVQYXRoLlN0clZhbDtcclxuICAgIGxldCBoZWxwQ21kOiBIZWxwQ29tbWFuZCA9IDxIZWxwQ29tbWFuZD5leHBIZWxwQ21kLk1nTnVtVmFsLk5VTV8yX0xPTkcoKTtcclxuICAgIGxldCBoZWxwS2V5OiBzdHJpbmcgPSBleHBIZWxwS2V5LlN0clZhbDtcclxuICAgIHJlc1ZhbC5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIE1hbmFnZXIuU2hvd1dpbmRvd0hlbHAoZmlsZVBhdGgsIGhlbHBDbWQsIGhlbHBLZXkpO1xyXG4gICAgICByZXNWYWwuQm9vbFZhbCA9IHRydWU7XHJcbiAgICB9IGNhdGNoIChleCkge1xyXG4gICAgICByZXNWYWwuQm9vbFZhbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQ29udmVydEV4cFZhbCh2YWw6IEV4cFZhbCwgZXhwZWN0ZWRUeXBlOiBTdG9yYWdlQXR0cmlidXRlKTogdm9pZCB7XHJcbiAgICBpZiAoU3RvcmFnZUF0dHJpYnV0ZUNoZWNrLlN0b3JhZ2VGbGRBbHBoYVVuaWNvZGVPckJsb2IodmFsLkF0dHIsIGV4cGVjdGVkVHlwZSkpIHtcclxuICAgICAgdGhpcy5CbG9iU3RyaW5nQ29udmVyc2lvbih2YWwsIGV4cGVjdGVkVHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuXHJcbiAgfVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIFRoZSBjbGFzcyBob2xkcyBkYXRhIG9mIGEgYmFzaWMgZWxlbWVudCAoY29uc3RhbnQgb3IgdmFyaWFibGUpIHRoYXRcclxuLy8vICAgYXBwZWFycyBvciBhcmUgcmVzdWx0IG9mIGV4ZWN1dGlvbiBvZiBvcGVyYXRvclxyXG4vLy8gPC9zdW1tYXJ5PlxyXG5leHBvcnQgY2xhc3MgRXhwVmFsIHtcclxuICBBdHRyOiBTdG9yYWdlQXR0cmlidXRlID0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FO1xyXG4gIElzTnVsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIE1nTnVtVmFsOiBOVU1fVFlQRSA9IG51bGw7XHJcbiAgU3RyVmFsOiBzdHJpbmcgPSBudWxsO1xyXG4gIEJvb2xWYWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJbmNsdWRlQmxvYlByZWZpeDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIE9yaWdpbmFsTnVsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFZlY3RvckZpZWxkOiBHdWlGaWVsZEJhc2UgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUsIGlzTnVsbDogYm9vbGVhbiwgbWdWYWw6IHN0cmluZyk7XHJcbiAgY29uc3RydWN0b3IoYXR0cj86IFN0b3JhZ2VBdHRyaWJ1dGUsIGlzTnVsbD86IGJvb2xlYW4sIG1nVmFsPzogc3RyaW5nKSB7XHJcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzAoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb25zdHJ1Y3Rvcl8xKGF0dHIsIGlzTnVsbCwgbWdWYWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8wKCk6IHZvaWQge1xyXG4gICAgdGhpcy5BdHRyID0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xKGF0dHI6IFN0b3JhZ2VBdHRyaWJ1dGUsIGlzTnVsbDogYm9vbGVhbiwgbWdWYWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5Jbml0KGF0dHIsIGlzTnVsbCwgbWdWYWwpO1xyXG4gIH1cclxuXHJcbiAgQ29weShzcmM6IEV4cFZhbCk6IHZvaWQge1xyXG4gICAgdGhpcy5BdHRyID0gc3JjLkF0dHI7XHJcbiAgICB0aGlzLkJvb2xWYWwgPSBzcmMuQm9vbFZhbDtcclxuICAgIHRoaXMuSW5jbHVkZUJsb2JQcmVmaXggPSBzcmMuSW5jbHVkZUJsb2JQcmVmaXg7XHJcbiAgICB0aGlzLklzTnVsbCA9IHNyYy5Jc051bGw7XHJcbiAgICB0aGlzLk1nTnVtVmFsID0gc3JjLk1nTnVtVmFsO1xyXG4gICAgdGhpcy5TdHJWYWwgPSBzcmMuU3RyVmFsO1xyXG4gICAgdGhpcy5WZWN0b3JGaWVsZCA9IHNyYy5WZWN0b3JGaWVsZDtcclxuICAgIHRoaXMuT3JpZ2luYWxOdWxsID0gc3JjLk9yaWdpbmFsTnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gbnVsbGlmeVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgTnVsbGlmeSgpOiB2b2lkIHtcclxuICAgIHRoaXMuSW5pdChTdG9yYWdlQXR0cmlidXRlLk5PTkUsIHRydWUsIG51bGwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGluaXRpYWxpemVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIEluaXQoYXR0cjogU3RvcmFnZUF0dHJpYnV0ZSwgaXNOdWxsOiBib29sZWFuLCBtZ1ZhbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLkF0dHIgPSBhdHRyO1xyXG4gICAgdGhpcy5Jc051bGwgPSBpc051bGw7XHJcblxyXG5cclxuICAgIHN3aXRjaCAodGhpcy5BdHRyKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgICAgdGhpcy5TdHJWYWwgPSBtZ1ZhbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgICAgdGhpcy5TdHJWYWwgPSBtZ1ZhbDtcclxuICAgICAgICB0aGlzLkluY2x1ZGVCbG9iUHJlZml4ID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgdGhpcy5NZ051bVZhbCA9ICgobWdWYWwgIT09IG51bGwpID8gbmV3IE5VTV9UWVBFKG1nVmFsKSA6IG51bGwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgICAgdGhpcy5Cb29sVmFsID0gKG1nVmFsICE9PSBudWxsICYmIG1nVmFsID09PSAnMScpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5PTkU6XHJcbiAgICAgICAgdGhpcy5Cb29sVmFsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5TdHJWYWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuTWdOdW1WYWwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuT3JpZ2luYWxOdWxsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLlZlY3RvckZpZWxkID0gbnVsbDtcclxuICAgICAgICB0aGlzLkluY2x1ZGVCbG9iUHJlZml4ID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuRE9UTkVUOlxyXG4gICAgICAgIC8vIEZvciBkb3RuZXQgb2JqZWN0cywgRXhwVmFsIHNob3VsZCBiZSBjb25zdHJ1Y3RlZCB1c2luZyBvdmVybG9hZGVkIENvbnN0cnVjdG9yLlxyXG4gICAgICAgIC8vIElmIGl0IGlzIGEgYmxvYlByZWZpeCwgaXQgc2hvdWxkIGJlIGRvbmUgaGVyZS5cclxuICAgICAgICB0aGlzLlN0clZhbCA9IG1nVmFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oJ2luIEV4cFZhbC5FeHBWYWwoKSBpbGxlZ2FsIGF0dHJpYnV0ZTogXFwnJyArIHRoaXMuQXR0ciArICdcXCcnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBHZXRzIHRoZSBzdHJpbmcgZm9ybSBvZiB0aGUgdmFsdWUgaW4gdGhlIEV4cFZhbCBjbGFzc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgVG9NZ1ZhbCgpOiBzdHJpbmcge1xyXG5cclxuICAgIGxldCBzdHI6IHN0cmluZztcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuQXR0cikge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICAgIHN0ciA9IHRoaXMuU3RyVmFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRTpcclxuICAgICAgICBzdHIgPSB0aGlzLk1nTnVtVmFsLnRvWE1McmVjb3JkKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgICBzdHIgPSB0aGlzLkJvb2xWYWxcclxuICAgICAgICAgID8gJzEnXHJcbiAgICAgICAgICA6ICcwJztcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgc3RyID0gJ1tpbGxlZ2FsIGF0dHJpYnV0ZTogJyArIHRoaXMuQXR0ciArICddJztcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBhbiBlbXB0eSBzdHJpbmdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgaXNFbXB0eVN0cmluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5BdHRyID09PSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBIHx8IHRoaXMuQXR0ciA9PT0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFKSAmJiB0aGlzLlN0clZhbCA9PT0gJyc7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=