@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.
- package/Common/Core/Base64.js +1 -1
- package/Common/Core/CellArray.js +2 -3
- package/Common/Core/ClassHierarchy.js +1 -1
- package/Common/Core/DataArray/Constants.js +1 -2
- package/Common/Core/DataArray.js +3 -4
- package/Common/Core/Endian.js +1 -2
- package/Common/Core/ImageHelper.js +1 -1
- package/Common/Core/LookupTable.js +1 -2
- package/Common/Core/MatrixBuilder.js +1 -1
- package/Common/Core/Points.js +1 -2
- package/Common/Core/PriorityQueue.js +1 -2
- package/Common/Core/ProgressHandler.js +1 -2
- package/Common/Core/ScalarsToColors/Constants.js +1 -2
- package/Common/Core/ScalarsToColors.js +2 -3
- package/Common/Core/StringArray.js +1 -2
- package/Common/Core/URLExtract.js +1 -1
- package/Common/Core/VariantArray.js +1 -2
- package/Common/Core.js +1 -1
- package/Common/DataModel/BoundingBox.js +2 -3
- package/Common/DataModel/Box.js +2 -3
- package/Common/DataModel/CardinalSpline1D.js +1 -2
- package/Common/DataModel/Cell.js +1 -2
- package/Common/DataModel/CellLinks.js +26 -27
- package/Common/DataModel/CellTypes/Constants.js +1 -2
- package/Common/DataModel/CellTypes.js +2 -3
- package/Common/DataModel/Cone.js +1 -2
- package/Common/DataModel/Cylinder.js +2 -3
- package/Common/DataModel/DataSet/Constants.js +1 -2
- package/Common/DataModel/DataSet.js +2 -3
- package/Common/DataModel/DataSetAttributes/Constants.js +1 -2
- package/Common/DataModel/DataSetAttributes/FieldData.js +1 -2
- package/Common/DataModel/DataSetAttributes.js +2 -3
- package/Common/DataModel/ITKHelper.js +1 -1
- package/Common/DataModel/ImageData.js +1 -2
- package/Common/DataModel/ImplicitBoolean/Constants.js +1 -2
- package/Common/DataModel/ImplicitBoolean.js +2 -3
- package/Common/DataModel/KochanekSpline1D.js +1 -2
- package/Common/DataModel/Line/Constants.js +1 -2
- package/Common/DataModel/Line.js +2 -3
- package/Common/DataModel/Molecule.js +1 -2
- package/Common/DataModel/PiecewiseFunction.js +1 -2
- package/Common/DataModel/Plane.js +2 -3
- package/Common/DataModel/PointSet.js +1 -2
- package/Common/DataModel/PolyData/Constants.js +1 -2
- package/Common/DataModel/PolyData.js +1 -2
- package/Common/DataModel/Polygon.js +1 -2
- package/Common/DataModel/SelectionNode/Constants.js +1 -2
- package/Common/DataModel/SelectionNode.js +2 -3
- package/Common/DataModel/Sphere.js +2 -3
- package/Common/DataModel/Spline1D.js +1 -2
- package/Common/DataModel/Spline3D/Constants.js +1 -2
- package/Common/DataModel/Spline3D.js +1 -2
- package/Common/DataModel/StructuredData/Constants.js +1 -2
- package/Common/DataModel/StructuredData.js +2 -3
- package/Common/DataModel/Triangle.js +2 -3
- package/Common/DataModel.js +1 -1
- package/Common/System/MobileVR/headsets.js +1 -1
- package/Common/System/MobileVR.js +1 -1
- package/Common/System/TimerLog.js +1 -2
- package/Common/System.js +1 -1
- package/Common/Transform/LandmarkTransform/Constants.js +1 -2
- package/Common/Transform/LandmarkTransform.js +2 -3
- package/Common/Transform.js +1 -1
- package/Common/index.js +1 -1
- package/Filters/Core/Cutter.js +3 -4
- package/Filters/Core.js +1 -1
- package/Filters/Cornerstone/ImageDataToCornerstoneImage.js +1 -2
- package/Filters/Cornerstone.js +1 -1
- package/Filters/General/AppendPolyData.js +1 -2
- package/Filters/General/Calculator.js +2 -3
- package/Filters/General/ClosedPolyLineToSurfaceFilter.js +1 -2
- package/Filters/General/ImageCropFilter.js +1 -2
- package/Filters/General/ImageMarchingCubes/caseTable.js +1 -1
- package/Filters/General/ImageMarchingCubes.js +1 -2
- package/Filters/General/ImageMarchingSquares/caseTable.js +1 -1
- package/Filters/General/ImageMarchingSquares.js +1 -2
- package/Filters/General/ImageOutlineFilter.js +1 -2
- package/Filters/General/ImageSliceFilter.js +1 -2
- package/Filters/General/ImageStreamline.js +1 -2
- package/Filters/General/LineFilter.js +1 -2
- package/Filters/General/MoleculeToRepresentation.js +1 -2
- package/Filters/General/OutlineFilter.js +1 -2
- package/Filters/General/PaintFilter/PaintFilter.worker.js +3 -3
- package/Filters/General/PaintFilter.js +3 -4
- package/Filters/General/ScalarToRGBA.js +1 -2
- package/Filters/General/TriangleFilter.js +1 -2
- package/Filters/General/TubeFilter/Constants.js +1 -2
- package/Filters/General/TubeFilter.js +1 -2
- package/Filters/General/WarpScalar.js +1 -2
- package/Filters/General/WindowedSincPolyDataFilter.js +43 -44
- package/Filters/General.js +1 -1
- package/Filters/Sources/Arrow2DSource/Constants.js +1 -2
- package/Filters/Sources/Arrow2DSource.js +2 -3
- package/Filters/Sources/ArrowSource.js +1 -2
- package/Filters/Sources/CircleSource.js +2 -3
- package/Filters/Sources/ConcentricCylinderSource.js +1 -2
- package/Filters/Sources/ConeSource.js +1 -2
- package/Filters/Sources/CubeSource.js +1 -2
- package/Filters/Sources/Cursor3D.js +12 -13
- package/Filters/Sources/CylinderSource.js +1 -2
- package/Filters/Sources/ImageGridSource.js +1 -2
- package/Filters/Sources/LineSource.js +1 -2
- package/Filters/Sources/PlaneSource.js +1 -2
- package/Filters/Sources/PointSource.js +1 -2
- package/Filters/Sources/RTAnalyticSource.js +1 -2
- package/Filters/Sources/SLICSource.js +1 -2
- package/Filters/Sources/SphereSource.js +1 -2
- package/Filters/Sources/ViewFinderSource.js +1 -2
- package/Filters/Sources.js +1 -1
- package/Filters/Texture/TextureMapToPlane.js +1 -2
- package/Filters/Texture/TextureMapToSphere.js +1 -2
- package/Filters/Texture.js +1 -1
- package/Filters/index.js +1 -1
- package/IO/Core/BinaryHelper.js +1 -1
- package/IO/Core/DataAccessHelper/HtmlDataAccessHelper.js +1 -1
- package/IO/Core/DataAccessHelper/HttpDataAccessHelper.js +1 -1
- package/IO/Core/DataAccessHelper/JSZipDataAccessHelper.js +3 -3
- package/IO/Core/DataAccessHelper/LiteHttpDataAccessHelper.js +1 -1
- package/IO/Core/DataAccessHelper.js +1 -2
- package/IO/Core/HttpDataSetReader.js +1 -2
- package/IO/Core/HttpDataSetSeriesReader.js +1 -2
- package/IO/Core/HttpSceneLoader.js +2 -3
- package/IO/Core/ImageStream/DefaultProtocol.js +1 -1
- package/IO/Core/ImageStream/ViewStream.js +1 -2
- package/IO/Core/ImageStream.js +1 -2
- package/IO/Core/ResourceLoader.js +1 -2
- package/IO/Core/Serializer/ArraySerializer.js +1 -2
- package/IO/Core/Serializer/FieldDataSerializer.js +1 -1
- package/IO/Core/Serializer/ImageDataSerializer.js +1 -1
- package/IO/Core/Serializer/PolyDataSerializer.js +1 -1
- package/IO/Core/Serializer.js +1 -1
- package/IO/Core/WSLinkClient.js +1 -2
- package/IO/Core/ZipMultiDataSetReader.js +3 -4
- package/IO/Core/ZipMultiDataSetWriter.js +3 -4
- package/IO/Core.js +1 -1
- package/IO/Geometry/DracoReader.js +1 -2
- package/IO/Geometry/PLYReader.js +1 -2
- package/IO/Geometry/STLReader.js +1 -2
- package/IO/Geometry/STLWriter/Constants.js +1 -2
- package/IO/Geometry/STLWriter.js +2 -3
- package/IO/Geometry.js +1 -1
- package/IO/Legacy/LegacyAsciiParser.js +1 -1
- package/IO/Legacy/PolyDataReader.js +1 -2
- package/IO/Legacy.js +1 -1
- package/IO/Misc/ElevationReader.js +1 -2
- package/IO/Misc/HttpDataSetLODsLoader.js +1 -2
- package/IO/Misc/ITKImageReader.js +1 -2
- package/IO/Misc/ITKPolyDataReader.js +1 -2
- package/IO/Misc/JSONNucleoReader.js +1 -2
- package/IO/Misc/JSONReader.js +1 -2
- package/IO/Misc/MTLReader.js +2 -3
- package/IO/Misc/OBJReader.js +1 -2
- package/IO/Misc/PDBReader.js +1 -2
- package/IO/Misc/SkyboxReader.js +3 -4
- package/IO/Misc.js +1 -1
- package/IO/XML/XMLImageDataReader.js +1 -2
- package/IO/XML/XMLImageDataWriter.js +2 -3
- package/IO/XML/XMLPolyDataReader.js +1 -2
- package/IO/XML/XMLPolyDataWriter.js +2 -3
- package/IO/XML/XMLReader.js +1 -2
- package/IO/XML/XMLWriter/Constants.js +1 -2
- package/IO/XML/XMLWriter.js +4 -4
- package/IO/XML.js +1 -1
- package/IO/index.js +1 -1
- package/Imaging/Core/AbstractImageInterpolator/Constants.js +1 -2
- package/Imaging/Core/AbstractImageInterpolator/InterpolationInfo.js +2 -3
- package/Imaging/Core/AbstractImageInterpolator.js +2 -3
- package/Imaging/Core/ImageInterpolator.js +2 -3
- package/Imaging/Core/ImagePointDataIterator.js +1 -2
- package/Imaging/Core/ImageReslice/Constants.js +1 -2
- package/Imaging/Core/ImageReslice.js +2 -3
- package/Imaging/Core.js +1 -1
- package/Imaging/Hybrid/SampleFunction.js +2 -3
- package/Imaging/Hybrid.js +1 -1
- package/Imaging/index.js +1 -1
- package/Interaction/Animations/TimeStepBasedAnimationHandler.js +2 -3
- package/Interaction/Manipulators/CompositeCameraManipulator.js +1 -2
- package/Interaction/Manipulators/CompositeGestureManipulator.js +1 -2
- package/Interaction/Manipulators/CompositeKeyboardManipulator.js +1 -2
- package/Interaction/Manipulators/CompositeMouseManipulator.js +1 -2
- package/Interaction/Manipulators/CompositeVRManipulator.js +1 -2
- package/Interaction/Manipulators/GestureCameraManipulator.js +1 -2
- package/Interaction/Manipulators/KeyboardCameraManipulator.js +1 -2
- package/Interaction/Manipulators/MouseBoxSelectorManipulator.js +3 -4
- package/Interaction/Manipulators/MouseCameraAxisRotateManipulator.js +1 -2
- package/Interaction/Manipulators/MouseCameraSliceManipulator.js +1 -2
- package/Interaction/Manipulators/MouseCameraTrackballFirstPersonManipulator.js +1 -2
- package/Interaction/Manipulators/MouseCameraTrackballMultiRotateManipulator.js +1 -2
- package/Interaction/Manipulators/MouseCameraTrackballPanManipulator.js +1 -2
- package/Interaction/Manipulators/MouseCameraTrackballRollManipulator.js +1 -2
- package/Interaction/Manipulators/MouseCameraTrackballRotateManipulator.js +1 -2
- package/Interaction/Manipulators/MouseCameraTrackballZoomManipulator.js +1 -2
- package/Interaction/Manipulators/MouseCameraTrackballZoomToMouseManipulator.js +1 -2
- package/Interaction/Manipulators/MouseCameraUnicamManipulator.js +1 -2
- package/Interaction/Manipulators/MouseCameraUnicamRotateManipulator.js +1 -2
- package/Interaction/Manipulators/MouseRangeManipulator.js +1 -2
- package/Interaction/Manipulators/VRButtonPanManipulator.js +1 -2
- package/Interaction/Manipulators.js +1 -1
- package/Interaction/Misc/DeviceOrientationToCamera.js +1 -1
- package/Interaction/Misc.js +1 -1
- package/Interaction/Style/InteractorStyleImage.js +1 -2
- package/Interaction/Style/InteractorStyleMPRSlice.js +1 -2
- package/Interaction/Style/InteractorStyleManipulator/Presets.js +1 -1
- package/Interaction/Style/InteractorStyleManipulator.js +2 -3
- package/Interaction/Style/InteractorStyleRemoteMouse.js +2 -3
- package/Interaction/Style/InteractorStyleTrackballCamera.js +1 -2
- package/Interaction/Style/InteractorStyleUnicam.js +1 -2
- package/Interaction/Style.js +1 -1
- package/Interaction/UI/CornerAnnotation.js +1 -2
- package/Interaction/UI/FPSMonitor.js +2 -3
- package/Interaction/UI/Icons.js +1 -1
- package/Interaction/UI/Slider/Constants.js +1 -2
- package/Interaction/UI/Slider.js +2 -3
- package/Interaction/UI/VolumeController.js +1 -2
- package/Interaction/UI.js +1 -1
- package/Interaction/Widgets/AbstractWidget.js +2 -3
- package/Interaction/Widgets/DistanceRepresentation.js +2 -3
- package/Interaction/Widgets/DistanceWidget.js +2 -3
- package/Interaction/Widgets/HandleRepresentation/Constants.js +1 -2
- package/Interaction/Widgets/HandleRepresentation.js +2 -3
- package/Interaction/Widgets/HandleWidget/Constants.js +1 -2
- package/Interaction/Widgets/HandleWidget.js +2 -3
- package/Interaction/Widgets/ImageCroppingRegionsRepresentation.js +1 -2
- package/Interaction/Widgets/ImageCroppingRegionsWidget/Constants.js +1 -1
- package/Interaction/Widgets/ImageCroppingRegionsWidget.js +2 -3
- package/Interaction/Widgets/LabelRepresentation/Constants.js +1 -2
- package/Interaction/Widgets/LabelRepresentation.js +3 -4
- package/Interaction/Widgets/LabelWidget.js +2 -3
- package/Interaction/Widgets/LineRepresentation/Constants.js +1 -2
- package/Interaction/Widgets/LineRepresentation.js +2 -3
- package/Interaction/Widgets/LineWidget/Constants.js +1 -2
- package/Interaction/Widgets/LineWidget.js +2 -3
- package/Interaction/Widgets/OrientationMarkerWidget/Constants.js +1 -1
- package/Interaction/Widgets/OrientationMarkerWidget.js +2 -3
- package/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +3 -3
- package/Interaction/Widgets/PiecewiseGaussianWidget.js +15 -16
- package/Interaction/Widgets/PointPlacer.js +1 -2
- package/Interaction/Widgets/ResliceCursor/ResliceCursor/Constants.js +1 -2
- package/Interaction/Widgets/ResliceCursor/ResliceCursor.js +2 -3
- package/Interaction/Widgets/ResliceCursor/ResliceCursorActor/Constants.js +1 -2
- package/Interaction/Widgets/ResliceCursor/ResliceCursorActor.js +2 -3
- package/Interaction/Widgets/ResliceCursor/ResliceCursorLineRepresentation.js +1 -2
- package/Interaction/Widgets/ResliceCursor/ResliceCursorPolyDataAlgorithm.js +2 -3
- package/Interaction/Widgets/ResliceCursor/ResliceCursorRepresentation.js +1 -2
- package/Interaction/Widgets/ResliceCursor/ResliceCursorWidget/Constants.js +1 -2
- package/Interaction/Widgets/ResliceCursor/ResliceCursorWidget.js +2 -3
- package/Interaction/Widgets/SphereHandleRepresentation.js +2 -3
- package/Interaction/Widgets/WidgetRepresentation.js +1 -2
- package/Interaction/Widgets.js +1 -1
- package/Interaction/index.js +1 -1
- package/Proxy/Animation/AbstractAnimationProxy.js +1 -2
- package/Proxy/Animation/AnimationProxyManager.js +1 -2
- package/Proxy/Animation/TimeStepBasedAnimationHandlerProxy.js +1 -2
- package/Proxy/Core/AbstractRepresentationProxy.js +1 -1
- package/Proxy/Core/LookupTableProxy/Constants.js +1 -1
- package/Proxy/Core/LookupTableProxy.js +1 -2
- package/Proxy/Core/PiecewiseFunctionProxy/Constants.js +1 -1
- package/Proxy/Core/PiecewiseFunctionProxy.js +2 -3
- package/Proxy/Core/ProxyManager/core.js +2 -2
- package/Proxy/Core/ProxyManager/properties.js +2 -2
- package/Proxy/Core/ProxyManager/state.js +2 -2
- package/Proxy/Core/ProxyManager/view.js +1 -1
- package/Proxy/Core/ProxyManager.js +1 -2
- package/Proxy/Core/SourceProxy.js +1 -2
- package/Proxy/Core/View2DProxy.js +1 -2
- package/Proxy/Core/ViewProxy.js +4 -4
- package/Proxy/Core.js +1 -1
- package/Proxy/Representations/GeometryRepresentationProxy.js +1 -2
- package/Proxy/Representations/GlyphRepresentationProxy.js +1 -2
- package/Proxy/Representations/MoleculeRepresentationProxy.js +1 -2
- package/Proxy/Representations/SkyboxRepresentationProxy.js +1 -2
- package/Proxy/Representations/SliceRepresentationProxy.js +2 -3
- package/Proxy/Representations/SlicedGeometryRepresentationProxy.js +1 -2
- package/Proxy/Representations/VolumeRepresentationProxy.js +1 -2
- package/Proxy/Representations.js +1 -1
- package/Proxy/index.js +1 -1
- package/Rendering/Core/AbstractMapper.js +1 -2
- package/Rendering/Core/AbstractMapper3D.js +1 -2
- package/Rendering/Core/AbstractPicker.js +1 -2
- package/Rendering/Core/Actor.js +2 -3
- package/Rendering/Core/Actor2D.js +1 -2
- package/Rendering/Core/AnnotatedCubeActor/Presets.js +1 -1
- package/Rendering/Core/AnnotatedCubeActor.js +2 -3
- package/Rendering/Core/AxesActor.js +2 -3
- package/Rendering/Core/Camera.js +1 -2
- package/Rendering/Core/CellPicker.js +2 -3
- package/Rendering/Core/ColorTransferFunction/ColorMaps.js +1 -1
- package/Rendering/Core/ColorTransferFunction/ColorMapsLite.js +1 -1
- package/Rendering/Core/ColorTransferFunction/Constants.js +1 -2
- package/Rendering/Core/ColorTransferFunction.js +2 -3
- package/Rendering/Core/Coordinate/Constants.js +1 -2
- package/Rendering/Core/Coordinate.js +2 -3
- package/Rendering/Core/CubeAxesActor.js +2 -3
- package/Rendering/Core/Follower.js +2 -3
- package/Rendering/Core/Glyph3DMapper/Constants.js +1 -2
- package/Rendering/Core/Glyph3DMapper.js +2 -3
- package/Rendering/Core/HardwareSelector.js +1 -2
- package/Rendering/Core/ImageMapper/Constants.js +1 -2
- package/Rendering/Core/ImageMapper.js +2 -3
- package/Rendering/Core/ImageProperty/Constants.js +1 -2
- package/Rendering/Core/ImageProperty.js +1 -2
- package/Rendering/Core/ImageSlice.js +1 -2
- package/Rendering/Core/InteractorObserver.js +2 -3
- package/Rendering/Core/InteractorStyle/Constants.js +1 -2
- package/Rendering/Core/InteractorStyle.js +2 -3
- package/Rendering/Core/Light.js +1 -2
- package/Rendering/Core/Mapper/CoincidentTopologyHelper.js +1 -2
- package/Rendering/Core/Mapper/Constants.js +1 -2
- package/Rendering/Core/Mapper/Static.js +1 -2
- package/Rendering/Core/Mapper.js +2 -3
- package/Rendering/Core/Picker.js +2 -3
- package/Rendering/Core/PixelSpaceCallbackMapper.js +1 -2
- package/Rendering/Core/PointPicker.js +1 -9
- package/Rendering/Core/Prop.js +1 -2
- package/Rendering/Core/Prop3D.js +1 -2
- package/Rendering/Core/Property/Constants.js +1 -2
- package/Rendering/Core/Property.js +2 -3
- package/Rendering/Core/Property2D.js +1 -2
- package/Rendering/Core/RenderWindow.js +1 -2
- package/Rendering/Core/RenderWindowInteractor/Constants.js +1 -2
- package/Rendering/Core/RenderWindowInteractor.js +2 -3
- package/Rendering/Core/Renderer.js +2 -3
- package/Rendering/Core/ScalarBarActor.js +2 -3
- package/Rendering/Core/Skybox.js +1 -2
- package/Rendering/Core/SphereMapper.js +1 -2
- package/Rendering/Core/StickMapper.js +1 -2
- package/Rendering/Core/SurfaceLICInterface/Constants.js +1 -2
- package/Rendering/Core/SurfaceLICInterface.js +1 -2
- package/Rendering/Core/SurfaceLICMapper.js +1 -2
- package/Rendering/Core/Texture.js +1 -2
- package/Rendering/Core/Viewport.js +1 -2
- package/Rendering/Core/Volume.js +1 -2
- package/Rendering/Core/VolumeMapper/Constants.js +1 -2
- package/Rendering/Core/VolumeMapper.js +1 -2
- package/Rendering/Core/VolumeProperty/Constants.js +1 -2
- package/Rendering/Core/VolumeProperty.js +2 -3
- package/Rendering/Core.js +2 -2
- package/Rendering/Misc/CanvasView.js +1 -2
- package/Rendering/Misc/FullScreenRenderWindow.js +1 -2
- package/Rendering/Misc/GenericRenderWindow.js +1 -2
- package/Rendering/Misc/RemoteView.js +1 -2
- package/Rendering/Misc/RenderWindowWithControlBar.js +2 -3
- package/Rendering/Misc/SynchronizableRenderWindow/vtkObjectManager.js +2 -2
- package/Rendering/Misc/SynchronizableRenderWindow.js +3 -4
- package/Rendering/Misc/TextureLODsDownloader.js +1 -2
- package/Rendering/Misc.js +1 -1
- package/Rendering/OpenGL/Actor.js +2 -3
- package/Rendering/OpenGL/Actor2D.js +2 -3
- package/Rendering/OpenGL/BufferObject/Constants.js +1 -2
- package/Rendering/OpenGL/BufferObject.js +2 -3
- package/Rendering/OpenGL/Camera.js +2 -3
- package/Rendering/OpenGL/CellArrayBufferObject.js +2 -4
- package/Rendering/OpenGL/Convolution2DPass.js +1 -2
- package/Rendering/OpenGL/ForwardPass.js +1 -2
- package/Rendering/OpenGL/Framebuffer.js +2 -3
- package/Rendering/OpenGL/Glyph3DMapper.js +3 -4
- package/Rendering/OpenGL/HardwareSelector/Constants.js +1 -2
- package/Rendering/OpenGL/HardwareSelector.js +2 -3
- package/Rendering/OpenGL/Helper.js +1 -2
- package/Rendering/OpenGL/ImageMapper.js +2 -3
- package/Rendering/OpenGL/ImageSlice.js +2 -3
- package/Rendering/OpenGL/PixelSpaceCallbackMapper.js +1 -2
- package/Rendering/OpenGL/PolyDataMapper.js +2 -3
- package/Rendering/OpenGL/RadialDistortionPass.js +1 -2
- package/Rendering/OpenGL/RenderWindow.js +1 -2
- package/Rendering/OpenGL/Renderer.js +2 -3
- package/Rendering/OpenGL/ReplacementShaderMapper.js +1 -1
- package/Rendering/OpenGL/Shader.js +1 -2
- package/Rendering/OpenGL/ShaderCache.js +1 -2
- package/Rendering/OpenGL/ShaderProgram.js +1 -1
- package/Rendering/OpenGL/Skybox.js +2 -3
- package/Rendering/OpenGL/SphereMapper.js +2 -3
- package/Rendering/OpenGL/StickMapper.js +2 -3
- package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D/pingpong.js +1 -2
- package/Rendering/OpenGL/SurfaceLIC/LineIntegralConvolution2D.js +1 -2
- package/Rendering/OpenGL/SurfaceLIC/SurfaceLICInterface.js +1 -2
- package/Rendering/OpenGL/SurfaceLIC/SurfaceLICMapper.js +3 -4
- package/Rendering/OpenGL/SurfaceLIC.js +1 -1
- package/Rendering/OpenGL/Texture/Constants.js +1 -2
- package/Rendering/OpenGL/Texture.js +3 -4
- package/Rendering/OpenGL/TextureUnitManager.js +1 -2
- package/Rendering/OpenGL/VertexArrayObject.js +1 -2
- package/Rendering/OpenGL/ViewNodeFactory.js +1 -2
- package/Rendering/OpenGL/Volume.js +2 -3
- package/Rendering/OpenGL/VolumeMapper.js +3 -4
- package/Rendering/OpenGL.js +1 -1
- package/Rendering/SceneGraph/RenderPass.js +1 -2
- package/Rendering/SceneGraph/RenderWindowViewNode.js +1 -2
- package/Rendering/SceneGraph/ViewNode.js +1 -1
- package/Rendering/SceneGraph/ViewNodeFactory.js +1 -2
- package/Rendering/SceneGraph.js +1 -1
- package/Rendering/WebGPU/Actor.js +1 -2
- package/Rendering/WebGPU/BindGroup.js +1 -2
- package/Rendering/WebGPU/Buffer.js +2 -3
- package/Rendering/WebGPU/BufferManager/Constants.js +1 -2
- package/Rendering/WebGPU/BufferManager.js +3 -4
- package/Rendering/WebGPU/Camera.js +1 -2
- package/Rendering/WebGPU/Device.js +2 -3
- package/Rendering/WebGPU/ForwardPass.js +1 -2
- package/Rendering/WebGPU/FullScreenQuad.js +1 -2
- package/Rendering/WebGPU/Glyph3DMapper.js +3 -4
- package/Rendering/WebGPU/HardwareSelectionPass.js +1 -2
- package/Rendering/WebGPU/HardwareSelector.js +1 -2
- package/Rendering/WebGPU/MapperHelper.js +1 -2
- package/Rendering/WebGPU/OpaquePass.js +2 -4
- package/Rendering/WebGPU/OrderIndependentTranslucentPass.js +1 -2
- package/Rendering/WebGPU/Pipeline.js +2 -3
- package/Rendering/WebGPU/PixelSpaceCallbackMapper.js +1 -2
- package/Rendering/WebGPU/PolyDataMapper.js +3 -4
- package/Rendering/WebGPU/RenderEncoder.js +2 -3
- package/Rendering/WebGPU/RenderWindow.js +11 -3
- package/Rendering/WebGPU/Renderer.js +2 -3
- package/Rendering/WebGPU/Sampler.js +1 -2
- package/Rendering/WebGPU/ShaderCache.js +1 -2
- package/Rendering/WebGPU/ShaderDescription.js +1 -2
- package/Rendering/WebGPU/ShaderModule.js +1 -1
- package/Rendering/WebGPU/SphereMapper.js +1 -2
- package/Rendering/WebGPU/StickMapper.js +1 -2
- package/Rendering/WebGPU/StorageBuffer.js +1 -2
- package/Rendering/WebGPU/Texture.js +2 -3
- package/Rendering/WebGPU/TextureManager.js +24 -7
- package/Rendering/WebGPU/TextureView.js +19 -4
- package/Rendering/WebGPU/Types.js +83 -42
- package/Rendering/WebGPU/UniformBuffer.js +1 -2
- package/Rendering/WebGPU/VertexInput.js +2 -3
- package/Rendering/WebGPU/ViewNodeFactory.js +1 -2
- package/Rendering/WebGPU/Volume.js +1 -2
- package/Rendering/WebGPU/VolumePass.js +2 -3
- package/Rendering/WebGPU/VolumePassFSQ.js +4 -4
- package/Rendering/WebGPU.js +1 -1
- package/Rendering/index.js +1 -1
- package/ThirdParty/index.js +2 -2
- package/Utilities/DataGenerator/convert-cli.js +10 -8
- package/Utilities/ExampleRunner/example-runner-cli.js +2 -1
- package/Utilities/ExampleRunner/template-config.js +8 -6
- package/Utilities/TestResults/TESTS-Chrome_Headless_93.0.4577.63_(Linux_x86_64).xml +1058 -1058
- package/Utilities/XMLConverter/xml2json-cli.js +5 -4
- package/Widgets/Core/AbstractWidget/Constants.js +1 -2
- package/Widgets/Core/AbstractWidget.js +1 -2
- package/Widgets/Core/AbstractWidgetFactory.js +2 -3
- package/Widgets/Core/StateBuilder/boundsMixin.js +1 -2
- package/Widgets/Core/StateBuilder/colorMixin.js +1 -2
- package/Widgets/Core/StateBuilder/cornerMixin.js +1 -2
- package/Widgets/Core/StateBuilder/directionMixin.js +1 -2
- package/Widgets/Core/StateBuilder/manipulatorMixin.js +1 -2
- package/Widgets/Core/StateBuilder/nameMixin.js +1 -2
- package/Widgets/Core/StateBuilder/orientationMixin.js +1 -2
- package/Widgets/Core/StateBuilder/originMixin.js +1 -2
- package/Widgets/Core/StateBuilder/scale1Mixin.js +1 -2
- package/Widgets/Core/StateBuilder/scale3Mixin.js +1 -2
- package/Widgets/Core/StateBuilder/shapeMixin.js +1 -2
- package/Widgets/Core/StateBuilder/textMixin.js +1 -2
- package/Widgets/Core/StateBuilder/visibleMixin.js +1 -2
- package/Widgets/Core/StateBuilder.js +1 -2
- package/Widgets/Core/WidgetManager/Constants.js +1 -2
- package/Widgets/Core/WidgetManager.js +1 -2
- package/Widgets/Core/WidgetState.js +1 -2
- package/Widgets/Core.js +1 -1
- package/Widgets/Manipulators/LineManipulator.js +1 -2
- package/Widgets/Manipulators/PlaneManipulator.js +1 -2
- package/Widgets/Manipulators/TrackballManipulator.js +1 -2
- package/Widgets/Manipulators.js +1 -1
- package/Widgets/Representations/ArrowHandleRepresentation.js +2 -3
- package/Widgets/Representations/CircleContextRepresentation.js +1 -2
- package/Widgets/Representations/ContextRepresentation.js +2 -3
- package/Widgets/Representations/ConvexFaceContextRepresentation.js +1 -2
- package/Widgets/Representations/CroppingOutlineRepresentation.js +1 -2
- package/Widgets/Representations/CubeHandleRepresentation.js +1 -2
- package/Widgets/Representations/HandleRepresentation.js +2 -3
- package/Widgets/Representations/ImplicitPlaneRepresentation.js +1 -2
- package/Widgets/Representations/OutlineContextRepresentation.js +1 -2
- package/Widgets/Representations/PolyLineRepresentation.js +2 -3
- package/Widgets/Representations/RectangleContextRepresentation.js +1 -2
- package/Widgets/Representations/ResliceCursorContextRepresentation.js +2 -3
- package/Widgets/Representations/SphereHandleRepresentation.js +1 -2
- package/Widgets/Representations/SplineContextRepresentation.js +1 -2
- package/Widgets/Representations/WidgetRepresentation/Constants.js +1 -2
- package/Widgets/Representations/WidgetRepresentation.js +1 -2
- package/Widgets/Representations.js +1 -1
- package/Widgets/SVG/SVGLandmarkRepresentation.js +2 -3
- package/Widgets/SVG/SVGRepresentation.js +3 -2
- package/Widgets/Widgets3D/AngleWidget/behavior.js +1 -1
- package/Widgets/Widgets3D/AngleWidget/state.js +1 -1
- package/Widgets/Widgets3D/AngleWidget.js +1 -2
- package/Widgets/Widgets3D/DistanceWidget/behavior.js +1 -1
- package/Widgets/Widgets3D/DistanceWidget/state.js +1 -1
- package/Widgets/Widgets3D/DistanceWidget.js +1 -2
- package/Widgets/Widgets3D/EllipseWidget/behavior.js +2 -2
- package/Widgets/Widgets3D/EllipseWidget/state.js +1 -1
- package/Widgets/Widgets3D/EllipseWidget.js +2 -3
- package/Widgets/Widgets3D/ImageCroppingWidget/behavior.js +1 -1
- package/Widgets/Widgets3D/ImageCroppingWidget/state.js +1 -1
- package/Widgets/Widgets3D/ImageCroppingWidget.js +1 -2
- package/Widgets/Widgets3D/ImplicitPlaneWidget.js +1 -2
- package/Widgets/Widgets3D/InteractiveOrientationWidget/behavior.js +2 -2
- package/Widgets/Widgets3D/InteractiveOrientationWidget/state.js +1 -2
- package/Widgets/Widgets3D/InteractiveOrientationWidget.js +1 -2
- package/Widgets/Widgets3D/LineWidget/Constants.js +1 -2
- package/Widgets/Widgets3D/LineWidget/behavior.js +2 -2
- package/Widgets/Widgets3D/LineWidget/state.js +1 -1
- package/Widgets/Widgets3D/LineWidget.js +1 -2
- package/Widgets/Widgets3D/PaintWidget.js +1 -2
- package/Widgets/Widgets3D/PolyLineWidget/behavior.js +1 -1
- package/Widgets/Widgets3D/PolyLineWidget/state.js +1 -1
- package/Widgets/Widgets3D/PolyLineWidget.js +1 -2
- package/Widgets/Widgets3D/RectangleWidget/behavior.js +2 -2
- package/Widgets/Widgets3D/RectangleWidget/state.js +1 -1
- package/Widgets/Widgets3D/RectangleWidget.js +2 -3
- package/Widgets/Widgets3D/ResliceCursorWidget/Constants.js +1 -2
- package/Widgets/Widgets3D/ResliceCursorWidget/behavior.js +1 -1
- package/Widgets/Widgets3D/ResliceCursorWidget/state.js +1 -1
- package/Widgets/Widgets3D/ResliceCursorWidget.js +1 -2
- package/Widgets/Widgets3D/ShapeWidget/Constants.js +1 -2
- package/Widgets/Widgets3D/ShapeWidget/behavior.js +2 -2
- package/Widgets/Widgets3D/ShapeWidget.js +1 -2
- package/Widgets/Widgets3D/SplineWidget/behavior.js +1 -1
- package/Widgets/Widgets3D/SplineWidget/state.js +1 -1
- package/Widgets/Widgets3D/SplineWidget.js +1 -2
- package/Widgets/Widgets3D.js +1 -1
- package/Widgets/index.js +1 -1
- package/_vendor/base64-js/index.js_commonjs-exports +1 -0
- package/_vendor/blueimp-md5/js/md5.js_commonjs-module +3 -0
- package/_vendor/define-properties/index.js_commonjs-proxy +1 -1
- package/_vendor/globalthis/implementation.browser.js_commonjs-module +3 -0
- package/_vendor/globalthis/implementation.browser.js_commonjs-proxy +1 -1
- package/_vendor/globalthis/polyfill.js_commonjs-proxy +1 -1
- package/_vendor/globalthis/shim.js_commonjs-proxy +2 -1
- package/_vendor/jszip/dist/jszip.min.js_commonjs-module +3 -0
- package/_vendor/object-keys/implementation.js_commonjs-proxy +1 -1
- package/_vendor/object-keys/index.js_commonjs-proxy +1 -1
- package/_vendor/object-keys/isArguments.js_commonjs-proxy +1 -1
- package/_vendor/seedrandom/lib/alea.js_commonjs-module +3 -0
- package/_vendor/seedrandom/lib/alea.js_commonjs-proxy +1 -1
- package/_vendor/seedrandom/lib/tychei.js_commonjs-module +3 -0
- package/_vendor/seedrandom/lib/tychei.js_commonjs-proxy +1 -1
- package/_vendor/seedrandom/lib/xor128.js_commonjs-module +3 -0
- package/_vendor/seedrandom/lib/xor128.js_commonjs-proxy +1 -1
- package/_vendor/seedrandom/lib/xor4096.js_commonjs-module +3 -0
- package/_vendor/seedrandom/lib/xor4096.js_commonjs-proxy +1 -1
- package/_vendor/seedrandom/lib/xorshift7.js_commonjs-module +3 -0
- package/_vendor/seedrandom/lib/xorshift7.js_commonjs-proxy +1 -1
- package/_vendor/seedrandom/lib/xorwow.js_commonjs-module +3 -0
- package/_vendor/seedrandom/lib/xorwow.js_commonjs-proxy +1 -1
- package/_vendor/seedrandom/seedrandom.js_commonjs-module +3 -0
- package/_vendor/seedrandom/seedrandom.js_commonjs-proxy +1 -1
- package/_vendor/webworker-promise/lib/register.js_commonjs-module +3 -0
- package/_vendor/webworker-promise/lib/tiny-emitter.js_commonjs-proxy +1 -1
- package/_vendor/webworker-promise/src/tiny-emitter.js_commonjs-proxy +1 -0
- package/_vendor/xmlbuilder2/lib/xmlbuilder2.min.js_commonjs-module +3 -0
- package/_virtual/commonjsHelpers.js +3 -4
- package/_virtual/{polyfill-node_buffer.js → polyfill-node.buffer.js} +1 -1
- package/_virtual/{polyfill-node_global.js → polyfill-node.global.js} +0 -0
- package/_virtual/rollup-plugin-worker-loader__module_Sources/Filters/General/PaintFilter/PaintFilter.worker.js +1 -1
- package/_virtual/rollup-plugin-worker-loader__module_Sources/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +1 -1
- package/macros.js +4 -5
- package/package.json +54 -55
- package/vendor/base64-js/index.js +1 -87
- package/vendor/blueimp-md5/js/md5.js +6 -3
- package/vendor/d3-array/src/ascending.js +1 -1
- package/vendor/d3-array/src/bisect.js +2 -1
- package/vendor/d3-array/src/bisector.js +21 -23
- package/vendor/d3-array/src/mode.js +1 -0
- package/vendor/d3-scale/src/continuous.js +2 -2
- package/vendor/d3-time/src/ticks.js +1 -0
- package/vendor/define-properties/index.js +2 -1
- package/vendor/globalthis/implementation.browser.js +4 -9
- package/vendor/globalthis/index.js +13 -6
- package/vendor/globalthis/polyfill.js +6 -3
- package/vendor/globalthis/shim.js +12 -9
- package/vendor/jszip/dist/jszip.min.js +11 -0
- package/vendor/object-keys/index.js +2 -2
- package/vendor/pako/dist/pako.esm.mjs +397 -388
- package/vendor/seedrandom/index.js +28 -21
- package/vendor/seedrandom/lib/alea.js +4 -5
- package/vendor/seedrandom/lib/tychei.js +4 -5
- package/vendor/seedrandom/lib/xor128.js +4 -5
- package/vendor/seedrandom/lib/xor4096.js +4 -5
- package/vendor/seedrandom/lib/xorshift7.js +4 -5
- package/vendor/seedrandom/lib/xorwow.js +4 -5
- package/vendor/seedrandom/seedrandom.js +4 -5
- package/vendor/webworker-promise/lib/register.js +14 -8
- package/vendor/webworker-promise/src/index.js +110 -0
- package/vendor/webworker-promise/src/tiny-emitter.js +51 -0
- package/vendor/xmlbuilder2/lib/xmlbuilder2.min.js +6 -7
- package/vtk.js +2 -3
- package/_vendor/base64-js/index.js_commonjs-proxy +0 -1
- package/_vendor/buffer/index.js_commonjs-proxy +0 -1
- package/_vendor/ieee754/index.js_commonjs-proxy +0 -1
- package/_vendor/immediate/lib/browser.js_commonjs-proxy +0 -1
- package/_vendor/inherits/inherits_browser.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/base64.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/compressedObject.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/compressions.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/crc32.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/defaults.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/external.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/flate.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/generate/ZipFileWorker.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/generate/index.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/load.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/nodejs/NodejsStreamInputAdapter.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/nodejs/NodejsStreamOutputAdapter.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/nodejsUtils.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/object.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/readable-stream-browser.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/reader/ArrayReader.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/reader/DataReader.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/reader/NodeBufferReader.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/reader/StringReader.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/reader/Uint8ArrayReader.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/reader/readerFor.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/signature.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/stream/ConvertWorker.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/stream/Crc32Probe.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/stream/DataLengthProbe.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/stream/DataWorker.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/stream/GenericWorker.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/stream/StreamHelper.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/support.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/utf8.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/utils.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/zipEntries.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/zipEntry.js_commonjs-proxy +0 -1
- package/_vendor/jszip/lib/zipObject.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/index.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/lib/deflate.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/lib/inflate.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/lib/utils/common.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/lib/utils/strings.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/lib/zlib/adler32.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/lib/zlib/constants.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/lib/zlib/crc32.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/lib/zlib/deflate.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/lib/zlib/gzheader.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/lib/zlib/inffast.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/lib/zlib/inflate.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/lib/zlib/inftrees.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/lib/zlib/messages.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/lib/zlib/trees.js_commonjs-proxy +0 -1
- package/_vendor/jszip/node_modules/pako/lib/zlib/zstream.js_commonjs-proxy +0 -1
- package/_vendor/lie/lib/browser.js_commonjs-proxy +0 -1
- package/_vendor/safe-buffer/index.js_commonjs-proxy +0 -1
- package/_vendor/set-immediate-shim/index.js_commonjs-proxy +0 -1
- package/_vendor/util/support/isBufferBrowser.js_commonjs-proxy +0 -1
- package/_virtual/_polyfill-node_stream.js_commonjs-proxy.js +0 -6
- package/_virtual/polyfill-node__buffer_list.js +0 -59
- package/_virtual/polyfill-node__stream_duplex.js +0 -44
- package/_virtual/polyfill-node__stream_passthrough.js +0 -15
- package/_virtual/polyfill-node__stream_readable.js +0 -896
- package/_virtual/polyfill-node__stream_transform.js +0 -132
- package/_virtual/polyfill-node__stream_writable.js +0 -480
- package/_virtual/polyfill-node_process.js +0 -225
- package/_virtual/polyfill-node_stream.js +0 -120
- package/vendor/buffer/index.js +0 -2112
- package/vendor/events/events.js +0 -457
- package/vendor/ieee754/index.js +0 -92
- package/vendor/immediate/lib/browser.js +0 -72
- package/vendor/inherits/inherits_browser.js +0 -29
- package/vendor/jszip/lib/base64.js +0 -113
- package/vendor/jszip/lib/compressedObject.js +0 -74
- package/vendor/jszip/lib/compressions.js +0 -20
- package/vendor/jszip/lib/crc32.js +0 -77
- package/vendor/jszip/lib/defaults.js +0 -25
- package/vendor/jszip/lib/external.js +0 -22
- package/vendor/jszip/lib/flate.js +0 -96
- package/vendor/jszip/lib/generate/ZipFileWorker.js +0 -540
- package/vendor/jszip/lib/generate/index.js +0 -61
- package/vendor/jszip/lib/index.js +0 -58
- package/vendor/jszip/lib/load.js +0 -82
- package/vendor/jszip/lib/nodejs/NodejsStreamInputAdapter.js +0 -74
- package/vendor/jszip/lib/nodejs/NodejsStreamOutputAdapter.js +0 -45
- package/vendor/jszip/lib/nodejsUtils.js +0 -59
- package/vendor/jszip/lib/object.js +0 -389
- package/vendor/jszip/lib/readable-stream-browser.js +0 -14
- package/vendor/jszip/lib/reader/ArrayReader.js +0 -58
- package/vendor/jszip/lib/reader/DataReader.js +0 -117
- package/vendor/jszip/lib/reader/NodeBufferReader.js +0 -20
- package/vendor/jszip/lib/reader/StringReader.js +0 -39
- package/vendor/jszip/lib/reader/Uint8ArrayReader.js +0 -23
- package/vendor/jszip/lib/reader/readerFor.js +0 -28
- package/vendor/jszip/lib/signature.js +0 -17
- package/vendor/jszip/lib/stream/ConvertWorker.js +0 -26
- package/vendor/jszip/lib/stream/Crc32Probe.js +0 -24
- package/vendor/jszip/lib/stream/DataLengthProbe.js +0 -28
- package/vendor/jszip/lib/stream/DataWorker.js +0 -116
- package/vendor/jszip/lib/stream/GenericWorker.js +0 -263
- package/vendor/jszip/lib/stream/StreamHelper.js +0 -214
- package/vendor/jszip/lib/support.js +0 -45
- package/vendor/jszip/lib/utf8.js +0 -284
- package/vendor/jszip/lib/utils.js +0 -486
- package/vendor/jszip/lib/zipEntries.js +0 -257
- package/vendor/jszip/lib/zipEntry.js +0 -293
- package/vendor/jszip/lib/zipObject.js +0 -133
- package/vendor/jszip/node_modules/pako/index.js +0 -18
- package/vendor/jszip/node_modules/pako/lib/deflate.js +0 -406
- package/vendor/jszip/node_modules/pako/lib/inflate.js +0 -429
- package/vendor/jszip/node_modules/pako/lib/utils/common.js +0 -110
- package/vendor/jszip/node_modules/pako/lib/utils/strings.js +0 -192
- package/vendor/jszip/node_modules/pako/lib/zlib/adler32.js +0 -51
- package/vendor/jszip/node_modules/pako/lib/zlib/constants.js +0 -68
- package/vendor/jszip/node_modules/pako/lib/zlib/crc32.js +0 -59
- package/vendor/jszip/node_modules/pako/lib/zlib/deflate.js +0 -1892
- package/vendor/jszip/node_modules/pako/lib/zlib/gzheader.js +0 -58
- package/vendor/jszip/node_modules/pako/lib/zlib/inffast.js +0 -345
- package/vendor/jszip/node_modules/pako/lib/zlib/inflate.js +0 -1572
- package/vendor/jszip/node_modules/pako/lib/zlib/inftrees.js +0 -345
- package/vendor/jszip/node_modules/pako/lib/zlib/messages.js +0 -32
- package/vendor/jszip/node_modules/pako/lib/zlib/trees.js +0 -1232
- package/vendor/jszip/node_modules/pako/lib/zlib/zstream.js +0 -47
- package/vendor/lie/lib/browser.js +0 -274
- package/vendor/process/browser.js +0 -190
- package/vendor/safe-buffer/index.js +0 -69
- package/vendor/set-immediate-shim/index.js +0 -8
- package/vendor/string_decoder/lib/string_decoder.js +0 -276
- package/vendor/util/support/isBufferBrowser.js +0 -8
- package/vendor/util/util.js +0 -706
- package/vendor/webworker-promise/lib/index.js +0 -172
|
@@ -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
|
|
312
|
+
export { widgetBehavior as default };
|
|
@@ -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
|
|
25
|
+
export { widgetBehavior 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
|
|
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
|
|
28
|
-
export { InteractionMethodsName, ScrollingMethods, defaultViewUpFromViewType, viewTypeToXYZ, xyzToViewType };
|
|
27
|
+
export { InteractionMethodsName, ScrollingMethods, Constants as default, defaultViewUpFromViewType, viewTypeToXYZ, xyzToViewType };
|
|
@@ -87,5 +87,4 @@ function computeTextPosition(bounds, horizontalPosition, verticalPosition, textW
|
|
|
87
87
|
return [x, y, 0];
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
export default
|
|
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
|
|
538
|
+
export { widgetBehavior as default };
|
package/Widgets/Widgets3D.js
CHANGED
package/Widgets/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '../../vendor/define-properties/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '../../vendor/globalthis/implementation.browser.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '../../vendor/globalthis/implementation.browser.js';
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '../../vendor/define-properties/index.js';
|
|
2
|
+
import '../../vendor/globalthis/implementation.browser.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '../../vendor/object-keys/implementation.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '../../vendor/object-keys/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '../../../vendor/seedrandom/lib/alea.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '../../../vendor/seedrandom/lib/tychei.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '../../../vendor/seedrandom/lib/xor128.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '../../../vendor/seedrandom/lib/xor4096.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '../../../vendor/seedrandom/lib/xorshift7.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '../../../vendor/seedrandom/lib/xorwow.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '../../vendor/seedrandom/seedrandom.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '../../../vendor/webworker-promise/lib/tiny-emitter.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -15,9 +15,8 @@ function getAugmentedNamespace(n) {
|
|
|
15
15
|
return a;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
function
|
|
19
|
-
|
|
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 {
|
|
22
|
+
export { commonjsRequire as a, commonjsGlobal as c, getAugmentedNamespace as g };
|
|
File without changes
|
|
@@ -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 };
|