{
  "Name": "ReplicateFast",
  "_id": "787f336b-d1e2-459c-bfd1-cdc80ec6407e",
  "Namespace": "lib.3d.modify",
  "Description": "Instanciates the incoming geometry. This operator is similar much(!) faster then [Replicate], but since it's replicating a GPU-Geometry buffer, it can't handle [Transform] or other operators below.\r\n\r\nIt comes with it's own PhongShader and thus requires at least one [PointLight] above and ignores state settings like [RasterState].\r\n\r\nA normal setup might look like this:\r\n\r\n[PointLight]\r\n[Replicate2]\r\n[Bake------]\r\n[Group -----------------]\r\n[Transform ] [Transform]\r\n[Cube--------------------] \r\n\r\nAlso checkout the [ReplicateExample]\r\n",
  "Inputs": [
    {
      "Name": "Code",
      "MetaInstanceID": "1b2a71ee-73a4-43d6-af74-d9b0e26a07e6",
      "DefaultValue": {
        "Type": "Text",
        "Value": [
          "float4x4 objectToWorldMatrix;\r",
          "float4x4 worldToCameraMatrix;\r",
          "float4x4 cameraToObjectMatrix; // modelview inverse\r",
          "float4x4 projMatrix;\r",
          "float4x4 textureMatrix;\r",
          "\r",
          "\r",
          "struct PointLight\r",
          "{\r",
          "    float4 position;\r",
          "    float4 ambient;\r",
          "    float4 diffuse;\r",
          "    float4 specular;\r",
          "    float4 attenuation;\r",
          "};\r",
          "\r",
          "struct SpotLight\r",
          "{\r",
          "    float4 ambient;\r",
          "    float4 diffuse;\r",
          "    float4 specular;\r",
          "    float constantAttenuation;\r",
          "    float linearAttenuation;\r",
          "    float quadraticAttenuation;\r",
          "    float spotCutoff;\r",
          "    float spotCosCutoff;\r",
          "    float spotExponent;\r",
          "};\r",
          "\r",
          "cbuffer FogSettings\r",
          "{\r",
          "    float4 fogColor;\r",
          "    float fogStart;\r",
          "    float fogEnd;\r",
          "    float fogScale;\r",
          "}\r",
          "\r",
          "cbuffer MaterialBuffer\r",
          "{\r",
          "    float4 materialAmbient;\r",
          "    float4 materialDiffuse;\r",
          "    float4 materialSpecular;\r",
          "    float4 materialEmission;\r",
          "    float materialShininess;\r",
          "};\r",
          "\r",
          "\r",
          "cbuffer PointLightsBuffer\r",
          "{\r",
          "    int numPointLights;\r",
          "    PointLight pointLights[3];\r",
          "};\r",
          "\r",
          "\r",
          "Texture2D txDiffuse;\r",
          "\r",
          "SamplerState samLinear\r",
          "{\r",
          "    Filter = MIN_MAG_MIP_LINEAR;\r",
          "    AddressU = Wrap;\r",
          "    AddressV = Wrap;\r",
          "};\r",
          "\r",
          "\r",
          "struct VS_IN\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",
          "    float4 objToWorldRow0 : INSTANCE_OBJ_TO_WORLD_ROW0;\r",
          "    float4 objToWorldRow1 : INSTANCE_OBJ_TO_WORLD_ROW1;\r",
          "    float4 objToWorldRow2 : INSTANCE_OBJ_TO_WORLD_ROW2;\r",
          "    float4 objToWorldRow3 : INSTANCE_OBJ_TO_WORLD_ROW3;\r",
          "};\r",
          "\r",
          "\r",
          "struct PS_IN\r",
          "{\r",
          "    float4 pos : SV_POSITION;\r",
          "    float4 posInWorld  : WORLD_POS;\r",
          "    float3 normal : NORMAL;   \r",
          "    float2 texCoord : TEXCOORD0;\r",
          "    float4 vertexColor : COLOR;\r",
          "    float3 fragPosToCamPos : POS;\r",
          "    float fogFragCoord : FALLO;\r",
          "};\r",
          "\r",
          "\r",
          "float mod(float a, float b)\r",
          "{\r",
          "    return a - b*floor(a/b);\r",
          "}\r",
          "\r",
          "float3 mod(float3 a, float b)\r",
          "{\r",
          "    return a - b*floor(a/b);\r",
          "}\r",
          "\r",
          "\r",
          "\r",
          "//>>>> VS2\r",
          "PS_IN VS( VS_IN input )\r",
          "{\r",
          "    PS_IN output = (PS_IN)0;\r",
          "\r",
          "//    float4x4 objToWorldMatrix = objectToWorldMatrix;\r",
          "//    objToWorldMatrix[3] = input.objToWorldRow3;\r",
          "    float4x4 instanceToWorldMatrix = float4x4(input.objToWorldRow0,\r",
          "                                              input.objToWorldRow1,\r",
          "                                              input.objToWorldRow2,\r",
          "                                              input.objToWorldRow3);\r",
          "    output.posInWorld = mul(input.pos, instanceToWorldMatrix);\r",
          "    output.pos = mul(output.posInWorld, worldToCameraMatrix);\r",
          "    output.normal = mul(input.normal, (float3x3)instanceToWorldMatrix);\r",
          "    output.fogFragCoord = abs(output.pos.z / input.pos.w);\r",
          "    output.pos = mul(output.pos, projMatrix);\r",
          "    output.texCoord = mul(float4(input.texCoord, 0, 1), textureMatrix).xy;\r",
          "    output.fragPosToCamPos = normalize(mul(cameraToObjectMatrix[3], objectToWorldMatrix) - output.posInWorld);\r",
          "    output.vertexColor = input.col;\r",
          "      \r",
          "    return output;\r",
          "}\r",
          "//<<< VS\r",
          "\r",
          "float4 calcLightSource(float3 fragPosInWorld, int lightIdx, float3 cameraVector, float3 norm, float4 baseColor)\r",
          "{\r",
          "    float3 lightVector = pointLights[lightIdx].position - fragPosInWorld;\r",
          "    float dist = length(lightVector);\r",
          "    lightVector = normalize(lightVector);\r",
          "    float nxDir = max(0.0, dot(norm, lightVector));\r",
          "    float4 diffuse = pointLights[lightIdx].diffuse * nxDir;\r",
          "    float specularPower = 0.0;\r",
          "    if (nxDir > 0.0)\r",
          "    {\r",
          "        float3 r = reflect(-lightVector, norm);\r",
          "        float rl = max(0.0, dot(r, cameraVector));\r",
          "        specularPower = pow(rl, materialShininess);\r",
          "    }\r",
          "\r",
          "    float attenuation = 1.0 / (pointLights[lightIdx].attenuation.x +\r",
          "                               pointLights[lightIdx].attenuation.y * dist +\r",
          "                               pointLights[lightIdx].attenuation.z * dist * dist);\r",
          "    float4 color = materialAmbient * pointLights[lightIdx].ambient * attenuation +\r",
          "                   materialDiffuse * (diffuse * baseColor * attenuation) +\r",
          "                   materialSpecular * pointLights[lightIdx].specular * specularPower * attenuation * baseColor;\r",
          "\r",
          "    return color;\r",
          "}\r",
          "\r",
          "\r",
          "\r",
          "//>>>> PS\r",
          "float4 PS( PS_IN input ) : SV_Target\r",
          "{\r",
          "    float2 newTexCoords = input.texCoord;\r",
          "    float3 norm = normalize(input.normal);\r",
          "    float4 baseColor = txDiffuse.Sample(samLinear, newTexCoords);\r",
          "\r",
          "    float4 color = float4(0, 0, 0, 1);\r",
          "    for (int lightIdx = 0; lightIdx < numPointLights; ++lightIdx)\r",
          "    {\r",
          "        color += calcLightSource(input.posInWorld, lightIdx, input.fragPosToCamPos, norm, baseColor);\r",
          "    }\r",
          "    color += materialEmission*baseColor;\r",
          "\r",
          "    float fog = (fogEnd - input.fogFragCoord) * fogScale;\r",
          "    fog = clamp(fog, 0.0, 1.0);\r",
          "    return float4(lerp(fogColor.rgb, color.rgb, fog), materialDiffuse.a * baseColor.a);\r",
          "}\r",
          "//<<< PS\r",
          "\r",
          "technique10 Render\r",
          "{\r",
          "    pass P0\r",
          "    {\r",
          "        SetGeometryShader( 0 );\r",
          "        SetVertexShader( CompileShader( vs_4_0, VS() ) );\r",
          "        SetPixelShader( CompileShader( ps_4_0, PS() ) );\r",
          "    }\r",
          "} "
        ]
      },
      "MetaID": "c522a66e-3260-4692-b3e3-79fd0361fa3d",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "SceneInput",
      "MetaInstanceID": "98a0cf9d-3006-4e2e-981c-dc5480114563",
      "DefaultValue": {
        "Type": "Scene",
        "Value": "Framefield.Core.Scene"
      },
      "MetaID": "79122951-7bc4-4c68-b085-866eab828248",
      "IsMultiInput": "True",
      "Relevance": "Required",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Count",
      "MetaInstanceID": "bed88a30-6b5d-4b10-b7a1-3bee8b136df2",
      "DefaultValue": {
        "Type": "Float",
        "Value": "100"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "1",
      "Max": "100000",
      "Scale": "1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Radius",
      "MetaInstanceID": "16646546-1c75-4333-95ae-e7514c865689",
      "DefaultValue": {
        "Type": "Float",
        "Value": "10"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Stretch.X",
      "MetaInstanceID": "70b91536-eefd-4c49-b7fe-e98795334fac",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.01",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Stretch.Y",
      "MetaInstanceID": "98b6e58c-56d4-445f-9b0f-e0d8021c7380",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.01",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Stretch.Z",
      "MetaInstanceID": "74fcd7f2-9a01-417c-b96e-fb57dfa3c0ab",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.01",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Shape",
      "MetaInstanceID": "c88ef57a-9b2e-4865-a33a-8a790f70179f",
      "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": "Point",
          "Value": "0"
        },
        {
          "Name": "Sphere",
          "Value": "1"
        },
        {
          "Name": "Ring",
          "Value": "2"
        },
        {
          "Name": "Box",
          "Value": "3"
        }
      ]
    },
    {
      "Name": "Layer.X",
      "MetaInstanceID": "cc121904-47de-45b5-9694-87456d6405f6",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Layer.Y",
      "MetaInstanceID": "1e3a4582-f0f5-4695-8846-47f5ac486ada",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Scatter",
      "MetaInstanceID": "0deaf016-ab3e-4a4f-a9db-53ea3145b2f3",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "0",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Offset.X",
      "MetaInstanceID": "5291ef52-f90d-4bcc-af09-b80b2f803c9c",
      "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": "Offset.Y",
      "MetaInstanceID": "77c26dbc-2b69-4c51-b3be-85b45b2a69d0",
      "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": "Offset.Z",
      "MetaInstanceID": "ecfb27b3-f105-45c3-816d-a769a1581a07",
      "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": "OffsetRandom.X",
      "MetaInstanceID": "85edcdad-1184-4273-8f04-286bed3c11fd",
      "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": "OffsetRandom.Y",
      "MetaInstanceID": "0d01f6ce-9b3f-4dab-88fc-a2f97d73dc69",
      "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": "OffsetRandom.Z",
      "MetaInstanceID": "c57321ca-8bff-4abc-93d2-eff9d5075eb6",
      "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": "NoiseTime",
      "MetaInstanceID": "fbc93f89-147c-4bc1-b586-2e3e58907750",
      "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": "NoiseAmount",
      "MetaInstanceID": "c59d0b8b-8c38-4366-9011-6d8ed058f7ff",
      "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": "NoiseScale",
      "MetaInstanceID": "de9654ac-f9b6-4ed3-8b4a-157dec01365e",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Size",
      "MetaInstanceID": "ae0b02e4-cb4f-4d72-bb2c-a0b2ddb16d88",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.01",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "SizeRandom",
      "MetaInstanceID": "66162a1c-3765-41df-b94a-9aa2aba2424f",
      "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": "Orientation",
      "MetaInstanceID": "7af42184-5bd1-4967-8e20-a7837adb45f1",
      "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": "Surface",
          "Value": "0"
        },
        {
          "Name": "Fixed",
          "Value": "1"
        },
        {
          "Name": "FaceCamera",
          "Value": "2"
        }
      ]
    },
    {
      "Name": "Rotate.X",
      "MetaInstanceID": "009900a3-c87f-4ff2-8ace-961ad19ab5a1",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Rotate.Y",
      "MetaInstanceID": "c68f2907-7a8a-4855-ae11-1e088747c002",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Rotate.Z",
      "MetaInstanceID": "f4a82bdd-c87d-43d4-812e-0d90a03b7b81",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "RotateRandom.X",
      "MetaInstanceID": "26a9f56b-7eac-4719-bbe6-d087220a58aa",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "RotateRandom.Y",
      "MetaInstanceID": "c818cf8c-e94a-4179-9283-86fb1141a582",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "RotateRandom.Z",
      "MetaInstanceID": "81c20ae1-afba-40a4-b316-8f8bf0366875",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Seed",
      "MetaInstanceID": "9cdd664d-cc2c-4f59-bf76-ad4c586aa1f6",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "0",
      "Max": "100000",
      "Scale": "1",
      "ScaleType": "Linear",
      "EnumValues": []
    }
  ],
  "Outputs": [
    {
      "Name": "SceneTransformOut",
      "MetaInstanceID": "2fa37982-3b1a-462b-8fc3-e2050366fe76",
      "MetaID": "79122951-7bc4-4c68-b085-866eab828248"
    }
  ],
  "OperatorParts": [
    {
      "MetaInstanceID": "2972eccf-e0d3-42c9-b49c-6b183d797f2e",
      "MetaID": "f9e0f2b8-5dbe-4938-8154-0cc2d55f2b96",
      "Name": "ReplicateFastFunc",
      "Version": "85e6d754-cf9a-4006-b3f7-8c034a938b7f",
      "Type": "Scene",
      "IsMultiInput": "True",
      "Script": [
        "using System;",
        "using System.Collections.Generic;",
        "using System.Linq;",
        "using SharpDX;",
        "using SharpDX.Direct3D;",
        "using SharpDX.Direct3D11;",
        "using Framefield.Core.Rendering;",
        "using Buffer = SharpDX.Direct3D11.Buffer;",
        "",
        "namespace Framefield.Core.IDf9e0f2b8_5dbe_4938_8154_0cc2d55f2b96",
        "{",
        "    public class Class_ReplicateFast : FXSourceCodeFunction",
        "    {",
        "        #region Renderer",
        "        public class Renderer : BaseRenderer",
        "        {",
        "            public override void SetupEffect(OperatorPartContext context)",
        "            {",
        "                base.SetupEffect(context);",
        "                try",
        "                {",
        "                    SetupMaterialConstBuffer(context);",
        "                    SetupFogSettingsConstBuffer(context);",
        "                    SetupPointLightsConstBuffer(context);",
        "                }",
        "                catch (Exception e)",
        "                {",
        "                    Logger.Error(ParentFunc, \"Error building constant buffer: {0} - Source: {1}\", e.Message, e.Source);",
        "                }",
        "            }",
        "            public OperatorPart.Function ParentFunc {get;set;}            ",
        "        }",
        "        #endregion",
        "",
        "        public Class_ReplicateFast()",
        "        {",
        "            _renderer = new Renderer(){ParentFunc = this};",
        "        }",
        "",
        "        public override void Dispose()",
        "        {",
        "            Utilities.DisposeObj(ref _renderer);",
        "            base.Dispose();",
        "        }",
        "",
        "        //>>> _inputids",
        "        private enum InputId",
        "        {",
        "            Code = 0,",
        "            SceneInput = 1,",
        "            Count = 2,",
        "            Radius = 3,",
        "            StretchX = 4,",
        "            StretchY = 5,",
        "            StretchZ = 6,",
        "            Shape = 7,",
        "            LayerX = 8,",
        "            LayerY = 9,",
        "            Scatter = 10,",
        "            OffsetX = 11,",
        "            OffsetY = 12,",
        "            OffsetZ = 13,",
        "            OffsetRandomX = 14,",
        "            OffsetRandomY = 15,",
        "            OffsetRandomZ = 16,",
        "            NoiseTime = 17,",
        "            NoiseAmount = 18,",
        "            NoiseScale = 19,",
        "            Size = 20,",
        "            SizeRandom = 21,",
        "            Orientation = 22,",
        "            RotateX = 23,",
        "            RotateY = 24,",
        "            RotateZ = 25,",
        "            RotateRandomX = 26,",
        "            RotateRandomY = 27,",
        "            RotateRandomZ = 28,",
        "            Seed = 29",
        "        }",
        "        //<<< _inputids",
        "",
        "",
        "        private bool _firstEval = true;",
        "        public override OperatorPartContext Eval(OperatorPartContext context, List<OperatorPart> inputs, int outputIdx)",
        "        {",
        "            //>>> _params",
        "            var Code = inputs[(int)InputId.Code].Eval(context).Text;",
        "            var SceneInput = inputs[(int)InputId.SceneInput];",
        "            var Count = inputs[(int)InputId.Count].Eval(context).Value;",
        "            var Radius = inputs[(int)InputId.Radius].Eval(context).Value;",
        "            var StretchX = inputs[(int)InputId.StretchX].Eval(context).Value;",
        "            var StretchY = inputs[(int)InputId.StretchY].Eval(context).Value;",
        "            var StretchZ = inputs[(int)InputId.StretchZ].Eval(context).Value;",
        "            var Stretch = new Vector3(StretchX, StretchY, StretchZ);",
        "            var Shape = (int) inputs[(int)InputId.Shape].Eval(context).Value;",
        "            var LayerX = inputs[(int)InputId.LayerX].Eval(context).Value;",
        "            var LayerY = inputs[(int)InputId.LayerY].Eval(context).Value;",
        "            var Layer = new Vector2(LayerX, LayerY);",
        "            var Scatter = inputs[(int)InputId.Scatter].Eval(context).Value;",
        "            var OffsetX = inputs[(int)InputId.OffsetX].Eval(context).Value;",
        "            var OffsetY = inputs[(int)InputId.OffsetY].Eval(context).Value;",
        "            var OffsetZ = inputs[(int)InputId.OffsetZ].Eval(context).Value;",
        "            var Offset = new Vector3(OffsetX, OffsetY, OffsetZ);",
        "            var OffsetRandomX = inputs[(int)InputId.OffsetRandomX].Eval(context).Value;",
        "            var OffsetRandomY = inputs[(int)InputId.OffsetRandomY].Eval(context).Value;",
        "            var OffsetRandomZ = inputs[(int)InputId.OffsetRandomZ].Eval(context).Value;",
        "            var OffsetRandom = new Vector3(OffsetRandomX, OffsetRandomY, OffsetRandomZ);",
        "            var NoiseTime = inputs[(int)InputId.NoiseTime].Eval(context).Value;",
        "            var NoiseAmount = inputs[(int)InputId.NoiseAmount].Eval(context).Value;",
        "            var NoiseScale = inputs[(int)InputId.NoiseScale].Eval(context).Value;",
        "            var Size = inputs[(int)InputId.Size].Eval(context).Value;",
        "            var SizeRandom = inputs[(int)InputId.SizeRandom].Eval(context).Value;",
        "            var Orientation = (int) inputs[(int)InputId.Orientation].Eval(context).Value;",
        "            var RotateX = inputs[(int)InputId.RotateX].Eval(context).Value;",
        "            var RotateY = inputs[(int)InputId.RotateY].Eval(context).Value;",
        "            var RotateZ = inputs[(int)InputId.RotateZ].Eval(context).Value;",
        "            var Rotate = new Vector3(RotateX, RotateY, RotateZ);",
        "            var RotateRandomX = inputs[(int)InputId.RotateRandomX].Eval(context).Value;",
        "            var RotateRandomY = inputs[(int)InputId.RotateRandomY].Eval(context).Value;",
        "            var RotateRandomZ = inputs[(int)InputId.RotateRandomZ].Eval(context).Value;",
        "            var RotateRandom = new Vector3(RotateRandomX, RotateRandomY, RotateRandomZ);",
        "            var Seed = inputs[(int)InputId.Seed].Eval(context).Value;",
        "            //<<< _params        ",
        "",
        "            if (SceneInput.Connections.Count == 0)",
        "            {",
        "                return context;",
        "            }",
        "",
        "            if (_firstEval)",
        "            {",
        "                for (int i = 0; i < NumCodes(); ++i)",
        "                    Compile(i);",
        "                _firstEval = false;",
        "                Changed = true;",
        "            }",
        "",
        "            const float toRad = (float) Math.PI/180f;",
        "",
        "            var prevTransform = context.ObjectTWorld;",
        "            var rand = new Random((int) Seed);",
        "            Layer.X = Math.Max(1, (int) Layer.X);",
        "            Layer.Y = Math.Max(1, (int) Layer.Y);",
        "",
        "            //var meshCollector = new OperatorPart.CollectOpPartFunctionsOfType<Framefield.Core.OperatorPartTraits.IMeshSupplier>();",
        "            _meshCollector.Clear();",
        "            SceneInput.TraverseWithFunction(_meshCollector, null);",
        "            var meshSupplier = _meshCollector.CollectedOpPartFunctions.FirstOrDefault();",
        "            if (meshSupplier == null)",
        "            {",
        "                Logger.Error(this,\"Found no mesh supplier, have you forgotten to add an input?\");",
        "                return context;",
        "            }",
        "            var meshes = new List<Mesh>();",
        "            meshSupplier.AddMeshesTo(meshes);",
        "            if (meshes.Count != 1)",
        "            {",
        "                Logger.Error(this,\"Found more or less than 1 mesh\");",
        "                return context;",
        "            }",
        "            var instancedMesh = meshes[0];",
        "",
        "            // instance data buffer",
        "            const int instanceDataSize = 4*16; // float4x4",
        "            var numInstances = (int) Count;",
        "            var streamSize = numInstances * instanceDataSize;",
        "            if (_instanceDataBuffer == null || _instanceDataBuffer.Description.SizeInBytes != streamSize)",
        "            {",
        "                Utilities.DisposeObj(ref _instanceDataBuffer);",
        "                _instanceDataBuffer = new Buffer(context.D3DDevice, streamSize, ResourceUsage.Dynamic, BindFlags.VertexBuffer,",
        "                                                 CpuAccessFlags.Write, ResourceOptionFlags.None, instanceDataSize);",
        "            }",
        "",
        "            DataStream instanceDataStream;",
        "            context.D3DDevice.ImmediateContext.MapSubresource(_instanceDataBuffer, MapMode.WriteDiscard, MapFlags.None, out instanceDataStream);",
        "            using (instanceDataStream)",
        "            {",
        "                instanceDataStream.Position = 0;",
        "",
        "                for (var i = 0; i < numInstances; ++i)",
        "                {",
        "                    Vector3 t = new Vector3();",
        "",
        "                    ",
        "                    switch (Shape)",
        "                    {",
        "                        // Point",
        "                        case 0:",
        "                            t = Vector3.Normalize(new Vector3(",
        "                                            (float) (rand.NextDouble() - 0.5)*Radius*StretchX,",
        "                                            (float) (rand.NextDouble() - 0.5)*Radius*StretchY,",
        "                                            (float) (rand.NextDouble() - 0.5)*Radius*StretchZ)) ",
        "                               * (float)rand.NextDouble() * Radius;",
        "                                      ",
        "                            break;",
        "                        // Sphere",
        "                        case 1:",
        "                        {",
        "                            var inc = Math.PI*(3 - Math.Sqrt(5));",
        "                            var off = 2/(Count + 1);",
        "                            var y = i*off*Stretch.Y + (Stretch.Z -1) - 1 + (off/2);",
        "                            var r = Math.Sqrt(1 - y*y);",
        "                            var phi = i*Stretch.X*inc;",
        "                            t = new Vector3((float) (Math.Cos(phi)*r*Radius),",
        "                                            (float) (y*Radius),",
        "                                            (float) (Math.Sin(phi)*r*Radius));",
        "                            break;                            ",
        "                        }",
        "                                                ",
        "                        // Ring",
        "                        case 2:",
        "                        {",
        "                            float itemsPerShell =  Count/(Layer.X);    // with even distribution                            ",
        "                            float indexInShell = i%itemsPerShell;",
        "                            float shellIndex = (i-indexInShell)/itemsPerShell;",
        "                            ",
        "                            float itemsPerRing = (itemsPerShell / Math.Max(1,Layer.Y));",
        "                            float indexInRing = (int)(indexInShell % itemsPerRing);",
        "                            float layerIndex = (int)(indexInShell / itemsPerRing);",
        "                          ",
        "                            float a = indexInRing / itemsPerRing;",
        "                            ",
        "                            t = new Vector3((float) (Math.Sin(Math.PI*2*a)*(Radius + shellIndex * Stretch.X)),",
        "                                            Layer.Y <= 1 ? 0",
        "                                                         : (layerIndex/(Layer.Y-1)  -0.5f) *Stretch.Y ,",
        "                                            (float) (Math.Cos(Math.PI*2*a)*(Radius + shellIndex*Stretch.Z)));",
        "                            break;",
        "                        }",
        "                        ",
        "                        // Box (can also be used as a plane)",
        "                        case 3:",
        "                        {",
        "                            var volume = Math.Abs(StretchX) * Math.Abs(StretchY) * Math.Abs(StretchZ);",
        "                            ",
        "                            var s1= new Vector3(Math.Abs(StretchX), Math.Abs(StretchY), Math.Abs(StretchZ));",
        "                            var a= s1.Y/s1.X;",
        "                            var b= s1.Z/s1.X;",
        "                            ",
        "                            var xx = (float)Math.Pow( 1/ (a*b), 1.0/3.0);",
        "                            var s2 = s1 * (xx/s1.X);",
        "                                                        ",
        "                            var edgeCount= Math.Pow(Count,1.0/3.0);",
        "                            ",
        "                            var itemsX= Math.Max(1, Math.Round(edgeCount * s2.X));",
        "                            var itemsY= Math.Max(1, Math.Round(edgeCount * s2.Y));",
        "                            var itemsZ= Math.Max(1, Math.Round(edgeCount * s2.Z));",
        "",
        "                            if( itemsZ> itemsX && itemsZ> itemsY) {",
        "                                itemsZ= Count/itemsX/itemsY;",
        "                            }",
        "                            else if( itemsX > itemsY && itemsX > itemsZ) {",
        "                                itemsX= Count/itemsY/itemsZ;",
        "                            }",
        "                            else {",
        "                                itemsY= Count/itemsX/itemsZ;",
        "                            }",
        "",
        "                            var x = (int)(i % itemsX)/ itemsX;",
        "                            var y = (int)((i/itemsX) % itemsY) / itemsY;",
        "                            var z = (int)((i/itemsX/itemsY)) / itemsZ;",
        "                                                                                    ",
        "                            t = new Vector3((float) (x- (itemsX > 1 ? 0.5 : 0)),",
        "                                            (float) (y- (itemsY > 1 ? 0.5 : 0)),",
        "                                            (float) (z- (itemsZ > 1 ? 0.5 : 0))) * Stretch;",
        "                            break;",
        "                        }",
        "",
        "                    }",
        "",
        "                    if (NoiseAmount != 0)",
        "                    {",
        "                        _noiseTime = NoiseTime;",
        "                        _frequency = 1/NoiseScale;",
        "                        var noiseOffset = new Vector3(getNoise(t.X / Radius - 6.3f), getNoise(t.Z / Radius + 9.3f), getNoise((t.Y - 0.3f)));",
        "                        t += noiseOffset * NoiseAmount;",
        "                    }",
        "",
        "                    float s = Size + (float)rand.NextDouble() * SizeRandom;",
        "                    var scale = new Vector3(s, s, s);",
        "                    ",
        "                    //Matrix rotation;",
        "                    Matrix transform;",
        "                    Matrix.RotationYawPitchRoll(Rotate.Y * toRad + (float)(rand.NextDouble()) * RotateRandom.Y * toRad,",
        "                                                Rotate.X * toRad + (float)(rand.NextDouble()) * RotateRandom.X * toRad,",
        "                                                Rotate.Z * toRad + (float)(rand.NextDouble()) * RotateRandom.Z * toRad,",
        "                                                out transform);",
        "                    ",
        "                                                                    ",
        "                    var tScale = Matrix.Scaling( scale.X, scale.Y, scale.Z);",
        "                    transform= tScale * transform;",
        "                    var t2= Matrix.Translation(new Vector3(OffsetX + (float)(rand.NextDouble() -0.5f) * (OffsetRandomX + Scatter),",
        "                                                           OffsetY + (float)(rand.NextDouble() -0.5f) * (OffsetRandomY + Scatter),",
        "                                                           OffsetZ + (float)(rand.NextDouble() -0.5f) * (OffsetRandomZ + Scatter)));",
        "                    transform = t2*transform;",
        "",
        "                    if (Orientation == 0)",
        "                    {",
        "                        if (t.Length() > 0)",
        "                        {",
        "                            var dir = -t;",
        "                            dir.Normalize();",
        "                            var helperDir = new Vector3(0, -1, 0);",
        "                            if (Math.Abs(dir.X) < 0.001 && Math.Abs(dir.Z) < 0.001)",
        "                                helperDir = new Vector3(0, 0, 1);",
        "                            var xAxis = Vector3.Cross(dir, helperDir);",
        "                            xAxis.Normalize();",
        "                            var yAxis = Vector3.Cross(-xAxis, dir);",
        "                            yAxis.Normalize();",
        "                            var m = Matrix.Identity;",
        "                            m.Row1 = new Vector4(xAxis, 0);",
        "                            m.Row2 = new Vector4(yAxis, 0);",
        "                            m.Row3 = new Vector4(dir, 0);",
        "                            transform *= m;",
        "                        }",
        "                    }",
        "                    else if (Orientation == 2)",
        "                    {",
        "                        //if (Shape == 2)",
        "                        //{",
        "                        //    var rotationAroundCenter = Matrix.Identity;",
        "                        //    Matrix.RotationY((float)(2 * Math.PI * i / Count), out rotationAroundCenter);",
        "                        //    transform *= rotationAroundCenter;",
        "                        //}",
        "                        var cameraToWorld = context.WorldToCamera;",
        "                        cameraToWorld.Invert();",
        "                        var newObjectToWorld = context.ObjectTWorld * cameraToWorld;",
        "                        newObjectToWorld.Row4 = context.ObjectTWorld.Row4;",
        "                        transform *=    newObjectToWorld;                     ",
        "                        ",
        "                    }",
        "",
        "                    transform *= Matrix.Transformation(new Vector3(), new Quaternion(), new Vector3(1,1,1), new Vector3(), new Quaternion(), t);",
        "                    transform *= prevTransform; ",
        "",
        "                    instanceDataStream.Write(transform);",
        "                }",
        "            }",
        "            context.D3DDevice.ImmediateContext.UnmapSubresource(_instanceDataBuffer, 0);",
        "",
        "            var prevEffect = context.Effect;",
        "            var prevRenderer = context.Renderer;",
        "            context.Effect = _effect;",
        "            context.Renderer = _renderer;",
        "",
        "            try",
        "            {",
        "                _renderer.SetupEffect(context);",
        "",
        "                if (context.DepthStencilView != null)",
        "                    context.D3DDevice.ImmediateContext.OutputMerger.SetTargets(context.DepthStencilView, context.RenderTargetView);",
        "                else",
        "                    context.D3DDevice.ImmediateContext.OutputMerger.SetTargets(context.RenderTargetView);",
        "",
        "                if (context.BlendState != null)",
        "                {",
        "                    context.D3DDevice.ImmediateContext.OutputMerger.BlendState = context.BlendState;",
        "                }",
        "",
        "                if (context.DepthStencilState != null)",
        "                {",
        "                    context.D3DDevice.ImmediateContext.OutputMerger.DepthStencilState = context.DepthStencilState;",
        "                }",
        "",
        "                if (context.RasterizerState != null)",
        "                {",
        "                    context.D3DDevice.ImmediateContext.Rasterizer.State = context.RasterizerState;",
        "                }",
        "",
        "                var technique = _effect.GetTechniqueByIndex(0);",
        "                var pass = technique.GetPassByIndex(0);",
        "",
        "                context.D3DDevice.ImmediateContext.Rasterizer.SetViewport(context.Viewport);",
        "                context.D3DDevice.ImmediateContext.InputAssembler.InputLayout = new InputLayout(context.D3DDevice, pass.Description.Signature, _instanceDataInputElements);",
        "                context.D3DDevice.ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;",
        "                context.D3DDevice.ImmediateContext.InputAssembler.SetVertexBuffers(0, new [] { instancedMesh.Vertices, _instanceDataBuffer}, new [] {76, instanceDataSize}, new [] {0,0} );",
        "",
        "                pass.Apply(context.D3DDevice.ImmediateContext);",
        "                context.D3DDevice.ImmediateContext.DrawInstanced(instancedMesh.NumTriangles*3, numInstances, 0, 0);",
        "            }",
        "            catch (Exception exception)",
        "            {",
        "                Logger.Error(this,\"Replicate2 - An error occured during evaluation: {0}\", exception.Message);",
        "            }",
        "",
        "            context.Effect = prevEffect;",
        "            context.Renderer = prevRenderer;",
        "",
        "            return context;",
        "        }",
        "",
        "        #region helpers",
        "",
        "        public float Noise(int x, int seed)",
        "        {",
        "            int n = x + seed*137;",
        "            n = (n << 13) ^ n;",
        "            return (float) (1.0 - ((n*(n*n*15731 + 789221) + 1376312589) & 0x7fffffff)/1073741824.0);",
        "        }",
        "",
        "        public float Lerp(float a, float b, float t)",
        "        {",
        "            return a + t*(b - a);",
        "        }",
        "",
        "        public float Fade(float t)",
        "        {",
        "            return t*t*t*(t*(t*6 - 15) + 10);",
        "        }",
        "",
        "        public float Interpolate(float a, float b, float t)",
        "        {",
        "            float ft = t*3.1415927f;",
        "            float f = (float) (1.0 - Math.Cos(ft))*0.5f;",
        "            return a*(1.0f - f) + b*f;",
        "        }",
        "",
        "        private float getNoise(float value)",
        "        {",
        "            float noiseSum = 0.0f;",
        "            value *= _frequency;",
        "            value += _noiseTime+10000;",
        "",
        "",
        "            noiseSum = Lerp(Noise((int) value, SEED),",
        "                            Noise((int) value + 1, SEED),",
        "                            Fade(value - (float) Math.Floor(value)));",
        "            return noiseSum;",
        "        }",
        "",
        "        #endregion",
        "",
        "        private const int SEED = 0;",
        "        private float _frequency = 1;",
        "        private float _noiseTime;",
        "        private OperatorPart.CollectOpPartFunctionsOfType<Framefield.Core.OperatorPartTraits.IMeshSupplier> _meshCollector = new OperatorPart.CollectOpPartFunctionsOfType<Framefield.Core.OperatorPartTraits.IMeshSupplier>();",
        "        private Renderer _renderer;",
        "        private Buffer _instanceDataBuffer;",
        "        private InputElement[] _instanceDataInputElements = new []",
        "                                                                {",
        "                                                                    new InputElement(\"POSITION\", 0, SharpDX.DXGI.Format.R32G32B32A32_Float, 0, 0),",
        "                                                                    new InputElement(\"NORMAL\", 0, SharpDX.DXGI.Format.R32G32B32_Float, 16, 0),",
        "                                                                    new InputElement(\"COLOR\", 0, SharpDX.DXGI.Format.R32G32B32A32_Float, 28, 0),",
        "                                                                    new InputElement(\"TEXCOORD\", 0, SharpDX.DXGI.Format.R32G32_Float, 44, 0),",
        "                                                                    new InputElement(\"TANGENT\", 0, SharpDX.DXGI.Format.R32G32B32_Float, 52, 0),",
        "                                                                    new InputElement(\"BINORMAL\", 0, SharpDX.DXGI.Format.R32G32B32_Float, 64, 0),",
        "                                                                    new InputElement(\"INSTANCE_OBJ_TO_WORLD_ROW\", 0, SharpDX.DXGI.Format.R32G32B32A32_Float, 0,",
        "                                                                                     1, InputClassification.PerInstanceData, 1),",
        "                                                                    new InputElement(\"INSTANCE_OBJ_TO_WORLD_ROW\", 1, SharpDX.DXGI.Format.R32G32B32A32_Float, 16,",
        "                                                                                     1, InputClassification.PerInstanceData, 1),",
        "                                                                    new InputElement(\"INSTANCE_OBJ_TO_WORLD_ROW\", 2, SharpDX.DXGI.Format.R32G32B32A32_Float, 32,",
        "                                                                                     1, InputClassification.PerInstanceData, 1),",
        "                                                                    new InputElement(\"INSTANCE_OBJ_TO_WORLD_ROW\", 3, SharpDX.DXGI.Format.R32G32B32A32_Float, 48,",
        "                                                                                     1, InputClassification.PerInstanceData, 1),",
        "                                                                };",
        "    }",
        "}",
        "",
        ""
      ],
      "AdditionalAssemblies": []
    }
  ],
  "Operators": [],
  "Connections": [
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "1b2a71ee-73a4-43d6-af74-d9b0e26a07e6",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "98a0cf9d-3006-4e2e-981c-dc5480114563",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "bed88a30-6b5d-4b10-b7a1-3bee8b136df2",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "16646546-1c75-4333-95ae-e7514c865689",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "70b91536-eefd-4c49-b7fe-e98795334fac",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "98b6e58c-56d4-445f-9b0f-e0d8021c7380",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "74fcd7f2-9a01-417c-b96e-fb57dfa3c0ab",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "c88ef57a-9b2e-4865-a33a-8a790f70179f",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "cc121904-47de-45b5-9694-87456d6405f6",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "1e3a4582-f0f5-4695-8846-47f5ac486ada",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "0deaf016-ab3e-4a4f-a9db-53ea3145b2f3",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "5291ef52-f90d-4bcc-af09-b80b2f803c9c",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "77c26dbc-2b69-4c51-b3be-85b45b2a69d0",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "ecfb27b3-f105-45c3-816d-a769a1581a07",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "85edcdad-1184-4273-8f04-286bed3c11fd",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "0d01f6ce-9b3f-4dab-88fc-a2f97d73dc69",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "c57321ca-8bff-4abc-93d2-eff9d5075eb6",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "fbc93f89-147c-4bc1-b586-2e3e58907750",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "c59d0b8b-8c38-4366-9011-6d8ed058f7ff",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "de9654ac-f9b6-4ed3-8b4a-157dec01365e",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "ae0b02e4-cb4f-4d72-bb2c-a0b2ddb16d88",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "66162a1c-3765-41df-b94a-9aa2aba2424f",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "7af42184-5bd1-4967-8e20-a7837adb45f1",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "009900a3-c87f-4ff2-8ace-961ad19ab5a1",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "c68f2907-7a8a-4855-ae11-1e088747c002",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "f4a82bdd-c87d-43d4-812e-0d90a03b7b81",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "26a9f56b-7eac-4719-bbe6-d087220a58aa",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "c818cf8c-e94a-4179-9283-86fb1141a582",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "81c20ae1-afba-40a4-b316-8f8bf0366875",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "9cdd664d-cc2c-4f59-bf76-ad4c586aa1f6",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "2972eccf-e0d3-42c9-b49c-6b183d797f2e",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "2fa37982-3b1a-462b-8fc3-e2050366fe76"
    }
  ]
}