@kitware/vtk.js 19.2.13 → 19.3.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 (717) hide show
  1. package/Common/Core/Base64.js +1 -1
  2. package/Common/Core/CellArray.js +2 -3
  3. package/Common/Core/ClassHierarchy.js +1 -1
  4. package/Common/Core/DataArray/Constants.js +1 -2
  5. package/Common/Core/DataArray.js +3 -4
  6. package/Common/Core/Endian.js +1 -2
  7. package/Common/Core/ImageHelper.js +1 -1
  8. package/Common/Core/LookupTable.js +1 -2
  9. package/Common/Core/MatrixBuilder.js +1 -1
  10. package/Common/Core/Points.js +1 -2
  11. package/Common/Core/PriorityQueue.js +1 -2
  12. package/Common/Core/ProgressHandler.js +1 -2
  13. package/Common/Core/ScalarsToColors/Constants.js +1 -2
  14. package/Common/Core/ScalarsToColors.js +2 -3
  15. package/Common/Core/StringArray.js +1 -2
  16. package/Common/Core/URLExtract.js +1 -1
  17. package/Common/Core/VariantArray.js +1 -2
  18. package/Common/Core.js +1 -1
  19. package/Common/DataModel/BoundingBox.js +2 -3
  20. package/Common/DataModel/Box.js +2 -3
  21. package/Common/DataModel/CardinalSpline1D.js +1 -2
  22. package/Common/DataModel/Cell.js +1 -2
  23. package/Common/DataModel/CellLinks.js +26 -27
  24. package/Common/DataModel/CellTypes/Constants.js +1 -2
  25. package/Common/DataModel/CellTypes.js +2 -3
  26. package/Common/DataModel/Cone.js +1 -2
  27. package/Common/DataModel/Cylinder.js +2 -3
  28. package/Common/DataModel/DataSet/Constants.js +1 -2
  29. package/Common/DataModel/DataSet.js +2 -3
  30. package/Common/DataModel/DataSetAttributes/Constants.js +1 -2
  31. package/Common/DataModel/DataSetAttributes/FieldData.js +1 -2
  32. package/Common/DataModel/DataSetAttributes.js +2 -3
  33. package/Common/DataModel/ITKHelper.js +1 -1
  34. package/Common/DataModel/ImageData.js +1 -2
  35. package/Common/DataModel/ImplicitBoolean/Constants.js +1 -2
  36. package/Common/DataModel/ImplicitBoolean.js +2 -3
  37. package/Common/DataModel/KochanekSpline1D.js +1 -2
  38. package/Common/DataModel/Line/Constants.js +1 -2
  39. package/Common/DataModel/Line.js +2 -3
  40. package/Common/DataModel/Molecule.js +1 -2
  41. package/Common/DataModel/PiecewiseFunction.js +1 -2
  42. package/Common/DataModel/Plane.js +2 -3
  43. package/Common/DataModel/PointSet.js +1 -2
  44. package/Common/DataModel/PolyData/Constants.js +1 -2
  45. package/Common/DataModel/PolyData.js +1 -2
  46. package/Common/DataModel/Polygon.js +1 -2
  47. package/Common/DataModel/SelectionNode/Constants.js +1 -2
  48. package/Common/DataModel/SelectionNode.js +2 -3
  49. package/Common/DataModel/Sphere.js +2 -3
  50. package/Common/DataModel/Spline1D.js +1 -2
  51. package/Common/DataModel/Spline3D/Constants.js +1 -2
  52. package/Common/DataModel/Spline3D.js +1 -2
  53. package/Common/DataModel/StructuredData/Constants.js +1 -2
  54. package/Common/DataModel/StructuredData.js +2 -3
  55. package/Common/DataModel/Triangle.js +2 -3
  56. package/Common/DataModel.js +1 -1
  57. package/Common/System/MobileVR/headsets.js +1 -1
  58. package/Common/System/MobileVR.js +1 -1
  59. package/Common/System/TimerLog.js +1 -2
  60. package/Common/System.js +1 -1
  61. package/Common/Transform/LandmarkTransform/Constants.js +1 -2
  62. package/Common/Transform/LandmarkTransform.js +2 -3
  63. package/Common/Transform.js +1 -1
  64. package/Common/index.js +1 -1
  65. package/Filters/Core/Cutter.js +3 -4
  66. package/Filters/Core.js +1 -1
  67. package/Filters/Cornerstone/ImageDataToCornerstoneImage.js +1 -2
  68. package/Filters/Cornerstone.js +1 -1
  69. package/Filters/General/AppendPolyData.js +1 -2
  70. package/Filters/General/Calculator.js +2 -3
  71. package/Filters/General/ClosedPolyLineToSurfaceFilter.js +1 -2
  72. package/Filters/General/ImageCropFilter.js +1 -2
  73. package/Filters/General/ImageMarchingCubes/caseTable.js +1 -1
  74. package/Filters/General/ImageMarchingCubes.js +1 -2
  75. package/Filters/General/ImageMarchingSquares/caseTable.js +1 -1
  76. package/Filters/General/ImageMarchingSquares.js +1 -2
  77. package/Filters/General/ImageOutlineFilter.js +1 -2
  78. package/Filters/General/ImageSliceFilter.js +1 -2
  79. package/Filters/General/ImageStreamline.js +1 -2
  80. package/Filters/General/LineFilter.js +1 -2
  81. package/Filters/General/MoleculeToRepresentation.js +1 -2
  82. package/Filters/General/OutlineFilter.js +1 -2
  83. package/Filters/General/PaintFilter/PaintFilter.worker.js +3 -3
  84. package/Filters/General/PaintFilter.js +3 -4
  85. package/Filters/General/ScalarToRGBA.js +1 -2
  86. package/Filters/General/TriangleFilter.js +1 -2
  87. package/Filters/General/TubeFilter/Constants.js +1 -2
  88. package/Filters/General/TubeFilter.js +1 -2
  89. package/Filters/General/WarpScalar.js +1 -2
  90. package/Filters/General/WindowedSincPolyDataFilter.js +43 -44
  91. package/Filters/General.js +1 -1
  92. package/Filters/Sources/Arrow2DSource/Constants.js +1 -2
  93. package/Filters/Sources/Arrow2DSource.js +2 -3
  94. package/Filters/Sources/ArrowSource.js +1 -2
  95. package/Filters/Sources/CircleSource.js +2 -3
  96. package/Filters/Sources/ConcentricCylinderSource.js +1 -2
  97. package/Filters/Sources/ConeSource.js +1 -2
  98. package/Filters/Sources/CubeSource.js +1 -2
  99. package/Filters/Sources/Cursor3D.js +12 -13
  100. package/Filters/Sources/CylinderSource.js +1 -2
  101. package/Filters/Sources/ImageGridSource.js +1 -2
  102. package/Filters/Sources/LineSource.js +1 -2
  103. package/Filters/Sources/PlaneSource.js +1 -2
  104. package/Filters/Sources/PointSource.js +1 -2
  105. package/Filters/Sources/RTAnalyticSource.js +1 -2
  106. package/Filters/Sources/SLICSource.js +1 -2
  107. package/Filters/Sources/SphereSource.js +1 -2
  108. package/Filters/Sources/ViewFinderSource.js +1 -2
  109. package/Filters/Sources.js +1 -1
  110. package/Filters/Texture/TextureMapToPlane.js +1 -2
  111. package/Filters/Texture/TextureMapToSphere.js +1 -2
  112. package/Filters/Texture.js +1 -1
  113. package/Filters/index.js +1 -1
  114. package/IO/Core/BinaryHelper.js +1 -1
  115. package/IO/Core/DataAccessHelper/HtmlDataAccessHelper.js +1 -1
  116. package/IO/Core/DataAccessHelper/HttpDataAccessHelper.js +1 -1
  117. package/IO/Core/DataAccessHelper/JSZipDataAccessHelper.js +3 -3
  118. package/IO/Core/DataAccessHelper/LiteHttpDataAccessHelper.js +1 -1
  119. package/IO/Core/DataAccessHelper.js +1 -2
  120. package/IO/Core/HttpDataSetReader.js +1 -2
  121. package/IO/Core/HttpDataSetSeriesReader.js +1 -2
  122. package/IO/Core/HttpSceneLoader.js +2 -3
  123. package/IO/Core/ImageStream/DefaultProtocol.js +1 -1
  124. package/IO/Core/ImageStream/ViewStream.js +1 -2
  125. package/IO/Core/ImageStream.js +1 -2
  126. package/IO/Core/ResourceLoader.js +1 -2
  127. package/IO/Core/Serializer/ArraySerializer.js +1 -2
  128. package/IO/Core/Serializer/FieldDataSerializer.js +1 -1
  129. package/IO/Core/Serializer/ImageDataSerializer.js +1 -1
  130. package/IO/Core/Serializer/PolyDataSerializer.js +1 -1
  131. package/IO/Core/Serializer.js +1 -1
  132. package/IO/Core/WSLinkClient.js +1 -2
  133. package/IO/Core/ZipMultiDataSetReader.js +3 -4
  134. package/IO/Core/ZipMultiDataSetWriter.js +3 -4
  135. package/IO/Core.js +1 -1
  136. package/IO/Geometry/DracoReader.js +1 -2
  137. package/IO/Geometry/PLYReader.js +1 -2
  138. package/IO/Geometry/STLReader.js +1 -2
  139. package/IO/Geometry/STLWriter/Constants.js +1 -2
  140. package/IO/Geometry/STLWriter.js +2 -3
  141. package/IO/Geometry.js +1 -1
  142. package/IO/Legacy/LegacyAsciiParser.js +1 -1
  143. package/IO/Legacy/PolyDataReader.js +1 -2
  144. package/IO/Legacy.js +1 -1
  145. package/IO/Misc/ElevationReader.js +1 -2
  146. package/IO/Misc/HttpDataSetLODsLoader.js +1 -2
  147. package/IO/Misc/ITKImageReader.js +1 -2
  148. package/IO/Misc/ITKPolyDataReader.js +1 -2
  149. package/IO/Misc/JSONNucleoReader.js +1 -2
  150. package/IO/Misc/JSONReader.js +1 -2
  151. package/IO/Misc/MTLReader.js +2 -3
  152. package/IO/Misc/OBJReader.js +1 -2
  153. package/IO/Misc/PDBReader.js +1 -2
  154. package/IO/Misc/SkyboxReader.js +3 -4
  155. package/IO/Misc.js +1 -1
  156. package/IO/XML/XMLImageDataReader.js +1 -2
  157. package/IO/XML/XMLImageDataWriter.js +2 -3
  158. package/IO/XML/XMLPolyDataReader.js +1 -2
  159. package/IO/XML/XMLPolyDataWriter.js +2 -3
  160. package/IO/XML/XMLReader.js +1 -2
  161. package/IO/XML/XMLWriter/Constants.js +1 -2
  162. package/IO/XML/XMLWriter.js +4 -4
  163. package/IO/XML.js +1 -1
  164. package/IO/index.js +1 -1
  165. package/Imaging/Core/AbstractImageInterpolator/Constants.js +1 -2
  166. package/Imaging/Core/AbstractImageInterpolator/InterpolationInfo.js +2 -3
  167. package/Imaging/Core/AbstractImageInterpolator.js +2 -3
  168. package/Imaging/Core/ImageInterpolator.js +2 -3
  169. package/Imaging/Core/ImagePointDataIterator.js +1 -2
  170. package/Imaging/Core/ImageReslice/Constants.js +1 -2
  171. package/Imaging/Core/ImageReslice.js +2 -3
  172. package/Imaging/Core.js +1 -1
  173. package/Imaging/Hybrid/SampleFunction.js +2 -3
  174. package/Imaging/Hybrid.js +1 -1
  175. package/Imaging/index.js +1 -1
  176. package/Interaction/Animations/TimeStepBasedAnimationHandler.js +2 -3
  177. package/Interaction/Manipulators/CompositeCameraManipulator.js +1 -2
  178. package/Interaction/Manipulators/CompositeGestureManipulator.js +1 -2
  179. package/Interaction/Manipulators/CompositeKeyboardManipulator.js +1 -2
  180. package/Interaction/Manipulators/CompositeMouseManipulator.js +1 -2
  181. package/Interaction/Manipulators/CompositeVRManipulator.js +1 -2
  182. package/Interaction/Manipulators/GestureCameraManipulator.js +1 -2
  183. package/Interaction/Manipulators/KeyboardCameraManipulator.js +1 -2
  184. package/Interaction/Manipulators/MouseBoxSelectorManipulator.js +3 -4
  185. package/Interaction/Manipulators/MouseCameraAxisRotateManipulator.js +1 -2
  186. package/Interaction/Manipulators/MouseCameraSliceManipulator.js +1 -2
  187. package/Interaction/Manipulators/MouseCameraTrackballFirstPersonManipulator.js +1 -2
  188. package/Interaction/Manipulators/MouseCameraTrackballMultiRotateManipulator.js +1 -2
  189. package/Interaction/Manipulators/MouseCameraTrackballPanManipulator.js +1 -2
  190. package/Interaction/Manipulators/MouseCameraTrackballRollManipulator.js +1 -2
  191. package/Interaction/Manipulators/MouseCameraTrackballRotateManipulator.js +1 -2
  192. package/Interaction/Manipulators/MouseCameraTrackballZoomManipulator.js +1 -2
  193. package/Interaction/Manipulators/MouseCameraTrackballZoomToMouseManipulator.js +1 -2
  194. package/Interaction/Manipulators/MouseCameraUnicamManipulator.js +1 -2
  195. package/Interaction/Manipulators/MouseCameraUnicamRotateManipulator.js +1 -2
  196. package/Interaction/Manipulators/MouseRangeManipulator.js +1 -2
  197. package/Interaction/Manipulators/VRButtonPanManipulator.js +1 -2
  198. package/Interaction/Manipulators.js +1 -1
  199. package/Interaction/Misc/DeviceOrientationToCamera.js +1 -1
  200. package/Interaction/Misc.js +1 -1
  201. package/Interaction/Style/InteractorStyleImage.js +1 -2
  202. package/Interaction/Style/InteractorStyleMPRSlice.js +1 -2
  203. package/Interaction/Style/InteractorStyleManipulator/Presets.js +1 -1
  204. package/Interaction/Style/InteractorStyleManipulator.js +2 -3
  205. package/Interaction/Style/InteractorStyleRemoteMouse.js +2 -3
  206. package/Interaction/Style/InteractorStyleTrackballCamera.js +1 -2
  207. package/Interaction/Style/InteractorStyleUnicam.js +1 -2
  208. package/Interaction/Style.js +1 -1
  209. package/Interaction/UI/CornerAnnotation.js +1 -2
  210. package/Interaction/UI/FPSMonitor.js +2 -3
  211. package/Interaction/UI/Icons.js +1 -1
  212. package/Interaction/UI/Slider/Constants.js +1 -2
  213. package/Interaction/UI/Slider.js +2 -3
  214. package/Interaction/UI/VolumeController.js +1 -2
  215. package/Interaction/UI.js +1 -1
  216. package/Interaction/Widgets/AbstractWidget.js +2 -3
  217. package/Interaction/Widgets/DistanceRepresentation.js +2 -3
  218. package/Interaction/Widgets/DistanceWidget.js +2 -3
  219. package/Interaction/Widgets/HandleRepresentation/Constants.js +1 -2
  220. package/Interaction/Widgets/HandleRepresentation.js +2 -3
  221. package/Interaction/Widgets/HandleWidget/Constants.js +1 -2
  222. package/Interaction/Widgets/HandleWidget.js +2 -3
  223. package/Interaction/Widgets/ImageCroppingRegionsRepresentation.js +1 -2
  224. package/Interaction/Widgets/ImageCroppingRegionsWidget/Constants.js +1 -1
  225. package/Interaction/Widgets/ImageCroppingRegionsWidget.js +2 -3
  226. package/Interaction/Widgets/LabelRepresentation/Constants.js +1 -2
  227. package/Interaction/Widgets/LabelRepresentation.js +3 -4
  228. package/Interaction/Widgets/LabelWidget.js +2 -3
  229. package/Interaction/Widgets/LineRepresentation/Constants.js +1 -2
  230. package/Interaction/Widgets/LineRepresentation.js +2 -3
  231. package/Interaction/Widgets/LineWidget/Constants.js +1 -2
  232. package/Interaction/Widgets/LineWidget.js +2 -3
  233. package/Interaction/Widgets/OrientationMarkerWidget/Constants.js +1 -1
  234. package/Interaction/Widgets/OrientationMarkerWidget.js +2 -3
  235. package/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +3 -3
  236. package/Interaction/Widgets/PiecewiseGaussianWidget.js +15 -16
  237. package/Interaction/Widgets/PointPlacer.js +1 -2
  238. package/Interaction/Widgets/ResliceCursor/ResliceCursor/Constants.js +1 -2
  239. package/Interaction/Widgets/ResliceCursor/ResliceCursor.js +2 -3
  240. package/Interaction/Widgets/ResliceCursor/ResliceCursorActor/Constants.js +1 -2
  241. package/Interaction/Widgets/ResliceCursor/ResliceCursorActor.js +2 -3
  242. package/Interaction/Widgets/ResliceCursor/ResliceCursorLineRepresentation.js +1 -2
  243. package/Interaction/Widgets/ResliceCursor/ResliceCursorPolyDataAlgorithm.js +2 -3
  244. package/Interaction/Widgets/ResliceCursor/ResliceCursorRepresentation.js +1 -2
  245. package/Interaction/Widgets/ResliceCursor/ResliceCursorWidget/Constants.js +1 -2
  246. package/Interaction/Widgets/ResliceCursor/ResliceCursorWidget.js +2 -3
  247. package/Interaction/Widgets/SphereHandleRepresentation.js +2 -3
  248. package/Interaction/Widgets/WidgetRepresentation.js +1 -2
  249. package/Interaction/Widgets.js +1 -1
  250. package/Interaction/index.js +1 -1
  251. package/Proxy/Animation/AbstractAnimationProxy.js +1 -2
  252. package/Proxy/Animation/AnimationProxyManager.js +1 -2
  253. package/Proxy/Animation/TimeStepBasedAnimationHandlerProxy.js +1 -2
  254. package/Proxy/Core/AbstractRepresentationProxy.js +1 -1
  255. package/Proxy/Core/LookupTableProxy/Constants.js +1 -1
  256. package/Proxy/Core/LookupTableProxy.js +1 -2
  257. package/Proxy/Core/PiecewiseFunctionProxy/Constants.js +1 -1
  258. package/Proxy/Core/PiecewiseFunctionProxy.js +2 -3
  259. package/Proxy/Core/ProxyManager/core.js +2 -2
  260. package/Proxy/Core/ProxyManager/properties.js +2 -2
  261. package/Proxy/Core/ProxyManager/state.js +2 -2
  262. package/Proxy/Core/ProxyManager/view.js +1 -1
  263. package/Proxy/Core/ProxyManager.js +1 -2
  264. package/Proxy/Core/SourceProxy.js +1 -2
  265. package/Proxy/Core/View2DProxy.js +1 -2
  266. package/Proxy/Core/ViewProxy.js +4 -4
  267. package/Proxy/Core.js +1 -1
  268. package/Proxy/Representations/GeometryRepresentationProxy.js +1 -2
  269. package/Proxy/Representations/GlyphRepresentationProxy.js +1 -2
  270. package/Proxy/Representations/MoleculeRepresentationProxy.js +1 -2
  271. package/Proxy/Representations/SkyboxRepresentationProxy.js +1 -2
  272. package/Proxy/Representations/SliceRepresentationProxy.js +2 -3
  273. package/Proxy/Representations/SlicedGeometryRepresentationProxy.js +1 -2
  274. package/Proxy/Representations/VolumeRepresentationProxy.js +1 -2
  275. package/Proxy/Representations.js +1 -1
  276. package/Proxy/index.js +1 -1
  277. package/Rendering/Core/AbstractMapper.js +1 -2
  278. package/Rendering/Core/AbstractMapper3D.js +1 -2
  279. package/Rendering/Core/AbstractPicker.js +1 -2
  280. package/Rendering/Core/Actor.js +2 -3
  281. package/Rendering/Core/Actor2D.js +1 -2
  282. package/Rendering/Core/AnnotatedCubeActor/Presets.js +1 -1
  283. package/Rendering/Core/AnnotatedCubeActor.js +2 -3
  284. package/Rendering/Core/AxesActor.js +2 -3
  285. package/Rendering/Core/Camera.js +1 -2
  286. package/Rendering/Core/CellPicker.js +2 -3
  287. package/Rendering/Core/ColorTransferFunction/ColorMaps.js +1 -1
  288. package/Rendering/Core/ColorTransferFunction/ColorMapsLite.js +1 -1
  289. package/Rendering/Core/ColorTransferFunction/Constants.js +1 -2
  290. package/Rendering/Core/ColorTransferFunction.js +2 -3
  291. package/Rendering/Core/Coordinate/Constants.js +1 -2
  292. package/Rendering/Core/Coordinate.js +2 -3
  293. package/Rendering/Core/CubeAxesActor.js +2 -3
  294. package/Rendering/Core/Follower.js +2 -3
  295. package/Rendering/Core/Glyph3DMapper/Constants.js +1 -2
  296. package/Rendering/Core/Glyph3DMapper.js +2 -3
  297. package/Rendering/Core/HardwareSelector.js +1 -2
  298. package/Rendering/Core/ImageMapper/Constants.js +1 -2
  299. package/Rendering/Core/ImageMapper.js +2 -3
  300. package/Rendering/Core/ImageProperty/Constants.js +1 -2
  301. package/Rendering/Core/ImageProperty.js +1 -2
  302. package/Rendering/Core/ImageSlice.js +1 -2
  303. package/Rendering/Core/InteractorObserver.js +2 -3
  304. package/Rendering/Core/InteractorStyle/Constants.js +1 -2
  305. package/Rendering/Core/InteractorStyle.js +2 -3
  306. package/Rendering/Core/Light.js +1 -2
  307. package/Rendering/Core/Mapper/CoincidentTopologyHelper.js +1 -2
  308. package/Rendering/Core/Mapper/Constants.js +1 -2
  309. package/Rendering/Core/Mapper/Static.js +1 -2
  310. package/Rendering/Core/Mapper.js +2 -3
  311. package/Rendering/Core/Picker.js +2 -3
  312. package/Rendering/Core/PixelSpaceCallbackMapper.js +1 -2
  313. package/Rendering/Core/PointPicker.js +1 -9
  314. package/Rendering/Core/Prop.js +1 -2
  315. package/Rendering/Core/Prop3D.js +1 -2
  316. package/Rendering/Core/Property/Constants.js +1 -2
  317. package/Rendering/Core/Property.js +2 -3
  318. package/Rendering/Core/Property2D.js +1 -2
  319. package/Rendering/Core/RenderWindow.js +1 -2
  320. package/Rendering/Core/RenderWindowInteractor/Constants.js +1 -2
  321. package/Rendering/Core/RenderWindowInteractor.js +2 -3
  322. package/Rendering/Core/Renderer.js +2 -3
  323. package/Rendering/Core/ScalarBarActor.js +2 -3
  324. package/Rendering/Core/Skybox.js +1 -2
  325. package/Rendering/Core/SphereMapper.js +1 -2
  326. package/Rendering/Core/StickMapper.js +1 -2
  327. package/Rendering/Core/SurfaceLICInterface/Constants.js +1 -2
  328. package/Rendering/Core/SurfaceLICInterface.js +1 -2
  329. package/Rendering/Core/SurfaceLICMapper.js +1 -2
  330. package/Rendering/Core/Texture.js +1 -2
  331. package/Rendering/Core/Viewport.js +1 -2
  332. package/Rendering/Core/Volume.js +1 -2
  333. package/Rendering/Core/VolumeMapper/Constants.js +1 -2
  334. package/Rendering/Core/VolumeMapper.js +1 -2
  335. package/Rendering/Core/VolumeProperty/Constants.js +1 -2
  336. package/Rendering/Core/VolumeProperty.js +2 -3
  337. package/Rendering/Core.js +2 -2
  338. package/Rendering/Misc/CanvasView.js +1 -2
  339. package/Rendering/Misc/FullScreenRenderWindow.js +1 -2
  340. package/Rendering/Misc/GenericRenderWindow.js +1 -2
  341. package/Rendering/Misc/RemoteView.js +1 -2
  342. package/Rendering/Misc/RenderWindowWithControlBar.js +2 -3
  343. package/Rendering/Misc/SynchronizableRenderWindow/vtkObjectManager.js +2 -2
  344. package/Rendering/Misc/SynchronizableRenderWindow.js +3 -4
  345. package/Rendering/Misc/TextureLODsDownloader.js +1 -2
  346. package/Rendering/Misc.js +1 -1
  347. package/Rendering/OpenGL/Actor.js +2 -3
  348. package/Rendering/OpenGL/Actor2D.js +2 -3
  349. package/Rendering/OpenGL/BufferObject/Constants.js +1 -2
  350. package/Rendering/OpenGL/BufferObject.js +2 -3
  351. package/Rendering/OpenGL/Camera.js +2 -3
  352. package/Rendering/OpenGL/CellArrayBufferObject.js +2 -4
  353. package/Rendering/OpenGL/Convolution2DPass.js +1 -2
  354. package/Rendering/OpenGL/ForwardPass.js +1 -2
  355. package/Rendering/OpenGL/Framebuffer.js +2 -3
  356. package/Rendering/OpenGL/Glyph3DMapper.js +3 -4
  357. package/Rendering/OpenGL/HardwareSelector/Constants.js +1 -2
  358. package/Rendering/OpenGL/HardwareSelector.js +2 -3
  359. package/Rendering/OpenGL/Helper.js +1 -2
  360. package/Rendering/OpenGL/ImageMapper.js +2 -3
  361. package/Rendering/OpenGL/ImageSlice.js +2 -3
  362. package/Rendering/OpenGL/PixelSpaceCallbackMapper.js +1 -2
  363. package/Rendering/OpenGL/PolyDataMapper.js +2 -3
  364. package/Rendering/OpenGL/RadialDistortionPass.js +1 -2
  365. package/Rendering/OpenGL/RenderWindow.js +1 -2
  366. package/Rendering/OpenGL/Renderer.js +2 -3
  367. package/Rendering/OpenGL/ReplacementShaderMapper.js +1 -1
  368. package/Rendering/OpenGL/Shader.js +1 -2
  369. package/Rendering/OpenGL/ShaderCache.js +1 -2
  370. package/Rendering/OpenGL/ShaderProgram.js +1 -1
  371. package/Rendering/OpenGL/Skybox.js +2 -3
  372. package/Rendering/OpenGL/SphereMapper.js +2 -3
  373. package/Rendering/OpenGL/StickMapper.js +2 -3
  374. package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D/pingpong.js +1 -2
  375. package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D.js +1 -2
  376. package/Rendering/OpenGL/SurfaceLIC/SurfaceLICInterface.js +1 -2
  377. package/Rendering/OpenGL/SurfaceLIC/SurfaceLICMapper.js +3 -4
  378. package/Rendering/OpenGL/SurfaceLIC.js +1 -1
  379. package/Rendering/OpenGL/Texture/Constants.js +1 -2
  380. package/Rendering/OpenGL/Texture.js +3 -4
  381. package/Rendering/OpenGL/TextureUnitManager.js +1 -2
  382. package/Rendering/OpenGL/VertexArrayObject.js +1 -2
  383. package/Rendering/OpenGL/ViewNodeFactory.js +1 -2
  384. package/Rendering/OpenGL/Volume.js +2 -3
  385. package/Rendering/OpenGL/VolumeMapper.js +3 -4
  386. package/Rendering/OpenGL.js +1 -1
  387. package/Rendering/SceneGraph/RenderPass.js +1 -2
  388. package/Rendering/SceneGraph/RenderWindowViewNode.js +1 -2
  389. package/Rendering/SceneGraph/ViewNode.js +1 -1
  390. package/Rendering/SceneGraph/ViewNodeFactory.js +1 -2
  391. package/Rendering/SceneGraph.js +1 -1
  392. package/Rendering/WebGPU/Actor.js +1 -2
  393. package/Rendering/WebGPU/BindGroup.js +1 -2
  394. package/Rendering/WebGPU/Buffer.js +2 -3
  395. package/Rendering/WebGPU/BufferManager/Constants.js +1 -2
  396. package/Rendering/WebGPU/BufferManager.js +3 -4
  397. package/Rendering/WebGPU/Camera.js +1 -2
  398. package/Rendering/WebGPU/Device.js +2 -3
  399. package/Rendering/WebGPU/ForwardPass.js +1 -2
  400. package/Rendering/WebGPU/FullScreenQuad.js +1 -2
  401. package/Rendering/WebGPU/Glyph3DMapper.js +3 -4
  402. package/Rendering/WebGPU/HardwareSelectionPass.js +1 -2
  403. package/Rendering/WebGPU/HardwareSelector.js +1 -2
  404. package/Rendering/WebGPU/MapperHelper.js +1 -2
  405. package/Rendering/WebGPU/OpaquePass.js +2 -4
  406. package/Rendering/WebGPU/OrderIndependentTranslucentPass.js +1 -2
  407. package/Rendering/WebGPU/Pipeline.js +2 -3
  408. package/Rendering/WebGPU/PixelSpaceCallbackMapper.js +1 -2
  409. package/Rendering/WebGPU/PolyDataMapper.js +3 -4
  410. package/Rendering/WebGPU/RenderEncoder.js +2 -3
  411. package/Rendering/WebGPU/RenderWindow.js +11 -3
  412. package/Rendering/WebGPU/Renderer.js +2 -3
  413. package/Rendering/WebGPU/Sampler.js +1 -2
  414. package/Rendering/WebGPU/ShaderCache.js +1 -2
  415. package/Rendering/WebGPU/ShaderDescription.js +1 -2
  416. package/Rendering/WebGPU/ShaderModule.js +1 -1
  417. package/Rendering/WebGPU/SphereMapper.js +1 -2
  418. package/Rendering/WebGPU/StickMapper.js +1 -2
  419. package/Rendering/WebGPU/StorageBuffer.js +1 -2
  420. package/Rendering/WebGPU/Texture.js +2 -3
  421. package/Rendering/WebGPU/TextureManager.js +24 -7
  422. package/Rendering/WebGPU/TextureView.js +19 -4
  423. package/Rendering/WebGPU/Types.js +83 -42
  424. package/Rendering/WebGPU/UniformBuffer.js +1 -2
  425. package/Rendering/WebGPU/VertexInput.js +2 -3
  426. package/Rendering/WebGPU/ViewNodeFactory.js +1 -2
  427. package/Rendering/WebGPU/Volume.js +1 -2
  428. package/Rendering/WebGPU/VolumePass.js +2 -3
  429. package/Rendering/WebGPU/VolumePassFSQ.js +4 -4
  430. package/Rendering/WebGPU.js +1 -1
  431. package/Rendering/index.js +1 -1
  432. package/ThirdParty/index.js +2 -2
  433. package/Utilities/DataGenerator/convert-cli.js +10 -8
  434. package/Utilities/ExampleRunner/example-runner-cli.js +2 -1
  435. package/Utilities/ExampleRunner/template-config.js +8 -6
  436. package/Utilities/TestResults/TESTS-Chrome_Headless_93.0.4577.63_(Linux_x86_64).xml +1058 -1058
  437. package/Utilities/XMLConverter/xml2json-cli.js +5 -4
  438. package/Widgets/Core/AbstractWidget/Constants.js +1 -2
  439. package/Widgets/Core/AbstractWidget.js +1 -2
  440. package/Widgets/Core/AbstractWidgetFactory.js +2 -3
  441. package/Widgets/Core/StateBuilder/boundsMixin.js +1 -2
  442. package/Widgets/Core/StateBuilder/colorMixin.js +1 -2
  443. package/Widgets/Core/StateBuilder/cornerMixin.js +1 -2
  444. package/Widgets/Core/StateBuilder/directionMixin.js +1 -2
  445. package/Widgets/Core/StateBuilder/manipulatorMixin.js +1 -2
  446. package/Widgets/Core/StateBuilder/nameMixin.js +1 -2
  447. package/Widgets/Core/StateBuilder/orientationMixin.js +1 -2
  448. package/Widgets/Core/StateBuilder/originMixin.js +1 -2
  449. package/Widgets/Core/StateBuilder/scale1Mixin.js +1 -2
  450. package/Widgets/Core/StateBuilder/scale3Mixin.js +1 -2
  451. package/Widgets/Core/StateBuilder/shapeMixin.js +1 -2
  452. package/Widgets/Core/StateBuilder/textMixin.js +1 -2
  453. package/Widgets/Core/StateBuilder/visibleMixin.js +1 -2
  454. package/Widgets/Core/StateBuilder.js +1 -2
  455. package/Widgets/Core/WidgetManager/Constants.js +1 -2
  456. package/Widgets/Core/WidgetManager.js +1 -2
  457. package/Widgets/Core/WidgetState.js +1 -2
  458. package/Widgets/Core.js +1 -1
  459. package/Widgets/Manipulators/LineManipulator.js +1 -2
  460. package/Widgets/Manipulators/PlaneManipulator.js +1 -2
  461. package/Widgets/Manipulators/TrackballManipulator.js +1 -2
  462. package/Widgets/Manipulators.js +1 -1
  463. package/Widgets/Representations/ArrowHandleRepresentation.js +2 -3
  464. package/Widgets/Representations/CircleContextRepresentation.js +1 -2
  465. package/Widgets/Representations/ContextRepresentation.js +2 -3
  466. package/Widgets/Representations/ConvexFaceContextRepresentation.js +1 -2
  467. package/Widgets/Representations/CroppingOutlineRepresentation.js +1 -2
  468. package/Widgets/Representations/CubeHandleRepresentation.js +1 -2
  469. package/Widgets/Representations/HandleRepresentation.js +2 -3
  470. package/Widgets/Representations/ImplicitPlaneRepresentation.js +1 -2
  471. package/Widgets/Representations/OutlineContextRepresentation.js +1 -2
  472. package/Widgets/Representations/PolyLineRepresentation.js +2 -3
  473. package/Widgets/Representations/RectangleContextRepresentation.js +1 -2
  474. package/Widgets/Representations/ResliceCursorContextRepresentation.js +2 -3
  475. package/Widgets/Representations/SphereHandleRepresentation.js +1 -2
  476. package/Widgets/Representations/SplineContextRepresentation.js +1 -2
  477. package/Widgets/Representations/WidgetRepresentation/Constants.js +1 -2
  478. package/Widgets/Representations/WidgetRepresentation.js +1 -2
  479. package/Widgets/Representations.js +1 -1
  480. package/Widgets/SVG/SVGLandmarkRepresentation.js +2 -3
  481. package/Widgets/SVG/SVGRepresentation.js +3 -2
  482. package/Widgets/Widgets3D/AngleWidget/behavior.js +1 -1
  483. package/Widgets/Widgets3D/AngleWidget/state.js +1 -1
  484. package/Widgets/Widgets3D/AngleWidget.js +1 -2
  485. package/Widgets/Widgets3D/DistanceWidget/behavior.js +1 -1
  486. package/Widgets/Widgets3D/DistanceWidget/state.js +1 -1
  487. package/Widgets/Widgets3D/DistanceWidget.js +1 -2
  488. package/Widgets/Widgets3D/EllipseWidget/behavior.js +2 -2
  489. package/Widgets/Widgets3D/EllipseWidget/state.js +1 -1
  490. package/Widgets/Widgets3D/EllipseWidget.js +2 -3
  491. package/Widgets/Widgets3D/ImageCroppingWidget/behavior.js +1 -1
  492. package/Widgets/Widgets3D/ImageCroppingWidget/state.js +1 -1
  493. package/Widgets/Widgets3D/ImageCroppingWidget.js +1 -2
  494. package/Widgets/Widgets3D/ImplicitPlaneWidget.js +1 -2
  495. package/Widgets/Widgets3D/InteractiveOrientationWidget/behavior.js +2 -2
  496. package/Widgets/Widgets3D/InteractiveOrientationWidget/state.js +1 -2
  497. package/Widgets/Widgets3D/InteractiveOrientationWidget.js +1 -2
  498. package/Widgets/Widgets3D/LineWidget/Constants.js +1 -2
  499. package/Widgets/Widgets3D/LineWidget/behavior.js +2 -2
  500. package/Widgets/Widgets3D/LineWidget/state.js +1 -1
  501. package/Widgets/Widgets3D/LineWidget.js +1 -2
  502. package/Widgets/Widgets3D/PaintWidget.js +1 -2
  503. package/Widgets/Widgets3D/PolyLineWidget/behavior.js +1 -1
  504. package/Widgets/Widgets3D/PolyLineWidget/state.js +1 -1
  505. package/Widgets/Widgets3D/PolyLineWidget.js +1 -2
  506. package/Widgets/Widgets3D/RectangleWidget/behavior.js +2 -2
  507. package/Widgets/Widgets3D/RectangleWidget/state.js +1 -1
  508. package/Widgets/Widgets3D/RectangleWidget.js +2 -3
  509. package/Widgets/Widgets3D/ResliceCursorWidget/Constants.js +1 -2
  510. package/Widgets/Widgets3D/ResliceCursorWidget/behavior.js +1 -1
  511. package/Widgets/Widgets3D/ResliceCursorWidget/state.js +1 -1
  512. package/Widgets/Widgets3D/ResliceCursorWidget.js +1 -2
  513. package/Widgets/Widgets3D/ShapeWidget/Constants.js +1 -2
  514. package/Widgets/Widgets3D/ShapeWidget/behavior.js +2 -2
  515. package/Widgets/Widgets3D/ShapeWidget.js +1 -2
  516. package/Widgets/Widgets3D/SplineWidget/behavior.js +1 -1
  517. package/Widgets/Widgets3D/SplineWidget/state.js +1 -1
  518. package/Widgets/Widgets3D/SplineWidget.js +1 -2
  519. package/Widgets/Widgets3D.js +1 -1
  520. package/Widgets/index.js +1 -1
  521. package/_vendor/base64-js/index.js_commonjs-exports +1 -0
  522. package/_vendor/blueimp-md5/js/md5.js_commonjs-module +3 -0
  523. package/_vendor/define-properties/index.js_commonjs-proxy +1 -1
  524. package/_vendor/globalthis/implementation.browser.js_commonjs-module +3 -0
  525. package/_vendor/globalthis/implementation.browser.js_commonjs-proxy +1 -1
  526. package/_vendor/globalthis/polyfill.js_commonjs-proxy +1 -1
  527. package/_vendor/globalthis/shim.js_commonjs-proxy +2 -1
  528. package/_vendor/jszip/dist/jszip.min.js_commonjs-module +3 -0
  529. package/_vendor/object-keys/implementation.js_commonjs-proxy +1 -1
  530. package/_vendor/object-keys/index.js_commonjs-proxy +1 -1
  531. package/_vendor/object-keys/isArguments.js_commonjs-proxy +1 -1
  532. package/_vendor/seedrandom/lib/alea.js_commonjs-module +3 -0
  533. package/_vendor/seedrandom/lib/alea.js_commonjs-proxy +1 -1
  534. package/_vendor/seedrandom/lib/tychei.js_commonjs-module +3 -0
  535. package/_vendor/seedrandom/lib/tychei.js_commonjs-proxy +1 -1
  536. package/_vendor/seedrandom/lib/xor128.js_commonjs-module +3 -0
  537. package/_vendor/seedrandom/lib/xor128.js_commonjs-proxy +1 -1
  538. package/_vendor/seedrandom/lib/xor4096.js_commonjs-module +3 -0
  539. package/_vendor/seedrandom/lib/xor4096.js_commonjs-proxy +1 -1
  540. package/_vendor/seedrandom/lib/xorshift7.js_commonjs-module +3 -0
  541. package/_vendor/seedrandom/lib/xorshift7.js_commonjs-proxy +1 -1
  542. package/_vendor/seedrandom/lib/xorwow.js_commonjs-module +3 -0
  543. package/_vendor/seedrandom/lib/xorwow.js_commonjs-proxy +1 -1
  544. package/_vendor/seedrandom/seedrandom.js_commonjs-module +3 -0
  545. package/_vendor/seedrandom/seedrandom.js_commonjs-proxy +1 -1
  546. package/_vendor/webworker-promise/lib/register.js_commonjs-module +3 -0
  547. package/_vendor/webworker-promise/lib/tiny-emitter.js_commonjs-proxy +1 -1
  548. package/_vendor/webworker-promise/src/tiny-emitter.js_commonjs-proxy +1 -0
  549. package/_vendor/xmlbuilder2/lib/xmlbuilder2.min.js_commonjs-module +3 -0
  550. package/_virtual/commonjsHelpers.js +3 -4
  551. package/_virtual/{polyfill-node_buffer.js → polyfill-node.buffer.js} +1 -1
  552. package/_virtual/{polyfill-node_global.js → polyfill-node.global.js} +0 -0
  553. package/_virtual/rollup-plugin-worker-loader__module_Sources/Filters/General/PaintFilter/PaintFilter.worker.js +1 -1
  554. package/_virtual/rollup-plugin-worker-loader__module_Sources/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +1 -1
  555. package/macros.js +4 -5
  556. package/package.json +54 -55
  557. package/vendor/base64-js/index.js +1 -87
  558. package/vendor/blueimp-md5/js/md5.js +6 -3
  559. package/vendor/d3-array/src/ascending.js +1 -1
  560. package/vendor/d3-array/src/bisect.js +2 -1
  561. package/vendor/d3-array/src/bisector.js +21 -23
  562. package/vendor/d3-array/src/mode.js +1 -0
  563. package/vendor/d3-scale/src/continuous.js +2 -2
  564. package/vendor/d3-time/src/ticks.js +1 -0
  565. package/vendor/define-properties/index.js +2 -1
  566. package/vendor/globalthis/implementation.browser.js +4 -9
  567. package/vendor/globalthis/index.js +13 -6
  568. package/vendor/globalthis/polyfill.js +6 -3
  569. package/vendor/globalthis/shim.js +12 -9
  570. package/vendor/jszip/dist/jszip.min.js +11 -0
  571. package/vendor/object-keys/index.js +2 -2
  572. package/vendor/pako/dist/pako.esm.mjs +397 -388
  573. package/vendor/seedrandom/index.js +28 -21
  574. package/vendor/seedrandom/lib/alea.js +4 -5
  575. package/vendor/seedrandom/lib/tychei.js +4 -5
  576. package/vendor/seedrandom/lib/xor128.js +4 -5
  577. package/vendor/seedrandom/lib/xor4096.js +4 -5
  578. package/vendor/seedrandom/lib/xorshift7.js +4 -5
  579. package/vendor/seedrandom/lib/xorwow.js +4 -5
  580. package/vendor/seedrandom/seedrandom.js +4 -5
  581. package/vendor/webworker-promise/lib/register.js +14 -8
  582. package/vendor/webworker-promise/src/index.js +110 -0
  583. package/vendor/webworker-promise/src/tiny-emitter.js +51 -0
  584. package/vendor/xmlbuilder2/lib/xmlbuilder2.min.js +6 -7
  585. package/vtk.js +2 -3
  586. package/_vendor/base64-js/index.js_commonjs-proxy +0 -1
  587. package/_vendor/buffer/index.js_commonjs-proxy +0 -1
  588. package/_vendor/ieee754/index.js_commonjs-proxy +0 -1
  589. package/_vendor/immediate/lib/browser.js_commonjs-proxy +0 -1
  590. package/_vendor/inherits/inherits_browser.js_commonjs-proxy +0 -1
  591. package/_vendor/jszip/lib/base64.js_commonjs-proxy +0 -1
  592. package/_vendor/jszip/lib/compressedObject.js_commonjs-proxy +0 -1
  593. package/_vendor/jszip/lib/compressions.js_commonjs-proxy +0 -1
  594. package/_vendor/jszip/lib/crc32.js_commonjs-proxy +0 -1
  595. package/_vendor/jszip/lib/defaults.js_commonjs-proxy +0 -1
  596. package/_vendor/jszip/lib/external.js_commonjs-proxy +0 -1
  597. package/_vendor/jszip/lib/flate.js_commonjs-proxy +0 -1
  598. package/_vendor/jszip/lib/generate/ZipFileWorker.js_commonjs-proxy +0 -1
  599. package/_vendor/jszip/lib/generate/index.js_commonjs-proxy +0 -1
  600. package/_vendor/jszip/lib/load.js_commonjs-proxy +0 -1
  601. package/_vendor/jszip/lib/nodejs/NodejsStreamInputAdapter.js_commonjs-proxy +0 -1
  602. package/_vendor/jszip/lib/nodejs/NodejsStreamOutputAdapter.js_commonjs-proxy +0 -1
  603. package/_vendor/jszip/lib/nodejsUtils.js_commonjs-proxy +0 -1
  604. package/_vendor/jszip/lib/object.js_commonjs-proxy +0 -1
  605. package/_vendor/jszip/lib/readable-stream-browser.js_commonjs-proxy +0 -1
  606. package/_vendor/jszip/lib/reader/ArrayReader.js_commonjs-proxy +0 -1
  607. package/_vendor/jszip/lib/reader/DataReader.js_commonjs-proxy +0 -1
  608. package/_vendor/jszip/lib/reader/NodeBufferReader.js_commonjs-proxy +0 -1
  609. package/_vendor/jszip/lib/reader/StringReader.js_commonjs-proxy +0 -1
  610. package/_vendor/jszip/lib/reader/Uint8ArrayReader.js_commonjs-proxy +0 -1
  611. package/_vendor/jszip/lib/reader/readerFor.js_commonjs-proxy +0 -1
  612. package/_vendor/jszip/lib/signature.js_commonjs-proxy +0 -1
  613. package/_vendor/jszip/lib/stream/ConvertWorker.js_commonjs-proxy +0 -1
  614. package/_vendor/jszip/lib/stream/Crc32Probe.js_commonjs-proxy +0 -1
  615. package/_vendor/jszip/lib/stream/DataLengthProbe.js_commonjs-proxy +0 -1
  616. package/_vendor/jszip/lib/stream/DataWorker.js_commonjs-proxy +0 -1
  617. package/_vendor/jszip/lib/stream/GenericWorker.js_commonjs-proxy +0 -1
  618. package/_vendor/jszip/lib/stream/StreamHelper.js_commonjs-proxy +0 -1
  619. package/_vendor/jszip/lib/support.js_commonjs-proxy +0 -1
  620. package/_vendor/jszip/lib/utf8.js_commonjs-proxy +0 -1
  621. package/_vendor/jszip/lib/utils.js_commonjs-proxy +0 -1
  622. package/_vendor/jszip/lib/zipEntries.js_commonjs-proxy +0 -1
  623. package/_vendor/jszip/lib/zipEntry.js_commonjs-proxy +0 -1
  624. package/_vendor/jszip/lib/zipObject.js_commonjs-proxy +0 -1
  625. package/_vendor/jszip/node_modules/pako/index.js_commonjs-proxy +0 -1
  626. package/_vendor/jszip/node_modules/pako/lib/deflate.js_commonjs-proxy +0 -1
  627. package/_vendor/jszip/node_modules/pako/lib/inflate.js_commonjs-proxy +0 -1
  628. package/_vendor/jszip/node_modules/pako/lib/utils/common.js_commonjs-proxy +0 -1
  629. package/_vendor/jszip/node_modules/pako/lib/utils/strings.js_commonjs-proxy +0 -1
  630. package/_vendor/jszip/node_modules/pako/lib/zlib/adler32.js_commonjs-proxy +0 -1
  631. package/_vendor/jszip/node_modules/pako/lib/zlib/constants.js_commonjs-proxy +0 -1
  632. package/_vendor/jszip/node_modules/pako/lib/zlib/crc32.js_commonjs-proxy +0 -1
  633. package/_vendor/jszip/node_modules/pako/lib/zlib/deflate.js_commonjs-proxy +0 -1
  634. package/_vendor/jszip/node_modules/pako/lib/zlib/gzheader.js_commonjs-proxy +0 -1
  635. package/_vendor/jszip/node_modules/pako/lib/zlib/inffast.js_commonjs-proxy +0 -1
  636. package/_vendor/jszip/node_modules/pako/lib/zlib/inflate.js_commonjs-proxy +0 -1
  637. package/_vendor/jszip/node_modules/pako/lib/zlib/inftrees.js_commonjs-proxy +0 -1
  638. package/_vendor/jszip/node_modules/pako/lib/zlib/messages.js_commonjs-proxy +0 -1
  639. package/_vendor/jszip/node_modules/pako/lib/zlib/trees.js_commonjs-proxy +0 -1
  640. package/_vendor/jszip/node_modules/pako/lib/zlib/zstream.js_commonjs-proxy +0 -1
  641. package/_vendor/lie/lib/browser.js_commonjs-proxy +0 -1
  642. package/_vendor/safe-buffer/index.js_commonjs-proxy +0 -1
  643. package/_vendor/set-immediate-shim/index.js_commonjs-proxy +0 -1
  644. package/_vendor/util/support/isBufferBrowser.js_commonjs-proxy +0 -1
  645. package/_virtual/_polyfill-node_stream.js_commonjs-proxy.js +0 -6
  646. package/_virtual/polyfill-node__buffer_list.js +0 -59
  647. package/_virtual/polyfill-node__stream_duplex.js +0 -44
  648. package/_virtual/polyfill-node__stream_passthrough.js +0 -15
  649. package/_virtual/polyfill-node__stream_readable.js +0 -896
  650. package/_virtual/polyfill-node__stream_transform.js +0 -132
  651. package/_virtual/polyfill-node__stream_writable.js +0 -480
  652. package/_virtual/polyfill-node_process.js +0 -225
  653. package/_virtual/polyfill-node_stream.js +0 -120
  654. package/vendor/buffer/index.js +0 -2112
  655. package/vendor/events/events.js +0 -457
  656. package/vendor/ieee754/index.js +0 -92
  657. package/vendor/immediate/lib/browser.js +0 -72
  658. package/vendor/inherits/inherits_browser.js +0 -29
  659. package/vendor/jszip/lib/base64.js +0 -113
  660. package/vendor/jszip/lib/compressedObject.js +0 -74
  661. package/vendor/jszip/lib/compressions.js +0 -20
  662. package/vendor/jszip/lib/crc32.js +0 -77
  663. package/vendor/jszip/lib/defaults.js +0 -25
  664. package/vendor/jszip/lib/external.js +0 -22
  665. package/vendor/jszip/lib/flate.js +0 -96
  666. package/vendor/jszip/lib/generate/ZipFileWorker.js +0 -540
  667. package/vendor/jszip/lib/generate/index.js +0 -61
  668. package/vendor/jszip/lib/index.js +0 -58
  669. package/vendor/jszip/lib/load.js +0 -82
  670. package/vendor/jszip/lib/nodejs/NodejsStreamInputAdapter.js +0 -74
  671. package/vendor/jszip/lib/nodejs/NodejsStreamOutputAdapter.js +0 -45
  672. package/vendor/jszip/lib/nodejsUtils.js +0 -59
  673. package/vendor/jszip/lib/object.js +0 -389
  674. package/vendor/jszip/lib/readable-stream-browser.js +0 -14
  675. package/vendor/jszip/lib/reader/ArrayReader.js +0 -58
  676. package/vendor/jszip/lib/reader/DataReader.js +0 -117
  677. package/vendor/jszip/lib/reader/NodeBufferReader.js +0 -20
  678. package/vendor/jszip/lib/reader/StringReader.js +0 -39
  679. package/vendor/jszip/lib/reader/Uint8ArrayReader.js +0 -23
  680. package/vendor/jszip/lib/reader/readerFor.js +0 -28
  681. package/vendor/jszip/lib/signature.js +0 -17
  682. package/vendor/jszip/lib/stream/ConvertWorker.js +0 -26
  683. package/vendor/jszip/lib/stream/Crc32Probe.js +0 -24
  684. package/vendor/jszip/lib/stream/DataLengthProbe.js +0 -28
  685. package/vendor/jszip/lib/stream/DataWorker.js +0 -116
  686. package/vendor/jszip/lib/stream/GenericWorker.js +0 -263
  687. package/vendor/jszip/lib/stream/StreamHelper.js +0 -214
  688. package/vendor/jszip/lib/support.js +0 -45
  689. package/vendor/jszip/lib/utf8.js +0 -284
  690. package/vendor/jszip/lib/utils.js +0 -486
  691. package/vendor/jszip/lib/zipEntries.js +0 -257
  692. package/vendor/jszip/lib/zipEntry.js +0 -293
  693. package/vendor/jszip/lib/zipObject.js +0 -133
  694. package/vendor/jszip/node_modules/pako/index.js +0 -18
  695. package/vendor/jszip/node_modules/pako/lib/deflate.js +0 -406
  696. package/vendor/jszip/node_modules/pako/lib/inflate.js +0 -429
  697. package/vendor/jszip/node_modules/pako/lib/utils/common.js +0 -110
  698. package/vendor/jszip/node_modules/pako/lib/utils/strings.js +0 -192
  699. package/vendor/jszip/node_modules/pako/lib/zlib/adler32.js +0 -51
  700. package/vendor/jszip/node_modules/pako/lib/zlib/constants.js +0 -68
  701. package/vendor/jszip/node_modules/pako/lib/zlib/crc32.js +0 -59
  702. package/vendor/jszip/node_modules/pako/lib/zlib/deflate.js +0 -1892
  703. package/vendor/jszip/node_modules/pako/lib/zlib/gzheader.js +0 -58
  704. package/vendor/jszip/node_modules/pako/lib/zlib/inffast.js +0 -345
  705. package/vendor/jszip/node_modules/pako/lib/zlib/inflate.js +0 -1572
  706. package/vendor/jszip/node_modules/pako/lib/zlib/inftrees.js +0 -345
  707. package/vendor/jszip/node_modules/pako/lib/zlib/messages.js +0 -32
  708. package/vendor/jszip/node_modules/pako/lib/zlib/trees.js +0 -1232
  709. package/vendor/jszip/node_modules/pako/lib/zlib/zstream.js +0 -47
  710. package/vendor/lie/lib/browser.js +0 -274
  711. package/vendor/process/browser.js +0 -190
  712. package/vendor/safe-buffer/index.js +0 -69
  713. package/vendor/set-immediate-shim/index.js +0 -8
  714. package/vendor/string_decoder/lib/string_decoder.js +0 -276
  715. package/vendor/util/support/isBufferBrowser.js +0 -8
  716. package/vendor/util/util.js +0 -706
  717. package/vendor/webworker-promise/lib/index.js +0 -172
