{
  "Name": "Scatter",
  "_id": "b27e339c-6e82-4c0a-93fe-451e50c1c937",
  "Namespace": "lib.3d.modify",
  "Description": "GPU-based scatter deform derived from StreamOutput.",
  "Inputs": [
    {
      "Name": "Code",
      "MetaInstanceID": "535e77ec-3823-4e21-8223-fbdda151f36f",
      "DefaultValue": {
        "Type": "Text",
        "Value": [
          "//>>> _parameters\r",
          "float Value;",
          "float3 Center;",
          "float2 Range;",
          "float Push;",
          "float Shrink;",
          "float Scatter;",
          "float Distort;",
          "float Rotate;",
          "float3 Translate;",
          "//<<< _parameters\r",
          "\r",
          "struct Vertex\r",
          "{\r",
          "    float4 pos : POSITION;\r",
          "    float3 normal : NORMAL;\r",
          "    float4 col : COLOR;\r",
          "    float2 texCoord : TEXCOORD0;\r",
          "    float3 tangent : TANGENT0;\r",
          "    float3 binormal : BINORMAL0;\r",
          "};\r",
          "\r",
          "\r",
          "float getNoise(int x, int seed)\r",
          "{\r",
          "    int n = x + seed*137;\r",
          "    n = (n << 13) ^ n;\r",
          "    return (float) (1.0 - ((n*(n*n*15731 + 789221) + 1376312589) & 0x7fffffff)/1073741824.0);\r",
          "}\r",
          "\r",
          "\r",
          "\r",
          "\r",
          "Vertex VertexMain(Vertex input)\r",
          "{\r",
          "    return input;\r",
          "}\r",
          "\r",
          "\r",
          "\r",
          "[maxvertexcount(3)]\r",
          "void GeometryMain(triangle Vertex input[3], inout TriangleStream<Vertex> outputStream)\r",
          "{\r",
          "\r",
          "\r",
          "    float3 pCenter = (input[0].pos.xyz + input[1].pos.xyz + input[2].pos.xyz)/3 + Translate;\r",
          "\r",
          "    float randomSeedf= ((input[0].pos.x + input[1].pos.x + input[2].pos.x) / 3 +\r",
          "                (input[0].pos.y + input[1].pos.y + input[2].pos.y) / 3 -\r",
          "                (input[0].pos.z + input[1].pos.z + input[2].pos.z) / 3) * 100;\r",
          "    int seed = (int)randomSeedf;\r",
          "\r",
          "    float3 direction = (pCenter-Center);\r",
          "    float distance = length(direction);            \r",
          "    //float x =   clamp(( Range.y - distance) / Range.x, 0, 1);\r",
          "    float falloff = Range.y;\r",
          "    if (falloff == 0) {\r",
          "        falloff = 0.00001;\r",
          "    }\r",
          "    float x = clamp(- (distance - Range.x)/falloff, 0, 1);\r",
          "    \r",
          "    float influence = x*x*(3 - 2*x);  // SmoothStep\r",
          "\r",
          "\r",
          "    float angleX= influence * 3.141578 * Rotate/360 * getNoise(13, seed);\r",
          "    float cax= cos(angleX);\r",
          "    float sax= sin(angleX);    \r",
          "    float4x4 rotx = {    1,    0,    0,    0,\r",
          "                         0,    cax, -sax,  0,\r",
          "                         0,    sax,  cax,  0,\r",
          "                         0,    0,    0,    1};\r",
          "    float angleY= influence * 3.141578 * Rotate/360 * getNoise(1233, seed);\r",
          "    float cay= cos(angleY);\r",
          "    float say= sin(angleY);    \r",
          "    float4x4 roty = {    cay,  0,    say,  0,\r",
          "                         0,    1,    0,    0,\r",
          "                        -say,  0,    cay,  0,\r",
          "                         0,    0,    0,    1};\r",
          "                         \r",
          "                             \r",
          "    float4x4 translateToOrigin ={ 1,    0,    0,   -pCenter.x,\r",
          "                             0,    1,    0,   -pCenter.y,\r",
          "                             0,    0,    1,   -pCenter.z,\r",
          "                             0,    0,    0,   1};\r",
          "\r",
          "    float4x4 translateBack={  1,    0,    0,   pCenter.x,\r",
          "                             0,    1,    0,    pCenter.y,\r",
          "                             0,    0,    1,    pCenter.z,\r",
          "                             0,    0,    0,   1};\r",
          "\r",
          "\r",
          "    float3 offset=  normalize(direction) * influence * ( Push + getNoise(2342, seed) * Scatter );\r",
          "    float4x4 translateOffset={ 1,    0,    0,   offset.x,\r",
          "                               0,    1,    0,   offset.y,\r",
          "                               0,    0,    1,   offset.z, \r",
          "                               0,    0,    0,   1};\r",
          "\r",
          "    float4x4 rotation = mul(rotx,roty);\r",
          "    \r",
          "    float4x4 transform = translateToOrigin;\r",
          "    transform = mul( rotation, transform);\r",
          "    transform = mul( translateBack, transform);\r",
          "    transform = mul( translateOffset, transform);\r",
          "    \r",
          "\r",
          "    for (int i = 0; i < 3; i++)\r",
          "\t{\r",
          "        Vertex vertex = input[i];\r",
          "        float4 p = vertex.pos;\r",
          "        p.xyz+= Translate;\r",
          "        \r",
          "        if(Shrink !=0) {\r",
          "            float shrinkScale = influence * Shrink;\r",
          "            p.xyz+= (pCenter-p)*shrinkScale;\r",
          "        }\r",
          "    \r",
          "        float pushStrength = pow(Distort,2) * getNoise(seed, i) ;\r",
          "\r",
          "        p.xyz+= direction/distance * influence * pushStrength  ; \r",
          "        p = mul(transform, p);        \r",
          "        \r",
          "        vertex.pos.xyz = p.xyz;\r",
          "        vertex.normal = mul( float4(vertex.normal.xyz,1), rotation);\r",
          "        \r",
          "        outputStream.Append(vertex);\r",
          "    }\r",
          "    outputStream.RestartStrip();\r",
          "};\r",
          "\r",
          "\r",
          "GeometryShader pGSComp = CompileShader(gs_5_0, GeometryMain());\r",
          "GeometryShader pGSwSO = ConstructGSWithSO(pGSComp, \"POSITION; NORMAL.xyz; COLOR; TEXCOORD0.xy; TANGENT0.xyz; BINORMAL0.xyz\", NULL, NULL, NULL, 0);\r",
          "\r",
          "\r",
          "technique11 Render\r",
          "{\r",
          "    pass \r",
          "    {\r",
          "        SetVertexShader(CompileShader(vs_5_0, VertexMain()));\r",
          "        SetGeometryShader(pGSwSO);\r",
          "        SetPixelShader(NULL);\r",
          "    }\r",
          "}\r",
          "\r",
          ""
        ]
      },
      "MetaID": "c522a66e-3260-4692-b3e3-79fd0361fa3d",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Scene",
      "MetaInstanceID": "e329d36d-0b4e-4ffb-9a5e-d49e479cf8ab",
      "DefaultValue": {
        "Type": "Scene",
        "Value": "Framefield.Core.Scene"
      },
      "MetaID": "79122951-7bc4-4c68-b085-866eab828248",
      "IsMultiInput": "False",
      "Relevance": "Required",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Value",
      "MetaInstanceID": "922b1ded-40c3-4c2b-a7cf-d584f4f96115",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Center.X",
      "MetaInstanceID": "1404a6ae-d60f-479a-ac57-c081529872e9",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Center.Y",
      "MetaInstanceID": "afffeda8-22bb-48f0-abe9-1aaa8fc0d72b",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Center.Z",
      "MetaInstanceID": "b9ac942e-6f4b-43bb-a75b-08fd804048d6",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Range.Size",
      "MetaInstanceID": "6ff7f4f6-f9f2-42aa-8232-7174ed85ddf0",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Range.FallOff",
      "MetaInstanceID": "5824ec71-de1e-4e07-8c9f-c8fd5260f45f",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Push",
      "MetaInstanceID": "ead5a19b-8f30-4e8b-9a53-a7b5481dc4b7",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Shrink",
      "MetaInstanceID": "36d7eff1-af40-4b6e-b7d8-a9dbac75b8e5",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Scatter",
      "MetaInstanceID": "b6008e4b-a231-4c05-9879-20c629d5b8d4",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Distort",
      "MetaInstanceID": "738594de-7295-42f3-b348-e742a2fb7eaf",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Rotate",
      "MetaInstanceID": "ed0565ad-eeac-4184-9e7c-1624361760f3",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Translate.X",
      "MetaInstanceID": "752cbe04-130b-47c2-88eb-cc2c41d939d1",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Translate.Y",
      "MetaInstanceID": "6af5a71b-2f20-489a-9db6-dd7c94a07397",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Translate.Z",
      "MetaInstanceID": "2b83278a-8ace-4786-a49e-08b50f46a734",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    }
  ],
  "Outputs": [
    {
      "Name": "Scene",
      "MetaInstanceID": "37a1cc12-1cfb-433b-ae01-965ef62b1818",
      "MetaID": "79122951-7bc4-4c68-b085-866eab828248"
    }
  ],
  "OperatorParts": [
    {
      "MetaInstanceID": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d",
      "MetaID": "ba1cf0d1-6f58-4353-a1cf-d510eeae3eda",
      "Name": "ScatterFunc",
      "Version": "8aa0e162-c94e-4a4b-8548-2a39b246001c",
      "Type": "Float",
      "IsMultiInput": "True",
      "Script": [
        "//>>> _using",
        "using System;",
        "using System.Collections.Generic;",
        "using System.Linq;",
        "using System.Text;",
        "using SharpDX;",
        "using SharpDX.Direct3D11;",
        "using SharpDX.Windows;",
        "//<<< _using",
        "using Framefield.Core.OperatorPartTraits;",
        "using Framefield.Core.Rendering;",
        "using Buffer = SharpDX.Direct3D11.Buffer;",
        "using SharpDX.Direct3D;",
        "",
        "namespace Framefield.Core.IDba1cf0d1_6f58_4353_a1cf_d510eeae3eda",
        "{",
        "    public class Class_Scatter : FXSourceCodeFunction, IFXSceneSourceCode, IMeshSupplier",
        "    {",
        "        //>>> _inputids",
        "        private enum InputId",
        "        {",
        "            Code = 0,",
        "            Scene = 1,",
        "            Value = 2,",
        "            CenterX = 3,",
        "            CenterY = 4,",
        "            CenterZ = 5,",
        "            RangeSize = 6,",
        "            RangeFallOff = 7,",
        "            Push = 8,",
        "            Shrink = 9,",
        "            Scatter = 10,",
        "            Distort = 11,",
        "            Rotate = 12,",
        "            TranslateX = 13,",
        "            TranslateY = 14,",
        "            TranslateZ = 15",
        "        }",
        "        //<<< _inputids",
        "",
        "        public Class_Scatter()",
        "        {",
        "            _meshCollector = new MeshCollector(this);",
        "        }",
        "",
        "        public override void Dispose() ",
        "        {",
        "            Utilities.DisposeObj(ref _mesh);",
        "            base.Dispose();",
        "        }",
        "",
        "        public void AddMeshesTo(ICollection<Mesh> meshes)",
        "        {",
        "            UpdateMesh(new OperatorPartContext(), OperatorPart.Connections);",
        "            if (_mesh != null)",
        "                meshes.Add(_mesh);",
        "        }",
        "",
        "        public override OperatorPartContext Eval(OperatorPartContext context, List<OperatorPart> inputs, int outputIdx)",
        "        {",
        "            try",
        "            {",
        "                UpdateMesh(context, inputs);",
        "",
        "                if (_mesh.Vertices != null)",
        "                {",
        "                    // render stream output to screen or whatever target is set",
        "                    context.Renderer.SetupEffect(context);",
        "                    context.Renderer.Render(_mesh, context);",
        "                }",
        "            }",
        "            catch (Exception exception)",
        "            {",
        "                Logger.Error(this, \"Load Effect error: {0}\", exception.Message);",
        "            }",
        "",
        "            return context;",
        "        }",
        "",
        "        bool _firstEval = true;",
        "        private void UpdateMesh(OperatorPartContext context, List<OperatorPart> inputs)",
        "        {",
        "            if (_firstEval)",
        "            {",
        "                for (int i = 0; i < NumCodes(); ++i)",
        "                    Compile(i);",
        "                _firstEval = false;",
        "                Changed = true;",
        "            }",
        "",
        "            if (!Changed && _mesh.Vertices != null)",
        "                return;",
        "",
        "            //>>> _params",
        "            var Code = inputs[(int)InputId.Code].Eval(context).Text;",
        "            var Scene = inputs[(int)InputId.Scene];",
        "            var Value = inputs[(int)InputId.Value].Eval(context).Value;",
        "            var CenterX = inputs[(int)InputId.CenterX].Eval(context).Value;",
        "            var CenterY = inputs[(int)InputId.CenterY].Eval(context).Value;",
        "            var CenterZ = inputs[(int)InputId.CenterZ].Eval(context).Value;",
        "            var Center = new Vector3(CenterX, CenterY, CenterZ);",
        "            var RangeSize = inputs[(int)InputId.RangeSize].Eval(context).Value;",
        "            var RangeFallOff = inputs[(int)InputId.RangeFallOff].Eval(context).Value;",
        "            var Range = new Vector2(RangeSize, RangeFallOff);",
        "            var Push = inputs[(int)InputId.Push].Eval(context).Value;",
        "            var Shrink = inputs[(int)InputId.Shrink].Eval(context).Value;",
        "            var Scatter = inputs[(int)InputId.Scatter].Eval(context).Value;",
        "            var Distort = inputs[(int)InputId.Distort].Eval(context).Value;",
        "            var Rotate = inputs[(int)InputId.Rotate].Eval(context).Value;",
        "            var TranslateX = inputs[(int)InputId.TranslateX].Eval(context).Value;",
        "            var TranslateY = inputs[(int)InputId.TranslateY].Eval(context).Value;",
        "            var TranslateZ = inputs[(int)InputId.TranslateZ].Eval(context).Value;",
        "            var Translate = new Vector3(TranslateX, TranslateY, TranslateZ);",
        "            //<<< _params",
        "",
        "            if (Scene.Func.Changed || _mesh.Vertices == null)",
        "            {",
        "                //Logger.Info(this, \"collect meshes\");",
        "                _meshCollector.Collect(Scene);",
        "                Scene.Func.Changed = false;",
        "            }",
        "",
        "            var inputMesh = _meshCollector.FirstMeshOrDefault;",
        "            if (inputMesh == null)",
        "            {",
        "                Utilities.DisposeObj(ref _mesh.Vertices);",
        "                return;",
        "            }",
        "",
        "            _mesh.AttributesSize = inputMesh.AttributesSize;",
        "            _mesh.NumTriangles = inputMesh.NumTriangles;",
        "            _mesh.InputElements = inputMesh.InputElements;",
        "            if (_mesh.Vertices == null || _mesh.Vertices.Description.SizeInBytes != inputMesh.Vertices.Description.SizeInBytes)",
        "            {",
        "                if (_mesh.Vertices != null)",
        "                    _mesh.Vertices.Dispose();",
        "",
        "                _mesh.Vertices = new Buffer(D3DDevice.Device, new BufferDescription()",
        "                                                                    {",
        "                                                                        BindFlags = BindFlags.StreamOutput | BindFlags.VertexBuffer,",
        "                                                                        CpuAccessFlags = CpuAccessFlags.None,",
        "                                                                        OptionFlags = ResourceOptionFlags.None,",
        "                                                                        SizeInBytes = _mesh.NumTriangles*inputMesh.AttributesSize*3,",
        "                                                                        Usage = ResourceUsage.Default",
        "                                                                    });",
        "            }",
        "",
        "            _effect.GetVariableByName(\"Value\").AsScalar().Set(Value);",
        "            _effect.GetVariableByName(\"Center\").AsVector().Set(new Vector3(CenterX, CenterY, CenterZ));",
        "            _effect.GetVariableByName(\"Translate\").AsVector().Set(new Vector3(TranslateX, TranslateY, TranslateZ));",
        "            _effect.GetVariableByName(\"Range\").AsVector().Set(new Vector2(RangeSize, RangeFallOff));",
        "            _effect.GetVariableByName(\"Push\").AsScalar().Set(Push);",
        "            _effect.GetVariableByName(\"Shrink\").AsScalar().Set(Shrink);",
        "            _effect.GetVariableByName(\"Scatter\").AsScalar().Set(Scatter);",
        "            _effect.GetVariableByName(\"Distort\").AsScalar().Set(Distort);",
        "            _effect.GetVariableByName(\"Rotate\").AsScalar().Set(Rotate);",
        "",
        "            context.D3DDevice.ImmediateContext.StreamOutput.SetTargets(new [] { new StreamOutputBufferBinding(_mesh.Vertices, 0) });",
        "            context.D3DDevice.ImmediateContext.OutputMerger.DepthStencilState = new DepthStencilState(context.D3DDevice,",
        "                                                                                                        new DepthStencilStateDescription()",
        "                                                                                                            {",
        "                                                                                                                IsDepthEnabled = false,",
        "                                                                                                                IsStencilEnabled = false",
        "                                                                                                            });",
        "            context.D3DDevice.ImmediateContext.InputAssembler.InputLayout = context.InputLayout;",
        "            context.D3DDevice.ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;",
        "            context.D3DDevice.ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(inputMesh.Vertices, inputMesh.AttributesSize, 0));",
        "            var technique = _effect.GetTechniqueByIndex(0);",
        "            technique.GetPassByIndex(0).Apply(context.D3DDevice.ImmediateContext);",
        "            context.D3DDevice.ImmediateContext.Draw(_mesh.NumTriangles*3, 0);",
        "            context.D3DDevice.ImmediateContext.StreamOutput.SetTargets(new [] { new StreamOutputBufferBinding(null, 0) });",
        "",
        "            Changed = false;",
        "        }",
        "",
        "        private Mesh _mesh = new Mesh();",
        "        private MeshCollector _meshCollector;",
        "    }",
        "}",
        "",
        "",
        ""
      ],
      "AdditionalAssemblies": []
    }
  ],
  "Operators": [],
  "Connections": [
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "37a1cc12-1cfb-433b-ae01-965ef62b1818"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "535e77ec-3823-4e21-8223-fbdda151f36f",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "e329d36d-0b4e-4ffb-9a5e-d49e479cf8ab",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "922b1ded-40c3-4c2b-a7cf-d584f4f96115",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "1404a6ae-d60f-479a-ac57-c081529872e9",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "afffeda8-22bb-48f0-abe9-1aaa8fc0d72b",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "b9ac942e-6f4b-43bb-a75b-08fd804048d6",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "6ff7f4f6-f9f2-42aa-8232-7174ed85ddf0",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "5824ec71-de1e-4e07-8c9f-c8fd5260f45f",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "ead5a19b-8f30-4e8b-9a53-a7b5481dc4b7",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "36d7eff1-af40-4b6e-b7d8-a9dbac75b8e5",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "b6008e4b-a231-4c05-9879-20c629d5b8d4",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "738594de-7295-42f3-b348-e742a2fb7eaf",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "ed0565ad-eeac-4184-9e7c-1624361760f3",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "752cbe04-130b-47c2-88eb-cc2c41d939d1",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "6af5a71b-2f20-489a-9db6-dd7c94a07397",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "2b83278a-8ace-4786-a49e-08b50f46a734",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "d84efef5-d06c-438c-8e9c-db6ac3f9df5d"
    }
  ]
}