@@ -25,5 +25,4 @@ var Constants = {
25
25
  ShapesOrientable: ShapesOrientable
26
26
  };
27
27
 
28
- export default Constants;
29
- export { ShapeType, Shapes2D, Shapes3D, ShapesOrientable };
28
+ export { ShapeType, Shapes2D, Shapes3D, ShapesOrientable, Constants as default };
@@ -5,7 +5,7 @@ import macro from '../../../macros.js';
5
5
  import { g as subtract, k as add, l as normalize } from '../../../Common/Core/Math/index.js';
6
6
  import { getNumberOfPlacedHandles, isHandlePlaced, calculateTextPosition, updateTextPosition, getPoint } from './helpers.js';
7
7
 
8
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
8
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
9
9
 
10
10
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
11
11
  var ShapeType = Constants.ShapeType; // Total number of points to place
@@ -309,4 +309,4 @@ function widgetBehavior(publicAPI, model) {
309
309
  };
310
310
  }
311
311
 
312
- export default widgetBehavior;
312
+ export { widgetBehavior as default };
@@ -51,4 +51,4 @@ function generateState() {
51
51
  }).build();
52
52
  }
53
53
 
54
- export default generateState;
54
+ export { generateState as default };
@@ -174,5 +174,4 @@ var vtkLineWidget$1 = {
174
174
  extend: extend
175
175
  };
176
176
 
177
- export default vtkLineWidget$1;
178
- export { extend, newInstance };
177
+ export { vtkLineWidget$1 as default, extend, newInstance };
@@ -203,5 +203,4 @@ var vtkPaintWidget$1 = {
203
203
  extend: extend
204
204
  };
205
205
 
206
- export default vtkPaintWidget$1;
207
- export { extend, newInstance };
206
+ export { vtkPaintWidget$1 as default, extend, newInstance };
@@ -153,4 +153,4 @@ function widgetBehavior(publicAPI, model) {
153
153
  };
154
154
  }
155
155
 
156
- export default widgetBehavior;
156
+ export { widgetBehavior as default };
@@ -22,4 +22,4 @@ function generateState() {
22
22
  }).build();
23
23
  }
24
24
 
25
- export default generateState;
25
+ export { generateState as default };
@@ -77,5 +77,4 @@ var vtkPolyLineWidget$1 = {
77
77
  extend: extend
78
78
  };
79
79
 
80
- export default vtkPolyLineWidget$1;
81
- export { extend, newInstance };
80
+ export { vtkPolyLineWidget$1 as default, extend, newInstance };
@@ -1,7 +1,7 @@
1
1
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import widgetBehavior$1 from '../ShapeWidget/behavior.js';
3
3
 
4
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
4
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
5
5
 
6
6
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
7
7
  function widgetBehavior(publicAPI, model) {
@@ -22,4 +22,4 @@ function widgetBehavior(publicAPI, model) {
22
22
  };
23
23
  }
24
24
 
25
- export default widgetBehavior;
25
+ export { widgetBehavior as default };
@@ -29,4 +29,4 @@ function generateState() {
29
29
  }).build();
30
30
  }
31
31
 
32
- export default generateState;
32
+ export { generateState as default };
@@ -12,7 +12,7 @@ import { ViewTypes } from '../Core/WidgetManager/Constants.js';
12
12
 
13
13
  var _None;
14
14
 
15
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
15
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
16
16
 
17
17
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
18
18
  // Factory
@@ -78,5 +78,4 @@ var vtkRectangleWidget$1 = {
78
78
  extend: extend
79
79
  };
80
80
 
81
- export default vtkRectangleWidget$1;
82
- export { extend, newInstance };
81
+ export { vtkRectangleWidget$1 as default, extend, newInstance };
@@ -24,5 +24,4 @@ var Constants = {
24
24
  viewTypeToXYZ: viewTypeToXYZ
25
25
  };
26
26
 
27
- export default Constants;
28
- export { InteractionMethodsName, ScrollingMethods, defaultViewUpFromViewType, viewTypeToXYZ, xyzToViewType };
27
+ export { InteractionMethodsName, ScrollingMethods, Constants as default, defaultViewUpFromViewType, viewTypeToXYZ, xyzToViewType };
@@ -309,4 +309,4 @@ function widgetBehavior(publicAPI, model) {
309
309
  model.planeManipulator = vtkPlanePointManipulator.newInstance();
310
310
  }
311
311
 
312
- export default widgetBehavior;
312
+ export { widgetBehavior as default };
@@ -229,4 +229,4 @@ function generateState() {
229
229
  }).build();
230
230
  }
231
231
 
232
- export default generateState;
232
+ export { generateState as default };
@@ -417,5 +417,4 @@ var vtkResliceCursorWidget$1 = {
417
417
  extend: extend
418
418
  };
419
419
 
420
- export default vtkResliceCursorWidget$1;
421
- export { extend, newInstance };
420
+ export { vtkResliceCursorWidget$1 as default, extend, newInstance };
@@ -87,5 +87,4 @@ function computeTextPosition(bounds, horizontalPosition, verticalPosition, textW
87
87
  return [x, y, 0];
88
88
  }
89
89
 
90
- export default ShapeBehavior;
91
- export { BehaviorCategory, HorizontalTextPosition, ShapeBehavior, VerticalTextPosition, computeTextPosition };
90
+ export { BehaviorCategory, HorizontalTextPosition, ShapeBehavior, VerticalTextPosition, computeTextPosition, ShapeBehavior as default };
@@ -5,7 +5,7 @@ import { ShapeBehavior, BehaviorCategory } from './Constants.js';
5
5
  import vtkLabelRepresentation from '../../../Interaction/Widgets/LabelRepresentation.js';
6
6
  import { h as distance, a as subtract, d as dot, j as add, c as cross, x as squaredDistance } from '../../../vendor/gl-matrix/esm/vec3.js';
7
7
 
8
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
8
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
9
9
 
10
10
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
11
11
  var vtkErrorMacro = macro.vtkErrorMacro;
@@ -535,4 +535,4 @@ function widgetBehavior(publicAPI, model) {
535
535
  };
536
536
  }
537
537
 
538
- export default widgetBehavior;
538
+ export { widgetBehavior as default };
@@ -17,5 +17,4 @@ var vtkShapeWidget = {
17
17
  DEFAULT_VALUES: DEFAULT_VALUES
18
18
  };
19
19
 
20
- export default vtkShapeWidget;
21
- export { DEFAULT_VALUES };
20
+ export { DEFAULT_VALUES, vtkShapeWidget as default };
@@ -318,4 +318,4 @@ function widgetBehavior(publicAPI, model) {
318
318
  };
319
319
  }
320
320
 
321
- export default widgetBehavior;
321
+ export { widgetBehavior as default };
@@ -34,4 +34,4 @@ function generateState() {
34
34
  }).build();
35
35
  }
36
36
 
37
- export default generateState;
37
+ export { generateState as default };
@@ -67,5 +67,4 @@ var vtkSplineWidget$1 = {
67
67
  extend: extend
68
68
  };
69
69
 
70
- export default vtkSplineWidget$1;
71
- export { extend, newInstance };
70
+ export { vtkSplineWidget$1 as default, extend, newInstance };
@@ -28,4 +28,4 @@ var Widgets3D = {
28
28
  vtkSplineWidget: vtkSplineWidget
29
29
  };
30
30
 
31
- export default Widgets3D;
31
+ export { Widgets3D as default };
package/Widgets/index.js CHANGED
@@ -10,4 +10,4 @@ var Widgets = {
10
10
  Widgets3D: Widgets3D
11
11
  };
12
12
 
13
- export default Widgets;
13
+ export { Widgets as default };
@@ -0,0 +1,3 @@
1
+ var md5 = {exports: {}};
2
+
3
+ export { md5 as m };
@@ -1 +1 @@
1
- import { d as defineProperties_1 } from '../../vendor/define-properties/index.js';
1
+ import '../../vendor/define-properties/index.js';
@@ -0,0 +1,3 @@
1
+ var implementation_browser = {exports: {}};
2
+
3
+ export { implementation_browser as i };
@@ -1 +1 @@
1
- import { i as implementation_browser } from '../../vendor/globalthis/implementation.browser.js';
1
+ import '../../vendor/globalthis/implementation.browser.js';
@@ -1 +1 @@
1
- import { p as polyfill } from '../../vendor/globalthis/polyfill.js';
1
+ import '../../vendor/globalthis/implementation.browser.js';
@@ -1 +1,2 @@
1
- import { s as shim } from '../../vendor/globalthis/shim.js';
1
+ import '../../vendor/define-properties/index.js';
2
+ import '../../vendor/globalthis/implementation.browser.js';
@@ -0,0 +1,3 @@
1
+ var jszip_min = {exports: {}};
2
+
3
+ export { jszip_min as j };
@@ -1 +1 @@
1
- import { i as implementation } from '../../vendor/object-keys/implementation.js';
1
+ import '../../vendor/object-keys/implementation.js';
@@ -1 +1 @@
1
- import { o as objectKeys } from '../../vendor/object-keys/index.js';
1
+ import '../../vendor/object-keys/index.js';
@@ -1 +1 @@
1
- import { i as isArguments } from '../../vendor/object-keys/isArguments.js';
1
+
@@ -0,0 +1,3 @@
1
+ var alea = {exports: {}};
2
+
3
+ export { alea as a };
@@ -1 +1 @@
1
- import { a as alea } from '../../../vendor/seedrandom/lib/alea.js';
1
+ import '../../../vendor/seedrandom/lib/alea.js';
@@ -0,0 +1,3 @@
1
+ var tychei = {exports: {}};
2
+
3
+ export { tychei as t };
@@ -1 +1 @@
1
- import { t as tychei } from '../../../vendor/seedrandom/lib/tychei.js';
1
+ import '../../../vendor/seedrandom/lib/tychei.js';
@@ -0,0 +1,3 @@
1
+ var xor128 = {exports: {}};
2
+
3
+ export { xor128 as x };
@@ -1 +1 @@
1
- import { x as xor128 } from '../../../vendor/seedrandom/lib/xor128.js';
1
+ import '../../../vendor/seedrandom/lib/xor128.js';
@@ -0,0 +1,3 @@
1
+ var xor4096 = {exports: {}};
2
+
3
+ export { xor4096 as x };
@@ -1 +1 @@
1
- import { x as xor4096 } from '../../../vendor/seedrandom/lib/xor4096.js';
1
+ import '../../../vendor/seedrandom/lib/xor4096.js';
@@ -0,0 +1,3 @@
1
+ var xorshift7 = {exports: {}};
2
+
3
+ export { xorshift7 as x };
@@ -1 +1 @@
1
- import { x as xorshift7 } from '../../../vendor/seedrandom/lib/xorshift7.js';
1
+ import '../../../vendor/seedrandom/lib/xorshift7.js';
@@ -0,0 +1,3 @@
1
+ var xorwow = {exports: {}};
2
+
3
+ export { xorwow as x };
@@ -1 +1 @@
1
- import { x as xorwow } from '../../../vendor/seedrandom/lib/xorwow.js';
1
+ import '../../../vendor/seedrandom/lib/xorwow.js';
@@ -0,0 +1,3 @@
1
+ var seedrandom = {exports: {}};
2
+
3
+ export { seedrandom as s };
@@ -1 +1 @@
1
- import { s as seedrandom } from '../../vendor/seedrandom/seedrandom.js';
1
+ import '../../vendor/seedrandom/seedrandom.js';
@@ -0,0 +1,3 @@
1
+ var register = {exports: {}};
2
+
3
+ export { register as r };
@@ -1 +1 @@
1
- import { t as tinyEmitter } from '../../../vendor/webworker-promise/lib/tiny-emitter.js';
1
+ import '../../../vendor/webworker-promise/lib/tiny-emitter.js';
@@ -0,0 +1,3 @@
1
+ var xmlbuilder2_min = {exports: {}};
2
+
3
+ export { xmlbuilder2_min as x };
@@ -15,9 +15,8 @@ function getAugmentedNamespace(n) {
15
15
  return a;
16
16
  }
17
17
 
18
- function createCommonjsModule(fn) {
19
- var module = { exports: {} };
20
- return fn(module, module.exports), module.exports;
18
+ function commonjsRequire (path) {
19
+ throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
21
20
  }
22
21
 
23
- export { commonjsGlobal as a, createCommonjsModule as c, getAugmentedNamespace as g };
22
+ export { commonjsRequire as a, commonjsGlobal as c, getAugmentedNamespace as g };
@@ -1,4 +1,4 @@
1
- import { g as global } from './polyfill-node_global.js';
1
+ import { g as global } from './polyfill-node.global.js';
2
2
 
3
3
  var lookup = [];
4
4
  var revLookup = [];
@@ -1,6 +1,6 @@
1
1
  import { c as createBase64WorkerFactory } from '../../../../rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js';
2
2
 
3
- var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKF90b0NvbnN1bWFibGVBcnJheSQxLCBfc2xpY2VkVG9BcnJheSkgewogICd1c2Ugc3RyaWN0JzsKCiAgZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0TGVnYWN5IChlKSB7IHJldHVybiBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAnZGVmYXVsdCcgaW4gZSA/IGUgOiB7ICdkZWZhdWx0JzogZSB9OyB9CgogIHZhciBfdG9Db25zdW1hYmxlQXJyYXlfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KF90b0NvbnN1bWFibGVBcnJheSQxKTsKICB2YXIgX3NsaWNlZFRvQXJyYXlfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KF9zbGljZWRUb0FycmF5KTsKCiAgdmFyIF9jcmVhdGVDbGFzcyQxID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTsKCiAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrJDEoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KCiAgdmFyIFRpbnlFbWl0dGVyID0gZnVuY3Rpb24gKCkgewogICAgZnVuY3Rpb24gVGlueUVtaXR0ZXIoKSB7CiAgICAgIF9jbGFzc0NhbGxDaGVjayQxKHRoaXMsIFRpbnlFbWl0dGVyKTsKCiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX19saXN0ZW5lcnMnLCB7CiAgICAgICAgdmFsdWU6IHt9LAogICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICAgIHdyaXRhYmxlOiBmYWxzZQogICAgICB9KTsKICAgIH0KCiAgICBfY3JlYXRlQ2xhc3MkMShUaW55RW1pdHRlciwgW3sKICAgICAga2V5OiAnZW1pdCcsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbWl0KGV2ZW50TmFtZSkgewogICAgICAgIGlmICghdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdKSByZXR1cm4gdGhpczsKCiAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CiAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTsKICAgICAgICB9CgogICAgICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZTsKICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IgPSBmYWxzZTsKICAgICAgICB2YXIgX2l0ZXJhdG9yRXJyb3IgPSB1bmRlZmluZWQ7CgogICAgICAgIHRyeSB7CiAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IgPSB0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV1bU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gKF9zdGVwID0gX2l0ZXJhdG9yLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlKSB7CiAgICAgICAgICAgIHZhciBoYW5kbGVyID0gX3N0ZXAudmFsdWU7CgogICAgICAgICAgICBoYW5kbGVyLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBfZGlkSXRlcmF0b3JFcnJvciA9IHRydWU7CiAgICAgICAgICBfaXRlcmF0b3JFcnJvciA9IGVycjsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1cm4pIHsKICAgICAgICAgICAgICBfaXRlcmF0b3IucmV0dXJuKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcikgewogICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgfSwgewogICAgICBrZXk6ICdvbmNlJywKICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uY2UoZXZlbnROYW1lLCBoYW5kbGVyKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKCiAgICAgICAgdmFyIG9uY2UgPSBmdW5jdGlvbiBvbmNlKCkgewogICAgICAgICAgX3RoaXMub2ZmKGV2ZW50TmFtZSwgb25jZSk7CiAgICAgICAgICBoYW5kbGVyLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gdGhpcy5vbihldmVudE5hbWUsIG9uY2UpOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogJ29uJywKICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikgewogICAgICAgIGlmICghdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdKSB0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBbXTsKCiAgICAgICAgdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdLnB1c2goaGFuZGxlcik7CgogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogJ29mZicsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiBvZmYoZXZlbnROYW1lLCBoYW5kbGVyKSB7CiAgICAgICAgaWYgKGhhbmRsZXIpIHRoaXMuX19saXN0ZW5lcnNbZXZlbnROYW1lXSA9IHRoaXMuX19saXN0ZW5lcnNbZXZlbnROYW1lXS5maWx0ZXIoZnVuY3Rpb24gKGgpIHsKICAgICAgICAgIHJldHVybiBoICE9PSBoYW5kbGVyOwogICAgICAgIH0pO2Vsc2UgdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdID0gW107CgogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICB9XSk7CgogICAgcmV0dXJuIFRpbnlFbWl0dGVyOwogIH0oKTsKCiAgdmFyIHRpbnlFbWl0dGVyID0gVGlueUVtaXR0ZXI7CgogIHZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpOwoKICB2YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmICgidmFsdWUiIGluIGRlc2MpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9OwoKICB2YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gInN5bWJvbCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gInN5bWJvbCIgOiB0eXBlb2Ygb2JqOyB9OwoKICBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH0KCiAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9CgogIGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSAib2JqZWN0IiB8fCB0eXBlb2YgY2FsbCA9PT0gImZ1bmN0aW9uIikgPyBjYWxsIDogc2VsZjsgfQoKICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAiZnVuY3Rpb24iICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfQoKICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfQoKCgogIHZhciBNRVNTQUdFX1JFU1VMVCA9IDA7CiAgdmFyIE1FU1NBR0VfRVZFTlQgPSAxOwoKICB2YXIgUkVTVUxUX0VSUk9SID0gMDsKICB2YXIgUkVTVUxUX1NVQ0NFU1MgPSAxOwoKICB2YXIgREVGQVVMVF9IQU5ETEVSID0gJ21haW4nOwoKICB2YXIgaXNQcm9taXNlID0gZnVuY3Rpb24gaXNQcm9taXNlKG8pIHsKICAgIHJldHVybiAodHlwZW9mIG8gPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG8pKSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG8udGhlbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygby5jYXRjaCA9PT0gJ2Z1bmN0aW9uJzsKICB9OwoKICBmdW5jdGlvbiBSZWdpc3RlclByb21pc2UoZm4pIHsKICAgIHZhciBoYW5kbGVycyA9IF9kZWZpbmVQcm9wZXJ0eSh7fSwgREVGQVVMVF9IQU5ETEVSLCBmbik7CiAgICB2YXIgc2VuZFBvc3RNZXNzYWdlID0gc2VsZi5wb3N0TWVzc2FnZS5iaW5kKHNlbGYpOwoKICAgIHZhciBzZXJ2ZXIgPSBuZXcgKGZ1bmN0aW9uIChfVGlueUVtaXR0ZXIpIHsKICAgICAgX2luaGVyaXRzKFdvcmtlclJlZ2lzdGVyLCBfVGlueUVtaXR0ZXIpOwoKICAgICAgZnVuY3Rpb24gV29ya2VyUmVnaXN0ZXIoKSB7CiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFdvcmtlclJlZ2lzdGVyKTsKCiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChXb3JrZXJSZWdpc3Rlci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFdvcmtlclJlZ2lzdGVyKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7CiAgICAgIH0KCiAgICAgIF9jcmVhdGVDbGFzcyhXb3JrZXJSZWdpc3RlciwgW3sKICAgICAgICBrZXk6ICdlbWl0JywKICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW1pdChldmVudE5hbWUpIHsKICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykgewogICAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTsKICAgICAgICAgIH0KCiAgICAgICAgICBzZW5kUG9zdE1lc3NhZ2UoeyBldmVudE5hbWU6IGV2ZW50TmFtZSwgYXJnczogYXJncyB9KTsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIGtleTogJ2VtaXRMb2NhbGx5JywKICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW1pdExvY2FsbHkoZXZlbnROYW1lKSB7CiAgICAgICAgICB2YXIgX2dldDI7CgogICAgICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgewogICAgICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdOwogICAgICAgICAgfQoKICAgICAgICAgIChfZ2V0MiA9IF9nZXQoV29ya2VyUmVnaXN0ZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoV29ya2VyUmVnaXN0ZXIucHJvdG90eXBlKSwgJ2VtaXQnLCB0aGlzKSkuY2FsbC5hcHBseShfZ2V0MiwgW3RoaXMsIGV2ZW50TmFtZV0uY29uY2F0KGFyZ3MpKTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBrZXk6ICdvcGVyYXRpb24nLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvcGVyYXRpb24obmFtZSwgaGFuZGxlcikgewogICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBoYW5kbGVyOwogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gV29ya2VyUmVnaXN0ZXI7CiAgICB9KHRpbnlFbWl0dGVyKSkoKTsKCiAgICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKG1lc3NhZ2VJZCwgcGF5bG9hZCwgaGFuZGxlck5hbWUpIHsKCiAgICAgIHZhciBvblN1Y2Nlc3MgPSBmdW5jdGlvbiBvblN1Y2Nlc3MocmVzdWx0KSB7CiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBUcmFuc2ZlcmFibGVSZXNwb25zZSkgewogICAgICAgICAgc2VuZFJlc3VsdChtZXNzYWdlSWQsIFJFU1VMVF9TVUNDRVNTLCByZXN1bHQucGF5bG9hZCwgcmVzdWx0LnRyYW5zZmVyYWJsZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbmRSZXN1bHQobWVzc2FnZUlkLCBSRVNVTFRfU1VDQ0VTUywgcmVzdWx0KTsKICAgICAgICB9CiAgICAgIH07CgogICAgICB2YXIgb25FcnJvciA9IGZ1bmN0aW9uIG9uRXJyb3IoZSkgewogICAgICAgIHNlbmRSZXN1bHQobWVzc2FnZUlkLCBSRVNVTFRfRVJST1IsIHsKICAgICAgICAgIG1lc3NhZ2U6IGUubWVzc2FnZSwKICAgICAgICAgIHN0YWNrOiBlLnN0YWNrCiAgICAgICAgfSk7CiAgICAgIH07CgogICAgICB0cnkgewogICAgICAgIHZhciByZXN1bHQgPSBydW5GbihtZXNzYWdlSWQsIHBheWxvYWQsIGhhbmRsZXJOYW1lKTsKICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHsKICAgICAgICAgIHJlc3VsdC50aGVuKG9uU3VjY2VzcykuY2F0Y2gob25FcnJvcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9uU3VjY2VzcyhyZXN1bHQpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIG9uRXJyb3IoZSk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIHJ1bkZuID0gZnVuY3Rpb24gcnVuRm4obWVzc2FnZUlkLCBwYXlsb2FkLCBoYW5kbGVyTmFtZSkgewogICAgICB2YXIgaGFuZGxlciA9IGhhbmRsZXJzW2hhbmRsZXJOYW1lIHx8IERFRkFVTFRfSEFORExFUl07CiAgICAgIGlmICghaGFuZGxlcikgdGhyb3cgbmV3IEVycm9yKCdOb3QgZm91bmQgaGFuZGxlciBmb3IgdGhpcyByZXF1ZXN0Jyk7CgogICAgICByZXR1cm4gaGFuZGxlcihwYXlsb2FkLCBzZW5kRXZlbnQuYmluZChudWxsLCBtZXNzYWdlSWQpKTsKICAgIH07CgogICAgdmFyIHNlbmRSZXN1bHQgPSBmdW5jdGlvbiBzZW5kUmVzdWx0KG1lc3NhZ2VJZCwgc3VjY2VzcywgcGF5bG9hZCkgewogICAgICB2YXIgdHJhbnNmZXJhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBbXTsKCiAgICAgIHNlbmRQb3N0TWVzc2FnZShbTUVTU0FHRV9SRVNVTFQsIG1lc3NhZ2VJZCwgc3VjY2VzcywgcGF5bG9hZF0sIHRyYW5zZmVyYWJsZSk7CiAgICB9OwoKICAgIHZhciBzZW5kRXZlbnQgPSBmdW5jdGlvbiBzZW5kRXZlbnQobWVzc2FnZUlkLCBldmVudE5hbWUsIHBheWxvYWQpIHsKICAgICAgaWYgKCFldmVudE5hbWUpIHRocm93IG5ldyBFcnJvcignZXZlbnROYW1lIGlzIHJlcXVpcmVkJyk7CgogICAgICBpZiAodHlwZW9mIGV2ZW50TmFtZSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBFcnJvcignZXZlbnROYW1lIHNob3VsZCBiZSBzdHJpbmcnKTsKCiAgICAgIHNlbmRQb3N0TWVzc2FnZShbTUVTU0FHRV9FVkVOVCwgbWVzc2FnZUlkLCBldmVudE5hbWUsIHBheWxvYWRdKTsKICAgIH07CgogICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKF9yZWYpIHsKICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7CgogICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgewogICAgICAgIHJ1bi5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShkYXRhKSk7CiAgICAgIH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLmV2ZW50TmFtZSkgewogICAgICAgIHNlcnZlci5lbWl0TG9jYWxseS5hcHBseShzZXJ2ZXIsIFtkYXRhLmV2ZW50TmFtZV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShkYXRhLmFyZ3MpKSk7CiAgICAgIH0KICAgIH0pOwoKICAgIHJldHVybiBzZXJ2ZXI7CiAgfQoKICB2YXIgVHJhbnNmZXJhYmxlUmVzcG9uc2UgPSBmdW5jdGlvbiBUcmFuc2ZlcmFibGVSZXNwb25zZShwYXlsb2FkLCB0cmFuc2ZlcmFibGUpIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2ZlcmFibGVSZXNwb25zZSk7CgogICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZDsKICAgIHRoaXMudHJhbnNmZXJhYmxlID0gdHJhbnNmZXJhYmxlOwogIH07CgogIHZhciByZWdpc3RlciA9IFJlZ2lzdGVyUHJvbWlzZTsKICB2YXIgVHJhbnNmZXJhYmxlUmVzcG9uc2VfMSA9IFRyYW5zZmVyYWJsZVJlc3BvbnNlOwogIHJlZ2lzdGVyLlRyYW5zZmVyYWJsZVJlc3BvbnNlID0gVHJhbnNmZXJhYmxlUmVzcG9uc2VfMTsKCiAgdmFyIFNsaWNpbmdNb2RlID0gewogICAgTk9ORTogLTEsCiAgICBJOiAwLAogICAgSjogMSwKICAgIEs6IDIsCiAgICBYOiAzLAogICAgWTogNCwKICAgIFo6IDUKICB9OwoKICAvKioNCiAgICogQ29tbW9uIHV0aWxpdGllcw0KICAgKiBAbW9kdWxlIGdsTWF0cml4DQogICAqLwogIHZhciBBUlJBWV9UWVBFID0gdHlwZW9mIEZsb2F0MzJBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBGbG9hdDMyQXJyYXkgOiBBcnJheTsKICBpZiAoIU1hdGguaHlwb3QpIE1hdGguaHlwb3QgPSBmdW5jdGlvbiAoKSB7CiAgICB2YXIgeSA9IDAsCiAgICAgICAgaSA9IGFyZ3VtZW50cy5sZW5ndGg7CgogICAgd2hpbGUgKGktLSkgewogICAgICB5ICs9IGFyZ3VtZW50c1tpXSAqIGFyZ3VtZW50c1tpXTsKICAgIH0KCiAgICByZXR1cm4gTWF0aC5zcXJ0KHkpOwogIH07CgogIC8qKg0KICAgKiAzIERpbWVuc2lvbmFsIFZlY3Rvcg0KICAgKiBAbW9kdWxlIHZlYzMNCiAgICovCgogIC8qKg0KICAgKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSB2ZWMzDQogICAqDQogICAqIEByZXR1cm5zIHt2ZWMzfSBhIG5ldyAzRCB2ZWN0b3INCiAgICovCgogIGZ1bmN0aW9uIGNyZWF0ZSgpIHsKICAgIHZhciBvdXQgPSBuZXcgQVJSQVlfVFlQRSgzKTsKCiAgICBpZiAoQVJSQVlfVFlQRSAhPSBGbG9hdDMyQXJyYXkpIHsKICAgICAgb3V0WzBdID0gMDsKICAgICAgb3V0WzFdID0gMDsKICAgICAgb3V0WzJdID0gMDsKICAgIH0KCiAgICByZXR1cm4gb3V0OwogIH0KICAvKioNCiAgICogU3VidHJhY3RzIHZlY3RvciBiIGZyb20gdmVjdG9yIGENCiAgICoNCiAgICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3INCiAgICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmQNCiAgICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kDQogICAqIEByZXR1cm5zIHt2ZWMzfSBvdXQNCiAgICovCgogIGZ1bmN0aW9uIHN1YnRyYWN0KG91dCwgYSwgYikgewogICAgb3V0WzBdID0gYVswXSAtIGJbMF07CiAgICBvdXRbMV0gPSBhWzFdIC0gYlsxXTsKICAgIG91dFsyXSA9IGFbMl0gLSBiWzJdOwogICAgcmV0dXJuIG91dDsKICB9CiAgLyoqDQogICAqIFNjYWxlcyBhIHZlYzMgYnkgYSBzY2FsYXIgbnVtYmVyDQogICAqDQogICAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yDQogICAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSB2ZWN0b3IgdG8gc2NhbGUNCiAgICogQHBhcmFtIHtOdW1iZXJ9IGIgYW1vdW50IHRvIHNjYWxlIHRoZSB2ZWN0b3IgYnkNCiAgICogQHJldHVybnMge3ZlYzN9IG91dA0KICAgKi8KCiAgZnVuY3Rpb24gc2NhbGUob3V0LCBhLCBiKSB7CiAgICBvdXRbMF0gPSBhWzBdICogYjsKICAgIG91dFsxXSA9IGFbMV0gKiBiOwogICAgb3V0WzJdID0gYVsyXSAqIGI7CiAgICByZXR1cm4gb3V0OwogIH0KICAvKioNCiAgICogQWRkcyB0d28gdmVjMydzIGFmdGVyIHNjYWxpbmcgdGhlIHNlY29uZCBvcGVyYW5kIGJ5IGEgc2NhbGFyIHZhbHVlDQogICAqDQogICAqIEBwYXJhbSB7dmVjM30gb3V0IHRoZSByZWNlaXZpbmcgdmVjdG9yDQogICAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBhIHRoZSBmaXJzdCBvcGVyYW5kDQogICAqIEBwYXJhbSB7UmVhZG9ubHlWZWMzfSBiIHRoZSBzZWNvbmQgb3BlcmFuZA0KICAgKiBAcGFyYW0ge051bWJlcn0gc2NhbGUgdGhlIGFtb3VudCB0byBzY2FsZSBiIGJ5IGJlZm9yZSBhZGRpbmcNCiAgICogQHJldHVybnMge3ZlYzN9IG91dA0KICAgKi8KCiAgZnVuY3Rpb24gc2NhbGVBbmRBZGQob3V0LCBhLCBiLCBzY2FsZSkgewogICAgb3V0WzBdID0gYVswXSArIGJbMF0gKiBzY2FsZTsKICAgIG91dFsxXSA9IGFbMV0gKyBiWzFdICogc2NhbGU7CiAgICBvdXRbMl0gPSBhWzJdICsgYlsyXSAqIHNjYWxlOwogICAgcmV0dXJuIG91dDsKICB9CiAgLyoqDQogICAqIFBlcmZvcm0gc29tZSBvcGVyYXRpb24gb3ZlciBhbiBhcnJheSBvZiB2ZWMzcy4NCiAgICoNCiAgICogQHBhcmFtIHtBcnJheX0gYSB0aGUgYXJyYXkgb2YgdmVjdG9ycyB0byBpdGVyYXRlIG92ZXINCiAgICogQHBhcmFtIHtOdW1iZXJ9IHN0cmlkZSBOdW1iZXIgb2YgZWxlbWVudHMgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCB2ZWMzLiBJZiAwIGFzc3VtZXMgdGlnaHRseSBwYWNrZWQNCiAgICogQHBhcmFtIHtOdW1iZXJ9IG9mZnNldCBOdW1iZXIgb2YgZWxlbWVudHMgdG8gc2tpcCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheQ0KICAgKiBAcGFyYW0ge051bWJlcn0gY291bnQgTnVtYmVyIG9mIHZlYzNzIHRvIGl0ZXJhdGUgb3Zlci4gSWYgMCBpdGVyYXRlcyBvdmVyIGVudGlyZSBhcnJheQ0KICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBGdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIHZlY3RvciBpbiB0aGUgYXJyYXkNCiAgICogQHBhcmFtIHtPYmplY3R9IFthcmddIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gcGFzcyB0byBmbg0KICAgKiBAcmV0dXJucyB7QXJyYXl9IGENCiAgICogQGZ1bmN0aW9uDQogICAqLwoKICAoZnVuY3Rpb24gKCkgewogICAgdmFyIHZlYyA9IGNyZWF0ZSgpOwogICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBzdHJpZGUsIG9mZnNldCwgY291bnQsIGZuLCBhcmcpIHsKICAgICAgdmFyIGksIGw7CgogICAgICBpZiAoIXN0cmlkZSkgewogICAgICAgIHN0cmlkZSA9IDM7CiAgICAgIH0KCiAgICAgIGlmICghb2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gMDsKICAgICAgfQoKICAgICAgaWYgKGNvdW50KSB7CiAgICAgICAgbCA9IE1hdGgubWluKGNvdW50ICogc3RyaWRlICsgb2Zmc2V0LCBhLmxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbCA9IGEubGVuZ3RoOwogICAgICB9CgogICAgICBmb3IgKGkgPSBvZmZzZXQ7IGkgPCBsOyBpICs9IHN0cmlkZSkgewogICAgICAgIHZlY1swXSA9IGFbaV07CiAgICAgICAgdmVjWzFdID0gYVtpICsgMV07CiAgICAgICAgdmVjWzJdID0gYVtpICsgMl07CiAgICAgICAgZm4odmVjLCB2ZWMsIGFyZyk7CiAgICAgICAgYVtpXSA9IHZlY1swXTsKICAgICAgICBhW2kgKyAxXSA9IHZlY1sxXTsKICAgICAgICBhW2kgKyAyXSA9IHZlY1syXTsKICAgICAgfQoKICAgICAgcmV0dXJuIGE7CiAgICB9OwogIH0pKCk7CgogIHZhciBnbG9iYWxzID0gewogICAgLy8gc2luZ2xlLWNvbXBvbmVudCBsYWJlbG1hcAogICAgYnVmZmVyOiBudWxsLAogICAgZGltZW5zaW9uczogWzAsIDAsIDBdLAogICAgcHJldlBvaW50OiBudWxsLAogICAgc2xpY2luZ01vZGU6IG51bGwgLy8gMkQgb3IgM0QgcGFpbnRpbmcKCiAgfTsgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgZnVuY3Rpb24gaGFuZGxlUGFpbnRSZWN0YW5nbGUoX3JlZikgewogICAgdmFyIHBvaW50MSA9IF9yZWYucG9pbnQxLAogICAgICAgIHBvaW50MiA9IF9yZWYucG9pbnQyOwoKICAgIHZhciBfcG9pbnQgPSBfc2xpY2VkVG9BcnJheV9fZGVmYXVsdFsnZGVmYXVsdCddKHBvaW50MSwgMyksCiAgICAgICAgeDEgPSBfcG9pbnRbMF0sCiAgICAgICAgeTEgPSBfcG9pbnRbMV0sCiAgICAgICAgejEgPSBfcG9pbnRbMl07CgogICAgdmFyIF9wb2ludDIgPSBfc2xpY2VkVG9BcnJheV9fZGVmYXVsdFsnZGVmYXVsdCddKHBvaW50MiwgMyksCiAgICAgICAgeDIgPSBfcG9pbnQyWzBdLAogICAgICAgIHkyID0gX3BvaW50MlsxXSwKICAgICAgICB6MiA9IF9wb2ludDJbMl07CgogICAgdmFyIHhzdGFydCA9IE1hdGgubWF4KE1hdGgubWluKHgxLCB4MiksIDApOwogICAgdmFyIHhlbmQgPSBNYXRoLm1pbihNYXRoLm1heCh4MSwgeDIpLCBnbG9iYWxzLmRpbWVuc2lvbnNbMF0gLSAxKTsKCiAgICBpZiAoeHN0YXJ0IDw9IHhlbmQpIHsKICAgICAgdmFyIHlzdGFydCA9IE1hdGgubWF4KE1hdGgubWluKHkxLCB5MiksIDApOwogICAgICB2YXIgeWVuZCA9IE1hdGgubWluKE1hdGgubWF4KHkxLCB5MiksIGdsb2JhbHMuZGltZW5zaW9uc1sxXSAtIDEpOwogICAgICB2YXIgenN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4oejEsIHoyKSwgMCk7CiAgICAgIHZhciB6ZW5kID0gTWF0aC5taW4oTWF0aC5tYXgoejEsIHoyKSwgZ2xvYmFscy5kaW1lbnNpb25zWzJdIC0gMSk7CiAgICAgIHZhciBqU3RyaWRlID0gZ2xvYmFscy5kaW1lbnNpb25zWzBdOwogICAgICB2YXIga1N0cmlkZSA9IGdsb2JhbHMuZGltZW5zaW9uc1swXSAqIGdsb2JhbHMuZGltZW5zaW9uc1sxXTsKCiAgICAgIGZvciAodmFyIGsgPSB6c3RhcnQ7IGsgPD0gemVuZDsgaysrKSB7CiAgICAgICAgZm9yICh2YXIgaiA9IHlzdGFydDsgaiA8PSB5ZW5kOyBqKyspIHsKICAgICAgICAgIHZhciBpbmRleCA9IGogKiBqU3RyaWRlICsgayAqIGtTdHJpZGU7CiAgICAgICAgICBnbG9iYWxzLmJ1ZmZlci5maWxsKDEsIGluZGV4ICsgeHN0YXJ0LCBpbmRleCArIHhlbmQgKyAxKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLy8gY2VudGVyIGFuZCBzY2FsZTMgYXJlIGluIElKSyBjb29yZGluYXRlcwoKCiAgZnVuY3Rpb24gaGFuZGxlUGFpbnRFbGxpcHNlKF9yZWYyKSB7CiAgICB2YXIgY2VudGVyID0gX3JlZjIuY2VudGVyLAogICAgICAgIHNjYWxlMyA9IF9yZWYyLnNjYWxlMzsKCiAgICB2YXIgcmFkaXVzMyA9IF90b0NvbnN1bWFibGVBcnJheV9fZGVmYXVsdFsnZGVmYXVsdCddKHNjYWxlMyk7CgogICAgdmFyIGluZGV4Q2VudGVyID0gY2VudGVyLm1hcChmdW5jdGlvbiAodmFsKSB7CiAgICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbCk7CiAgICB9KTsKICAgIHZhciBzbGljZUF4aXMgPSAtMTsKCiAgICBpZiAoZ2xvYmFscy5zbGljaW5nTW9kZSAhPSBudWxsICYmIGdsb2JhbHMuc2xpY2luZ01vZGUgIT09IFNsaWNpbmdNb2RlLk5PTkUpIHsKICAgICAgc2xpY2VBeGlzID0gZ2xvYmFscy5zbGljaW5nTW9kZSAlIDM7CiAgICB9CgogICAgdmFyIHlTdHJpZGUgPSBnbG9iYWxzLmRpbWVuc2lvbnNbMF07CiAgICB2YXIgelN0cmlkZSA9IGdsb2JhbHMuZGltZW5zaW9uc1swXSAqIGdsb2JhbHMuZGltZW5zaW9uc1sxXTsKCiAgICB2YXIgX2luZGV4Q2VudGVyID0gX3NsaWNlZFRvQXJyYXlfX2RlZmF1bHRbJ2RlZmF1bHQnXShpbmRleENlbnRlciwgMyksCiAgICAgICAgeG1pbiA9IF9pbmRleENlbnRlclswXSwKICAgICAgICB5bWluID0gX2luZGV4Q2VudGVyWzFdLAogICAgICAgIHptaW4gPSBfaW5kZXhDZW50ZXJbMl07CgogICAgdmFyIF9pbmRleENlbnRlcjIgPSBfc2xpY2VkVG9BcnJheV9fZGVmYXVsdFsnZGVmYXVsdCddKGluZGV4Q2VudGVyLCAzKSwKICAgICAgICB4bWF4ID0gX2luZGV4Q2VudGVyMlswXSwKICAgICAgICB5bWF4ID0gX2luZGV4Q2VudGVyMlsxXSwKICAgICAgICB6bWF4ID0gX2luZGV4Q2VudGVyMlsyXTsKCiAgICBpZiAoc2xpY2VBeGlzICE9PSAyKSB7CiAgICAgIHptaW4gPSBNYXRoLnJvdW5kKE1hdGgubWF4KGluZGV4Q2VudGVyWzJdIC0gcmFkaXVzM1syXSwgMCkpOwogICAgICB6bWF4ID0gTWF0aC5yb3VuZChNYXRoLm1pbihpbmRleENlbnRlclsyXSArIHJhZGl1czNbMl0sIGdsb2JhbHMuZGltZW5zaW9uc1syXSAtIDEpKTsKICAgIH0KCiAgICBmb3IgKHZhciB6ID0gem1pbjsgeiA8PSB6bWF4OyB6KyspIHsKICAgICAgdmFyIGR6ID0gMDsKCiAgICAgIGlmIChzbGljZUF4aXMgIT09IDIpIHsKICAgICAgICBkeiA9IChpbmRleENlbnRlclsyXSAtIHopIC8gcmFkaXVzM1syXTsKICAgICAgfQoKICAgICAgdmFyIGR6U3F1YXJlZCA9IGR6ICogZHo7CgogICAgICBpZiAoZHpTcXVhcmVkIDw9IDEpIHsKICAgICAgICB2YXIgYXkgPSByYWRpdXMzWzFdICogTWF0aC5zcXJ0KDEgLSBkelNxdWFyZWQpOwoKICAgICAgICBpZiAoc2xpY2VBeGlzICE9PSAxKSB7CiAgICAgICAgICB5bWluID0gTWF0aC5yb3VuZChNYXRoLm1heChpbmRleENlbnRlclsxXSAtIGF5LCAwKSk7CiAgICAgICAgICB5bWF4ID0gTWF0aC5yb3VuZChNYXRoLm1pbihpbmRleENlbnRlclsxXSArIGF5LCBnbG9iYWxzLmRpbWVuc2lvbnNbMV0gLSAxKSk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKHZhciB5ID0geW1pbjsgeSA8PSB5bWF4OyB5KyspIHsKICAgICAgICAgIHZhciBkeSA9IDA7CgogICAgICAgICAgaWYgKHNsaWNlQXhpcyAhPT0gMSkgewogICAgICAgICAgICBkeSA9IChpbmRleENlbnRlclsxXSAtIHkpIC8gcmFkaXVzM1sxXTsKICAgICAgICAgIH0KCiAgICAgICAgICB2YXIgZHlTcXVhcmVkID0gZHkgKiBkeTsKCiAgICAgICAgICBpZiAoZHlTcXVhcmVkICsgZHpTcXVhcmVkIDw9IDEpIHsKICAgICAgICAgICAgaWYgKHNsaWNlQXhpcyAhPT0gMCkgewogICAgICAgICAgICAgIHZhciBheCA9IHJhZGl1czNbMF0gKiBNYXRoLnNxcnQoMSAtIGR5U3F1YXJlZCAtIGR6U3F1YXJlZCk7CiAgICAgICAgICAgICAgeG1pbiA9IE1hdGgucm91bmQoTWF0aC5tYXgoaW5kZXhDZW50ZXJbMF0gLSBheCwgMCkpOwogICAgICAgICAgICAgIHhtYXggPSBNYXRoLnJvdW5kKE1hdGgubWluKGluZGV4Q2VudGVyWzBdICsgYXgsIGdsb2JhbHMuZGltZW5zaW9uc1swXSAtIDEpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHhtaW4gPD0geG1heCkgewogICAgICAgICAgICAgIHZhciBpbmRleCA9IHkgKiB5U3RyaWRlICsgeiAqIHpTdHJpZGU7CiAgICAgICAgICAgICAgZ2xvYmFscy5idWZmZXIuZmlsbCgxLCBpbmRleCArIHhtaW4sIGluZGV4ICsgeG1heCArIDEpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCiAgZnVuY3Rpb24gaGFuZGxlUGFpbnQoX3JlZjMpIHsKICAgIHZhciBwb2ludCA9IF9yZWYzLnBvaW50LAogICAgICAgIHJhZGl1cyA9IF9yZWYzLnJhZGl1czsKCiAgICBpZiAoIWdsb2JhbHMucHJldlBvaW50KSB7CiAgICAgIGdsb2JhbHMucHJldlBvaW50ID0gcG9pbnQ7CiAgICB9IC8vIEREQSBwYXJhbXMKCgogICAgdmFyIGRlbHRhID0gW3BvaW50WzBdIC0gZ2xvYmFscy5wcmV2UG9pbnRbMF0sIHBvaW50WzFdIC0gZ2xvYmFscy5wcmV2UG9pbnRbMV0sIHBvaW50WzJdIC0gZ2xvYmFscy5wcmV2UG9pbnRbMl1dOwogICAgdmFyIGluYyA9IFsxLCAxLCAxXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykgewogICAgICBpZiAoZGVsdGFbaV0gPCAwKSB7CiAgICAgICAgZGVsdGFbaV0gPSAtZGVsdGFbaV07CiAgICAgICAgaW5jW2ldID0gLTE7CiAgICAgIH0KICAgIH0KCiAgICB2YXIgc3RlcCA9IE1hdGgubWF4LmFwcGx5KE1hdGgsIGRlbHRhKTsgLy8gRERBCgogICAgdmFyIHRocmVzaCA9IFtzdGVwLCBzdGVwLCBzdGVwXTsKCiAgICB2YXIgcHQgPSBfdG9Db25zdW1hYmxlQXJyYXlfX2RlZmF1bHRbJ2RlZmF1bHQnXShnbG9iYWxzLnByZXZQb2ludCk7CgogICAgZm9yICh2YXIgcyA9IDA7IHMgPD0gc3RlcDsgcysrKSB7CiAgICAgIGhhbmRsZVBhaW50RWxsaXBzZSh7CiAgICAgICAgY2VudGVyOiBwdCwKICAgICAgICBzY2FsZTM6IHJhZGl1cwogICAgICB9KTsKCiAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCAzOyBpaSsrKSB7CiAgICAgICAgdGhyZXNoW2lpXSAtPSBkZWx0YVtpaV07CgogICAgICAgIGlmICh0aHJlc2hbaWldIDw9IDApIHsKICAgICAgICAgIHRocmVzaFtpaV0gKz0gc3RlcDsKICAgICAgICAgIHB0W2lpXSArPSBpbmNbaWldOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGdsb2JhbHMucHJldlBvaW50ID0gcG9pbnQ7CiAgfSAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCiAgZnVuY3Rpb24gaGFuZGxlUGFpbnRUcmlhbmdsZXMoX3JlZjQpIHsKICAgIHZhciB0cmlhbmdsZUxpc3QgPSBfcmVmNC50cmlhbmdsZUxpc3Q7CiAgICAvLyBkZWJ1Z2dlcjsKICAgIHZhciB0cmlhbmdsZUNvdW50ID0gTWF0aC5mbG9vcih0cmlhbmdsZUxpc3QubGVuZ3RoIC8gOSk7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmlhbmdsZUNvdW50OyBpKyspIHsKICAgICAgdmFyIHBvaW50MCA9IHRyaWFuZ2xlTGlzdC5zdWJhcnJheSg5ICogaSArIDAsIDkgKiBpICsgMyk7CiAgICAgIHZhciBwb2ludDEgPSB0cmlhbmdsZUxpc3Quc3ViYXJyYXkoOSAqIGkgKyAzLCA5ICogaSArIDYpOwogICAgICB2YXIgcG9pbnQyID0gdHJpYW5nbGVMaXN0LnN1YmFycmF5KDkgKiBpICsgNiwgOSAqIGkgKyA5KTsKICAgICAgdmFyIHYxID0gWzAsIDAsIDBdOwogICAgICB2YXIgdjIgPSBbMCwgMCwgMF07CiAgICAgIHN1YnRyYWN0KHYxLCBwb2ludDEsIHBvaW50MCk7CiAgICAgIHN1YnRyYWN0KHYyLCBwb2ludDIsIHBvaW50MCk7CiAgICAgIHZhciBzdGVwMSA9IFswLCAwLCAwXTsKICAgICAgdmFyIG51bVN0ZXAxID0gMiAqIE1hdGgubWF4KE1hdGguYWJzKHYxWzBdKSwgTWF0aC5hYnModjFbMV0pLCBNYXRoLmFicyh2MVsyXSkpOwogICAgICBzY2FsZShzdGVwMSwgdjEsIDEgLyBudW1TdGVwMSk7CiAgICAgIHZhciBzdGVwMiA9IFswLCAwLCAwXTsKICAgICAgdmFyIG51bVN0ZXAyID0gMiAqIE1hdGgubWF4KE1hdGguYWJzKHYyWzBdKSwgTWF0aC5hYnModjJbMV0pLCBNYXRoLmFicyh2MlsyXSkpOwogICAgICBzY2FsZShzdGVwMiwgdjIsIDEgLyBudW1TdGVwMik7CiAgICAgIHZhciBqU3RyaWRlID0gZ2xvYmFscy5kaW1lbnNpb25zWzBdOwogICAgICB2YXIga1N0cmlkZSA9IGdsb2JhbHMuZGltZW5zaW9uc1swXSAqIGdsb2JhbHMuZGltZW5zaW9uc1sxXTsKCiAgICAgIGZvciAodmFyIHUgPSAwOyB1IDw9IG51bVN0ZXAxICsgMTsgdSsrKSB7CiAgICAgICAgdmFyIG1heFYgPSBudW1TdGVwMiAtIHUgKiAobnVtU3RlcDIgLyBudW1TdGVwMSk7CgogICAgICAgIGZvciAodmFyIHYgPSAwOyB2IDw9IG1heFYgKyAxOyB2KyspIHsKICAgICAgICAgIHZhciBwb2ludCA9IF90b0NvbnN1bWFibGVBcnJheV9fZGVmYXVsdFsnZGVmYXVsdCddKHBvaW50MCk7CgogICAgICAgICAgc2NhbGVBbmRBZGQocG9pbnQsIHBvaW50LCBzdGVwMSwgdSk7CiAgICAgICAgICBzY2FsZUFuZEFkZChwb2ludCwgcG9pbnQsIHN0ZXAyLCB2KTsKICAgICAgICAgIHBvaW50WzBdID0gTWF0aC5yb3VuZChwb2ludFswXSk7CiAgICAgICAgICBwb2ludFsxXSA9IE1hdGgucm91bmQocG9pbnRbMV0pOwogICAgICAgICAgcG9pbnRbMl0gPSBNYXRoLnJvdW5kKHBvaW50WzJdKTsKCiAgICAgICAgICBpZiAocG9pbnRbMF0gPj0gMCAmJiBwb2ludFswXSA8IGdsb2JhbHMuZGltZW5zaW9uc1swXSAmJiBwb2ludFsxXSA+PSAwICYmIHBvaW50WzFdIDwgZ2xvYmFscy5kaW1lbnNpb25zWzFdICYmIHBvaW50WzJdID49IDAgJiYgcG9pbnRbMl0gPCBnbG9iYWxzLmRpbWVuc2lvbnNbMl0pIHsKICAgICAgICAgICAgZ2xvYmFscy5idWZmZXJbcG9pbnRbMF0gKyBqU3RyaWRlICogcG9pbnRbMV0gKyBrU3RyaWRlICogcG9pbnRbMl1dID0gMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKICByZWdpc3RlcigpLm9wZXJhdGlvbignc3RhcnQnLCBmdW5jdGlvbiAoX3JlZjUpIHsKICAgIHZhciBidWZmZXJUeXBlID0gX3JlZjUuYnVmZmVyVHlwZSwKICAgICAgICBkaW1lbnNpb25zID0gX3JlZjUuZGltZW5zaW9ucywKICAgICAgICBzbGljaW5nTW9kZSA9IF9yZWY1LnNsaWNpbmdNb2RlOwoKICAgIGlmICghZ2xvYmFscy5idWZmZXIpIHsKICAgICAgdmFyIGJ1ZmZlclNpemUgPSBkaW1lbnNpb25zWzBdICogZGltZW5zaW9uc1sxXSAqIGRpbWVuc2lvbnNbMl07CiAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSAqLwoKICAgICAgZ2xvYmFscy5idWZmZXIgPSBuZXcgc2VsZltidWZmZXJUeXBlXShidWZmZXJTaXplKTsKICAgICAgZ2xvYmFscy5kaW1lbnNpb25zID0gZGltZW5zaW9uczsKICAgICAgZ2xvYmFscy5wcmV2UG9pbnQgPSBudWxsOwogICAgICBnbG9iYWxzLnNsaWNpbmdNb2RlID0gc2xpY2luZ01vZGU7CiAgICB9CiAgfSkub3BlcmF0aW9uKCdwYWludCcsIGhhbmRsZVBhaW50KS5vcGVyYXRpb24oJ3BhaW50UmVjdGFuZ2xlJywgaGFuZGxlUGFpbnRSZWN0YW5nbGUpLm9wZXJhdGlvbigncGFpbnRFbGxpcHNlJywgaGFuZGxlUGFpbnRFbGxpcHNlKS5vcGVyYXRpb24oJ3BhaW50VHJpYW5nbGVzJywgaGFuZGxlUGFpbnRUcmlhbmdsZXMpLm9wZXJhdGlvbignZW5kJywgZnVuY3Rpb24gKCkgewogICAgdmFyIHJlc3BvbnNlID0gbmV3IHJlZ2lzdGVyLlRyYW5zZmVyYWJsZVJlc3BvbnNlKGdsb2JhbHMuYnVmZmVyLmJ1ZmZlciwgW2dsb2JhbHMuYnVmZmVyLmJ1ZmZlcl0pOwogICAgZ2xvYmFscy5idWZmZXIgPSBudWxsOwogICAgcmV0dXJuIHJlc3BvbnNlOwogIH0pOwoKfShfdG9Db25zdW1hYmxlQXJyYXkkMSwgX3NsaWNlZFRvQXJyYXkpKTsKCg==', null, false);
3
+ var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKF90b0NvbnN1bWFibGVBcnJheSQxLCBfc2xpY2VkVG9BcnJheSkgewogICd1c2Ugc3RyaWN0JzsKCiAgZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0TGVnYWN5IChlKSB7IHJldHVybiBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAnZGVmYXVsdCcgaW4gZSA/IGUgOiB7ICdkZWZhdWx0JzogZSB9OyB9CgogIHZhciBfdG9Db25zdW1hYmxlQXJyYXlfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KF90b0NvbnN1bWFibGVBcnJheSQxKTsKICB2YXIgX3NsaWNlZFRvQXJyYXlfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KF9zbGljZWRUb0FycmF5KTsKCiAgdmFyIHJlZ2lzdGVyID0ge2V4cG9ydHM6IHt9fTsKCiAgdmFyIF9jcmVhdGVDbGFzcyQxID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTsKCiAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrJDEoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KCiAgdmFyIFRpbnlFbWl0dGVyJDEgPSBmdW5jdGlvbiAoKSB7CiAgICBmdW5jdGlvbiBUaW55RW1pdHRlcigpIHsKICAgICAgX2NsYXNzQ2FsbENoZWNrJDEodGhpcywgVGlueUVtaXR0ZXIpOwoKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfX2xpc3RlbmVycycsIHsKICAgICAgICB2YWx1ZToge30sCiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgICAgd3JpdGFibGU6IGZhbHNlCiAgICAgIH0pOwogICAgfQoKICAgIF9jcmVhdGVDbGFzcyQxKFRpbnlFbWl0dGVyLCBbewogICAgICBrZXk6ICdlbWl0JywKICAgICAgdmFsdWU6IGZ1bmN0aW9uIGVtaXQoZXZlbnROYW1lKSB7CiAgICAgICAgaWYgKCF0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0pIHJldHVybiB0aGlzOwoKICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldOwogICAgICAgIH0KCiAgICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlOwogICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvciA9IGZhbHNlOwogICAgICAgIHZhciBfaXRlcmF0b3JFcnJvciA9IHVuZGVmaW5lZDsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvciA9IHRoaXMuX19saXN0ZW5lcnNbZXZlbnROYW1lXVtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSAoX3N0ZXAgPSBfaXRlcmF0b3IubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWUpIHsKICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBfc3RlcC52YWx1ZTsKCiAgICAgICAgICAgIGhhbmRsZXIuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yID0gdHJ1ZTsKICAgICAgICAgIF9pdGVyYXRvckVycm9yID0gZXJyOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gJiYgX2l0ZXJhdG9yLnJldHVybikgewogICAgICAgICAgICAgIF9pdGVyYXRvci5yZXR1cm4oKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7CiAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogJ29uY2UnLAogICAgICB2YWx1ZTogZnVuY3Rpb24gb25jZShldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgICB2YXIgb25jZSA9IGZ1bmN0aW9uIG9uY2UoKSB7CiAgICAgICAgICBfdGhpcy5vZmYoZXZlbnROYW1lLCBvbmNlKTsKICAgICAgICAgIGhhbmRsZXIuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiB0aGlzLm9uKGV2ZW50TmFtZSwgb25jZSk7CiAgICAgIH0KICAgIH0sIHsKICAgICAga2V5OiAnb24nLAogICAgICB2YWx1ZTogZnVuY3Rpb24gb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7CiAgICAgICAgaWYgKCF0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0pIHRoaXMuX19saXN0ZW5lcnNbZXZlbnROYW1lXSA9IFtdOwoKICAgICAgICB0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0ucHVzaChoYW5kbGVyKTsKCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH0sIHsKICAgICAga2V5OiAnb2ZmJywKICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9mZihldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgICAgICBpZiAoaGFuZGxlcikgdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdID0gdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdLmZpbHRlcihmdW5jdGlvbiAoaCkgewogICAgICAgICAgcmV0dXJuIGggIT09IGhhbmRsZXI7CiAgICAgICAgfSk7ZWxzZSB0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBbXTsKCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH1dKTsKCiAgICByZXR1cm4gVGlueUVtaXR0ZXI7CiAgfSgpOwoKICB2YXIgdGlueUVtaXR0ZXIgPSBUaW55RW1pdHRlciQxOwoKICB2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTsKCiAgdmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoInZhbHVlIiBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTsKCiAgdmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICJzeW1ib2wiIDogdHlwZW9mIG9iajsgfTsKCiAgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9CgogIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQoKICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpID8gY2FsbCA6IHNlbGY7IH0KCiAgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gImZ1bmN0aW9uIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH0KCiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH0KCiAgdmFyIFRpbnlFbWl0dGVyID0gdGlueUVtaXR0ZXI7CgogIHZhciBNRVNTQUdFX1JFU1VMVCA9IDA7CiAgdmFyIE1FU1NBR0VfRVZFTlQgPSAxOwoKICB2YXIgUkVTVUxUX0VSUk9SID0gMDsKICB2YXIgUkVTVUxUX1NVQ0NFU1MgPSAxOwoKICB2YXIgREVGQVVMVF9IQU5ETEVSID0gJ21haW4nOwoKICB2YXIgaXNQcm9taXNlID0gZnVuY3Rpb24gaXNQcm9taXNlKG8pIHsKICAgIHJldHVybiAodHlwZW9mIG8gPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG8pKSA9PT0gJ29iamVjdCcgJiYgbyAhPT0gbnVsbCAmJiB0eXBlb2Ygby50aGVuID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvLmNhdGNoID09PSAnZnVuY3Rpb24nOwogIH07CgogIGZ1bmN0aW9uIFJlZ2lzdGVyUHJvbWlzZShmbikgewogICAgdmFyIGhhbmRsZXJzID0gX2RlZmluZVByb3BlcnR5KHt9LCBERUZBVUxUX0hBTkRMRVIsIGZuKTsKICAgIHZhciBzZW5kUG9zdE1lc3NhZ2UgPSBzZWxmLnBvc3RNZXNzYWdlLmJpbmQoc2VsZik7CgogICAgdmFyIHNlcnZlciA9IG5ldyAoZnVuY3Rpb24gKF9UaW55RW1pdHRlcikgewogICAgICBfaW5oZXJpdHMoV29ya2VyUmVnaXN0ZXIsIF9UaW55RW1pdHRlcik7CgogICAgICBmdW5jdGlvbiBXb3JrZXJSZWdpc3RlcigpIHsKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV29ya2VyUmVnaXN0ZXIpOwoKICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFdvcmtlclJlZ2lzdGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoV29ya2VyUmVnaXN0ZXIpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTsKICAgICAgfQoKICAgICAgX2NyZWF0ZUNsYXNzKFdvcmtlclJlZ2lzdGVyLCBbewogICAgICAgIGtleTogJ2VtaXQnLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbWl0KGV2ZW50TmFtZSkgewogICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CiAgICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAxICYmIGFyZ3NbMF0gaW5zdGFuY2VvZiBUcmFuc2ZlcmFibGVSZXNwb25zZSkgewogICAgICAgICAgICBzZW5kUG9zdE1lc3NhZ2UoeyBldmVudE5hbWU6IGV2ZW50TmFtZSwgYXJnczogYXJncyB9LCBhcmdzWzBdLnRyYW5zZmVyYWJsZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZW5kUG9zdE1lc3NhZ2UoeyBldmVudE5hbWU6IGV2ZW50TmFtZSwgYXJnczogYXJncyB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIGtleTogJ2VtaXRMb2NhbGx5JywKICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW1pdExvY2FsbHkoZXZlbnROYW1lKSB7CiAgICAgICAgICB2YXIgX2dldDI7CgogICAgICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgewogICAgICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdOwogICAgICAgICAgfQoKICAgICAgICAgIChfZ2V0MiA9IF9nZXQoV29ya2VyUmVnaXN0ZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoV29ya2VyUmVnaXN0ZXIucHJvdG90eXBlKSwgJ2VtaXQnLCB0aGlzKSkuY2FsbC5hcHBseShfZ2V0MiwgW3RoaXMsIGV2ZW50TmFtZV0uY29uY2F0KGFyZ3MpKTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBrZXk6ICdvcGVyYXRpb24nLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvcGVyYXRpb24obmFtZSwgaGFuZGxlcikgewogICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBoYW5kbGVyOwogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gV29ya2VyUmVnaXN0ZXI7CiAgICB9KFRpbnlFbWl0dGVyKSkoKTsKCiAgICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKG1lc3NhZ2VJZCwgcGF5bG9hZCwgaGFuZGxlck5hbWUpIHsKCiAgICAgIHZhciBvblN1Y2Nlc3MgPSBmdW5jdGlvbiBvblN1Y2Nlc3MocmVzdWx0KSB7CiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBUcmFuc2ZlcmFibGVSZXNwb25zZSkgewogICAgICAgICAgc2VuZFJlc3VsdChtZXNzYWdlSWQsIFJFU1VMVF9TVUNDRVNTLCByZXN1bHQucGF5bG9hZCwgcmVzdWx0LnRyYW5zZmVyYWJsZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbmRSZXN1bHQobWVzc2FnZUlkLCBSRVNVTFRfU1VDQ0VTUywgcmVzdWx0KTsKICAgICAgICB9CiAgICAgIH07CgogICAgICB2YXIgb25FcnJvciA9IGZ1bmN0aW9uIG9uRXJyb3IoZSkgewogICAgICAgIHNlbmRSZXN1bHQobWVzc2FnZUlkLCBSRVNVTFRfRVJST1IsIHsKICAgICAgICAgIG1lc3NhZ2U6IGUubWVzc2FnZSwKICAgICAgICAgIHN0YWNrOiBlLnN0YWNrCiAgICAgICAgfSk7CiAgICAgIH07CgogICAgICB0cnkgewogICAgICAgIHZhciByZXN1bHQgPSBydW5GbihtZXNzYWdlSWQsIHBheWxvYWQsIGhhbmRsZXJOYW1lKTsKICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHsKICAgICAgICAgIHJlc3VsdC50aGVuKG9uU3VjY2VzcykuY2F0Y2gob25FcnJvcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9uU3VjY2VzcyhyZXN1bHQpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIG9uRXJyb3IoZSk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIHJ1bkZuID0gZnVuY3Rpb24gcnVuRm4obWVzc2FnZUlkLCBwYXlsb2FkLCBoYW5kbGVyTmFtZSkgewogICAgICB2YXIgaGFuZGxlciA9IGhhbmRsZXJzW2hhbmRsZXJOYW1lIHx8IERFRkFVTFRfSEFORExFUl07CiAgICAgIGlmICghaGFuZGxlcikgdGhyb3cgbmV3IEVycm9yKCdOb3QgZm91bmQgaGFuZGxlciBmb3IgdGhpcyByZXF1ZXN0Jyk7CgogICAgICByZXR1cm4gaGFuZGxlcihwYXlsb2FkLCBzZW5kRXZlbnQuYmluZChudWxsLCBtZXNzYWdlSWQpKTsKICAgIH07CgogICAgdmFyIHNlbmRSZXN1bHQgPSBmdW5jdGlvbiBzZW5kUmVzdWx0KG1lc3NhZ2VJZCwgc3VjY2VzcywgcGF5bG9hZCkgewogICAgICB2YXIgdHJhbnNmZXJhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBbXTsKCiAgICAgIHNlbmRQb3N0TWVzc2FnZShbTUVTU0FHRV9SRVNVTFQsIG1lc3NhZ2VJZCwgc3VjY2VzcywgcGF5bG9hZF0sIHRyYW5zZmVyYWJsZSk7CiAgICB9OwoKICAgIHZhciBzZW5kRXZlbnQgPSBmdW5jdGlvbiBzZW5kRXZlbnQobWVzc2FnZUlkLCBldmVudE5hbWUsIHBheWxvYWQpIHsKICAgICAgaWYgKCFldmVudE5hbWUpIHRocm93IG5ldyBFcnJvcignZXZlbnROYW1lIGlzIHJlcXVpcmVkJyk7CgogICAgICBpZiAodHlwZW9mIGV2ZW50TmFtZSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBFcnJvcignZXZlbnROYW1lIHNob3VsZCBiZSBzdHJpbmcnKTsKCiAgICAgIHNlbmRQb3N0TWVzc2FnZShbTUVTU0FHRV9FVkVOVCwgbWVzc2FnZUlkLCBldmVudE5hbWUsIHBheWxvYWRdKTsKICAgIH07CgogICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKF9yZWYpIHsKICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7CgogICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgewogICAgICAgIHJ1bi5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShkYXRhKSk7CiAgICAgIH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLmV2ZW50TmFtZSkgewogICAgICAgIHNlcnZlci5lbWl0TG9jYWxseS5hcHBseShzZXJ2ZXIsIFtkYXRhLmV2ZW50TmFtZV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShkYXRhLmFyZ3MpKSk7CiAgICAgIH0KICAgIH0pOwoKICAgIHJldHVybiBzZXJ2ZXI7CiAgfQoKICB2YXIgVHJhbnNmZXJhYmxlUmVzcG9uc2UgPSBmdW5jdGlvbiBUcmFuc2ZlcmFibGVSZXNwb25zZShwYXlsb2FkLCB0cmFuc2ZlcmFibGUpIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2ZlcmFibGVSZXNwb25zZSk7CgogICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZDsKICAgIHRoaXMudHJhbnNmZXJhYmxlID0gdHJhbnNmZXJhYmxlOwogIH07CgogIHJlZ2lzdGVyLmV4cG9ydHMgPSBSZWdpc3RlclByb21pc2U7CiAgcmVnaXN0ZXIuZXhwb3J0cy5UcmFuc2ZlcmFibGVSZXNwb25zZSA9IFRyYW5zZmVyYWJsZVJlc3BvbnNlOwoKICB2YXIgcmVnaXN0ZXJXZWJ3b3JrZXIgPSByZWdpc3Rlci5leHBvcnRzOwoKICB2YXIgU2xpY2luZ01vZGUgPSB7CiAgICBOT05FOiAtMSwKICAgIEk6IDAsCiAgICBKOiAxLAogICAgSzogMiwKICAgIFg6IDMsCiAgICBZOiA0LAogICAgWjogNQogIH07CgogIC8qKg0KICAgKiBDb21tb24gdXRpbGl0aWVzDQogICAqIEBtb2R1bGUgZ2xNYXRyaXgNCiAgICovCiAgdmFyIEFSUkFZX1RZUEUgPSB0eXBlb2YgRmxvYXQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyA/IEZsb2F0MzJBcnJheSA6IEFycmF5OwogIGlmICghTWF0aC5oeXBvdCkgTWF0aC5oeXBvdCA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciB5ID0gMCwKICAgICAgICBpID0gYXJndW1lbnRzLmxlbmd0aDsKCiAgICB3aGlsZSAoaS0tKSB7CiAgICAgIHkgKz0gYXJndW1lbnRzW2ldICogYXJndW1lbnRzW2ldOwogICAgfQoKICAgIHJldHVybiBNYXRoLnNxcnQoeSk7CiAgfTsKCiAgLyoqDQogICAqIDMgRGltZW5zaW9uYWwgVmVjdG9yDQogICAqIEBtb2R1bGUgdmVjMw0KICAgKi8KCiAgLyoqDQogICAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzMNCiAgICoNCiAgICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3Rvcg0KICAgKi8KCiAgZnVuY3Rpb24gY3JlYXRlKCkgewogICAgdmFyIG91dCA9IG5ldyBBUlJBWV9UWVBFKDMpOwoKICAgIGlmIChBUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkgewogICAgICBvdXRbMF0gPSAwOwogICAgICBvdXRbMV0gPSAwOwogICAgICBvdXRbMl0gPSAwOwogICAgfQoKICAgIHJldHVybiBvdXQ7CiAgfQogIC8qKg0KICAgKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYQ0KICAgKg0KICAgKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3Rvcg0KICAgKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZA0KICAgKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmQNCiAgICogQHJldHVybnMge3ZlYzN9IG91dA0KICAgKi8KCiAgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7CiAgICBvdXRbMF0gPSBhWzBdIC0gYlswXTsKICAgIG91dFsxXSA9IGFbMV0gLSBiWzFdOwogICAgb3V0WzJdID0gYVsyXSAtIGJbMl07CiAgICByZXR1cm4gb3V0OwogIH0KICAvKioNCiAgICogU2NhbGVzIGEgdmVjMyBieSBhIHNjYWxhciBudW1iZXINCiAgICoNCiAgICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3INCiAgICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdGhlIHZlY3RvciB0byBzY2FsZQ0KICAgKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieQ0KICAgKiBAcmV0dXJucyB7dmVjM30gb3V0DQogICAqLwoKICBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIGIpIHsKICAgIG91dFswXSA9IGFbMF0gKiBiOwogICAgb3V0WzFdID0gYVsxXSAqIGI7CiAgICBvdXRbMl0gPSBhWzJdICogYjsKICAgIHJldHVybiBvdXQ7CiAgfQogIC8qKg0KICAgKiBBZGRzIHR3byB2ZWMzJ3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWUNCiAgICoNCiAgICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3INCiAgICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmQNCiAgICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kDQogICAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIgYnkgYmVmb3JlIGFkZGluZw0KICAgKiBAcmV0dXJucyB7dmVjM30gb3V0DQogICAqLwoKICBmdW5jdGlvbiBzY2FsZUFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7CiAgICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlOwogICAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTsKICAgIG91dFsyXSA9IGFbMl0gKyBiWzJdICogc2NhbGU7CiAgICByZXR1cm4gb3V0OwogIH0KICAvKioNCiAgICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzNzLg0KICAgKg0KICAgKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3Zlcg0KICAgKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzMuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZA0KICAgKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5DQogICAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjM3MgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5DQogICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheQ0KICAgKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuDQogICAqIEByZXR1cm5zIHtBcnJheX0gYQ0KICAgKiBAZnVuY3Rpb24NCiAgICovCgogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgdmVjID0gY3JlYXRlKCk7CiAgICByZXR1cm4gZnVuY3Rpb24gKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykgewogICAgICB2YXIgaSwgbDsKCiAgICAgIGlmICghc3RyaWRlKSB7CiAgICAgICAgc3RyaWRlID0gMzsKICAgICAgfQoKICAgICAgaWYgKCFvZmZzZXQpIHsKICAgICAgICBvZmZzZXQgPSAwOwogICAgICB9CgogICAgICBpZiAoY291bnQpIHsKICAgICAgICBsID0gTWF0aC5taW4oY291bnQgKiBzdHJpZGUgKyBvZmZzZXQsIGEubGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsID0gYS5sZW5ndGg7CiAgICAgIH0KCiAgICAgIGZvciAoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7CiAgICAgICAgdmVjWzBdID0gYVtpXTsKICAgICAgICB2ZWNbMV0gPSBhW2kgKyAxXTsKICAgICAgICB2ZWNbMl0gPSBhW2kgKyAyXTsKICAgICAgICBmbih2ZWMsIHZlYywgYXJnKTsKICAgICAgICBhW2ldID0gdmVjWzBdOwogICAgICAgIGFbaSArIDFdID0gdmVjWzFdOwogICAgICAgIGFbaSArIDJdID0gdmVjWzJdOwogICAgICB9CgogICAgICByZXR1cm4gYTsKICAgIH07CiAgfSkoKTsKCiAgdmFyIGdsb2JhbHMgPSB7CiAgICAvLyBzaW5nbGUtY29tcG9uZW50IGxhYmVsbWFwCiAgICBidWZmZXI6IG51bGwsCiAgICBkaW1lbnNpb25zOiBbMCwgMCwgMF0sCiAgICBwcmV2UG9pbnQ6IG51bGwsCiAgICBzbGljaW5nTW9kZTogbnVsbCAvLyAyRCBvciAzRCBwYWludGluZwoKICB9OyAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICBmdW5jdGlvbiBoYW5kbGVQYWludFJlY3RhbmdsZShfcmVmKSB7CiAgICB2YXIgcG9pbnQxID0gX3JlZi5wb2ludDEsCiAgICAgICAgcG9pbnQyID0gX3JlZi5wb2ludDI7CgogICAgdmFyIF9wb2ludCA9IF9zbGljZWRUb0FycmF5X19kZWZhdWx0WydkZWZhdWx0J10ocG9pbnQxLCAzKSwKICAgICAgICB4MSA9IF9wb2ludFswXSwKICAgICAgICB5MSA9IF9wb2ludFsxXSwKICAgICAgICB6MSA9IF9wb2ludFsyXTsKCiAgICB2YXIgX3BvaW50MiA9IF9zbGljZWRUb0FycmF5X19kZWZhdWx0WydkZWZhdWx0J10ocG9pbnQyLCAzKSwKICAgICAgICB4MiA9IF9wb2ludDJbMF0sCiAgICAgICAgeTIgPSBfcG9pbnQyWzFdLAogICAgICAgIHoyID0gX3BvaW50MlsyXTsKCiAgICB2YXIgeHN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4oeDEsIHgyKSwgMCk7CiAgICB2YXIgeGVuZCA9IE1hdGgubWluKE1hdGgubWF4KHgxLCB4MiksIGdsb2JhbHMuZGltZW5zaW9uc1swXSAtIDEpOwoKICAgIGlmICh4c3RhcnQgPD0geGVuZCkgewogICAgICB2YXIgeXN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4oeTEsIHkyKSwgMCk7CiAgICAgIHZhciB5ZW5kID0gTWF0aC5taW4oTWF0aC5tYXgoeTEsIHkyKSwgZ2xvYmFscy5kaW1lbnNpb25zWzFdIC0gMSk7CiAgICAgIHZhciB6c3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbih6MSwgejIpLCAwKTsKICAgICAgdmFyIHplbmQgPSBNYXRoLm1pbihNYXRoLm1heCh6MSwgejIpLCBnbG9iYWxzLmRpbWVuc2lvbnNbMl0gLSAxKTsKICAgICAgdmFyIGpTdHJpZGUgPSBnbG9iYWxzLmRpbWVuc2lvbnNbMF07CiAgICAgIHZhciBrU3RyaWRlID0gZ2xvYmFscy5kaW1lbnNpb25zWzBdICogZ2xvYmFscy5kaW1lbnNpb25zWzFdOwoKICAgICAgZm9yICh2YXIgayA9IHpzdGFydDsgayA8PSB6ZW5kOyBrKyspIHsKICAgICAgICBmb3IgKHZhciBqID0geXN0YXJ0OyBqIDw9IHllbmQ7IGorKykgewogICAgICAgICAgdmFyIGluZGV4ID0gaiAqIGpTdHJpZGUgKyBrICoga1N0cmlkZTsKICAgICAgICAgIGdsb2JhbHMuYnVmZmVyLmZpbGwoMSwgaW5kZXggKyB4c3RhcnQsIGluZGV4ICsgeGVuZCArIDEpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0gLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvLyBjZW50ZXIgYW5kIHNjYWxlMyBhcmUgaW4gSUpLIGNvb3JkaW5hdGVzCgoKICBmdW5jdGlvbiBoYW5kbGVQYWludEVsbGlwc2UoX3JlZjIpIHsKICAgIHZhciBjZW50ZXIgPSBfcmVmMi5jZW50ZXIsCiAgICAgICAgc2NhbGUzID0gX3JlZjIuc2NhbGUzOwoKICAgIHZhciByYWRpdXMzID0gX3RvQ29uc3VtYWJsZUFycmF5X19kZWZhdWx0WydkZWZhdWx0J10oc2NhbGUzKTsKCiAgICB2YXIgaW5kZXhDZW50ZXIgPSBjZW50ZXIubWFwKGZ1bmN0aW9uICh2YWwpIHsKICAgICAgcmV0dXJuIE1hdGgucm91bmQodmFsKTsKICAgIH0pOwogICAgdmFyIHNsaWNlQXhpcyA9IC0xOwoKICAgIGlmIChnbG9iYWxzLnNsaWNpbmdNb2RlICE9IG51bGwgJiYgZ2xvYmFscy5zbGljaW5nTW9kZSAhPT0gU2xpY2luZ01vZGUuTk9ORSkgewogICAgICBzbGljZUF4aXMgPSBnbG9iYWxzLnNsaWNpbmdNb2RlICUgMzsKICAgIH0KCiAgICB2YXIgeVN0cmlkZSA9IGdsb2JhbHMuZGltZW5zaW9uc1swXTsKICAgIHZhciB6U3RyaWRlID0gZ2xvYmFscy5kaW1lbnNpb25zWzBdICogZ2xvYmFscy5kaW1lbnNpb25zWzFdOwoKICAgIHZhciBfaW5kZXhDZW50ZXIgPSBfc2xpY2VkVG9BcnJheV9fZGVmYXVsdFsnZGVmYXVsdCddKGluZGV4Q2VudGVyLCAzKSwKICAgICAgICB4bWluID0gX2luZGV4Q2VudGVyWzBdLAogICAgICAgIHltaW4gPSBfaW5kZXhDZW50ZXJbMV0sCiAgICAgICAgem1pbiA9IF9pbmRleENlbnRlclsyXTsKCiAgICB2YXIgX2luZGV4Q2VudGVyMiA9IF9zbGljZWRUb0FycmF5X19kZWZhdWx0WydkZWZhdWx0J10oaW5kZXhDZW50ZXIsIDMpLAogICAgICAgIHhtYXggPSBfaW5kZXhDZW50ZXIyWzBdLAogICAgICAgIHltYXggPSBfaW5kZXhDZW50ZXIyWzFdLAogICAgICAgIHptYXggPSBfaW5kZXhDZW50ZXIyWzJdOwoKICAgIGlmIChzbGljZUF4aXMgIT09IDIpIHsKICAgICAgem1pbiA9IE1hdGgucm91bmQoTWF0aC5tYXgoaW5kZXhDZW50ZXJbMl0gLSByYWRpdXMzWzJdLCAwKSk7CiAgICAgIHptYXggPSBNYXRoLnJvdW5kKE1hdGgubWluKGluZGV4Q2VudGVyWzJdICsgcmFkaXVzM1syXSwgZ2xvYmFscy5kaW1lbnNpb25zWzJdIC0gMSkpOwogICAgfQoKICAgIGZvciAodmFyIHogPSB6bWluOyB6IDw9IHptYXg7IHorKykgewogICAgICB2YXIgZHogPSAwOwoKICAgICAgaWYgKHNsaWNlQXhpcyAhPT0gMikgewogICAgICAgIGR6ID0gKGluZGV4Q2VudGVyWzJdIC0geikgLyByYWRpdXMzWzJdOwogICAgICB9CgogICAgICB2YXIgZHpTcXVhcmVkID0gZHogKiBkejsKCiAgICAgIGlmIChkelNxdWFyZWQgPD0gMSkgewogICAgICAgIHZhciBheSA9IHJhZGl1czNbMV0gKiBNYXRoLnNxcnQoMSAtIGR6U3F1YXJlZCk7CgogICAgICAgIGlmIChzbGljZUF4aXMgIT09IDEpIHsKICAgICAgICAgIHltaW4gPSBNYXRoLnJvdW5kKE1hdGgubWF4KGluZGV4Q2VudGVyWzFdIC0gYXksIDApKTsKICAgICAgICAgIHltYXggPSBNYXRoLnJvdW5kKE1hdGgubWluKGluZGV4Q2VudGVyWzFdICsgYXksIGdsb2JhbHMuZGltZW5zaW9uc1sxXSAtIDEpKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIHkgPSB5bWluOyB5IDw9IHltYXg7IHkrKykgewogICAgICAgICAgdmFyIGR5ID0gMDsKCiAgICAgICAgICBpZiAoc2xpY2VBeGlzICE9PSAxKSB7CiAgICAgICAgICAgIGR5ID0gKGluZGV4Q2VudGVyWzFdIC0geSkgLyByYWRpdXMzWzFdOwogICAgICAgICAgfQoKICAgICAgICAgIHZhciBkeVNxdWFyZWQgPSBkeSAqIGR5OwoKICAgICAgICAgIGlmIChkeVNxdWFyZWQgKyBkelNxdWFyZWQgPD0gMSkgewogICAgICAgICAgICBpZiAoc2xpY2VBeGlzICE9PSAwKSB7CiAgICAgICAgICAgICAgdmFyIGF4ID0gcmFkaXVzM1swXSAqIE1hdGguc3FydCgxIC0gZHlTcXVhcmVkIC0gZHpTcXVhcmVkKTsKICAgICAgICAgICAgICB4bWluID0gTWF0aC5yb3VuZChNYXRoLm1heChpbmRleENlbnRlclswXSAtIGF4LCAwKSk7CiAgICAgICAgICAgICAgeG1heCA9IE1hdGgucm91bmQoTWF0aC5taW4oaW5kZXhDZW50ZXJbMF0gKyBheCwgZ2xvYmFscy5kaW1lbnNpb25zWzBdIC0gMSkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoeG1pbiA8PSB4bWF4KSB7CiAgICAgICAgICAgICAgdmFyIGluZGV4ID0geSAqIHlTdHJpZGUgKyB6ICogelN0cmlkZTsKICAgICAgICAgICAgICBnbG9iYWxzLmJ1ZmZlci5maWxsKDEsIGluZGV4ICsgeG1pbiwgaW5kZXggKyB4bWF4ICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKICBmdW5jdGlvbiBoYW5kbGVQYWludChfcmVmMykgewogICAgdmFyIHBvaW50ID0gX3JlZjMucG9pbnQsCiAgICAgICAgcmFkaXVzID0gX3JlZjMucmFkaXVzOwoKICAgIGlmICghZ2xvYmFscy5wcmV2UG9pbnQpIHsKICAgICAgZ2xvYmFscy5wcmV2UG9pbnQgPSBwb2ludDsKICAgIH0gLy8gRERBIHBhcmFtcwoKCiAgICB2YXIgZGVsdGEgPSBbcG9pbnRbMF0gLSBnbG9iYWxzLnByZXZQb2ludFswXSwgcG9pbnRbMV0gLSBnbG9iYWxzLnByZXZQb2ludFsxXSwgcG9pbnRbMl0gLSBnbG9iYWxzLnByZXZQb2ludFsyXV07CiAgICB2YXIgaW5jID0gWzEsIDEsIDFdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAgICAgIGlmIChkZWx0YVtpXSA8IDApIHsKICAgICAgICBkZWx0YVtpXSA9IC1kZWx0YVtpXTsKICAgICAgICBpbmNbaV0gPSAtMTsKICAgICAgfQogICAgfQoKICAgIHZhciBzdGVwID0gTWF0aC5tYXguYXBwbHkoTWF0aCwgZGVsdGEpOyAvLyBEREEKCiAgICB2YXIgdGhyZXNoID0gW3N0ZXAsIHN0ZXAsIHN0ZXBdOwoKICAgIHZhciBwdCA9IF90b0NvbnN1bWFibGVBcnJheV9fZGVmYXVsdFsnZGVmYXVsdCddKGdsb2JhbHMucHJldlBvaW50KTsKCiAgICBmb3IgKHZhciBzID0gMDsgcyA8PSBzdGVwOyBzKyspIHsKICAgICAgaGFuZGxlUGFpbnRFbGxpcHNlKHsKICAgICAgICBjZW50ZXI6IHB0LAogICAgICAgIHNjYWxlMzogcmFkaXVzCiAgICAgIH0pOwoKICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IDM7IGlpKyspIHsKICAgICAgICB0aHJlc2hbaWldIC09IGRlbHRhW2lpXTsKCiAgICAgICAgaWYgKHRocmVzaFtpaV0gPD0gMCkgewogICAgICAgICAgdGhyZXNoW2lpXSArPSBzdGVwOwogICAgICAgICAgcHRbaWldICs9IGluY1tpaV07CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZ2xvYmFscy5wcmV2UG9pbnQgPSBwb2ludDsKICB9IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKICBmdW5jdGlvbiBoYW5kbGVQYWludFRyaWFuZ2xlcyhfcmVmNCkgewogICAgdmFyIHRyaWFuZ2xlTGlzdCA9IF9yZWY0LnRyaWFuZ2xlTGlzdDsKICAgIC8vIGRlYnVnZ2VyOwogICAgdmFyIHRyaWFuZ2xlQ291bnQgPSBNYXRoLmZsb29yKHRyaWFuZ2xlTGlzdC5sZW5ndGggLyA5KTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyaWFuZ2xlQ291bnQ7IGkrKykgewogICAgICB2YXIgcG9pbnQwID0gdHJpYW5nbGVMaXN0LnN1YmFycmF5KDkgKiBpICsgMCwgOSAqIGkgKyAzKTsKICAgICAgdmFyIHBvaW50MSA9IHRyaWFuZ2xlTGlzdC5zdWJhcnJheSg5ICogaSArIDMsIDkgKiBpICsgNik7CiAgICAgIHZhciBwb2ludDIgPSB0cmlhbmdsZUxpc3Quc3ViYXJyYXkoOSAqIGkgKyA2LCA5ICogaSArIDkpOwogICAgICB2YXIgdjEgPSBbMCwgMCwgMF07CiAgICAgIHZhciB2MiA9IFswLCAwLCAwXTsKICAgICAgc3VidHJhY3QodjEsIHBvaW50MSwgcG9pbnQwKTsKICAgICAgc3VidHJhY3QodjIsIHBvaW50MiwgcG9pbnQwKTsKICAgICAgdmFyIHN0ZXAxID0gWzAsIDAsIDBdOwogICAgICB2YXIgbnVtU3RlcDEgPSAyICogTWF0aC5tYXgoTWF0aC5hYnModjFbMF0pLCBNYXRoLmFicyh2MVsxXSksIE1hdGguYWJzKHYxWzJdKSk7CiAgICAgIHNjYWxlKHN0ZXAxLCB2MSwgMSAvIG51bVN0ZXAxKTsKICAgICAgdmFyIHN0ZXAyID0gWzAsIDAsIDBdOwogICAgICB2YXIgbnVtU3RlcDIgPSAyICogTWF0aC5tYXgoTWF0aC5hYnModjJbMF0pLCBNYXRoLmFicyh2MlsxXSksIE1hdGguYWJzKHYyWzJdKSk7CiAgICAgIHNjYWxlKHN0ZXAyLCB2MiwgMSAvIG51bVN0ZXAyKTsKICAgICAgdmFyIGpTdHJpZGUgPSBnbG9iYWxzLmRpbWVuc2lvbnNbMF07CiAgICAgIHZhciBrU3RyaWRlID0gZ2xvYmFscy5kaW1lbnNpb25zWzBdICogZ2xvYmFscy5kaW1lbnNpb25zWzFdOwoKICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPD0gbnVtU3RlcDEgKyAxOyB1KyspIHsKICAgICAgICB2YXIgbWF4ViA9IG51bVN0ZXAyIC0gdSAqIChudW1TdGVwMiAvIG51bVN0ZXAxKTsKCiAgICAgICAgZm9yICh2YXIgdiA9IDA7IHYgPD0gbWF4ViArIDE7IHYrKykgewogICAgICAgICAgdmFyIHBvaW50ID0gX3RvQ29uc3VtYWJsZUFycmF5X19kZWZhdWx0WydkZWZhdWx0J10ocG9pbnQwKTsKCiAgICAgICAgICBzY2FsZUFuZEFkZChwb2ludCwgcG9pbnQsIHN0ZXAxLCB1KTsKICAgICAgICAgIHNjYWxlQW5kQWRkKHBvaW50LCBwb2ludCwgc3RlcDIsIHYpOwogICAgICAgICAgcG9pbnRbMF0gPSBNYXRoLnJvdW5kKHBvaW50WzBdKTsKICAgICAgICAgIHBvaW50WzFdID0gTWF0aC5yb3VuZChwb2ludFsxXSk7CiAgICAgICAgICBwb2ludFsyXSA9IE1hdGgucm91bmQocG9pbnRbMl0pOwoKICAgICAgICAgIGlmIChwb2ludFswXSA+PSAwICYmIHBvaW50WzBdIDwgZ2xvYmFscy5kaW1lbnNpb25zWzBdICYmIHBvaW50WzFdID49IDAgJiYgcG9pbnRbMV0gPCBnbG9iYWxzLmRpbWVuc2lvbnNbMV0gJiYgcG9pbnRbMl0gPj0gMCAmJiBwb2ludFsyXSA8IGdsb2JhbHMuZGltZW5zaW9uc1syXSkgewogICAgICAgICAgICBnbG9iYWxzLmJ1ZmZlcltwb2ludFswXSArIGpTdHJpZGUgKiBwb2ludFsxXSArIGtTdHJpZGUgKiBwb2ludFsyXV0gPSAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0gLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgogIHJlZ2lzdGVyV2Vid29ya2VyKCkub3BlcmF0aW9uKCdzdGFydCcsIGZ1bmN0aW9uIChfcmVmNSkgewogICAgdmFyIGJ1ZmZlclR5cGUgPSBfcmVmNS5idWZmZXJUeXBlLAogICAgICAgIGRpbWVuc2lvbnMgPSBfcmVmNS5kaW1lbnNpb25zLAogICAgICAgIHNsaWNpbmdNb2RlID0gX3JlZjUuc2xpY2luZ01vZGU7CgogICAgaWYgKCFnbG9iYWxzLmJ1ZmZlcikgewogICAgICB2YXIgYnVmZmVyU2l6ZSA9IGRpbWVuc2lvbnNbMF0gKiBkaW1lbnNpb25zWzFdICogZGltZW5zaW9uc1syXTsKICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lICovCgogICAgICBnbG9iYWxzLmJ1ZmZlciA9IG5ldyBzZWxmW2J1ZmZlclR5cGVdKGJ1ZmZlclNpemUpOwogICAgICBnbG9iYWxzLmRpbWVuc2lvbnMgPSBkaW1lbnNpb25zOwogICAgICBnbG9iYWxzLnByZXZQb2ludCA9IG51bGw7CiAgICAgIGdsb2JhbHMuc2xpY2luZ01vZGUgPSBzbGljaW5nTW9kZTsKICAgIH0KICB9KS5vcGVyYXRpb24oJ3BhaW50JywgaGFuZGxlUGFpbnQpLm9wZXJhdGlvbigncGFpbnRSZWN0YW5nbGUnLCBoYW5kbGVQYWludFJlY3RhbmdsZSkub3BlcmF0aW9uKCdwYWludEVsbGlwc2UnLCBoYW5kbGVQYWludEVsbGlwc2UpLm9wZXJhdGlvbigncGFpbnRUcmlhbmdsZXMnLCBoYW5kbGVQYWludFRyaWFuZ2xlcykub3BlcmF0aW9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7CiAgICB2YXIgcmVzcG9uc2UgPSBuZXcgcmVnaXN0ZXJXZWJ3b3JrZXIuVHJhbnNmZXJhYmxlUmVzcG9uc2UoZ2xvYmFscy5idWZmZXIuYnVmZmVyLCBbZ2xvYmFscy5idWZmZXIuYnVmZmVyXSk7CiAgICBnbG9iYWxzLmJ1ZmZlciA9IG51bGw7CiAgICByZXR1cm4gcmVzcG9uc2U7CiAgfSk7Cgp9KF90b0NvbnN1bWFibGVBcnJheSQxLCBfc2xpY2VkVG9BcnJheSkpOwoK', null, false);
4
4
  /* eslint-enable */
5
5
 
6
6
  export { WorkerFactory as W };
@@ -1,6 +1,6 @@
1
1
  import { c as createBase64WorkerFactory } from '../../../../rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js';
2
2
 
3
- var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgdmFyIF9jcmVhdGVDbGFzcyQxID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTsKCiAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrJDEoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KCiAgdmFyIFRpbnlFbWl0dGVyID0gZnVuY3Rpb24gKCkgewogICAgZnVuY3Rpb24gVGlueUVtaXR0ZXIoKSB7CiAgICAgIF9jbGFzc0NhbGxDaGVjayQxKHRoaXMsIFRpbnlFbWl0dGVyKTsKCiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX19saXN0ZW5lcnMnLCB7CiAgICAgICAgdmFsdWU6IHt9LAogICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICAgIHdyaXRhYmxlOiBmYWxzZQogICAgICB9KTsKICAgIH0KCiAgICBfY3JlYXRlQ2xhc3MkMShUaW55RW1pdHRlciwgW3sKICAgICAga2V5OiAnZW1pdCcsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbWl0KGV2ZW50TmFtZSkgewogICAgICAgIGlmICghdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdKSByZXR1cm4gdGhpczsKCiAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CiAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTsKICAgICAgICB9CgogICAgICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZTsKICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IgPSBmYWxzZTsKICAgICAgICB2YXIgX2l0ZXJhdG9yRXJyb3IgPSB1bmRlZmluZWQ7CgogICAgICAgIHRyeSB7CiAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IgPSB0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV1bU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gKF9zdGVwID0gX2l0ZXJhdG9yLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlKSB7CiAgICAgICAgICAgIHZhciBoYW5kbGVyID0gX3N0ZXAudmFsdWU7CgogICAgICAgICAgICBoYW5kbGVyLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBfZGlkSXRlcmF0b3JFcnJvciA9IHRydWU7CiAgICAgICAgICBfaXRlcmF0b3JFcnJvciA9IGVycjsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1cm4pIHsKICAgICAgICAgICAgICBfaXRlcmF0b3IucmV0dXJuKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcikgewogICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgfSwgewogICAgICBrZXk6ICdvbmNlJywKICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uY2UoZXZlbnROYW1lLCBoYW5kbGVyKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKCiAgICAgICAgdmFyIG9uY2UgPSBmdW5jdGlvbiBvbmNlKCkgewogICAgICAgICAgX3RoaXMub2ZmKGV2ZW50TmFtZSwgb25jZSk7CiAgICAgICAgICBoYW5kbGVyLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gdGhpcy5vbihldmVudE5hbWUsIG9uY2UpOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogJ29uJywKICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikgewogICAgICAgIGlmICghdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdKSB0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBbXTsKCiAgICAgICAgdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdLnB1c2goaGFuZGxlcik7CgogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogJ29mZicsCiAgICAgIHZhbHVlOiBmdW5jdGlvbiBvZmYoZXZlbnROYW1lLCBoYW5kbGVyKSB7CiAgICAgICAgaWYgKGhhbmRsZXIpIHRoaXMuX19saXN0ZW5lcnNbZXZlbnROYW1lXSA9IHRoaXMuX19saXN0ZW5lcnNbZXZlbnROYW1lXS5maWx0ZXIoZnVuY3Rpb24gKGgpIHsKICAgICAgICAgIHJldHVybiBoICE9PSBoYW5kbGVyOwogICAgICAgIH0pO2Vsc2UgdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdID0gW107CgogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICB9XSk7CgogICAgcmV0dXJuIFRpbnlFbWl0dGVyOwogIH0oKTsKCiAgdmFyIHRpbnlFbWl0dGVyID0gVGlueUVtaXR0ZXI7CgogIHZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpOwoKICB2YXIgX2dldCA9IGZ1bmN0aW9uIGdldChvYmplY3QsIHByb3BlcnR5LCByZWNlaXZlcikgeyBpZiAob2JqZWN0ID09PSBudWxsKSBvYmplY3QgPSBGdW5jdGlvbi5wcm90b3R5cGU7IHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHByb3BlcnR5KTsgaWYgKGRlc2MgPT09IHVuZGVmaW5lZCkgeyB2YXIgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChwYXJlbnQgPT09IG51bGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSBlbHNlIHsgcmV0dXJuIGdldChwYXJlbnQsIHByb3BlcnR5LCByZWNlaXZlcik7IH0gfSBlbHNlIGlmICgidmFsdWUiIGluIGRlc2MpIHsgcmV0dXJuIGRlc2MudmFsdWU7IH0gZWxzZSB7IHZhciBnZXR0ZXIgPSBkZXNjLmdldDsgaWYgKGdldHRlciA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gcmV0dXJuIGdldHRlci5jYWxsKHJlY2VpdmVyKTsgfSB9OwoKICB2YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gInN5bWJvbCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gInN5bWJvbCIgOiB0eXBlb2Ygb2JqOyB9OwoKICBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH0KCiAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsgfSB9CgogIGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSAib2JqZWN0IiB8fCB0eXBlb2YgY2FsbCA9PT0gImZ1bmN0aW9uIikgPyBjYWxsIDogc2VsZjsgfQoKICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSAiZnVuY3Rpb24iICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfQoKICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfQoKCgogIHZhciBNRVNTQUdFX1JFU1VMVCA9IDA7CiAgdmFyIE1FU1NBR0VfRVZFTlQgPSAxOwoKICB2YXIgUkVTVUxUX0VSUk9SID0gMDsKICB2YXIgUkVTVUxUX1NVQ0NFU1MgPSAxOwoKICB2YXIgREVGQVVMVF9IQU5ETEVSID0gJ21haW4nOwoKICB2YXIgaXNQcm9taXNlID0gZnVuY3Rpb24gaXNQcm9taXNlKG8pIHsKICAgIHJldHVybiAodHlwZW9mIG8gPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG8pKSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG8udGhlbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygby5jYXRjaCA9PT0gJ2Z1bmN0aW9uJzsKICB9OwoKICBmdW5jdGlvbiBSZWdpc3RlclByb21pc2UoZm4pIHsKICAgIHZhciBoYW5kbGVycyA9IF9kZWZpbmVQcm9wZXJ0eSh7fSwgREVGQVVMVF9IQU5ETEVSLCBmbik7CiAgICB2YXIgc2VuZFBvc3RNZXNzYWdlID0gc2VsZi5wb3N0TWVzc2FnZS5iaW5kKHNlbGYpOwoKICAgIHZhciBzZXJ2ZXIgPSBuZXcgKGZ1bmN0aW9uIChfVGlueUVtaXR0ZXIpIHsKICAgICAgX2luaGVyaXRzKFdvcmtlclJlZ2lzdGVyLCBfVGlueUVtaXR0ZXIpOwoKICAgICAgZnVuY3Rpb24gV29ya2VyUmVnaXN0ZXIoKSB7CiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFdvcmtlclJlZ2lzdGVyKTsKCiAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChXb3JrZXJSZWdpc3Rlci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFdvcmtlclJlZ2lzdGVyKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7CiAgICAgIH0KCiAgICAgIF9jcmVhdGVDbGFzcyhXb3JrZXJSZWdpc3RlciwgW3sKICAgICAgICBrZXk6ICdlbWl0JywKICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW1pdChldmVudE5hbWUpIHsKICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykgewogICAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTsKICAgICAgICAgIH0KCiAgICAgICAgICBzZW5kUG9zdE1lc3NhZ2UoeyBldmVudE5hbWU6IGV2ZW50TmFtZSwgYXJnczogYXJncyB9KTsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIGtleTogJ2VtaXRMb2NhbGx5JywKICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW1pdExvY2FsbHkoZXZlbnROYW1lKSB7CiAgICAgICAgICB2YXIgX2dldDI7CgogICAgICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgewogICAgICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdOwogICAgICAgICAgfQoKICAgICAgICAgIChfZ2V0MiA9IF9nZXQoV29ya2VyUmVnaXN0ZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoV29ya2VyUmVnaXN0ZXIucHJvdG90eXBlKSwgJ2VtaXQnLCB0aGlzKSkuY2FsbC5hcHBseShfZ2V0MiwgW3RoaXMsIGV2ZW50TmFtZV0uY29uY2F0KGFyZ3MpKTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBrZXk6ICdvcGVyYXRpb24nLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvcGVyYXRpb24obmFtZSwgaGFuZGxlcikgewogICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBoYW5kbGVyOwogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gV29ya2VyUmVnaXN0ZXI7CiAgICB9KHRpbnlFbWl0dGVyKSkoKTsKCiAgICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKG1lc3NhZ2VJZCwgcGF5bG9hZCwgaGFuZGxlck5hbWUpIHsKCiAgICAgIHZhciBvblN1Y2Nlc3MgPSBmdW5jdGlvbiBvblN1Y2Nlc3MocmVzdWx0KSB7CiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBUcmFuc2ZlcmFibGVSZXNwb25zZSkgewogICAgICAgICAgc2VuZFJlc3VsdChtZXNzYWdlSWQsIFJFU1VMVF9TVUNDRVNTLCByZXN1bHQucGF5bG9hZCwgcmVzdWx0LnRyYW5zZmVyYWJsZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbmRSZXN1bHQobWVzc2FnZUlkLCBSRVNVTFRfU1VDQ0VTUywgcmVzdWx0KTsKICAgICAgICB9CiAgICAgIH07CgogICAgICB2YXIgb25FcnJvciA9IGZ1bmN0aW9uIG9uRXJyb3IoZSkgewogICAgICAgIHNlbmRSZXN1bHQobWVzc2FnZUlkLCBSRVNVTFRfRVJST1IsIHsKICAgICAgICAgIG1lc3NhZ2U6IGUubWVzc2FnZSwKICAgICAgICAgIHN0YWNrOiBlLnN0YWNrCiAgICAgICAgfSk7CiAgICAgIH07CgogICAgICB0cnkgewogICAgICAgIHZhciByZXN1bHQgPSBydW5GbihtZXNzYWdlSWQsIHBheWxvYWQsIGhhbmRsZXJOYW1lKTsKICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHsKICAgICAgICAgIHJlc3VsdC50aGVuKG9uU3VjY2VzcykuY2F0Y2gob25FcnJvcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9uU3VjY2VzcyhyZXN1bHQpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIG9uRXJyb3IoZSk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIHJ1bkZuID0gZnVuY3Rpb24gcnVuRm4obWVzc2FnZUlkLCBwYXlsb2FkLCBoYW5kbGVyTmFtZSkgewogICAgICB2YXIgaGFuZGxlciA9IGhhbmRsZXJzW2hhbmRsZXJOYW1lIHx8IERFRkFVTFRfSEFORExFUl07CiAgICAgIGlmICghaGFuZGxlcikgdGhyb3cgbmV3IEVycm9yKCdOb3QgZm91bmQgaGFuZGxlciBmb3IgdGhpcyByZXF1ZXN0Jyk7CgogICAgICByZXR1cm4gaGFuZGxlcihwYXlsb2FkLCBzZW5kRXZlbnQuYmluZChudWxsLCBtZXNzYWdlSWQpKTsKICAgIH07CgogICAgdmFyIHNlbmRSZXN1bHQgPSBmdW5jdGlvbiBzZW5kUmVzdWx0KG1lc3NhZ2VJZCwgc3VjY2VzcywgcGF5bG9hZCkgewogICAgICB2YXIgdHJhbnNmZXJhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBbXTsKCiAgICAgIHNlbmRQb3N0TWVzc2FnZShbTUVTU0FHRV9SRVNVTFQsIG1lc3NhZ2VJZCwgc3VjY2VzcywgcGF5bG9hZF0sIHRyYW5zZmVyYWJsZSk7CiAgICB9OwoKICAgIHZhciBzZW5kRXZlbnQgPSBmdW5jdGlvbiBzZW5kRXZlbnQobWVzc2FnZUlkLCBldmVudE5hbWUsIHBheWxvYWQpIHsKICAgICAgaWYgKCFldmVudE5hbWUpIHRocm93IG5ldyBFcnJvcignZXZlbnROYW1lIGlzIHJlcXVpcmVkJyk7CgogICAgICBpZiAodHlwZW9mIGV2ZW50TmFtZSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBFcnJvcignZXZlbnROYW1lIHNob3VsZCBiZSBzdHJpbmcnKTsKCiAgICAgIHNlbmRQb3N0TWVzc2FnZShbTUVTU0FHRV9FVkVOVCwgbWVzc2FnZUlkLCBldmVudE5hbWUsIHBheWxvYWRdKTsKICAgIH07CgogICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKF9yZWYpIHsKICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7CgogICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgewogICAgICAgIHJ1bi5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShkYXRhKSk7CiAgICAgIH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLmV2ZW50TmFtZSkgewogICAgICAgIHNlcnZlci5lbWl0TG9jYWxseS5hcHBseShzZXJ2ZXIsIFtkYXRhLmV2ZW50TmFtZV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShkYXRhLmFyZ3MpKSk7CiAgICAgIH0KICAgIH0pOwoKICAgIHJldHVybiBzZXJ2ZXI7CiAgfQoKICB2YXIgVHJhbnNmZXJhYmxlUmVzcG9uc2UgPSBmdW5jdGlvbiBUcmFuc2ZlcmFibGVSZXNwb25zZShwYXlsb2FkLCB0cmFuc2ZlcmFibGUpIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2ZlcmFibGVSZXNwb25zZSk7CgogICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZDsKICAgIHRoaXMudHJhbnNmZXJhYmxlID0gdHJhbnNmZXJhYmxlOwogIH07CgogIHZhciByZWdpc3RlciA9IFJlZ2lzdGVyUHJvbWlzZTsKICB2YXIgVHJhbnNmZXJhYmxlUmVzcG9uc2VfMSA9IFRyYW5zZmVyYWJsZVJlc3BvbnNlOwogIHJlZ2lzdGVyLlRyYW5zZmVyYWJsZVJlc3BvbnNlID0gVHJhbnNmZXJhYmxlUmVzcG9uc2VfMTsKCiAgLyogZXNsaW50LWRpc2FibGUgKi8KICAvLyBwcmV0dGllci1pZ25vcmUKCiAgcmVnaXN0ZXIoZnVuY3Rpb24gKG1lc3NhZ2UsIGVtaXQpIHsKICAgIHZhciBhcnJheSA9IG1lc3NhZ2UuYXJyYXk7CiAgICB2YXIgbWluID0gbWVzc2FnZS5taW47CiAgICB2YXIgbWF4ID0gbWVzc2FnZS5tYXg7CiAgICB2YXIgb2Zmc2V0ID0gbWVzc2FnZS5jb21wb25lbnQgfHwgMDsKICAgIHZhciBzdGVwID0gbWVzc2FnZS5udW1iZXJPZkNvbXBvbmVudHMgfHwgMTsKICAgIHZhciBudW1iZXJPZkJpbnMgPSBtZXNzYWdlLm51bWJlck9mQmluczsKICAgIHZhciBkZWx0YSA9IG1heCAtIG1pbjsKICAgIHZhciBoaXN0b2dyYW0gPSBuZXcgRmxvYXQzMkFycmF5KG51bWJlck9mQmlucyk7CiAgICBoaXN0b2dyYW0uZmlsbCgwKTsKICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7CgogICAgZm9yICh2YXIgaSA9IG9mZnNldDsgaSA8IGxlbjsgaSArPSBzdGVwKSB7CiAgICAgIHZhciBpZHggPSBNYXRoLmZsb29yKChudW1iZXJPZkJpbnMgLSAxKSAqIChOdW1iZXIoYXJyYXlbaV0pIC0gbWluKSAvIGRlbHRhKTsKICAgICAgaGlzdG9ncmFtW2lkeF0gKz0gMTsKICAgIH0KCiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyByZWdpc3Rlci5UcmFuc2ZlcmFibGVSZXNwb25zZShoaXN0b2dyYW0sIFtoaXN0b2dyYW0uYnVmZmVyXSkpOwogIH0pOwoKfSgpKTsKCg==', null, false);
3
+ var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgdmFyIHJlZ2lzdGVyID0ge2V4cG9ydHM6IHt9fTsKCiAgdmFyIF9jcmVhdGVDbGFzcyQxID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTsKCiAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrJDEoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KCiAgdmFyIFRpbnlFbWl0dGVyJDEgPSBmdW5jdGlvbiAoKSB7CiAgICBmdW5jdGlvbiBUaW55RW1pdHRlcigpIHsKICAgICAgX2NsYXNzQ2FsbENoZWNrJDEodGhpcywgVGlueUVtaXR0ZXIpOwoKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfX2xpc3RlbmVycycsIHsKICAgICAgICB2YWx1ZToge30sCiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgICAgd3JpdGFibGU6IGZhbHNlCiAgICAgIH0pOwogICAgfQoKICAgIF9jcmVhdGVDbGFzcyQxKFRpbnlFbWl0dGVyLCBbewogICAgICBrZXk6ICdlbWl0JywKICAgICAgdmFsdWU6IGZ1bmN0aW9uIGVtaXQoZXZlbnROYW1lKSB7CiAgICAgICAgaWYgKCF0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0pIHJldHVybiB0aGlzOwoKICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldOwogICAgICAgIH0KCiAgICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlOwogICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvciA9IGZhbHNlOwogICAgICAgIHZhciBfaXRlcmF0b3JFcnJvciA9IHVuZGVmaW5lZDsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvciA9IHRoaXMuX19saXN0ZW5lcnNbZXZlbnROYW1lXVtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSAoX3N0ZXAgPSBfaXRlcmF0b3IubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWUpIHsKICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBfc3RlcC52YWx1ZTsKCiAgICAgICAgICAgIGhhbmRsZXIuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yID0gdHJ1ZTsKICAgICAgICAgIF9pdGVyYXRvckVycm9yID0gZXJyOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gJiYgX2l0ZXJhdG9yLnJldHVybikgewogICAgICAgICAgICAgIF9pdGVyYXRvci5yZXR1cm4oKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7CiAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogJ29uY2UnLAogICAgICB2YWx1ZTogZnVuY3Rpb24gb25jZShldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgICB2YXIgb25jZSA9IGZ1bmN0aW9uIG9uY2UoKSB7CiAgICAgICAgICBfdGhpcy5vZmYoZXZlbnROYW1lLCBvbmNlKTsKICAgICAgICAgIGhhbmRsZXIuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiB0aGlzLm9uKGV2ZW50TmFtZSwgb25jZSk7CiAgICAgIH0KICAgIH0sIHsKICAgICAga2V5OiAnb24nLAogICAgICB2YWx1ZTogZnVuY3Rpb24gb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7CiAgICAgICAgaWYgKCF0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0pIHRoaXMuX19saXN0ZW5lcnNbZXZlbnROYW1lXSA9IFtdOwoKICAgICAgICB0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0ucHVzaChoYW5kbGVyKTsKCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH0sIHsKICAgICAga2V5OiAnb2ZmJywKICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9mZihldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgICAgICBpZiAoaGFuZGxlcikgdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdID0gdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdLmZpbHRlcihmdW5jdGlvbiAoaCkgewogICAgICAgICAgcmV0dXJuIGggIT09IGhhbmRsZXI7CiAgICAgICAgfSk7ZWxzZSB0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBbXTsKCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH1dKTsKCiAgICByZXR1cm4gVGlueUVtaXR0ZXI7CiAgfSgpOwoKICB2YXIgdGlueUVtaXR0ZXIgPSBUaW55RW1pdHRlciQxOwoKICB2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTsKCiAgdmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoInZhbHVlIiBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTsKCiAgdmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICJzeW1ib2wiIDogdHlwZW9mIG9iajsgfTsKCiAgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9CgogIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQoKICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpID8gY2FsbCA6IHNlbGY7IH0KCiAgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gImZ1bmN0aW9uIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH0KCiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH0KCiAgdmFyIFRpbnlFbWl0dGVyID0gdGlueUVtaXR0ZXI7CgogIHZhciBNRVNTQUdFX1JFU1VMVCA9IDA7CiAgdmFyIE1FU1NBR0VfRVZFTlQgPSAxOwoKICB2YXIgUkVTVUxUX0VSUk9SID0gMDsKICB2YXIgUkVTVUxUX1NVQ0NFU1MgPSAxOwoKICB2YXIgREVGQVVMVF9IQU5ETEVSID0gJ21haW4nOwoKICB2YXIgaXNQcm9taXNlID0gZnVuY3Rpb24gaXNQcm9taXNlKG8pIHsKICAgIHJldHVybiAodHlwZW9mIG8gPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG8pKSA9PT0gJ29iamVjdCcgJiYgbyAhPT0gbnVsbCAmJiB0eXBlb2Ygby50aGVuID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvLmNhdGNoID09PSAnZnVuY3Rpb24nOwogIH07CgogIGZ1bmN0aW9uIFJlZ2lzdGVyUHJvbWlzZShmbikgewogICAgdmFyIGhhbmRsZXJzID0gX2RlZmluZVByb3BlcnR5KHt9LCBERUZBVUxUX0hBTkRMRVIsIGZuKTsKICAgIHZhciBzZW5kUG9zdE1lc3NhZ2UgPSBzZWxmLnBvc3RNZXNzYWdlLmJpbmQoc2VsZik7CgogICAgdmFyIHNlcnZlciA9IG5ldyAoZnVuY3Rpb24gKF9UaW55RW1pdHRlcikgewogICAgICBfaW5oZXJpdHMoV29ya2VyUmVnaXN0ZXIsIF9UaW55RW1pdHRlcik7CgogICAgICBmdW5jdGlvbiBXb3JrZXJSZWdpc3RlcigpIHsKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV29ya2VyUmVnaXN0ZXIpOwoKICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFdvcmtlclJlZ2lzdGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoV29ya2VyUmVnaXN0ZXIpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTsKICAgICAgfQoKICAgICAgX2NyZWF0ZUNsYXNzKFdvcmtlclJlZ2lzdGVyLCBbewogICAgICAgIGtleTogJ2VtaXQnLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbWl0KGV2ZW50TmFtZSkgewogICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CiAgICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAxICYmIGFyZ3NbMF0gaW5zdGFuY2VvZiBUcmFuc2ZlcmFibGVSZXNwb25zZSkgewogICAgICAgICAgICBzZW5kUG9zdE1lc3NhZ2UoeyBldmVudE5hbWU6IGV2ZW50TmFtZSwgYXJnczogYXJncyB9LCBhcmdzWzBdLnRyYW5zZmVyYWJsZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZW5kUG9zdE1lc3NhZ2UoeyBldmVudE5hbWU6IGV2ZW50TmFtZSwgYXJnczogYXJncyB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIGtleTogJ2VtaXRMb2NhbGx5JywKICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW1pdExvY2FsbHkoZXZlbnROYW1lKSB7CiAgICAgICAgICB2YXIgX2dldDI7CgogICAgICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgewogICAgICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdOwogICAgICAgICAgfQoKICAgICAgICAgIChfZ2V0MiA9IF9nZXQoV29ya2VyUmVnaXN0ZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoV29ya2VyUmVnaXN0ZXIucHJvdG90eXBlKSwgJ2VtaXQnLCB0aGlzKSkuY2FsbC5hcHBseShfZ2V0MiwgW3RoaXMsIGV2ZW50TmFtZV0uY29uY2F0KGFyZ3MpKTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBrZXk6ICdvcGVyYXRpb24nLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvcGVyYXRpb24obmFtZSwgaGFuZGxlcikgewogICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBoYW5kbGVyOwogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gV29ya2VyUmVnaXN0ZXI7CiAgICB9KFRpbnlFbWl0dGVyKSkoKTsKCiAgICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKG1lc3NhZ2VJZCwgcGF5bG9hZCwgaGFuZGxlck5hbWUpIHsKCiAgICAgIHZhciBvblN1Y2Nlc3MgPSBmdW5jdGlvbiBvblN1Y2Nlc3MocmVzdWx0KSB7CiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBUcmFuc2ZlcmFibGVSZXNwb25zZSkgewogICAgICAgICAgc2VuZFJlc3VsdChtZXNzYWdlSWQsIFJFU1VMVF9TVUNDRVNTLCByZXN1bHQucGF5bG9hZCwgcmVzdWx0LnRyYW5zZmVyYWJsZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbmRSZXN1bHQobWVzc2FnZUlkLCBSRVNVTFRfU1VDQ0VTUywgcmVzdWx0KTsKICAgICAgICB9CiAgICAgIH07CgogICAgICB2YXIgb25FcnJvciA9IGZ1bmN0aW9uIG9uRXJyb3IoZSkgewogICAgICAgIHNlbmRSZXN1bHQobWVzc2FnZUlkLCBSRVNVTFRfRVJST1IsIHsKICAgICAgICAgIG1lc3NhZ2U6IGUubWVzc2FnZSwKICAgICAgICAgIHN0YWNrOiBlLnN0YWNrCiAgICAgICAgfSk7CiAgICAgIH07CgogICAgICB0cnkgewogICAgICAgIHZhciByZXN1bHQgPSBydW5GbihtZXNzYWdlSWQsIHBheWxvYWQsIGhhbmRsZXJOYW1lKTsKICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHsKICAgICAgICAgIHJlc3VsdC50aGVuKG9uU3VjY2VzcykuY2F0Y2gob25FcnJvcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9uU3VjY2VzcyhyZXN1bHQpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIG9uRXJyb3IoZSk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIHJ1bkZuID0gZnVuY3Rpb24gcnVuRm4obWVzc2FnZUlkLCBwYXlsb2FkLCBoYW5kbGVyTmFtZSkgewogICAgICB2YXIgaGFuZGxlciA9IGhhbmRsZXJzW2hhbmRsZXJOYW1lIHx8IERFRkFVTFRfSEFORExFUl07CiAgICAgIGlmICghaGFuZGxlcikgdGhyb3cgbmV3IEVycm9yKCdOb3QgZm91bmQgaGFuZGxlciBmb3IgdGhpcyByZXF1ZXN0Jyk7CgogICAgICByZXR1cm4gaGFuZGxlcihwYXlsb2FkLCBzZW5kRXZlbnQuYmluZChudWxsLCBtZXNzYWdlSWQpKTsKICAgIH07CgogICAgdmFyIHNlbmRSZXN1bHQgPSBmdW5jdGlvbiBzZW5kUmVzdWx0KG1lc3NhZ2VJZCwgc3VjY2VzcywgcGF5bG9hZCkgewogICAgICB2YXIgdHJhbnNmZXJhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBbXTsKCiAgICAgIHNlbmRQb3N0TWVzc2FnZShbTUVTU0FHRV9SRVNVTFQsIG1lc3NhZ2VJZCwgc3VjY2VzcywgcGF5bG9hZF0sIHRyYW5zZmVyYWJsZSk7CiAgICB9OwoKICAgIHZhciBzZW5kRXZlbnQgPSBmdW5jdGlvbiBzZW5kRXZlbnQobWVzc2FnZUlkLCBldmVudE5hbWUsIHBheWxvYWQpIHsKICAgICAgaWYgKCFldmVudE5hbWUpIHRocm93IG5ldyBFcnJvcignZXZlbnROYW1lIGlzIHJlcXVpcmVkJyk7CgogICAgICBpZiAodHlwZW9mIGV2ZW50TmFtZSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBFcnJvcignZXZlbnROYW1lIHNob3VsZCBiZSBzdHJpbmcnKTsKCiAgICAgIHNlbmRQb3N0TWVzc2FnZShbTUVTU0FHRV9FVkVOVCwgbWVzc2FnZUlkLCBldmVudE5hbWUsIHBheWxvYWRdKTsKICAgIH07CgogICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKF9yZWYpIHsKICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7CgogICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgewogICAgICAgIHJ1bi5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShkYXRhKSk7CiAgICAgIH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLmV2ZW50TmFtZSkgewogICAgICAgIHNlcnZlci5lbWl0TG9jYWxseS5hcHBseShzZXJ2ZXIsIFtkYXRhLmV2ZW50TmFtZV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShkYXRhLmFyZ3MpKSk7CiAgICAgIH0KICAgIH0pOwoKICAgIHJldHVybiBzZXJ2ZXI7CiAgfQoKICB2YXIgVHJhbnNmZXJhYmxlUmVzcG9uc2UgPSBmdW5jdGlvbiBUcmFuc2ZlcmFibGVSZXNwb25zZShwYXlsb2FkLCB0cmFuc2ZlcmFibGUpIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2ZlcmFibGVSZXNwb25zZSk7CgogICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZDsKICAgIHRoaXMudHJhbnNmZXJhYmxlID0gdHJhbnNmZXJhYmxlOwogIH07CgogIHJlZ2lzdGVyLmV4cG9ydHMgPSBSZWdpc3RlclByb21pc2U7CiAgcmVnaXN0ZXIuZXhwb3J0cy5UcmFuc2ZlcmFibGVSZXNwb25zZSA9IFRyYW5zZmVyYWJsZVJlc3BvbnNlOwoKICB2YXIgcmVnaXN0ZXJXZWJ3b3JrZXIgPSByZWdpc3Rlci5leHBvcnRzOwoKICAvKiBlc2xpbnQtZGlzYWJsZSAqLwogIC8vIHByZXR0aWVyLWlnbm9yZQoKICByZWdpc3RlcldlYndvcmtlcihmdW5jdGlvbiAobWVzc2FnZSwgZW1pdCkgewogICAgdmFyIGFycmF5ID0gbWVzc2FnZS5hcnJheTsKICAgIHZhciBtaW4gPSBtZXNzYWdlLm1pbjsKICAgIHZhciBtYXggPSBtZXNzYWdlLm1heDsKICAgIHZhciBvZmZzZXQgPSBtZXNzYWdlLmNvbXBvbmVudCB8fCAwOwogICAgdmFyIHN0ZXAgPSBtZXNzYWdlLm51bWJlck9mQ29tcG9uZW50cyB8fCAxOwogICAgdmFyIG51bWJlck9mQmlucyA9IG1lc3NhZ2UubnVtYmVyT2ZCaW5zOwogICAgdmFyIGRlbHRhID0gbWF4IC0gbWluOwogICAgdmFyIGhpc3RvZ3JhbSA9IG5ldyBGbG9hdDMyQXJyYXkobnVtYmVyT2ZCaW5zKTsKICAgIGhpc3RvZ3JhbS5maWxsKDApOwogICAgdmFyIGxlbiA9IGFycmF5Lmxlbmd0aDsKCiAgICBmb3IgKHZhciBpID0gb2Zmc2V0OyBpIDwgbGVuOyBpICs9IHN0ZXApIHsKICAgICAgdmFyIGlkeCA9IE1hdGguZmxvb3IoKG51bWJlck9mQmlucyAtIDEpICogKE51bWJlcihhcnJheVtpXSkgLSBtaW4pIC8gZGVsdGEpOwogICAgICBoaXN0b2dyYW1baWR4XSArPSAxOwogICAgfQoKICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IHJlZ2lzdGVyV2Vid29ya2VyLlRyYW5zZmVyYWJsZVJlc3BvbnNlKGhpc3RvZ3JhbSwgW2hpc3RvZ3JhbS5idWZmZXJdKSk7CiAgfSk7Cgp9KCkpOwoK', null, false);
4
4
  /* eslint-enable */
5
5
 
6
6
  export { WorkerFactory as W };