Litmus Edge 4.4.x - Flows Manager

List Flows

GET {{edgeUrl}}/flows-manager/flows

List Flows

Returns every flow configured on the device along with its lifecycle fields and the list of Node-RED tabs it contains.

Endpoint

GET {{edgeUrl}}/flows-manager/flows

 ```

## Authentication

HTTP Basic Auth. **Username** is your API token, **password** is empty. Tokens are managed under `System > Access Control > Tokens`.

## Parameters

None.

## Response

`200 OK` -- `application/json`. Array of flow objects.

| Field | Type | Description |
| --- | --- | --- |
| `id` | integer | Flow ID (auto-incremented from 1). Used as `{{flow_id}}` in every other endpoint in this folder. |
| `name` | string | Flow name (e.g. `flow-1`). |
| `memory_limit` | integer | Soft memory cap in MB. `0` means no explicit limit. |
| `secret` | string | Encryption key used to encrypt sensitive fields inside the flow's `flows_cred.json`. Empty if unset. |
| `tabs` | object\[\] | Node-RED tabs inside the flow. Tab CRUD happens **inside Node-RED**, not via this API. |
| `tabs[].id` | string | Node-RED tab ID (16-character hex). |
| `tabs[].label` | string | Tab display name as shown in the Node-RED editor. |

### Example response

``` json
[
  {
    "id": 1,
    "name": "flow-1",
    "memory_limit": 0,
    "secret": "",
    "tabs": [
      { "id": "d2c028f7.3edfd",   "label": "Flow 1" },
      { "id": "6a066af5.d68d14",  "label": "Flow 2" },
      { "id": "bf24c84c.f34d28",  "label": "Flow 3" },
      { "id": "166b0a3cbcb7ad33", "label": "Flow 4" }
    ]
  },
  {
    "id": 2,
    "name": "flow-2",
    "memory_limit": 0,
    "secret": "",
    "tabs": []
  }
]

 ```

## Errors

| HTTP status | When it happens |
| --- | --- |
| `400 Bad Request` | Missing or malformed query/body parameter. |
| `401 Unauthorized` | Missing or invalid credentials. |
| `403 Forbidden` | Token lacks permission for this operation. |
| `404 Not Found` | Target entity does not exist. |
| `5xx` | Service is unreachable, restarting, or internally errored. Inspect device logs under `System > Support`. |

> **TLS note**: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

### Response

**Status**: 200 OK

```json
[
    {
        "id": 1,
        "name": "flow-1",
        "memory_limit": 0,
        "secret": "",
        "tabs": [
            {
                "id": "d2c028f7.3edfd",
                "label": "Flow 1"
            },
            {
                "id": "6a066af5.d68d14",
                "label": "Flow 2"
            },
            {
                "id": "bf24c84c.f34d28",
                "label": "Flow 3"
            },
            {
                "id": "166b0a3cbcb7ad33",
                "label": "Flow 4"
            }
        ]
    },
    {
        "id": 2,
        "name": "flow-2",
        "memory_limit": 1024,
        "secret": "",
        "tabs": [
            {
                "id": "20c9a135.443d1e",
                "label": "Flow 1"
            }
        ]
    },
    {
        "id": 3,
        "name": "flow-3",
        "memory_limit": 1024,
        "secret": "",
        "tabs": [
            {
                "id": "1f4d06ac43dd7191",
                "label": "Flow 1"
            }
        ]
    }
]

Flow Status Events

GET {{edgeUrl}}/flows-manager/events

Flow Status Events

Streams the run state of every flow. The Flows Manager page uses it to update the status column without polling.

Endpoint

GET wss://{{edgeHost}}/flows-manager/events

WebSocket. Open wss://{{edgeHost}}/flows-manager/events with a WebSocket client; a plain HTTP GET does not stream. After importing this item, convert it to a Postman WebSocket request.

Authentication

HTTP Basic Auth on the WebSocket upgrade request. Username is your API token, password is empty. A token in the query string is not accepted.

An Origin header is not required by this service.

Messages

The first frame arrives right after the upgrade and lists every flow, so it doubles as a snapshot. Later frames are sent when a flow changes state. The example response lists the captured text frames, one JSON document per line.

Field Type Description
statuses[].name string Flow name.
statuses[].status string Run state, the same values as List Flows (for example RUNNING, STOPPED).
statuses[].last_error string Last error reported by the flow, empty when none.

Errors

Response When it happens
401 Unauthorized on the upgrade Missing or invalid Authorization header.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Response

Status: 200 OK

{"statuses":[{"name":"Testcase 5","status":"STOPPED","last_error":""}]}


Create Flow

POST {{edgeUrl}}/flows-manager/flows

Create Flow

Creates a new, empty flow runtime. The runtime starts with no tabs and no nodes; open the LE UI's Flows page to launch the Node-RED editor and design tabs inside it.

The method is POST. A GET to the same URL is List Flows and ignores any body.

Endpoint

POST {{edgeUrl}}/flows-manager/flows
Content-Type: application/json

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Request body

{
  "name": "flow-2",
  "memory_limit": 256,
  "secret": ""
}
Field Type Required Description
name string Yes Display name.
memory_limit integer No Memory cap in MB. 0 (or omit) for no explicit limit. Typical values: 128, 256, 512.
secret string No Encryption secret for flows_cred.json. Set on creation only; changing it later means re-entering every credential.
id integer No Ignored. The server assigns the next free ID (sending "id": 99 on a device with one flow returned 2).

Response

200 OK -- application/json. The created flow, with the ID the server assigned. Use that id as {{flow_id}} in the other Flows Manager calls.

{
  "id": 2,
  "name": "flow-2",
  "memory_limit": 256,
  "secret": ""
}

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Request Body

{
    "name": "flow-2",
    "memory_limit": 256,
    "secret": ""
}

Response

Status: 200 OK

{
    "id": 2,
    "name": "flow-2",
    "memory_limit": 256,
    "secret": ""
}

Stop Flow

PUT {{edgeUrl}}/flows-manager/flows/{{flow_id}}/stop

Stop Flow

Stops a running flow. The Node-RED runtime is shut down cleanly; in-flight messages drain, then the process exits. flows.json and other on-disk state are preserved, so Start Flow will resume from the same point.

Not idempotent: stopping a flow that is not running returns 400 with already stopped. That includes a flow started a moment ago whose runtime is not up yet.

Endpoint

PUT {{edgeUrl}}/flows-manager/flows/{{flow_id}}/stop

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Path parameters

Location Name Required Description
Path {{flow_id}} Yes Flow ID from List Flows.

No request body.

Response

204 No Content on success.

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Response

Status: 204 No Content


Start Flow

PUT {{edgeUrl}}/flows-manager/flows/{{flow_id}}/start

Start Flow

Starts a stopped flow. Flows Manager loads flows.json, installs any missing node_modules, and brings the Node-RED runtime online. Once started, the runtime is reachable on its assigned port (managed internally; consult the LE UI for the URL).

Idempotent for already-running flows.

Endpoint

PUT {{edgeUrl}}/flows-manager/flows/{{flow_id}}/start

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Path parameters

Location Name Required Description
Path {{flow_id}} Yes Flow ID from List Flows.

No request body.

Response

204 No Content on success. Start is asynchronous: the call returns before the runtime is up, and List Flows carries no status field to poll. A Stop Flow sent in the first few seconds can return 400 already stopped while the runtime still comes up, so wait several seconds before stopping. The Node-RED editor may take longer while node_modules install.

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Response

Status: 204 No Content


Start or Restart Flow in Safe Mode

PUT {{edgeUrl}}/flows-manager/flows/{{flow_id}}/safemode

Start or Restart Flow in Safe Mode

Starts a flow, or restarts a running one, in Node-RED safe mode: the editor comes up but the flow's nodes are not started. Use it to recover a flow that crashes or hangs on start, fix it in the editor, then deploy. This is the Start in Safe Mode / Restart in Safe Mode action on a flow card in the LE UI; both send the same request.

List Flows does not report whether a flow is in safe mode, so confirm the result in the Node-RED editor.

Endpoint

PUT {{edgeUrl}}/flows-manager/flows/{{flow_id}}/safemode

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Path parameters

Location Name Required Description
Path {{flow_id}} Yes Flow ID from List Flows.

No request body.

Response

204 No Content on success, with an empty body.

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Response

Status: 200 OK


Update Flow

PUT {{edgeUrl}}/flows-manager/flows/{{flow_id}}

Update Flow

Updates the name and/or memory_limit of an existing flow. The id and secret are immutable -- to change them, remove and recreate the flow.

The update applies immediately; no restart is required.

Endpoint

PUT {{edgeUrl}}/flows-manager/flows/{{flow_id}}
Content-Type: application/json

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Path parameters

Location Name Required Description
Path {{flow_id}} Yes Flow ID to update.

Request body

{
  "id": 4,
  "name": "api-flow-4",
  "memory_limit": 256
}
Field Type Required Description
id integer Yes Must match the path parameter.
name string Yes New display name.
memory_limit integer Yes New memory cap in MB. 0 for no limit.

Response

200 OK -- application/json. Echoes the updated flow.

{
  "id": 4,
  "name": "api-flow-4",
  "memory_limit": 256,
  "secret": ""
}

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Request Body

{
    "id": 4,
    "name":"api-flow-4",
    "memory_limit": 256
}

Response

Status: 200 OK

{
    "id": 4,
    "name": "api-flow-4",
    "memory_limit": 256,
    "secret": ""
}

Remove Flow

DELETE {{edgeUrl}}/flows-manager/flows/{{flow_id}}/option/instance

Remove Flow

Removes a flow entirely. The Node-RED runtime is stopped, the flow row is deleted, and all on-disk artifacts (flows.json, credentials, logs, installed node_modules) are removed.

For finer-grained cleanup (e.g. wipe logs without removing the flow), use the targeted Delete * endpoints.

Endpoint

DELETE {{edgeUrl}}/flows-manager/flows/{{flow_id}}/option/instance

The option/instance suffix selects the whole instance as the target. The same family of endpoints uses different option/<x> values for targeted file cleanup (flows.json, flows_cred.json, logs, node_modules).

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Path parameters

Location Name Required Description
Path {{flow_id}} Yes Flow ID to remove.

No request body.

Response

200 OK on success.

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

Recoverability

There is no undo -- removed flows are gone. Export flows.json via Download Flow File before deleting if you may want to recreate the flow.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Response

Status: 204 No Content


Download Flow File

GET {{edgeUrl}}/flows-manager/flows/{{flow_id}}/download

Download Flow File

Note: a flow that has never been opened in the Node-RED editor has no flows.json yet, so this returns 404 with not found.

Returns the Node-RED definition (flows.json) for the flow as a JSON document. This is the source-of-truth for the flow's tabs, nodes, wires, and configuration -- back it up regularly, version-control it, or use it to clone a flow onto another device.

Endpoint

GET {{edgeUrl}}/flows-manager/flows/{{flow_id}}/download

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Path parameters

Location Name Required Description
Path {{flow_id}} Yes Flow ID to download.

No request body.

Response

200 OK -- application/json. Top-level is an array of Node-RED objects. Tabs have type: "tab"; nodes have type: "<node-type>" (e.g. inject, function, http in).

[
  {
    "id": "f2a7ed7a11eeae6c",
    "type": "tab",
    "label": "Energy Monitoring",
    "disabled": false,
    "info": "",
    "env": []
  },
  {
    "id": "206292fe7131ded2",
    "type": "tab",
    "label": "Scheduled Work Order",
    "disabled": false,
    "info": "",
    "env": []
  }
]

To re-deploy a downloaded flows.json, use the Node-RED editor's Import feature on the destination device, or stop the target flow, overwrite its flows.json on disk, and start it again.

Secrets: flows.json does not contain credentials. Those live in flows_cred.json (encrypted with the flow's secret). Restoring a flow on a different device requires also copying flows_cred.json and using the same secret.

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Response

Status: 200 OK

[
    {
        "id": "f2a7ed7a11eeae6c",
        "type": "tab",
        "label": "Energy Monitoring",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "206292fe7131ded2",
        "type": "tab",
        "label": "Scheduled Work Order",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "2130e0063a8c5147",
        "type": "tab",
        "label": "Condition Based Monitoring (CBM)",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "3d5ab96d4599cd0f",
        "type": "tab",
        "label": "Common Data Model (CDM)",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "ebdecfa2769805b1",
        "type": "tab",
        "label": "CDM - DT",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "b58a87045c486f7c",
        "type": "tab",
        "label": "TimeDifference Due",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "344a471357a84606",
        "type": "group",
        "z": "2130e0063a8c5147",
        "name": "CBM Demo Flow",
        "style": {
            "stroke": "#92d04f",
            "label": true,
            "fill": "#e3f3d3"
        },
        "nodes": [
            "f0084a0d100d744d",
            "9483a53f5a24800d",
            "cf8d51bf3cddbac3",
            "ebd9a00145751dea",
            "0deaadc52a3f2e0a",
            "4dbfe0c77670d8bc",
            "bfe69d07953473c2",
            "de8a323d17d70ca1",
            "208304af1d5d1fb6",
            "d8961aed3cde1fbd",
            "a18bad4b61c2079b",
            "541278bcc620a54c",
            "89b424edc1a46a59",
            "ab69e67946c96482",
            "426416ad846c7574",
            "426040301f9d3df3",
            "4e1743be00869bb8",
            "fa53c1b01e6c090e",
            "3f84b97fd164acbe",
            "99b7c1174819f311",
            "f6d1379a7984f9e9",
            "2e856578c9a660a9",
            "33ec54f808a744a2"
        ],
        "x": 54,
        "y": 19,
        "w": 1952,
        "h": 322
    },
    {
        "id": "0903542732afd60e",
        "type": "group",
        "z": "2130e0063a8c5147",
        "name": "Sim Data with Temp & State",
        "style": {
            "stroke": "#92d04f",
            "label": true,
            "fill": "#e3f3d3"
        },
        "nodes": [
            "1e93ba93c309522a",
            "74ab7b04a4e7aa38",
            "3b932782560723d9",
            "caeca94050bdf06c",
            "f9b79c7a00cda2a0",
            "e96039e8a74f8c38",
            "1d08302769e3bfa9",
            "5155ac709ea90e98",
            "9ac529b17645ed25",
            "7554ba908ca19887",
            "5db9682c7bdc4ba4",
            "531a1f859d94917e",
            "d6719ae8d0b54fef",
            "f70595d196605113",
            "839930253bdd071d",
            "a917b0f50ddd67fd",
            "8e85b0ea74c35384",
            "811868bb9f06ec3a",
            "7e2642d156a8b5e3",
            "f222bfb36adcd1fb",
            "fc985480570da008",
            "abfedb6b68babf9c",
            "06b5471d82318f1e",
            "f11a8a8c3271b678",
            "08c17e87ba6161f3",
            "faaae58d18e2d8fd",
            "fc0baedc30a8cdaa",
            "bba7c28b301a7d50",
            "18e6652fde78e2cc",
            "d736c843edddc158",
            "e7d8ffbcb8bf8119",
            "29aaeafe0bc12306",
            "29e7173285ea6ebd",
            "5b20b1be48fdf8ed",
            "d68f20b29d16b31e",
            "97161e37eece7bf9"
        ],
        "x": 54,
        "y": 379,
        "w": 1612,
        "h": 662
    },
    {
        "id": "50dd4eba8ec312ce",
        "type": "influxdb",
        "d": true,
        "hostname": "localhost",
        "port": "8086",
        "protocol": "http",
        "database": "tsdata",
        "name": "tsdata",
        "usetls": false,
        "tls": "",
        "influxdbVersion": "1.x",
        "url": "http://localhost:8086",
        "rejectUnauthorized": true
    },
    {
        "id": "3bfa3ae2.5f317e",
        "type": "MSSQL-CN",
        "tdsVersion": "7_4",
        "name": "MSSQL",
        "server": "172.172.0.1",
        "port": "1433",
        "encyption": true,
        "trustServerCertificate": true,
        "database": "litmus",
        "useUTC": true,
        "connectTimeout": "15000",
        "requestTimeout": "15000",
        "cancelTimeout": "5000",
        "pool": "5",
        "parseJSON": false,
        "enableArithAbort": true
    },
    {
        "id": "2625f216e9b28a20",
        "type": "Datahub Connect",
        "ipadd": "127.0.0.1",
        "port": "4222"
    },
    {
        "id": "e7e26815.57718",
        "type": "Datahub Connect",
        "ipadd": "127.0.0.1",
        "port": "4222"
    },
    {
        "id": "f8704fc59be439b4",
        "type": "Datahub Connect",
        "ipadd": "127.0.0.1",
        "port": "4222"
    },
    {
        "id": "8e5f261c.f5b538",
        "type": "tls-config",
        "name": "Test",
        "cert": "",
        "key": "",
        "ca": "",
        "certname": "",
        "keyname": "",
        "caname": "",
        "servername": "",
        "verifyservercert": false
    },
    {
        "id": "bae6871353da5237",
        "type": "MySQLdatabase",
        "name": "",
        "host": "172.172.0.1",
        "port": "3306",
        "db": "litmus",
        "tz": "",
        "charset": "UTF8"
    },
    {
        "id": "a51e405c.10f64",
        "type": "MSSQL-CN",
        "tdsVersion": "7_4",
        "name": "MSSQL Server",
        "server": "172.172.0.1",
        "port": "1433",
        "encyption": false,
        "trustServerCertificate": false,
        "database": "litmus",
        "useUTC": false,
        "connectTimeout": "15000",
        "requestTimeout": "15000",
        "cancelTimeout": "5000",
        "pool": "5",
        "parseJSON": false,
        "enableArithAbort": true,
        "readOnlyIntent": false
    },
    {
        "id": "df8c0b88.91b0a8",
        "type": "MSSQL-CN",
        "name": "Dev",
        "server": "localhost",
        "port": "",
        "encyption": false,
        "trustServerCertificate": false,
        "database": "Dev",
        "useUTC": false,
        "connectTimeout": "",
        "requestTimeout": "",
        "cancelTimeout": "",
        "pool": "",
        "parseJSON": false,
        "enableArithAbort": true
    },
    {
        "id": "712b53e5.990dfc",
        "type": "mqtt-broker",
        "broker": "localhost",
        "port": "1883",
        "clientid": "NodeRedSQLClient",
        "usetls": false,
        "compatmode": true,
        "keepalive": "15",
        "cleansession": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "willTopic": "",
        "willQos": "0",
        "willPayload": ""
    },
    {
        "id": "5dc9c987a56098e7",
        "type": "comment",
        "z": "f2a7ed7a11eeae6c",
        "name": "Data from Device",
        "info": "",
        "x": 3120,
        "y": 2440,
        "wires": []
    },
    {
        "id": "a254de4309a3c206",
        "type": "Datahub Subscribe",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "devicehub.alias.P1_Electrical_Panel.L1_Machine1_1_S7_Power",
        "x": 3290,
        "y": 2500,
        "wires": [
            [
                "d5d4d6c5567e33a7"
            ]
        ]
    },
    {
        "id": "f410e5939c87a101",
        "type": "comment",
        "z": "f2a7ed7a11eeae6c",
        "name": "P1",
        "info": "",
        "x": 3080,
        "y": 2180,
        "wires": []
    },
    {
        "id": "875219f74ebb476f",
        "type": "comment",
        "z": "f2a7ed7a11eeae6c",
        "name": "API Energy Rates US",
        "info": "\n\n\n\nhttps://developer.nrel.gov/api/utility_rates/v3.json?api_key=W0MG0g1oAe2nja5Fs1WyMZNStNFP1OUGbCE2RkwU&address=London",
        "x": 3640,
        "y": 2300,
        "wires": []
    },
    {
        "id": "d5d4d6c5567e33a7",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 3630,
        "y": 2500,
        "wires": [
            [
                "579fd40b8dd178d5"
            ]
        ]
    },
    {
        "id": "579fd40b8dd178d5",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var extractedplant = msg.payload.metadata.plant;\nvar extractedline = msg.payload.metadata.line_tag;\nvar extractedmachine = msg.payload.metadata.name_tag;\nvar extractedpower = msg.payload.value || 0; // Default to 0 if null/undefined\nvar extractedtimestamp = msg.payload.timestamp;\n\nmsg.payload = {\n    plant: extractedplant,\n    line: extractedline,\n    machine: extractedmachine,\n    power: extractedpower,\n    timestamp: extractedtimestamp\n};\n\nreturn msg;\n\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 3800,
        "y": 2500,
        "wires": [
            [
                "f1add7e518bf8035"
            ]
        ]
    },
    {
        "id": "f1add7e518bf8035",
        "type": "join",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "mode": "custom",
        "build": "merged",
        "property": "payload",
        "propertyType": "msg",
        "key": "payload.outputs.industrial",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": true,
        "timeout": "",
        "count": "3",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 3960,
        "y": 2500,
        "wires": [
            []
        ]
    },
    {
        "id": "17d1190da741effb",
        "type": "Datahub Subscribe",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "devicehub.alias.P1_Electrical_Panel.L1_Machine2_1_S7_Power",
        "x": 3290,
        "y": 2560,
        "wires": [
            [
                "1524208733c74d61"
            ]
        ]
    },
    {
        "id": "c1c201110be45fb6",
        "type": "Datahub Publish",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "EnergyP1L1M1",
        "x": 4480,
        "y": 2500,
        "wires": []
    },
    {
        "id": "86b37a4fc3570a4b",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 4270,
        "y": 2500,
        "wires": [
            [
                "c1c201110be45fb6"
            ]
        ]
    },
    {
        "id": "1524208733c74d61",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 3630,
        "y": 2560,
        "wires": [
            [
                "4d418ff41071ce11"
            ]
        ]
    },
    {
        "id": "4d418ff41071ce11",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var extractedplant = msg.payload.metadata.plant;\nvar extractedline = msg.payload.metadata.line_tag;\nvar extractedmachine = msg.payload.metadata.name_tag;\nvar extractedpower = msg.payload.value || 0; // Default to 0 if null/undefined\nvar extractedtimestamp = msg.payload.timestamp;\n\nmsg.payload = {\n    plant: extractedplant,\n    line: extractedline,\n    machine: extractedmachine,\n    power: extractedpower,\n    timestamp: extractedtimestamp\n};\n\nreturn msg;\n\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 3800,
        "y": 2560,
        "wires": [
            [
                "b1832c46800626e9"
            ]
        ]
    },
    {
        "id": "b1832c46800626e9",
        "type": "join",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "mode": "custom",
        "build": "merged",
        "property": "payload",
        "propertyType": "msg",
        "key": "payload.outputs.industrial",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": true,
        "timeout": "",
        "count": "3",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 3960,
        "y": 2560,
        "wires": [
            [
                "0ad0f51e32abb97e"
            ]
        ]
    },
    {
        "id": "0e1c28a7282d1940",
        "type": "Datahub Publish",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "EnergyP1L1M2",
        "x": 4480,
        "y": 2560,
        "wires": []
    },
    {
        "id": "66de0f235bec9e29",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 4270,
        "y": 2560,
        "wires": [
            [
                "0e1c28a7282d1940"
            ]
        ]
    },
    {
        "id": "050a5a2e9ebf4b08",
        "type": "Datahub Subscribe",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "devicehub.alias.P1_Electrical_Panel.L1_Machine3_1_S7_Power",
        "x": 3290,
        "y": 2620,
        "wires": [
            [
                "807a1b01b15e056f"
            ]
        ]
    },
    {
        "id": "807a1b01b15e056f",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 3630,
        "y": 2620,
        "wires": [
            [
                "fa9225f91d3be5b4"
            ]
        ]
    },
    {
        "id": "fa9225f91d3be5b4",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var extractedplant = msg.payload.metadata.plant;\nvar extractedline = msg.payload.metadata.line_tag;\nvar extractedmachine = msg.payload.metadata.name_tag;\nvar extractedpower = msg.payload.value || 0; // Default to 0 if null/undefined\nvar extractedtimestamp = msg.payload.timestamp;\n\nmsg.payload = {\n    plant: extractedplant,\n    line: extractedline,\n    machine: extractedmachine,\n    power: extractedpower,\n    timestamp: extractedtimestamp\n};\n\nreturn msg;\n\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 3800,
        "y": 2620,
        "wires": [
            [
                "c03e177ab5906460"
            ]
        ]
    },
    {
        "id": "c03e177ab5906460",
        "type": "join",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "mode": "custom",
        "build": "merged",
        "property": "payload",
        "propertyType": "msg",
        "key": "payload.outputs.industrial",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": true,
        "timeout": "",
        "count": "3",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 3960,
        "y": 2620,
        "wires": [
            [
                "8ea33c32a0c08019"
            ]
        ]
    },
    {
        "id": "2819220fe4849a9d",
        "type": "Datahub Publish",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "EnergyP1L1M3",
        "x": 4480,
        "y": 2620,
        "wires": []
    },
    {
        "id": "724bc68356f68143",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 4270,
        "y": 2620,
        "wires": [
            [
                "2819220fe4849a9d"
            ]
        ]
    },
    {
        "id": "d32612932dd45947",
        "type": "Datahub Subscribe",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "devicehub.alias.P1_Electrical_Panel.L2_Machine1_1_S7_Power",
        "x": 3290,
        "y": 2680,
        "wires": [
            [
                "fc115f47e70ae62e"
            ]
        ]
    },
    {
        "id": "12ddb559b5ad116f",
        "type": "Datahub Subscribe",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "devicehub.alias.P1_Electrical_Panel.L2_Machine2_1_S7_Power",
        "x": 3290,
        "y": 2740,
        "wires": [
            [
                "cb18a244deccc5c0"
            ]
        ]
    },
    {
        "id": "2fa1926a0be18dcc",
        "type": "Datahub Subscribe",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "devicehub.alias.P1_Electrical_Panel.L2_Machine3_1_S7_Power",
        "x": 3290,
        "y": 2800,
        "wires": [
            [
                "5f799420f87d184e"
            ]
        ]
    },
    {
        "id": "fc115f47e70ae62e",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 3630,
        "y": 2680,
        "wires": [
            [
                "8ff82528d70b5323"
            ]
        ]
    },
    {
        "id": "8ff82528d70b5323",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var extractedplant = msg.payload.metadata.plant;\nvar extractedline = msg.payload.metadata.line_tag;\nvar extractedmachine = msg.payload.metadata.name_tag;\nvar extractedpower = msg.payload.value || 0; // Default to 0 if null/undefined\nvar extractedtimestamp = msg.payload.timestamp;\n\nmsg.payload = {\n    plant: extractedplant,\n    line: extractedline,\n    machine: extractedmachine,\n    power: extractedpower,\n    timestamp: extractedtimestamp\n};\n\nreturn msg;\n\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 3800,
        "y": 2680,
        "wires": [
            [
                "43e9bad85519783c"
            ]
        ]
    },
    {
        "id": "43e9bad85519783c",
        "type": "join",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "mode": "custom",
        "build": "merged",
        "property": "payload",
        "propertyType": "msg",
        "key": "payload.outputs.industrial",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": true,
        "timeout": "",
        "count": "3",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 3960,
        "y": 2680,
        "wires": [
            [
                "5137c6f87784c40a"
            ]
        ]
    },
    {
        "id": "1435b4067db2a95a",
        "type": "Datahub Publish",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "EnergyP1L2M1",
        "x": 4480,
        "y": 2680,
        "wires": []
    },
    {
        "id": "806933c7ae04f8f9",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 4270,
        "y": 2680,
        "wires": [
            [
                "1435b4067db2a95a"
            ]
        ]
    },
    {
        "id": "cb18a244deccc5c0",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 3630,
        "y": 2740,
        "wires": [
            [
                "4ab88553fa42c9d3"
            ]
        ]
    },
    {
        "id": "4ab88553fa42c9d3",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var extractedplant = msg.payload.metadata.plant;\nvar extractedline = msg.payload.metadata.line_tag;\nvar extractedmachine = msg.payload.metadata.name_tag;\nvar extractedpower = msg.payload.value || 0; // Default to 0 if null/undefined\nvar extractedtimestamp = msg.payload.timestamp;\n\nmsg.payload = {\n    plant: extractedplant,\n    line: extractedline,\n    machine: extractedmachine,\n    power: extractedpower,\n    timestamp: extractedtimestamp\n};\n\nreturn msg;\n\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 3800,
        "y": 2740,
        "wires": [
            [
                "883585b04829d7ff"
            ]
        ]
    },
    {
        "id": "883585b04829d7ff",
        "type": "join",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "mode": "custom",
        "build": "merged",
        "property": "payload",
        "propertyType": "msg",
        "key": "payload.outputs.industrial",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": true,
        "timeout": "",
        "count": "3",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 3960,
        "y": 2740,
        "wires": [
            [
                "2ef9fd37ab437ced"
            ]
        ]
    },
    {
        "id": "a052cd5452006998",
        "type": "Datahub Publish",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "EnergyP1L2M2",
        "x": 4480,
        "y": 2740,
        "wires": []
    },
    {
        "id": "dbfbfc34804e7d1b",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 4270,
        "y": 2740,
        "wires": [
            [
                "a052cd5452006998"
            ]
        ]
    },
    {
        "id": "5f799420f87d184e",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 3630,
        "y": 2800,
        "wires": [
            [
                "7f31cea5bce60770"
            ]
        ]
    },
    {
        "id": "7f31cea5bce60770",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var extractedplant = msg.payload.metadata.plant;\nvar extractedline = msg.payload.metadata.line_tag;\nvar extractedmachine = msg.payload.metadata.name_tag;\nvar extractedpower = msg.payload.value || 0; // Default to 0 if null/undefined\nvar extractedtimestamp = msg.payload.timestamp;\n\nmsg.payload = {\n    plant: extractedplant,\n    line: extractedline,\n    machine: extractedmachine,\n    power: extractedpower,\n    timestamp: extractedtimestamp\n};\n\nreturn msg;\n\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 3800,
        "y": 2800,
        "wires": [
            [
                "21864ac7c0ea48ca"
            ]
        ]
    },
    {
        "id": "21864ac7c0ea48ca",
        "type": "join",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "mode": "custom",
        "build": "merged",
        "property": "payload",
        "propertyType": "msg",
        "key": "payload.outputs.industrial",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": true,
        "timeout": "",
        "count": "3",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 3960,
        "y": 2800,
        "wires": [
            [
                "8ee5184efd4097d9"
            ]
        ]
    },
    {
        "id": "de9e85211cfd719e",
        "type": "Datahub Publish",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "EnergyP1L2M3",
        "x": 4480,
        "y": 2800,
        "wires": []
    },
    {
        "id": "136a94cab717d585",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 4270,
        "y": 2800,
        "wires": [
            [
                "de9e85211cfd719e"
            ]
        ]
    },
    {
        "id": "d9f2576129cd377e",
        "type": "http request",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "body",
        "url": "https://developer.nrel.gov/api/utility_rates/v3.json?api_key=W0MG0g1oAe2nja5Fs1WyMZNStNFP1OUGbCE2RkwU&address={{{query}}}",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "x": 3610,
        "y": 2360,
        "wires": [
            []
        ]
    },
    {
        "id": "ecfc1655b03f5ad9",
        "type": "inject",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "60",
        "crontab": "",
        "once": false,
        "onceDelay": "1",
        "topic": "",
        "payload": "Seattle",
        "payloadType": "str",
        "x": 3200,
        "y": 2280,
        "wires": [
            []
        ]
    },
    {
        "id": "1d586de26f682738",
        "type": "change",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "query",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 3420,
        "y": 2360,
        "wires": [
            [
                "d9f2576129cd377e"
            ]
        ]
    },
    {
        "id": "8d958d7e02d990e1",
        "type": "inject",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "60",
        "crontab": "",
        "once": false,
        "onceDelay": "1",
        "topic": "",
        "payload": "Dallas",
        "payloadType": "str",
        "x": 3200,
        "y": 2320,
        "wires": [
            []
        ]
    },
    {
        "id": "ba9980ac8c6bc73b",
        "type": "http request",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "https://api.openweathermap.org/data/2.5/weather?q={{{query}}}&appid=2468739f600808df61e96ee0fd93dd95&units=metric",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "x": 3610,
        "y": 2240,
        "wires": [
            [
                "8fb3b25e40c027ba"
            ]
        ]
    },
    {
        "id": "618e49dcef7e8b2f",
        "type": "comment",
        "z": "f2a7ed7a11eeae6c",
        "name": "Weather API",
        "info": "",
        "x": 3610,
        "y": 2180,
        "wires": []
    },
    {
        "id": "ff54145e99f4215c",
        "type": "change",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "query",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 3420,
        "y": 2240,
        "wires": [
            [
                "ba9980ac8c6bc73b"
            ]
        ]
    },
    {
        "id": "8fb3b25e40c027ba",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var extractedtemp = msg.payload.main.temp;\nvar extractedhumidity = msg.payload.main.humidity;\n\nmsg.payload = {\n    temperature: extractedtemp,\n    humidity: extractedhumidity\n};\n\nreturn msg;\n\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 3780,
        "y": 2240,
        "wires": [
            [
                "f1add7e518bf8035",
                "b1832c46800626e9",
                "c03e177ab5906460",
                "43e9bad85519783c",
                "883585b04829d7ff",
                "21864ac7c0ea48ca"
            ]
        ]
    },
    {
        "id": "06dffab025dd8319",
        "type": "inject",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "60",
        "crontab": "",
        "once": true,
        "onceDelay": "1",
        "topic": "",
        "payload": "Chicago",
        "payloadType": "str",
        "x": 3200,
        "y": 2360,
        "wires": [
            [
                "1d586de26f682738",
                "ff54145e99f4215c"
            ]
        ]
    },
    {
        "id": "2da517e1b5a31952",
        "type": "debug",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 4650,
        "y": 2140,
        "wires": []
    },
    {
        "id": "0ad0f51e32abb97e",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var extractedplant = msg.payload.plant;\nvar extractedline = msg.payload.line;\nvar extractedmachine = msg.payload.machine;\nvar extractedpower = msg.payload.power;\nvar extractedprice = msg.payload.price;\nvar extractedtimestamp = msg.payload.timestamp;\nvar extractedaddress = msg.payload.address;\nvar extractedutility = msg.payload.utility;\nvar extracttotal = msg.payload.price * msg.payload.power;\nvar extractedtemp = msg.payload.temperature\nvar extractedhumidity = msg.payload.humidity;\n\nmsg.payload = {\n    plant: extractedplant,\n    line: extractedline,\n    machine: extractedmachine,\n    power: extractedpower,\n    cost: extractedprice,\n    value: extracttotal,\n    timestamp: extractedtimestamp,\n    city: extractedaddress,\n    provider: extractedutility,\n    temperature: extractedtemp,\n    humidity: extractedhumidity\n   \n};\n\nreturn msg;\n\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 4100,
        "y": 2560,
        "wires": [
            [
                "66de0f235bec9e29"
            ]
        ]
    },
    {
        "id": "8ea33c32a0c08019",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var extractedplant = msg.payload.plant;\nvar extractedline = msg.payload.line;\nvar extractedmachine = msg.payload.machine;\nvar extractedpower = msg.payload.power;\nvar extractedprice = msg.payload.price;\nvar extractedtimestamp = msg.payload.timestamp;\nvar extractedaddress = msg.payload.address;\nvar extractedutility = msg.payload.utility;\nvar extracttotal = msg.payload.price * msg.payload.power;\nvar extractedtemp = msg.payload.temperature\nvar extractedhumidity = msg.payload.humidity;\n\nmsg.payload = {\n    plant: extractedplant,\n    line: extractedline,\n    machine: extractedmachine,\n    power: extractedpower,\n    cost: extractedprice,\n    value: extracttotal,\n    timestamp: extractedtimestamp,\n    city: extractedaddress,\n    provider: extractedutility,\n    temperature: extractedtemp,\n    humidity: extractedhumidity\n   \n};\n\nreturn msg;\n\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 4100,
        "y": 2620,
        "wires": [
            [
                "724bc68356f68143"
            ]
        ]
    },
    {
        "id": "5137c6f87784c40a",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var extractedplant = msg.payload.plant;\nvar extractedline = msg.payload.line;\nvar extractedmachine = msg.payload.machine;\nvar extractedpower = msg.payload.power;\nvar extractedprice = msg.payload.price;\nvar extractedtimestamp = msg.payload.timestamp;\nvar extractedaddress = msg.payload.address;\nvar extractedutility = msg.payload.utility;\nvar extracttotal = msg.payload.price * msg.payload.power;\nvar extractedtemp = msg.payload.temperature\nvar extractedhumidity = msg.payload.humidity;\n\nmsg.payload = {\n    plant: extractedplant,\n    line: extractedline,\n    machine: extractedmachine,\n    power: extractedpower,\n    cost: extractedprice,\n    value: extracttotal,\n    timestamp: extractedtimestamp,\n    city: extractedaddress,\n    provider: extractedutility,\n    temperature: extractedtemp,\n    humidity: extractedhumidity\n   \n};\n\nreturn msg;\n\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 4100,
        "y": 2680,
        "wires": [
            [
                "806933c7ae04f8f9"
            ]
        ]
    },
    {
        "id": "2ef9fd37ab437ced",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var extractedplant = msg.payload.plant;\nvar extractedline = msg.payload.line;\nvar extractedmachine = msg.payload.machine;\nvar extractedpower = msg.payload.power;\nvar extractedprice = msg.payload.price;\nvar extractedtimestamp = msg.payload.timestamp;\nvar extractedaddress = msg.payload.address;\nvar extractedutility = msg.payload.utility;\nvar extracttotal = msg.payload.price * msg.payload.power;\nvar extractedtemp = msg.payload.temperature\nvar extractedhumidity = msg.payload.humidity;\n\nmsg.payload = {\n    plant: extractedplant,\n    line: extractedline,\n    machine: extractedmachine,\n    power: extractedpower,\n    cost: extractedprice,\n    value: extracttotal,\n    timestamp: extractedtimestamp,\n    city: extractedaddress,\n    provider: extractedutility,\n    temperature: extractedtemp,\n    humidity: extractedhumidity\n   \n};\n\nreturn msg;\n\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 4100,
        "y": 2740,
        "wires": [
            [
                "dbfbfc34804e7d1b"
            ]
        ]
    },
    {
        "id": "8ee5184efd4097d9",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var extractedplant = msg.payload.plant;\nvar extractedline = msg.payload.line;\nvar extractedmachine = msg.payload.machine;\nvar extractedpower = msg.payload.power;\nvar extractedprice = msg.payload.price;\nvar extractedtimestamp = msg.payload.timestamp;\nvar extractedaddress = msg.payload.address;\nvar extractedutility = msg.payload.utility;\nvar extracttotal = msg.payload.price * msg.payload.power;\nvar extractedtemp = msg.payload.temperature\nvar extractedhumidity = msg.payload.humidity;\n\nmsg.payload = {\n    plant: extractedplant,\n    line: extractedline,\n    machine: extractedmachine,\n    power: extractedpower,\n    cost: extractedprice,\n    value: extracttotal,\n    timestamp: extractedtimestamp,\n    city: extractedaddress,\n    provider: extractedutility,\n    temperature: extractedtemp,\n    humidity: extractedhumidity\n   \n};\n\nreturn msg;\n\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 4100,
        "y": 2800,
        "wires": [
            [
                "136a94cab717d585"
            ]
        ]
    },
    {
        "id": "2560af2ef340c45b",
        "type": "change",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "rate",
                "pt": "flow",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 4000,
        "y": 2360,
        "wires": [
            []
        ]
    },
    {
        "id": "9914bb47c279bc64",
        "type": "template",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "field": "payload",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "",
        "output": "str",
        "x": 4660,
        "y": 2380,
        "wires": [
            [
                "4d3a484066b8c752"
            ]
        ]
    },
    {
        "id": "92aa85daf143172b",
        "type": "inject",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 4340,
        "y": 2360,
        "wires": [
            [
                "8796fb2535f2f482"
            ]
        ]
    },
    {
        "id": "8796fb2535f2f482",
        "type": "change",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "",
                "tot": "date"
            },
            {
                "t": "set",
                "p": "template",
                "pt": "msg",
                "to": "time: {{payload}}",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 4550,
        "y": 2340,
        "wires": [
            [
                "9914bb47c279bc64"
            ]
        ]
    },
    {
        "id": "4d3a484066b8c752",
        "type": "debug",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 4830,
        "y": 2380,
        "wires": []
    },
    {
        "id": "d150ebca2416beea",
        "type": "inject",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "60",
        "crontab": "",
        "once": false,
        "onceDelay": "1",
        "topic": "",
        "payload": "Seattle",
        "payloadType": "str",
        "x": 200,
        "y": 140,
        "wires": [
            [
                "95c32a59bd40e3fe"
            ]
        ]
    },
    {
        "id": "8a4fb4f67a31555c",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var extractedplant = msg.payload.plant;\nvar extractedline = msg.payload.line;\nvar extractedmachine = msg.payload.machine;\nvar extractedpower = msg.payload.power;\nvar extractedprice = msg.payload.price;\nvar extractedtimestamp = msg.payload.timestamp;\nvar extractedaddress = msg.payload.address;\nvar extractedutility = msg.payload.utility;\nvar extracttotal = msg.payload.price * msg.payload.power;\nvar extractedtemp = msg.payload.temperature\nvar extractedhumidity = msg.payload.humidity;\n\nvar obj = flow.get('rate');\n\n   value:obj.price;// extracttotal,\n\nmsg.payload = {\n    plant: extractedplant,\n    line: extractedline,\n    machine: extractedmachine,\n    power: extractedpower,\n    cost: extractedprice,\n    value:obj.price,// extracttotal,\n    timestamp: extractedtimestamp,\n    city: extractedaddress,\n    provider: extractedutility,\n    temperature: extractedtemp,\n    humidity: extractedhumidity\n   \n};\n\nreturn msg;\n\n\n\n",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 4100,
        "y": 2500,
        "wires": [
            [
                "86b37a4fc3570a4b"
            ]
        ]
    },
    {
        "id": "2c7721326d7626d3",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var extractedAddress = msg.payload.inputs.address;\nvar extractedUtilityName = msg.payload.outputs.utility_name;\nvar extractedPriceIndustrial = msg.payload.outputs.industrial;\n\nmsg.payload = {\n    address: extractedAddress,\n    utility: extractedUtilityName,\n    price: extractedPriceIndustrial\n};\n\nflow.set ()\n\nreturn msg;\n\n\n\n// Extract information from the incoming payload\n//var extractedTemperature = msg.payload.data.temperature;\n//var extractedHumidity = msg.payload.data.humidity;\n\n// Create a new msg object with the extracted data\n//msg.payload = {\n  //temperature: extractedTemperature,\n  //humidity: extractedHumidity\n//};\n//msg.newKey = \"new value\"; // You can also add new properties to the msg object if needed\n//return msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 3780,
        "y": 2360,
        "wires": [
            []
        ]
    },
    {
        "id": "a291187439e20806",
        "type": "http request",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "https://api.openweathermap.org/data/2.5/weather?q={{{query}}}&appid=2468739f600808df61e96ee0fd93dd95&units=metric",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 590,
        "y": 140,
        "wires": [
            [
                "b275bdc94d425cf6",
                "46d58b7b3f90e315"
            ]
        ]
    },
    {
        "id": "f7e26b90eb58d447",
        "type": "comment",
        "z": "f2a7ed7a11eeae6c",
        "name": "Weather API",
        "info": "",
        "x": 590,
        "y": 100,
        "wires": []
    },
    {
        "id": "95c32a59bd40e3fe",
        "type": "change",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "query",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 400,
        "y": 140,
        "wires": [
            [
                "a291187439e20806"
            ]
        ]
    },
    {
        "id": "3d54146594812356",
        "type": "comment",
        "z": "f2a7ed7a11eeae6c",
        "name": "API Energy Rates US",
        "info": "\n\n\n\nhttps://developer.nrel.gov/api/utility_rates/v3.json?api_key=W0MG0g1oAe2nja5Fs1WyMZNStNFP1OUGbCE2RkwU&address=London",
        "x": 620,
        "y": 220,
        "wires": []
    },
    {
        "id": "b275bdc94d425cf6",
        "type": "change",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "P1Weather",
                "pt": "flow",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 790,
        "y": 140,
        "wires": [
            []
        ]
    },
    {
        "id": "466ba1bd99cacb70",
        "type": "inject",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "60",
        "crontab": "",
        "once": false,
        "onceDelay": "1",
        "topic": "",
        "payload": "Dallas",
        "payloadType": "str",
        "x": 160,
        "y": 540,
        "wires": [
            [
                "05ec117ded66c0ca"
            ]
        ]
    },
    {
        "id": "ede8685b51c528df",
        "type": "http request",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "https://api.openweathermap.org/data/2.5/weather?q={{{query}}}&appid=2468739f600808df61e96ee0fd93dd95&units=metric",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "x": 590,
        "y": 540,
        "wires": [
            [
                "55ff1004273a862b"
            ]
        ]
    },
    {
        "id": "4e65a89ab73e820b",
        "type": "comment",
        "z": "f2a7ed7a11eeae6c",
        "name": "Weather API",
        "info": "",
        "x": 590,
        "y": 500,
        "wires": []
    },
    {
        "id": "05ec117ded66c0ca",
        "type": "change",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "query",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 400,
        "y": 540,
        "wires": [
            [
                "ede8685b51c528df"
            ]
        ]
    },
    {
        "id": "b058dbfc5f7e6268",
        "type": "comment",
        "z": "f2a7ed7a11eeae6c",
        "name": "API Energy Rates US",
        "info": "\n\n\n\nhttps://developer.nrel.gov/api/utility_rates/v3.json?api_key=W0MG0g1oAe2nja5Fs1WyMZNStNFP1OUGbCE2RkwU&address=London",
        "x": 620,
        "y": 620,
        "wires": []
    },
    {
        "id": "55ff1004273a862b",
        "type": "change",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "P2Weather",
                "pt": "flow",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 790,
        "y": 540,
        "wires": [
            [
                "f625293c74831f95"
            ]
        ]
    },
    {
        "id": "4999fe3cfa3efdfc",
        "type": "comment",
        "z": "f2a7ed7a11eeae6c",
        "name": "P1",
        "info": "",
        "x": 120,
        "y": 100,
        "wires": []
    },
    {
        "id": "6f5e467909c2575b",
        "type": "comment",
        "z": "f2a7ed7a11eeae6c",
        "name": "P2",
        "info": "",
        "x": 120,
        "y": 480,
        "wires": []
    },
    {
        "id": "d4142e64a6450c99",
        "type": "comment",
        "z": "f2a7ed7a11eeae6c",
        "name": "Get Flow",
        "info": "",
        "x": 780,
        "y": 720,
        "wires": []
    },
    {
        "id": "c4e021b9602d3c2d",
        "type": "Datahub Subscribe",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "devicehub.alias.*.Power",
        "x": 160,
        "y": 780,
        "wires": [
            [
                "8edc93339d6d0f53",
                "b86b724bd642ba9d"
            ]
        ]
    },
    {
        "id": "699a50bff815dd9e",
        "type": "debug",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 750,
        "y": 840,
        "wires": []
    },
    {
        "id": "8edc93339d6d0f53",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 370,
        "y": 780,
        "wires": [
            [
                "57cdb920e77db8d1"
            ]
        ]
    },
    {
        "id": "57cdb920e77db8d1",
        "type": "switch",
        "z": "f2a7ed7a11eeae6c",
        "name": "Plant filter",
        "property": "payload.metadata.plant",
        "propertyType": "msg",
        "rules": [
            {
                "t": "cont",
                "v": "Plant 2",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 560,
        "y": 780,
        "wires": [
            [
                "699a50bff815dd9e",
                "62b292223ae3648e"
            ]
        ]
    },
    {
        "id": "62b292223ae3648e",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var myObject = flow.get(\"P2EnergyUS\");\nvar myObject1 = flow.get(\"P2Weather\");\n\nmsg.payload.EnergyUS = myObject;\nmsg.payload.Weather = myObject1;\n\n\nreturn msg;\n",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 760,
        "y": 780,
        "wires": [
            [
                "ff62acc635e389f5",
                "09216c361bb670cf"
            ]
        ]
    },
    {
        "id": "ff62acc635e389f5",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "//Data from Devicehub\nvar extractedplant = msg.payload.metadata.plant;\nvar extractedline = msg.payload.metadata.line;\nvar extractedmachine = msg.payload.metadata.name;\nvar extractedpower = msg.payload.value || 0; // Default to 0 if null/undefined\n//every 30s power \"value\" in kW from PLC therefore divided 120 to get kWh \nvar extractedenergy = msg.payload.value / 120; \nvar extractrunningcost = (msg.payload.value / 120) * msg.payload.EnergyUS.outputs.industrial;\nvar extractedtimestamp = msg.payload.timestamp;\n\n//Data from utility API\nvar extractedenergyaddress = msg.payload.Weather.name;\nvar extractedenergyutility = msg.payload.EnergyUS.outputs.utility_name;\nvar extractedenergyprice = msg.payload.EnergyUS.outputs.industrial;\n\n//Data from weather API\nvar extractweathertemp = msg.payload.Weather.main.temp;\nvar extracthumidity = msg.payload.Weather.main.humidity;\nvar extracticon = msg.payload.Weather.weather[0].icon;\n\nmsg.payload = {\n    plant: extractedplant,\n    line: extractedline,\n    machine: extractedmachine,\n    value: extractedpower,\n    energy: extractedenergy,\n    runningcost: extractrunningcost,\n    timestamp: extractedtimestamp,\n    city: extractedenergyaddress,\n    energyprovider: extractedenergyutility,\n    energyprice: extractedenergyprice,\n    ambienttemp: extractweathertemp, \n    humidity: extracthumidity,\n    icon: extracticon\n    \n};\n\n\nreturn msg;\n\n\n\n",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1080,
        "y": 780,
        "wires": [
            [
                "a39f8b7f660ededf",
                "6662277ef757f734"
            ]
        ]
    },
    {
        "id": "a39f8b7f660ededf",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 1250,
        "y": 780,
        "wires": [
            [
                "d29cf391cca88df9"
            ]
        ]
    },
    {
        "id": "d29cf391cca88df9",
        "type": "Datahub Publish",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "P2_EnergyMonitoring",
        "x": 1520,
        "y": 780,
        "wires": []
    },
    {
        "id": "6662277ef757f734",
        "type": "debug",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1370,
        "y": 840,
        "wires": []
    },
    {
        "id": "8c70505e160cc93e",
        "type": "Datahub Subscribe",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "devicehub.alias.*.Power",
        "x": 180,
        "y": 380,
        "wires": [
            [
                "514c65c552bac953"
            ]
        ]
    },
    {
        "id": "514c65c552bac953",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 390,
        "y": 380,
        "wires": [
            [
                "de0c3783ad600b8e"
            ]
        ]
    },
    {
        "id": "de0c3783ad600b8e",
        "type": "switch",
        "z": "f2a7ed7a11eeae6c",
        "name": "Plant filter",
        "property": "payload.metadata.plant",
        "propertyType": "msg",
        "rules": [
            {
                "t": "cont",
                "v": "Plant 1",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 580,
        "y": 380,
        "wires": [
            [
                "ab62de01062ae077"
            ]
        ]
    },
    {
        "id": "ab62de01062ae077",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "var myObject = flow.get(\"P1EnergyUS\");\nvar myObject1 = flow.get(\"P1Weather\");\n\nmsg.payload.EnergyUS = myObject;\nmsg.payload.Weather = myObject1;\n\n\nreturn msg;\n",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 820,
        "y": 380,
        "wires": [
            [
                "a9a5e6d769919677",
                "7315235c37b40f12"
            ]
        ]
    },
    {
        "id": "a9a5e6d769919677",
        "type": "function",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "func": "//Data from Devicehub\nvar extractedplant = msg.payload.metadata.plant;\nvar extractedline = msg.payload.metadata.line;\nvar extractedmachine = msg.payload.metadata.name;\nvar extractedpower = msg.payload.value || 0; // Default to 0 if null/undefined\n//every 30s power \"value\" in kW from PLC therefore divided 120 to get kWh \nvar extractedenergy = msg.payload.value / 120; \nvar extractrunningcost = (msg.payload.value / 120) * msg.payload.EnergyUS.outputs.industrial;\nvar extractedtimestamp = msg.payload.timestamp;\n\n//Data from utility API\nvar extractedenergyaddress = msg.payload.Weather.name;\nvar extractedenergyutility = msg.payload.EnergyUS.outputs.utility_name;\nvar extractedenergyprice = msg.payload.EnergyUS.outputs.industrial;\n\n//Data from weather API\nvar extractweathertemp = msg.payload.Weather.main.temp;\nvar extracthumidity = msg.payload.Weather.main.humidity;\nvar extracticon = msg.payload.Weather.weather[0].icon;\n\nmsg.payload = {\n    plant: extractedplant,\n    line: extractedline,\n    machine: extractedmachine,\n    value: extractedpower,\n    energy: extractedenergy,\n    runningcost: extractrunningcost,\n    timestamp: extractedtimestamp,\n    city: extractedenergyaddress,\n    energyprovider: extractedenergyutility,\n    energyprice: extractedenergyprice,\n    ambienttemp: extractweathertemp, \n    humidity: extracthumidity,\n    icon: extracticon\n    \n    \n};\n\n\nreturn msg;\n\n\n\n",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1100,
        "y": 380,
        "wires": [
            [
                "6f56a9089a8f43cf",
                "a1760dde4a183561"
            ]
        ]
    },
    {
        "id": "6f56a9089a8f43cf",
        "type": "json",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 1270,
        "y": 380,
        "wires": [
            [
                "c434ce66cb7975ce"
            ]
        ]
    },
    {
        "id": "c434ce66cb7975ce",
        "type": "Datahub Publish",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "P1_EnergyMonitoring",
        "x": 1540,
        "y": 380,
        "wires": []
    },
    {
        "id": "a1760dde4a183561",
        "type": "debug",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1310,
        "y": 420,
        "wires": []
    },
    {
        "id": "a11fa5d6dffb310c",
        "type": "comment",
        "z": "f2a7ed7a11eeae6c",
        "name": "Get Flow",
        "info": "",
        "x": 780,
        "y": 320,
        "wires": []
    },
    {
        "id": "46d58b7b3f90e315",
        "type": "debug",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 950,
        "y": 80,
        "wires": []
    },
    {
        "id": "b86b724bd642ba9d",
        "type": "debug",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 410,
        "y": 860,
        "wires": []
    },
    {
        "id": "7315235c37b40f12",
        "type": "debug",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 990,
        "y": 320,
        "wires": []
    },
    {
        "id": "09216c361bb670cf",
        "type": "debug",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 990,
        "y": 840,
        "wires": []
    },
    {
        "id": "f625293c74831f95",
        "type": "debug",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1030,
        "y": 540,
        "wires": []
    },
    {
        "id": "4ef7dd810b59a25c",
        "type": "inject",
        "z": "f2a7ed7a11eeae6c",
        "name": "Seattle",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": "5",
        "topic": "",
        "payload": "Seattle",
        "payloadType": "str",
        "x": 80,
        "y": 260,
        "wires": [
            [
                "a00101942e53eaf7"
            ]
        ]
    },
    {
        "id": "a00101942e53eaf7",
        "type": "http request",
        "z": "f2a7ed7a11eeae6c",
        "name": "Fetch Geocode",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "http://api.openweathermap.org/geo/1.0/direct?q={{payload}}&limit=1&appid=2468739f600808df61e96ee0fd93dd95",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 270,
        "y": 260,
        "wires": [
            [
                "9088e1f6073f1fbe"
            ]
        ]
    },
    {
        "id": "24f54c89c52fd27b",
        "type": "http request",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "body",
        "url": "https://developer.nrel.gov/api/utility_rates/v3.json?api_key=OuTghutknyKE2fyOeLEvkp5Csm5O8kRvcfoyQVEs&lon={{{lon}}}&lat={{{lat}}}",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 680,
        "y": 260,
        "wires": [
            [
                "75324d89d1ba2307"
            ]
        ]
    },
    {
        "id": "75324d89d1ba2307",
        "type": "change",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "P1EnergyUS",
                "pt": "flow",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 890,
        "y": 260,
        "wires": [
            []
        ]
    },
    {
        "id": "9088e1f6073f1fbe",
        "type": "change",
        "z": "f2a7ed7a11eeae6c",
        "name": "Extract Lat",
        "rules": [
            {
                "t": "set",
                "p": "lat",
                "pt": "msg",
                "to": "msg.payload[0].lat",
                "tot": "jsonata"
            },
            {
                "t": "set",
                "p": "lon",
                "pt": "msg",
                "to": "msg.payload[0].lon",
                "tot": "jsonata"
            }
        ],
        "x": 480,
        "y": 260,
        "wires": [
            [
                "24f54c89c52fd27b"
            ]
        ]
    },
    {
        "id": "46737db9d7eacbe9",
        "type": "inject",
        "z": "f2a7ed7a11eeae6c",
        "name": "Dallas",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": "5",
        "topic": "",
        "payload": "Dallas",
        "payloadType": "str",
        "x": 140,
        "y": 660,
        "wires": [
            [
                "bbeef1e6a452bef2"
            ]
        ]
    },
    {
        "id": "bbeef1e6a452bef2",
        "type": "http request",
        "z": "f2a7ed7a11eeae6c",
        "name": "Fetch Geocode",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "http://api.openweathermap.org/geo/1.0/direct?q={{payload}}&limit=1&appid=2468739f600808df61e96ee0fd93dd95",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 340,
        "y": 660,
        "wires": [
            [
                "640078d7ffe56f56"
            ]
        ]
    },
    {
        "id": "d1823e6bac5c9744",
        "type": "http request",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "body",
        "url": "https://developer.nrel.gov/api/utility_rates/v3.json?api_key=OuTghutknyKE2fyOeLEvkp5Csm5O8kRvcfoyQVEs&lon={{{lon}}}&lat={{{lat}}}",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 750,
        "y": 660,
        "wires": [
            [
                "f93024c46bfdbbb2"
            ]
        ]
    },
    {
        "id": "f93024c46bfdbbb2",
        "type": "change",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "P2EnergyUS",
                "pt": "flow",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 960,
        "y": 660,
        "wires": [
            []
        ]
    },
    {
        "id": "640078d7ffe56f56",
        "type": "change",
        "z": "f2a7ed7a11eeae6c",
        "name": "Extract Lat",
        "rules": [
            {
                "t": "set",
                "p": "lat",
                "pt": "msg",
                "to": "msg.payload[0].lat",
                "tot": "jsonata"
            },
            {
                "t": "set",
                "p": "lon",
                "pt": "msg",
                "to": "msg.payload[0].lon",
                "tot": "jsonata"
            }
        ],
        "x": 550,
        "y": 660,
        "wires": [
            [
                "d1823e6bac5c9744"
            ]
        ]
    },
    {
        "id": "61bb0e5a51004e6e",
        "type": "inject",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 180,
        "y": 980,
        "wires": [
            [
                "9dda9064a3f05831"
            ]
        ]
    },
    {
        "id": "9dda9064a3f05831",
        "type": "http request",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "body",
        "url": "https://api.openei.org/utility_rates?version=6&country=USA&api_key=AlEx3fwVfqY03hRVybzYfeNd6Cuu81lyZxyegsO3",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 450,
        "y": 980,
        "wires": [
            [
                "c2d5a2268a0ec6e2"
            ]
        ]
    },
    {
        "id": "c2d5a2268a0ec6e2",
        "type": "debug",
        "z": "f2a7ed7a11eeae6c",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 730,
        "y": 980,
        "wires": []
    },
    {
        "id": "fa57280a63aa8902",
        "type": "Datahub Subscribe",
        "z": "206292fe7131ded2",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "digitaltwins_CBM_WO_scrap",
        "x": 140,
        "y": 200,
        "wires": [
            [
                "7f22923acb525651"
            ]
        ]
    },
    {
        "id": "7f22923acb525651",
        "type": "json",
        "z": "206292fe7131ded2",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 390,
        "y": 200,
        "wires": [
            [
                "764c676522a8b63e"
            ]
        ]
    },
    {
        "id": "764c676522a8b63e",
        "type": "MSSQL",
        "z": "206292fe7131ded2",
        "mssqlCN": "a51e405c.10f64",
        "name": "",
        "outField": "payload",
        "returnType": "1",
        "throwErrors": "0",
        "query": "SELECT\r\n    line, plant, asset,\r\n    COUNT(*) AS occurences\r\n    \r\nFROM {{{payload.database}}}.dbo.{{{payload.table}}} \r\n\r\nWHERE \r\nscrapTime >= DATEADD(minute, -{{{payload.window_mins}}}, GETDATE())\r\n\r\nGROUP BY\r\n    plant, line, asset\r\n\r\nHAVING \r\n    COUNT (*) > {{{payload.occurence_limit}}} ",
        "modeOpt": "",
        "modeOptType": "query",
        "queryOpt": "",
        "queryOptType": "editor",
        "paramsOpt": "",
        "paramsOptType": "editor",
        "rows": "",
        "rowsType": "msg",
        "parseMustache": true,
        "params": [],
        "x": 560,
        "y": 200,
        "wires": [
            [
                "7bc5ec8ad42502b6"
            ]
        ]
    },
    {
        "id": "7bc5ec8ad42502b6",
        "type": "change",
        "z": "206292fe7131ded2",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "payload.recordset",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 780,
        "y": 200,
        "wires": [
            [
                "f88454901c829498"
            ]
        ]
    },
    {
        "id": "56aaf651cab0c0c3",
        "type": "function",
        "z": "206292fe7131ded2",
        "name": "",
        "func": "//extract the data from downtime History\nvar occurences = msg.payload.occurences;\nvar WO_Date = new Date();\nvar WO_Type = \"Inspect\";\nvar Assigned_To = \"Quality\";\nvar plant = msg.payload.plant;\nvar asset = msg.payload.asset;\nvar line = msg.payload.line;\nvar Task_Description = \"This asset had \" + occurences + \" scrap pieces produced over the observed period. Please inspect equipment for root cause.\";\nvar Priority;\nif (occurences >= flow.get(\"scrap_high\")) {\n  Priority = \"High\";\n} else if (occurences >= flow.get(\"scrap_medium\")) {\n    Priority = \"Medium\";\n} else {\n    Priority = \"Low\";\n}\nvar counter = flow.get (\"counter\") || 0 //if there is no stored value, then the value is 0\ncounter ++ //add 1 to the counter value\nflow.set(\"counter\", counter) //save the counter value in the flow variable\nlet WO_Number = \"WO-\" + counter; //set the WO Number\n\n    var obj = {};\n        obj.WO_Number = WO_Number;\n        obj.WO_Date = WO_Date;\n        obj.WO_Type = WO_Type;\n        obj.Assigned_To = Assigned_To;\n        obj.WO_Type = WO_Type;\n        obj.plant = plant;\n        obj.asset = asset.substring(0, 9);\n        obj.line = line;\n        obj.Task_Description = Task_Description;\n        obj.Priority = Priority;\n        \n    msg.payload = obj;\n\n\n\nreturn msg;",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1120,
        "y": 200,
        "wires": [
            [
                "5ace50ba54213217",
                "55dd6efd2f201546"
            ]
        ]
    },
    {
        "id": "5ace50ba54213217",
        "type": "json",
        "z": "206292fe7131ded2",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 1290,
        "y": 200,
        "wires": [
            [
                "2e1483d5bf88c17a"
            ]
        ]
    },
    {
        "id": "f88454901c829498",
        "type": "split",
        "z": "206292fe7131ded2",
        "name": "",
        "splt": "\\n",
        "spltType": "str",
        "arraySplt": 1,
        "arraySpltType": "len",
        "stream": false,
        "addname": "",
        "x": 950,
        "y": 200,
        "wires": [
            [
                "56aaf651cab0c0c3",
                "cab35a9f1910d98c"
            ]
        ]
    },
    {
        "id": "06de5124c4b224a2",
        "type": "Datahub Subscribe",
        "z": "206292fe7131ded2",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "digitaltwins_CBM_WO_downtime",
        "x": 150,
        "y": 100,
        "wires": [
            [
                "306603f643e2f5a1"
            ]
        ]
    },
    {
        "id": "306603f643e2f5a1",
        "type": "json",
        "z": "206292fe7131ded2",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 390,
        "y": 100,
        "wires": [
            [
                "ccd882dc5f7111c6"
            ]
        ]
    },
    {
        "id": "ccd882dc5f7111c6",
        "type": "MSSQL",
        "z": "206292fe7131ded2",
        "mssqlCN": "a51e405c.10f64",
        "name": "",
        "outField": "payload",
        "returnType": "1",
        "throwErrors": "0",
        "query": "SELECT * \n\nFROM {{{payload.database}}}.dbo.{{{payload.table}}} \n\nWHERE duration >= '{{{payload.duration}}}' \nAND endTime >= DATEADD(minute, -{{{payload.window_mins}}}, GETDATE());",
        "modeOpt": "",
        "modeOptType": "query",
        "queryOpt": "",
        "queryOptType": "editor",
        "paramsOpt": "",
        "paramsOptType": "editor",
        "rows": "",
        "rowsType": "msg",
        "params": [],
        "x": 560,
        "y": 100,
        "wires": [
            [
                "8d01696a68ebefa6",
                "ab12abd7de580b4d"
            ]
        ]
    },
    {
        "id": "8d01696a68ebefa6",
        "type": "change",
        "z": "206292fe7131ded2",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "payload.recordset",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 760,
        "y": 100,
        "wires": [
            [
                "65d1c631239e1242"
            ]
        ]
    },
    {
        "id": "28b30d673e43d46e",
        "type": "function",
        "z": "206292fe7131ded2",
        "name": "",
        "func": "//extract the data from downtime History\nvar WO_Date = msg.payload.endTime;\nvar Assigned_To = \"Maintenance\";\nvar WO_Type = \"Inspect\";\nvar plant = msg.payload.plant;\nvar line = msg.payload.line;\nvar asset = msg.payload.asset;\nvar duration = msg.payload.duration;\nvar Task_Description = \"Asset was down for \" + duration + \" seconds. Please inspect equipment to find root case.\"\nvar Priority;\nif (duration >= flow.get(\"downtime_high\")) {\n  Priority = \"High\";\n} else if (duration >= flow.get(\"downtime_medium\")) {\n    Priority = \"Medium\";\n} else {\n    Priority = \"Low\";\n}\n\nvar counter = flow.get (\"counter\") || 0 //if there is no stored value, then the value is 0\ncounter ++ //add 1 to the counter value\nflow.set(\"counter\", counter) //save the counter value in the flow variable\nlet WO_Number = \"WO-\" + counter; //set the WO Number\n\n    var obj = {};\n        obj.WO_Number = WO_Number;\n        obj.WO_Date = WO_Date;\n        obj.Assigned_To = Assigned_To;\n        obj.WO_Type = WO_Type;\n        obj.plant = plant;\n        obj.line = line;\n        obj.asset = asset.substring(0, 9);\n        obj.Task_Description = Task_Description;\n        obj.Priority = Priority;\n    \n    msg.payload = obj;\n\n\n\nreturn msg;",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1120,
        "y": 100,
        "wires": [
            [
                "4d408e04b8263b3d",
                "8bc244834a684295"
            ]
        ]
    },
    {
        "id": "4d408e04b8263b3d",
        "type": "json",
        "z": "206292fe7131ded2",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 1290,
        "y": 100,
        "wires": [
            [
                "2e1483d5bf88c17a"
            ]
        ]
    },
    {
        "id": "65d1c631239e1242",
        "type": "split",
        "z": "206292fe7131ded2",
        "name": "",
        "splt": "\\n",
        "spltType": "str",
        "arraySplt": 1,
        "arraySpltType": "len",
        "stream": false,
        "addname": "",
        "x": 930,
        "y": 100,
        "wires": [
            [
                "28b30d673e43d46e",
                "cab35a9f1910d98c"
            ]
        ]
    },
    {
        "id": "2e1483d5bf88c17a",
        "type": "Datahub Publish",
        "z": "206292fe7131ded2",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "WorkOrderRecord",
        "x": 1530,
        "y": 160,
        "wires": []
    },
    {
        "id": "0838135bc3b46cc8",
        "type": "inject",
        "z": "206292fe7131ded2",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "00 12 * * 6",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 150,
        "y": 520,
        "wires": [
            [
                "f66cb1903b2b4788"
            ]
        ]
    },
    {
        "id": "f66cb1903b2b4788",
        "type": "function",
        "z": "206292fe7131ded2",
        "name": "Zero WO_Number",
        "func": "flow.set(\"counter\", 0);\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 370,
        "y": 520,
        "wires": [
            []
        ]
    },
    {
        "id": "8bc244834a684295",
        "type": "debug",
        "z": "206292fe7131ded2",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1250,
        "y": 20,
        "wires": []
    },
    {
        "id": "cab35a9f1910d98c",
        "type": "debug",
        "z": "206292fe7131ded2",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1030,
        "y": 20,
        "wires": []
    },
    {
        "id": "ab12abd7de580b4d",
        "type": "debug",
        "z": "206292fe7131ded2",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 670,
        "y": 20,
        "wires": []
    },
    {
        "id": "75354ffcccf2082f",
        "type": "Datahub Subscribe",
        "z": "206292fe7131ded2",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "digitaltwins_CBM_WO_anomaly",
        "x": 150,
        "y": 280,
        "wires": [
            [
                "f48cc27b0d073287"
            ]
        ]
    },
    {
        "id": "f48cc27b0d073287",
        "type": "json",
        "z": "206292fe7131ded2",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 390,
        "y": 280,
        "wires": [
            [
                "b1a97d107783eed6"
            ]
        ]
    },
    {
        "id": "b1a97d107783eed6",
        "type": "MSSQL",
        "z": "206292fe7131ded2",
        "mssqlCN": "a51e405c.10f64",
        "name": "",
        "outField": "payload",
        "returnType": "1",
        "throwErrors": "0",
        "query": "SELECT\r\n    line, plant, asset,\r\n    COUNT(*) AS occurences\r\n    \r\nFROM {{{payload.database}}}.dbo.{{{payload.table}}} \r\n\r\nWHERE \r\ntime >= DATEADD(minute, -{{{payload.window_mins}}}, GETDATE())\r\n\r\nGROUP BY\r\n    plant, line, asset\r\n\r\nHAVING \r\n    COUNT (*) > {{{payload.occurence_limit}}} ",
        "modeOpt": "",
        "modeOptType": "query",
        "queryOpt": "",
        "queryOptType": "editor",
        "paramsOpt": "",
        "paramsOptType": "editor",
        "rows": "",
        "rowsType": "msg",
        "params": [],
        "x": 560,
        "y": 280,
        "wires": [
            [
                "77adb7aad5bf9118"
            ]
        ]
    },
    {
        "id": "77adb7aad5bf9118",
        "type": "change",
        "z": "206292fe7131ded2",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "payload.recordset",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 780,
        "y": 280,
        "wires": [
            [
                "702dd935c06f0b09"
            ]
        ]
    },
    {
        "id": "734f8281b96e4e9a",
        "type": "json",
        "z": "206292fe7131ded2",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 1290,
        "y": 280,
        "wires": [
            [
                "2e1483d5bf88c17a"
            ]
        ]
    },
    {
        "id": "702dd935c06f0b09",
        "type": "split",
        "z": "206292fe7131ded2",
        "name": "",
        "splt": "\\n",
        "spltType": "str",
        "arraySplt": 1,
        "arraySpltType": "len",
        "stream": false,
        "addname": "",
        "x": 950,
        "y": 280,
        "wires": [
            [
                "6aee46b8335e22f7",
                "cab35a9f1910d98c"
            ]
        ]
    },
    {
        "id": "6aee46b8335e22f7",
        "type": "function",
        "z": "206292fe7131ded2",
        "name": "",
        "func": "//extract the data from downtime History\nvar occurences = msg.payload.occurences;\nvar WO_Date = new Date();\nvar WO_Type = \"Inspect\";\nvar Assigned_To = \"Quality\";\nvar plant = msg.payload.plant;\nvar asset = msg.payload.asset;\nvar line = msg.payload.line;\nvar Task_Description = \"This asset produced \" + occurences + \" pieces out that we out of spec. Please inspect equipment for root cause.\";\nvar Priority;\nif (occurences >= flow.get(\"anomaly_high\")) {\n  Priority = \"High\";\n} else if (occurences >= flow.get(\"anomaly_medium\")) {\n    Priority = \"Medium\";\n} else {\n    Priority = \"Low\";\n}\n\nvar counter = flow.get (\"counter\") || 0 //if there is no stored value, then the value is 0\ncounter ++ //add 1 to the counter value\nflow.set(\"counter\", counter) //save the counter value in the flow variable\nlet WO_Number = \"WO-\" + counter; //set the WO Number\n\n    var obj = {};\n        obj.WO_Number = WO_Number;\n        obj.WO_Date = WO_Date;\n        obj.WO_Type = WO_Type;\n        obj.Assigned_To = Assigned_To;\n        obj.WO_Type = WO_Type;\n        obj.plant = plant;\n        obj.asset = asset.substring(0, 9);\n        obj.line = line;\n        obj.Task_Description = Task_Description;\n        obj.Priority = Priority;\n    msg.payload = obj;\n\n\n\nreturn msg;",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1120,
        "y": 280,
        "wires": [
            [
                "734f8281b96e4e9a",
                "41281e9c49652484"
            ]
        ]
    },
    {
        "id": "55dd6efd2f201546",
        "type": "debug",
        "z": "206292fe7131ded2",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1330,
        "y": 340,
        "wires": []
    },
    {
        "id": "09944219bdb0ad06",
        "type": "Datahub Subscribe",
        "z": "206292fe7131ded2",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "*",
        "x": 90,
        "y": 420,
        "wires": [
            [
                "3c6ddf66edf40a54"
            ]
        ]
    },
    {
        "id": "dbbdf1e7baa9caae",
        "type": "switch",
        "z": "206292fe7131ded2",
        "name": "",
        "property": "subjectOutput",
        "propertyType": "msg",
        "rules": [
            {
                "t": "cont",
                "v": "digitaltwins_CBM_WO_downtime",
                "vt": "str"
            },
            {
                "t": "cont",
                "v": "digitaltwins_CBM_WO_anomaly",
                "vt": "str"
            },
            {
                "t": "cont",
                "v": "digitaltwins_CBM_WO_scrap",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 3,
        "x": 556.8958129882812,
        "y": 415.55560302734375,
        "wires": [
            [
                "3855ac227d8bf0fa"
            ],
            [
                "aeeaf6e508640bcf"
            ],
            [
                "34e0e9e9ca201710"
            ]
        ]
    },
    {
        "id": "3c6ddf66edf40a54",
        "type": "json",
        "z": "206292fe7131ded2",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 310,
        "y": 420,
        "wires": [
            [
                "dbbdf1e7baa9caae"
            ]
        ]
    },
    {
        "id": "3855ac227d8bf0fa",
        "type": "function",
        "z": "206292fe7131ded2",
        "name": "",
        "func": "var high = Number(msg.payload.high_priority_limit);\nvar medium = Number(msg.payload.medium_priority_limit);\nflow.set(\"downtime_high\", high)\nflow.set(\"downtime_medium\", medium)\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 760,
        "y": 380,
        "wires": [
            []
        ]
    },
    {
        "id": "aeeaf6e508640bcf",
        "type": "function",
        "z": "206292fe7131ded2",
        "name": "",
        "func": "var high = Number(msg.payload.high_priority_limit);\nvar medium = Number(msg.payload.medium_priority_limit);\nflow.set(\"anomaly_high\", high)\nflow.set(\"anomaly_medium\", medium)\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 760,
        "y": 420,
        "wires": [
            []
        ]
    },
    {
        "id": "34e0e9e9ca201710",
        "type": "function",
        "z": "206292fe7131ded2",
        "name": "",
        "func": "var high = Number(msg.payload.high_priority_limit);\nvar medium = Number(msg.payload.medium_priority_limit);\nflow.set(\"scrap_high\", high)\nflow.set(\"scrap_medium\", medium)\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 760,
        "y": 460,
        "wires": [
            []
        ]
    },
    {
        "id": "41281e9c49652484",
        "type": "debug",
        "z": "206292fe7131ded2",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1330,
        "y": 400,
        "wires": []
    },
    {
        "id": "f0084a0d100d744d",
        "type": "MSSQL",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "mssqlCN": "a51e405c.10f64",
        "name": "MSSQL_CBM",
        "outField": "payload",
        "returnType": 0,
        "throwErrors": 1,
        "query": "",
        "modeOpt": "",
        "modeOptType": "query",
        "queryOpt": "payload",
        "queryOptType": "msg",
        "paramsOpt": "queryParams",
        "paramsOptType": "none",
        "rows": "rows",
        "rowsType": "msg",
        "parseMustache": true,
        "params": [],
        "x": 1360,
        "y": 180,
        "wires": [
            [
                "cf8d51bf3cddbac3",
                "33ec54f808a744a2"
            ]
        ]
    },
    {
        "id": "9483a53f5a24800d",
        "type": "template",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "MSSQL template",
        "field": "payload",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "",
        "output": "str",
        "x": 1130,
        "y": 180,
        "wires": [
            [
                "f0084a0d100d744d",
                "3f84b97fd164acbe"
            ]
        ]
    },
    {
        "id": "cf8d51bf3cddbac3",
        "type": "function",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "CBM Rule Output",
        "func": "dt_obj = msg.dt\n\ntarget = dt_obj.target\noperator = dt_obj.condition\neval_value = msg.payload[0].TotalHours\n\ncbm_rule_obj = {}\n\nif (eval(`eval_value ${operator} target`)) {\n    action = \"Make SAP Work Order\"\n  } else {\n    action = \"Do nothing\"\n  }\n\ncbm_rule_obj.action = action\ncbm_rule_obj.rule = msg.dt\ncbm_rule_obj.time = new Date()\n\nmsg.payload = cbm_rule_obj\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1570,
        "y": 240,
        "wires": [
            [
                "4e1743be00869bb8"
            ]
        ]
    },
    {
        "id": "ebd9a00145751dea",
        "type": "influxdb in",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "influxdb": "50dd4eba8ec312ce",
        "name": "InfluxDB",
        "query": "",
        "rawOutput": false,
        "precision": "",
        "retentionPolicy": "",
        "org": "organisation",
        "x": 1340,
        "y": 240,
        "wires": [
            [
                "cf8d51bf3cddbac3"
            ]
        ]
    },
    {
        "id": "0deaadc52a3f2e0a",
        "type": "template",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "InfluxDB template",
        "field": "query",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "",
        "output": "str",
        "x": 1130,
        "y": 240,
        "wires": [
            [
                "ebd9a00145751dea"
            ]
        ]
    },
    {
        "id": "4dbfe0c77670d8bc",
        "type": "switch",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "Data Source",
        "property": "dt.server",
        "propertyType": "msg",
        "rules": [
            {
                "t": "cont",
                "v": "MSSQL",
                "vt": "str"
            },
            {
                "t": "cont",
                "v": "influx",
                "vt": "str"
            },
            {
                "t": "cont",
                "v": "mysql",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 3,
        "x": 910,
        "y": 240,
        "wires": [
            [
                "9483a53f5a24800d"
            ],
            [
                "0deaadc52a3f2e0a"
            ],
            [
                "de8a323d17d70ca1"
            ]
        ]
    },
    {
        "id": "bfe69d07953473c2",
        "type": "mysql",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "mydb": "bae6871353da5237",
        "name": "MySQL_CBM",
        "x": 1360,
        "y": 300,
        "wires": [
            [
                "cf8d51bf3cddbac3"
            ]
        ]
    },
    {
        "id": "de8a323d17d70ca1",
        "type": "template",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "MySQL template",
        "field": "topic",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "",
        "output": "str",
        "x": 1130,
        "y": 300,
        "wires": [
            [
                "bfe69d07953473c2"
            ]
        ]
    },
    {
        "id": "208304af1d5d1fb6",
        "type": "function",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "template",
        "func": "msg.template = msg.payload.query\nmsg.dt = msg.payload\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 760,
        "y": 240,
        "wires": [
            [
                "4dbfe0c77670d8bc"
            ]
        ]
    },
    {
        "id": "d8961aed3cde1fbd",
        "type": "switch",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "Filter Rule",
        "property": "subjectOutput",
        "propertyType": "msg",
        "rules": [
            {
                "t": "cont",
                "v": "digitaltwins",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 590,
        "y": 240,
        "wires": [
            [
                "208304af1d5d1fb6"
            ]
        ]
    },
    {
        "id": "a18bad4b61c2079b",
        "type": "json",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 430,
        "y": 240,
        "wires": [
            [
                "d8961aed3cde1fbd"
            ]
        ]
    },
    {
        "id": "541278bcc620a54c",
        "type": "Datahub Subscribe",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "Rule",
        "natc": "2625f216e9b28a20",
        "topicname": ">",
        "x": 120,
        "y": 240,
        "wires": [
            [
                "fa53c1b01e6c090e"
            ]
        ]
    },
    {
        "id": "89b424edc1a46a59",
        "type": "Datahub Publish",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "SAP_lastMaintenance",
        "x": 980,
        "y": 60,
        "wires": []
    },
    {
        "id": "ab69e67946c96482",
        "type": "json",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 750,
        "y": 60,
        "wires": [
            [
                "89b424edc1a46a59"
            ]
        ]
    },
    {
        "id": "426416ad846c7574",
        "type": "inject",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "",
        "props": [
            {
                "p": "payload.value",
                "v": "1689021243970",
                "vt": "num"
            }
        ],
        "repeat": "2",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 550,
        "y": 60,
        "wires": [
            [
                "ab69e67946c96482"
            ]
        ]
    },
    {
        "id": "426040301f9d3df3",
        "type": "Datahub Publish",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "CBM_output",
        "x": 1890,
        "y": 240,
        "wires": []
    },
    {
        "id": "4e1743be00869bb8",
        "type": "json",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 1730,
        "y": 240,
        "wires": [
            [
                "426040301f9d3df3"
            ]
        ]
    },
    {
        "id": "1e93ba93c309522a",
        "type": "influxdb in",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "influxdb": "50dd4eba8ec312ce",
        "name": "",
        "query": "",
        "rawOutput": false,
        "precision": "",
        "retentionPolicy": "",
        "org": "organisation",
        "x": 1250,
        "y": 820,
        "wires": [
            [
                "7554ba908ca19887"
            ]
        ]
    },
    {
        "id": "74ab7b04a4e7aa38",
        "type": "Datahub Subscribe",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "devicehub.alias.L1_Machine1_1_OPC.Temperature",
        "x": 350,
        "y": 740,
        "wires": [
            [
                "caeca94050bdf06c"
            ]
        ]
    },
    {
        "id": "3b932782560723d9",
        "type": "Datahub Subscribe",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "devicehub.alias.L1_Machine1_1_OPC.isRunning",
        "x": 360,
        "y": 800,
        "wires": [
            [
                "caeca94050bdf06c"
            ]
        ]
    },
    {
        "id": "caeca94050bdf06c",
        "type": "json",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 670,
        "y": 760,
        "wires": [
            [
                "f9b79c7a00cda2a0"
            ]
        ]
    },
    {
        "id": "f9b79c7a00cda2a0",
        "type": "join",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "mode": "custom",
        "build": "object",
        "property": "payload",
        "propertyType": "msg",
        "key": "payload.tagName",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": false,
        "timeout": "1",
        "count": "2",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 780,
        "y": 760,
        "wires": [
            [
                "e96039e8a74f8c38"
            ]
        ]
    },
    {
        "id": "e96039e8a74f8c38",
        "type": "function",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "func": "obj = msg.payload.Temperature;\n\nif(msg.payload.isRunning.value == 1){\n    status = \"ON\"\n} else {\n    status = \"OFF\"\n}\n\nobj.state = status;\n\n// // Assuming you have the UNIX timestamp in milliseconds\n// const unixTimestamp = obj.timestamp; // Replace with your UNIX timestamp\n\n// // Convert UNIX timestamp to JavaScript Date object\n// const dateObject = new Date(unixTimestamp);\n\n// // Format the Date object as a string in the expected format for SQL Server\n// const formattedDate = dateObject.toISOString().slice(0, 19).replace(\"T\", \" \");\n\n// obj.timestamp = formattedDate;\n\ndelete obj.metadata\n\nmsg.payload = obj;\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 1060,
        "y": 760,
        "wires": [
            [
                "fc0baedc30a8cdaa"
            ]
        ]
    },
    {
        "id": "1d08302769e3bfa9",
        "type": "influxdb out",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "influxdb": "50dd4eba8ec312ce",
        "name": "",
        "measurement": "litmusDB_temp_influx",
        "precision": "",
        "retentionPolicy": "",
        "database": "database",
        "precisionV18FluxV20": "ms",
        "retentionPolicyV18Flux": "",
        "org": "organisation",
        "bucket": "bucket",
        "x": 1500,
        "y": 760,
        "wires": []
    },
    {
        "id": "5155ac709ea90e98",
        "type": "inject",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 740,
        "y": 820,
        "wires": [
            [
                "9ac529b17645ed25"
            ]
        ]
    },
    {
        "id": "9ac529b17645ed25",
        "type": "function",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "DELETE FROM influx_CBM_DB",
        "func": "msg.query = \"DELETE FROM influx_CBM_DB\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 970,
        "y": 820,
        "wires": [
            [
                "1e93ba93c309522a"
            ]
        ]
    },
    {
        "id": "7554ba908ca19887",
        "type": "debug",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1430,
        "y": 820,
        "wires": []
    },
    {
        "id": "5db9682c7bdc4ba4",
        "type": "MSSQL",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "mssqlCN": "a51e405c.10f64",
        "name": "MSSQL_CBM",
        "outField": "payload",
        "returnType": 0,
        "throwErrors": 1,
        "query": "",
        "modeOpt": "",
        "modeOptType": "query",
        "queryOpt": "payload",
        "queryOptType": "msg",
        "paramsOpt": "queryParams",
        "paramsOptType": "none",
        "rows": "rows",
        "rowsType": "msg",
        "params": [],
        "x": 1540,
        "y": 520,
        "wires": [
            [
                "f70595d196605113"
            ]
        ]
    },
    {
        "id": "531a1f859d94917e",
        "type": "template",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "MSSQL_CBM_DB",
        "field": "payload",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "INSERT INTO\n    MSSQL_CBM_DB\n    (\n    timestamp,\n    success,\n    datatype,\n    registerId,\n    value,\n    deviceID,\n    tagName,\n    deviceName,\n    state\n    ) \nVALUES\n    (\n    '{{payload.timestamp}}',\n    '{{payload.success}}',\n    '{{payload.datatype}}',\n    '{{payload.registerId}}',\n    '{{payload.value}}',\n    '{{payload.deviceID}}',\n    '{{payload.tagName}}',\n    '{{payload.deviceName}}',\n    '{{payload.state}}'\n    );\n    ",
        "output": "str",
        "x": 1070,
        "y": 520,
        "wires": [
            [
                "faaae58d18e2d8fd"
            ]
        ]
    },
    {
        "id": "d6719ae8d0b54fef",
        "type": "json",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 630,
        "y": 520,
        "wires": [
            [
                "a917b0f50ddd67fd"
            ]
        ]
    },
    {
        "id": "f70595d196605113",
        "type": "debug",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1050,
        "y": 440,
        "wires": []
    },
    {
        "id": "839930253bdd071d",
        "type": "function",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "func": "obj = msg.payload.Temperature;\n\nif(msg.payload.isRunning.value == 1){\n    status = \"ON\"\n} else {\n    status = \"OFF\"\n}\n\nobj.state = status;\n\n// // Assuming you have the UNIX timestamp in milliseconds\n// const unixTimestamp = obj.timestamp; // Replace with your UNIX timestamp\n\n// // Convert UNIX timestamp to JavaScript Date object\n// const dateObject = new Date(unixTimestamp);\n\n// // Format the Date object as a string in the expected format for SQL Server\n// const formattedDate = dateObject.toISOString().slice(0, 19).replace(\"T\", \" \");\n\n// obj.timestamp = formattedDate;\n\n\nmsg.payload = obj;\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 880,
        "y": 520,
        "wires": [
            [
                "531a1f859d94917e"
            ]
        ]
    },
    {
        "id": "a917b0f50ddd67fd",
        "type": "join",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "mode": "custom",
        "build": "object",
        "property": "payload",
        "propertyType": "msg",
        "key": "payload.tagName",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": false,
        "timeout": "1",
        "count": "2",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 740,
        "y": 520,
        "wires": [
            [
                "839930253bdd071d"
            ]
        ]
    },
    {
        "id": "8e85b0ea74c35384",
        "type": "mysql",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "mydb": "bae6871353da5237",
        "name": "",
        "x": 1570,
        "y": 980,
        "wires": [
            []
        ]
    },
    {
        "id": "811868bb9f06ec3a",
        "type": "function",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "func": "obj = msg.payload.Temperature;\n\nif(msg.payload.isRunning.value == 1){\n    status = \"ON\"\n} else {\n    status = \"OFF\"\n}\n\nobj.state = status;\n\n// // Assuming you have the UNIX timestamp in milliseconds\n// const unixTimestamp = obj.timestamp; // Replace with your UNIX timestamp\n\n// // Convert UNIX timestamp to JavaScript Date object\n// const dateObject = new Date(unixTimestamp);\n\n// // Format the Date object as a string in the expected format for SQL Server\n// const formattedDate = dateObject.toISOString().slice(0, 19).replace(\"T\", \" \");\n\n// obj.timestamp = formattedDate;\n\ndelete obj.metadata\n\nmsg.payload = obj;\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 920,
        "y": 980,
        "wires": [
            [
                "06b5471d82318f1e"
            ]
        ]
    },
    {
        "id": "7e2642d156a8b5e3",
        "type": "join",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "mode": "custom",
        "build": "object",
        "property": "payload",
        "propertyType": "msg",
        "key": "payload.tagName",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": false,
        "timeout": "1",
        "count": "2",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 800,
        "y": 980,
        "wires": [
            [
                "811868bb9f06ec3a"
            ]
        ]
    },
    {
        "id": "f222bfb36adcd1fb",
        "type": "json",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 650,
        "y": 980,
        "wires": [
            [
                "7e2642d156a8b5e3"
            ]
        ]
    },
    {
        "id": "fc985480570da008",
        "type": "Datahub Subscribe",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "devicehub.alias.L1_Machine1_1_OPC.Temperature",
        "x": 290,
        "y": 940,
        "wires": [
            [
                "f222bfb36adcd1fb"
            ]
        ]
    },
    {
        "id": "abfedb6b68babf9c",
        "type": "Datahub Subscribe",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "devicehub.alias.L1_Machine1_1_OPC.isRunning",
        "x": 300,
        "y": 1000,
        "wires": [
            [
                "f222bfb36adcd1fb"
            ]
        ]
    },
    {
        "id": "06b5471d82318f1e",
        "type": "template",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "OPCUA Data to MySQL Table",
        "field": "topic",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "INSERT INTO\n    MySQL_CBM_DB\n    (\n    timestamp,\n    success,\n    datatype,\n    registerId,\n    value,\n    deviceID,\n    tagName,\n    deviceName,\n    state\n    ) \nVALUES\n    (\n    '{{payload.timestamp}}',\n    '{{payload.success}}',\n    '{{payload.datatype}}',\n    '{{payload.registerId}}',\n    '{{payload.value}}',\n    '{{payload.deviceID}}',\n    '{{payload.tagName}}',\n    '{{payload.deviceName}}',\n    '{{payload.state}}'\n    );\n    ",
        "output": "str",
        "x": 1130,
        "y": 980,
        "wires": [
            [
                "bba7c28b301a7d50"
            ]
        ]
    },
    {
        "id": "f11a8a8c3271b678",
        "type": "inject",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "TIME NOW",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 550,
        "y": 440,
        "wires": [
            [
                "08c17e87ba6161f3"
            ]
        ]
    },
    {
        "id": "08c17e87ba6161f3",
        "type": "debug",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 730,
        "y": 440,
        "wires": []
    },
    {
        "id": "faaae58d18e2d8fd",
        "type": "gate",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "gate",
        "controlTopic": "control",
        "defaultState": "closed",
        "openCmd": "open",
        "closeCmd": "close",
        "toggleCmd": "toggle",
        "defaultCmd": "default",
        "statusCmd": "status",
        "persist": false,
        "x": 1370,
        "y": 520,
        "wires": [
            [
                "5db9682c7bdc4ba4",
                "f70595d196605113"
            ]
        ]
    },
    {
        "id": "fc0baedc30a8cdaa",
        "type": "gate",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "gate",
        "controlTopic": "control",
        "defaultState": "closed",
        "openCmd": "open",
        "closeCmd": "close",
        "toggleCmd": "toggle",
        "defaultCmd": "default",
        "statusCmd": "status",
        "persist": false,
        "x": 1250,
        "y": 760,
        "wires": [
            [
                "1d08302769e3bfa9"
            ]
        ]
    },
    {
        "id": "bba7c28b301a7d50",
        "type": "gate",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "gate",
        "controlTopic": "control",
        "defaultState": "closed",
        "openCmd": "open",
        "closeCmd": "close",
        "toggleCmd": "toggle",
        "defaultCmd": "default",
        "statusCmd": "status",
        "persist": false,
        "x": 1390,
        "y": 980,
        "wires": [
            [
                "8e85b0ea74c35384"
            ]
        ]
    },
    {
        "id": "fa53c1b01e6c090e",
        "type": "switch",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "json string",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "istype",
                "v": "json",
                "vt": "json"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 270,
        "y": 240,
        "wires": [
            [
                "a18bad4b61c2079b"
            ]
        ]
    },
    {
        "id": "3f84b97fd164acbe",
        "type": "debug",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 1330,
        "y": 120,
        "wires": []
    },
    {
        "id": "18e6652fde78e2cc",
        "type": "inject",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 1140,
        "y": 620,
        "wires": [
            [
                "d736c843edddc158"
            ]
        ]
    },
    {
        "id": "d736c843edddc158",
        "type": "template",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "Delete Table",
        "field": "payload",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "DROP TABLE MSSQL_CBM_DB; \n",
        "output": "str",
        "x": 1290,
        "y": 620,
        "wires": [
            [
                "5db9682c7bdc4ba4"
            ]
        ]
    },
    {
        "id": "e7d8ffbcb8bf8119",
        "type": "inject",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 1140,
        "y": 580,
        "wires": [
            [
                "29aaeafe0bc12306"
            ]
        ]
    },
    {
        "id": "29aaeafe0bc12306",
        "type": "template",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "Create Table",
        "field": "payload",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "CREATE TABLE MSSQL_CBM_DB(\n    timestamp BIGINT,\n    success BIT,\n    datatype VARCHAR(255),\n    registerId VARCHAR(255),\n    value DECIMAL,\n    deviceID VARCHAR(255),\n    tagName VARCHAR(255),\n    deviceName VARCHAR(255),\n    state VARCHAR(255)\n);\n",
        "output": "str",
        "x": 1290,
        "y": 580,
        "wires": [
            [
                "5db9682c7bdc4ba4"
            ]
        ]
    },
    {
        "id": "29e7173285ea6ebd",
        "type": "inject",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "open",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "00 12 * * *",
        "once": false,
        "onceDelay": "600",
        "topic": "control",
        "payload": "open",
        "payloadType": "str",
        "x": 1250,
        "y": 420,
        "wires": [
            [
                "faaae58d18e2d8fd"
            ]
        ]
    },
    {
        "id": "5b20b1be48fdf8ed",
        "type": "inject",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "close",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "02 12 * * *",
        "once": false,
        "onceDelay": "720",
        "topic": "control",
        "payload": "close",
        "payloadType": "str",
        "x": 1250,
        "y": 460,
        "wires": [
            [
                "faaae58d18e2d8fd"
            ]
        ]
    },
    {
        "id": "835c23d64f00c534",
        "type": "inject",
        "z": "2130e0063a8c5147",
        "name": "open",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "00 12 * * *",
        "once": false,
        "onceDelay": "600",
        "topic": "control",
        "payload": "open",
        "payloadType": "str",
        "x": 1110,
        "y": 680,
        "wires": [
            [
                "fc0baedc30a8cdaa"
            ]
        ]
    },
    {
        "id": "34c77222a64896ad",
        "type": "inject",
        "z": "2130e0063a8c5147",
        "name": "close",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "02 12 * * *",
        "once": false,
        "onceDelay": "720",
        "topic": "control",
        "payload": "close",
        "payloadType": "str",
        "x": 1110,
        "y": 720,
        "wires": [
            [
                "fc0baedc30a8cdaa"
            ]
        ]
    },
    {
        "id": "2e856578c9a660a9",
        "type": "inject",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "CBM Up to Time",
        "props": [
            {
                "p": "payload.value",
                "v": "1700493944671",
                "vt": "num"
            }
        ],
        "repeat": "2",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 510,
        "y": 120,
        "wires": [
            [
                "f6d1379a7984f9e9"
            ]
        ]
    },
    {
        "id": "f6d1379a7984f9e9",
        "type": "json",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 750,
        "y": 120,
        "wires": [
            [
                "99b7c1174819f311"
            ]
        ]
    },
    {
        "id": "99b7c1174819f311",
        "type": "Datahub Publish",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "UpperTimeLimit",
        "x": 960,
        "y": 120,
        "wires": []
    },
    {
        "id": "fedeb3ec247082dc",
        "type": "Datahub Subscribe",
        "z": "2130e0063a8c5147",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "devicehub.alias.P1_L1_Machine1_1_OPC.Temperature",
        "x": 300,
        "y": 500,
        "wires": [
            [
                "d6719ae8d0b54fef"
            ]
        ]
    },
    {
        "id": "312c3bab0ac61b13",
        "type": "Datahub Subscribe",
        "z": "2130e0063a8c5147",
        "name": "",
        "natc": "2625f216e9b28a20",
        "topicname": "devicehub.alias.P1_L1_Machine1_1_OPC.isRunning",
        "x": 310,
        "y": 560,
        "wires": [
            [
                "d6719ae8d0b54fef"
            ]
        ]
    },
    {
        "id": "33ec54f808a744a2",
        "type": "debug",
        "z": "2130e0063a8c5147",
        "g": "344a471357a84606",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 1570,
        "y": 120,
        "wires": []
    },
    {
        "id": "d68f20b29d16b31e",
        "type": "inject",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "open",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "00 12 * * *",
        "once": false,
        "onceDelay": "600",
        "topic": "control",
        "payload": "open",
        "payloadType": "str",
        "x": 1250,
        "y": 880,
        "wires": [
            [
                "bba7c28b301a7d50"
            ]
        ]
    },
    {
        "id": "97161e37eece7bf9",
        "type": "inject",
        "z": "2130e0063a8c5147",
        "g": "0903542732afd60e",
        "name": "close",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "02 12 * * *",
        "once": false,
        "onceDelay": "720",
        "topic": "control",
        "payload": "close",
        "payloadType": "str",
        "x": 1250,
        "y": 920,
        "wires": [
            [
                "bba7c28b301a7d50"
            ]
        ]
    },
    {
        "id": "b2326de956a2823d",
        "type": "Datahub Subscribe",
        "z": "3d5ab96d4599cd0f",
        "name": "Alerts",
        "natc": "e7e26815.57718",
        "topicname": "devicehub.alias.alert.>",
        "x": 170,
        "y": 120,
        "wires": [
            [
                "2bfa179ee8bc4514"
            ]
        ]
    },
    {
        "id": "10e80d8c48be77ed",
        "type": "debug",
        "z": "3d5ab96d4599cd0f",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 810,
        "y": 120,
        "wires": []
    },
    {
        "id": "2bfa179ee8bc4514",
        "type": "json",
        "z": "3d5ab96d4599cd0f",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 310,
        "y": 120,
        "wires": [
            [
                "99b074417d7eb039"
            ]
        ]
    },
    {
        "id": "99b074417d7eb039",
        "type": "change",
        "z": "3d5ab96d4599cd0f",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload.type",
                "pt": "msg",
                "to": "payload.metadata.Type",
                "tot": "msg"
            },
            {
                "t": "set",
                "p": "payload.cycleID",
                "pt": "msg",
                "to": "$formatInteger($random() * 100, '0')\t",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 520,
        "y": 120,
        "wires": [
            [
                "10e80d8c48be77ed",
                "38959415c4361e8d"
            ]
        ]
    },
    {
        "id": "2e8038d3a4acdaa4",
        "type": "Datahub Publish",
        "z": "3d5ab96d4599cd0f",
        "name": "",
        "natc": "e7e26815.57718",
        "topicname": "alert",
        "x": 910,
        "y": 200,
        "wires": []
    },
    {
        "id": "38959415c4361e8d",
        "type": "json",
        "z": "3d5ab96d4599cd0f",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 730,
        "y": 200,
        "wires": [
            [
                "2e8038d3a4acdaa4"
            ]
        ]
    },
    {
        "id": "7504e25dbf304cc2",
        "type": "Datahub Subscribe",
        "z": "3d5ab96d4599cd0f",
        "name": "State",
        "natc": "e7e26815.57718",
        "topicname": "devicehub.alias.state.>",
        "x": 190,
        "y": 300,
        "wires": [
            [
                "93cd69715efca87f"
            ]
        ]
    },
    {
        "id": "59a38e9fbe069b07",
        "type": "debug",
        "z": "3d5ab96d4599cd0f",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 830,
        "y": 300,
        "wires": []
    },
    {
        "id": "93cd69715efca87f",
        "type": "json",
        "z": "3d5ab96d4599cd0f",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 330,
        "y": 300,
        "wires": [
            [
                "e9579390a72ec816"
            ]
        ]
    },
    {
        "id": "e9579390a72ec816",
        "type": "change",
        "z": "3d5ab96d4599cd0f",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "payload.Level11",
                "pt": "msg",
                "to": "Down",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "payload.cycleID",
                "pt": "msg",
                "to": "$formatInteger($random() * 100, '0')\t",
                "tot": "jsonata"
            },
            {
                "t": "set",
                "p": "payload.Level12",
                "pt": "msg",
                "to": "Machine",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "payload.Level13",
                "pt": "msg",
                "to": "Waiting Attention",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "payload.AuxMode",
                "pt": "msg",
                "to": "null",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 540,
        "y": 300,
        "wires": [
            [
                "59a38e9fbe069b07",
                "0123626940beb300"
            ]
        ]
    },
    {
        "id": "db77d399da0a9553",
        "type": "Datahub Publish",
        "z": "3d5ab96d4599cd0f",
        "name": "",
        "natc": "e7e26815.57718",
        "topicname": "state",
        "x": 930,
        "y": 380,
        "wires": []
    },
    {
        "id": "0123626940beb300",
        "type": "json",
        "z": "3d5ab96d4599cd0f",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 750,
        "y": 380,
        "wires": [
            [
                "db77d399da0a9553"
            ]
        ]
    },
    {
        "id": "6f3778945dae3bd8",
        "type": "Datahub Subscribe",
        "z": "ebdecfa2769805b1",
        "name": "",
        "natc": "e7e26815.57718",
        "topicname": "digitaltwins_M1",
        "x": 220,
        "y": 120,
        "wires": [
            [
                "2280a2ea6eb8695d"
            ]
        ]
    },
    {
        "id": "2280a2ea6eb8695d",
        "type": "debug",
        "z": "ebdecfa2769805b1",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 610,
        "y": 120,
        "wires": []
    },
    {
        "id": "b1ec1ab7b4cd930d",
        "type": "Datahub Subscribe",
        "z": "ebdecfa2769805b1",
        "d": true,
        "name": "",
        "natc": "e7e26815.57718",
        "topicname": "digitaltwins_dt1",
        "x": 260,
        "y": 240,
        "wires": [
            [
                "bebbe7363d7bae7e"
            ]
        ]
    },
    {
        "id": "bebbe7363d7bae7e",
        "type": "json",
        "z": "ebdecfa2769805b1",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 470,
        "y": 240,
        "wires": [
            [
                "d4ebf1b5e4969112"
            ]
        ]
    },
    {
        "id": "70579df08618c8ce",
        "type": "debug",
        "z": "ebdecfa2769805b1",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 890,
        "y": 220,
        "wires": []
    },
    {
        "id": "d4ebf1b5e4969112",
        "type": "function",
        "z": "ebdecfa2769805b1",
        "name": "",
        "func": "var obj = msg.payload;\n\nvar date = obj.MachineData.timestamp.aaa;\n\nobj.MachineData.timestamp.aaa = new Date(date).toISOString().slice(0, 19).replace('T', ' ');\n\nmsg.payload = obj;\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 680,
        "y": 220,
        "wires": [
            [
                "70579df08618c8ce"
            ]
        ]
    },
    {
        "id": "2a0c6a9af6e055de",
        "type": "inject",
        "z": "b58a87045c486f7c",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 140,
        "y": 60,
        "wires": [
            [
                "f3b4307f3419edb9",
                "1e3818116de2bccf"
            ]
        ]
    },
    {
        "id": "f3b4307f3419edb9",
        "type": "MSSQL",
        "z": "b58a87045c486f7c",
        "mssqlCN": "a51e405c.10f64",
        "name": "",
        "outField": "payload",
        "returnType": "1",
        "throwErrors": "0",
        "query": "SELECT WO_Date FROM litmus.dbo.ScheduledWorkOrders ",
        "modeOpt": "",
        "modeOptType": "query",
        "queryOpt": "",
        "queryOptType": "editor",
        "paramsOpt": "",
        "paramsOptType": "editor",
        "rows": "",
        "rowsType": "msg",
        "params": [],
        "x": 400,
        "y": 120,
        "wires": [
            [
                "e2cfe62e1a1fa00f",
                "a9921f26a20bbc12"
            ]
        ]
    },
    {
        "id": "e2cfe62e1a1fa00f",
        "type": "function",
        "z": "b58a87045c486f7c",
        "name": "",
        "func": "//let currentDate = new Date();\n//let woDate = new Date(msg.payload.WO_Date);\n//var d = new Date(\"2023-01-19T00:00:00.000Z\");\n//let timeDifference = Math.abs(currentDate - woDate);\n//let timeDifference = Math.abs(currentDate - d);\n//msg.payload.Due = timeDifference;\n//return msg;\n\nfor(let i = 0; i < msg.payload.length; i++) {\n    // Get the current row\n    const woDate = msg.payload.WO_Date;\n\n   \n    const date = new Date(row.WO_Date);\n\n   \n    const now = new Date();\n    const diffInMilliseconds = now - date;\n\n    // Add the difference to the row\n    row.date_difference = diffInMilliseconds;\n}\n\n\n\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 620,
        "y": 120,
        "wires": [
            [
                "ff4bdb0d75dcbc0a"
            ]
        ]
    },
    {
        "id": "ff4bdb0d75dcbc0a",
        "type": "debug",
        "z": "b58a87045c486f7c",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 870,
        "y": 120,
        "wires": []
    },
    {
        "id": "a9921f26a20bbc12",
        "type": "debug",
        "z": "b58a87045c486f7c",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 630,
        "y": 220,
        "wires": []
    },
    {
        "id": "1e3818116de2bccf",
        "type": "function",
        "z": "b58a87045c486f7c",
        "name": "",
        "func": "var currentDate = new Date();\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 600,
        "y": 60,
        "wires": [
            [
                "caa917027be62207"
            ]
        ]
    },
    {
        "id": "caa917027be62207",
        "type": "debug",
        "z": "b58a87045c486f7c",
        "name": "",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 850,
        "y": 60,
        "wires": []
    }
]

Download Flow Logs Binary

GET {{edgeUrl}}/flows-manager/flows/{{flow_id}}/logs

Download Flow Logs Binary

Returns the flow's log directory as a ZIP archive suitable for attaching to a support ticket or for offline log analysis. The response is binary -- in Postman, use Send and Download to save the body to disk.

Endpoint

GET {{edgeUrl}}/flows-manager/flows/{{flow_id}}/logs

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Path parameters

Location Name Required Description
Path {{flow_id}} Yes Flow ID to download logs for.

No request body.

Response

200 OK -- application/zip with Content-Disposition: attachment. The archive contains the contents of the flow's log directory at the moment of the call. To clear the logs on the device after downloading, follow with Delete Flows Logs.

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Response

Status: 200 OK

PKm�([  logUT�3�h��o]���=���(Kw��看��Иz�$��P0�i�*fJ"����7�D]Ŧc�9�G��`f��4��"����ks��7����������zu�����..�~�y{��pww�\]_n��G�Ǐ������\��\l�x������ċ݋�������p�9�ۼ|���O�_�����˗�.?�\��������כ�=l�_m���{��������W_�믿����կ^L��������p��/����_������ۻ����|��M����;��ns{w}s�l���_^��{}��Ϳ���x����^_���~u��p��ۻÛ��\�v{��\\���o���o^�������o^���~{�����?����?�˗�{yqvw���_o�8���\\ޞ}��p��o�w�7�����������p5����������
��8us��l��Ϗ������ۋ��^_=��WW�7y{���.Ww�g�o7W�w�W�����p�������O��wWW�ﲳ��k��Ҽ�ؾؾ������o��?��[��9���;��\�|=}��w��fsy�������>}?���ݻ����w����˫����b�1�9�<�c����l����v�b�m7�Wg��t'J.�����������ٟ�����pu��������������o������ׇ�W<\�}�����p�ysxs��~}8������p~w�x�1�L�o^�t��������z��_��<\�}��q���m{����s��=ܝ~�/~y��/��og�����7�w?���_���?��/�n��_��~��͋/���_����O�?}{�9l�=l���͟�n�ߓgw��_���������<~�sv{�sv�
͢��<�כ���ߜ__]��6_}�/��Ͽ����7_�jc�_���wj�v�ɘ"��ޠ1��W�Ώߎ�W�v~v~��:�0���7������)_�]���pv�y{s��pswy�=�����ë˫����z�r��������t���=�갻h�q�q�ڲC}�C��j�ujO�o�~�Q�>w�a.���>���I�Ǹԏ'm���~<��ٗ����ϵȏ'���g�x���x��?�ǓO�����_}��~<��a�~<�����<y����~<i���������'b����~ˌqf"�Ȉ62���h�ED�-"Zmь�ь�ќ�т-т-ђ-ъ�ъmLj�cD�1�5F�ƈ�A1DPC�A1DP�v���~��ݏAD��~"@�1܏AD��8 ��1�h�Dp?
 ����� �Dp��D4��c"����q@�c�"8���~"C��1D`C��1D`C��1D`C��1D`C��1D`C�ۧ#c�$G������������O������O��s_^�n���������66��7�/�޼�����뛻�e��m��N��Ͼ|�����/�g���I�wן,~��7_l��~��bʭ}��_����pu~���6�͔^|w{���۳���$箮/�q�}�����������������žx{}����o�C��}��q}��~��s�3?Κ�İ������w/������������>$v�����v�����߳����ݧ[6�}x�c��~�qo�;����?w��B�����_���/�|N��[~��oo����/���{y���u���������_^�n��^�|��/��n��?�����p�omo��������������������?���m6�7����:{����� ��LJ�U�"�|M��U��f�~���9���/��/��U3����+}�>C������ݜ���=\���̯���޽8*}���ф�[��y��~�ϱ���r���N��.��?�N~`���?|ƫß6�zs��������svu}��7��n�����f�����'y��^�|8��^����勛����Ww7��|1M����w�/oo�����s�0������Ơ���������8��>�yw�χ?�Mv�cf����<��ys��<�;��'��|s���g�~��o���q_����_��o{S�������l�f�����o�34�EL�'��B�@��j��~ ����va�ֆ8.������~�<Z-���]���p:������/��?}����㼶��m����y`D�F��mdDѦ�(2�ͷ�hƈf�hƈ�hΈ�h���h����hɈ��hňV�hE�Vm�ÿ�����Y��}�����g��?|����E�?WnV��E��}��,����;������;���Ⴟ�軻���Y�ݥ��΢��l��;��X��7��g���,?�w��g�鿳���=�;��66�΢��~O��;3&�1ňV�hň�cD�1���#ZcDk�h#���60���h##ڈ��[D��"���ь�ќ�ќ-т-�"H��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�b��"(��!�b�������{�yL�?��lh����v����zss�}{}u{ؼ��~�>V��p������ F1�Qb�� F1�Qb�� F1�Q�����t?&�1m�e� �5F��m`D�FF��mD��w03c�m��f�hƈf�hΈ�hN�V'@:��񿸽u��ա�#�H�v"y�<Z-���ݳ���[���ɣ���hy�_��=��-c�_"3�ˌe�s��݌��7��T�G�o�Z�k}2�%#Z2�#Z1�#ڎ���Lcш(�4����T�njAD#�(6��1cј(�1Qc�(�DQ���E1&�bLŘ(�1Qc��"0��!c��"0��!c��"0��!c��"0��!c��"0��!c��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!�`� "��!�`� "��!�P�S��E�W�S��Β��k����<Z����hy���h�\U-�^f{y�<�W�~x�X�\Uf,3^f{��̸W3~�s�`�(�DQ���E   &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���E    &��L%�(J2Q�d�(�DQ���$EI&��L%"H��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�d� "(�j����Ib����D4cDsF4gDsF�`DF�`DKF�dDKF�bD+F�bD�1���v�h��1�5F��m`D�FF��mD�]���h�D4��1�h�ԮʌAD#��UD�d�B�+٩dgW��G̑>W�Gˣ�����=+���U���hy�<z�v�{��[ƚ�2c���Xf<W����)�U}jW%޷�(�4y�'�(�D4"��S�*3����ԮʌAD#�(>��2cш(�O���D4"��S�*3���E1&�bLŘ(�1Qc�(�DQ���E1��!c��"0��!c��"0��!c��"0��!c��"0��!c��"0��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g� "��!�`� "��!�`� "P����l�d����%;?�vUy�<Z-���ݳ�h�\U-�^f{y�<�W�~x�X�\Uf,3^f{��̸W3~�s�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���E    &��L%�(J2Q�d�(�DQ���$EI&��L%"H��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�d� "(��vUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙv�`�U�iW
�]5�v�`�U�iW
�]5�v�`�UCE$Jv.����Jvv��|��sUy�<Z-���ݳ�h�\U-��Gˣ�j׻G?�e�y�*3�ˌe�s��݌��\5�v�`�U�iW
�]5�v�iL���o�1ΌAD�1���v�h��1�5F��m`D�FF��mDD�-"�m�lˈf�hƈf�hΈ�hΈ�h���hɈ��hC��1D`C��1D`C��1D`C��1D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C�A0DC�A0DC���H��\f{%;���,��Y��ʣ���hy�\힕G���hy�2�ˣ�ѽz��[ƺ�2c��2�ˌeƽ��Ӟ�E &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�d�(�DQ���$EI&��L%�(J2Q�d�(�A2D�$C�A2D�$C�A2D�$C�A2D�$C�A2D�$C�A1DPC�A1DPC�A1DPC�A1DPC�A1DPC�A1DPC�A1DPC�A1DP��n��N��̘E;���*��AD[�>�Y�N� ��J�c��T�s���T���d��#v�*��Gˣ��~=��GS��hy�<Z��ףg�~x�X�\Uf,3�ˌ�z�l�Or��q�U�(�c���U�(ǬE9���j��U�(�c�V��|�j�t"ڪQ��cV����AD[5��q̪Q��1�h�FQ>�Y5�r:����ۮz:�m�vՏc�(ʺ���cј(ʺ���c�"X�]�t"C붫��ADc�`�v��1�h�ۮz:�!�u�UO� �1D�n���D4��mW=C��n���B�u�U?�a�`�v��1�h�ۮz:�!�u�UO� �1D�n���D4��mW=��������c�"X�]�t"C붫��ADc�`�v��19�?&��-3ƙ1�hƈf�hƈ�hΈ�hJv*ٹ��Jv*��Y��i�U���hy�<z��dz�h�\U-�^f{y�<�W�~x�X�\Uf,3^f{��̸W3~�s��>���`^�-ђ�ъ��v�h;F�#ZcDk�h�m`D�F��mdDc�(�DQ���$EI&��L%�(J2Q�d�(�DQ�!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"��]���h�D4��1�h�ԮʌAD#��TD�d�B�+٩dgW��G̑>W�Gˣ�����=+���U���hy�<z�v�{��[ƚ�2c���Xf<W����)�UmjW%޷�(�4y�'�(�D4"�bS�*3����ԮʌAD#�(6��2cш(�M���D4"�bS�*3���E1&�bLŘ(�1Qc�(�DQ���E1��!c��"0��!c��"0��!c��"0��!c��"0��!c��"0��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!�]՘vUc�U�iW5�]՘vUc�U�iW5�]՘vUS���m�d����%;?�vUy�<Z-���ݳ�h�\U-�^f{y�<�W�~x�X�\Uf,3^f{��̸W3~�sU�]՘vUc�U�iW5�]՘vUc�U�iW5�]՘vUc�U�iW5�]՘vUc�U�iW5�]՘vUc�U�iW5�]՘vUc�U�iW5�]՘vUc�U�iW5�]՘vUc�U�iW5�]զv���o���nn��u{��_y���x~���\]on�o��n�W7�o�?x}�    �����H]�1u��ԵS�jL]�1u��ԵS�jL]�1u��ԵNcj��ƌ  f!Zm�j��V[F4cD3F4cDsF4gDsF�`DF�`DKF�dDKF�bD+F�bD�1���v�h��1�5F��m`Dc��"(�� �o   "�Ƭ/�4� �i"A��D0�AD#���l���B�+*��hWQ�G̑��Gˣ�����=+���_���hy�<z�v�{��[ƚ��2c���Xf<W����)�_}�%�(�䵞���~KDQ�1�hD��["�2�AD#�(��Q�i"E�����Lcш(��De��FDQ|�%�(�D4&�bLŘ(�1Qc�(�DQ���E1&�bL�"0��!c��"0��!c��"0��!c��"0��!c��"0��!c��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!�`� "��!�`� "��!�`�@�&Jv.����Jvv���,�Z���hy�<z�v�ʣ�sUy�<z������^=��-c�sU���x��e�2�^��i�U���E  &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���E    &�L%�(J2Q�d�(�DQ���$EI&��L%�(J2Q�d� "H��!�d� "H��!�d� "H��!�d� "H��!�d�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]5�v�`�U�iW
�]5�v�`�U�iW
�]5�v�P���m�d���]%;1G�\U-��Gˣ�j��<>W�Gˣ��������ok��ʌe�2c��\�z7�<W
�]u��)bL�����hňV�hň�cD�1���#ZcDk�h#���60���h##ڈ�f[D4�"�ٖ�ь�ќ�ќ-�"0��!c��"0��!c��"0��!c��"0��!c��"0��!c��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!�`� "��!�`� "��!�(ٹ��Jv*��Y��hW�Gˣ�����=+���U����e��Gˣ{�臷�u�Ue�2�e��ˌ{5�=W
&�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���$EI&��L%�(J2Q�d�(�DQ�!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"ȩ]���h�D4��1�h�ԮʌAD#� UD�d�B�+٩dgW��G̑>W�Gˣ�����=+���U���hy�<z�v�{��[ƚ�2c���Xf<W����)�UsjW%޷�(J2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�j2��ɴ�&Ӯ�L�jN����   fLcb��[D��2�#�1�#�3�9#�w"��Q�S��Y�+٩dgg��Ϣ]U-��Gˣ�j��<?W�Gˣ��^-��գ�2�=W�ˌ��^f,3�Ռ��\�(��k}0��Ɉ��hɈV�hňV�h;F�#ڎ�1�5F�ƈ60�
�h#E  &�L%�(J2Q�d�(�DQ���$EI&��L%�(J2D�$C�A2D�$C�A2D�$C�A2D�$C�A2D�$C�A2DPC�A1DPC�A1DPC�A1DPC�A1DPC�A1DPC�A1DPC�A1DPA5��2c�m��F�4� ���U�1�h�\*r����\*r�U��s��H���hy�<z�v�ʣ�;���f?�������߉��@诂����W���y�*3�ˌe�s��݌��\��vU��r"�2�A(���Lcш(JM���D4"�RS�*3����ԮʌAD#�(5��2cш(JM���D4&�bLŘ(�1Qc�(�DQ���E1&�b��1D`C��1D`C��1D`C��1D`C��1D`C��1D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C�ҮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1����E.�^�KE.;�\~���hy�<Z=W�g�����<Z����hyt������Xf���2c�q�f��w���;a��m&����ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL�j1��Ŵ�ӮZL��4�b�1��]��D4cD3F4cDsF4gDS�S��E�W�S�ή����#}�*��Gˣ��s�{V
��ʣ���hy�\�z�臷�5�Ue�2c���x�v���S��ޯA�o�Z�k}0�%#Z2�%#Z1�#Z1���v�h;F�ƈ��#���60�
�h##�Ȉ�DQ���E1&�bLŘ(�1Qc�(�DQ�!c��"0��!c��"0��!c��"0��!c��"0��!c��"0��!c��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!�`� "��!�`� "�TD�d�2�+٩dgg��Ϣ]U-��Gˣ�j��<?W�Gˣ��^-��գ�2�=W�ˌ��^f,3�Ռ��\5�(J0Q�`�(�DQ���E  &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���EI&��L%�(J2Q�d�(�DQ���$EI��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b�iWmL�jc�UӮژv�ƴ�6�]�1���iWm*"Q�s���T���d�#�H��ʣ���hy�\힕G���hy�<Z=W��=��-c�sU���Xf,3��]�f��窍iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1��ӘHdLcb�7f!Zlь�ь�ќM�N%;�^�N%;;Kv~���hy�<Z=W�g�����<Z����hyt����Xf���2c�q�f����5���`^�y�F�dDKF�dD+F�bD+F�#ڎmLj��#ZcD�F��mdDc�(�DQ���$EI&��L%�(J2Q�d�(�DQ�!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�d��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(���]���h�D4��1�hS�*3M�N%;�^�N%;�Jv>b����<Z-��G���Yy4|�*��Gˣ��s��ݣ�2�<W�ˌe�2���n�Oy�z��MDQ�1�k=E�vUf"E�vUf"E�vUf"E�vUf"E�vUf"E�vUf"E1&�bLŘ(�1Qc�(�DQ���E1��!c��"0��!c��"0��!c��"0��!c��"0��!c��"0��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�(ٹ��Jv*��Y��hW�Gˣ�����=+���U����e��Gˣ{�臷�u�Ue�2�e��ˌ{5�=WE�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u��)bL�����hňV�hň�cD�1���#ZcDk�h#���60���h##��6N��̘�E�� �#�1�#�3�9#���Jv.����Jvv��|��sUy�<Z-���ݳ�h�\U-��Gˣ�j׻G?�e�y�*3�ˌe�s��݌��\�~
�};��z"�2�AD#�(�D4"�2N���D4"�2N���D4"�2N���D4"�2N���D4"�2N���D4&�bLŘ(�1Qc�(�DQ���E1&�bC��1D`C��1D`C��1D`C��1D`C��1D`C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3DC�A0DC�A0D�"%;��^�N%;;Kv~���hy�<Z=W�g�����<Z����hyt����Xf���2c�q�f����DQ���E  &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���E    &�L%�(J2Q�d�(�DQ���$EI&��L%�(J2D�$C�A2D�$C�A2D�$C�A2D�$C�A2D�$C�A2D�C�A1DPC�A1DPC�Ү:2��#Ӯ:2��#Ӯ:2��#Ӯ:2��#Ӯ:2��#Ӯ:2��#Ӯ:2��#Ӯ:2��#Ӯ:2��#Ӯ:"���E�U�Ǭ.��D4��� �Dp��D4%;��\d{%;���)���9���hy�<Z=[�g��칪<Z-��G�֮w�~x�X�\Uf,3�ˌgk׻?���5��m �r?y��(�1@�~"E9��(�cр(�qE���DQ�c�(��D4 �rDQ�� �Q�� �r?������cшv��&�B��ޏADc�(D���D4��v��1�h���c�" �U�� �1D@��ޏADc��hW���6�m��    fLcFF��mDD�-"�o�|ˈf�hƈf�hΈ�hΈ�h���hɈ��hɈV�hňV�h;F�#ڎ�1�5F�ƈ��3D�8C��3DC�A0DC�A0D�"%;��^�N%;;Kv~���hy�<Z=[�g�����<Z����hyt����Xf���2c�q�f����DQ���E  &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���E    &�L%�(J2Q�d�(�DQ���$EI&��L%�(J2D�$C�A2D�$C�A2D�$C�A2D�$C�A2D�$C�A2D�C�A1DPC�A1DPC�A1DPC�A1DPC�A1DPC�A1DPC�A1DPCE�M��̘�E�� �D0�AD#���vUf"���Jv.����Jvv��|��sUy�<Z-���ݳ�h�\U-��Gˣ�j׻G?�e�y�*3�ˌe�s��݌��\�~
�}���Lc��z"�bS�*3����ԮʌAD#�(6��2cш(�M���D4"�bS�*3����ԮʌADc�(�DQ���E1&�bLŘ(�1Qc�(��1D`C��1D`C��1D`C��1D`CH��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�Ӯj*"Q�s���T���d�gѮ*��Gˣ��s�{V���ʣ���l/��G���o랫ʌe��l/3��j�O{����ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��M��
̘"��h#���62���h#"Zm�j��V[F4cD3F4cDsF4gDsF�`DF�`DKF�dDKF�bD+F�bD�1���v�hC�A1DPC�A1DP�~��o�%ԔP���jJ�u�P;1�^3.|?�d�2���ˌe����f��
����e�2�͘;���2c����e�2��8`3N���x��2c�q�f����Xf<{{��̸C3.،w2c����e�2��x�q�ˌgo/3�wh�
6�Af,3����Xfܡ��2c����e�2��xd��t�'3����Xfܟ|�g�����^f,3�Ќ�<���x��2c�q�f_��.�d��ˌ;4c��t�'3����Xfܡ�x�<����e�2����3]�Ɍ�o/3�wh�������d�<_�?k{y�<�Cχ�L�~2���ˌe��1|�g:����^f,3�Ќ�C?ס��x��2c�qf����Of<{��̸C3��\�~2���ˌe��1|��:����^f,3�Ќ�C?ס��x��2c�q�f���d��ˌ;4c���u�'3����XfܡÇ~�<����e�2����s]�Ɍ�o/3�wh����Of<{��̸C3�/�Bx2���ˌe���q�x�<����e�2����]�Ɍ�o/3�wh��^�Of<{��̸C3�/�Bx2���ˌe��1|������^f,3�Ќ�����x��2c�q�f_�S�:�����^�/�����C�С��x��2c�q�f���d��ˌ;4c��/u�'3����Xfܟ'|�:����^f,3�Ќ�C�ԡ��x��2c�q�f���d��ˌ;4c��/u�'3����XfܡÇ~�C?����e�2��>�K�Ɍ�o/3�wh��_�Of<{��̸C3�/�Rx2���ˌe��1|�������^f,3�Ќ�����x��2c�qf\�^�Of<{��̸C3�/�Jx2���ˌe��1|�W�����^f,3�Ќ�����x��2c�q�f_��.�d��ˌ;4c��t�'3����Xfܡ�x�T��������;�|�Яt�'3����XfܡÇ~�C?����e�2��=���V�~2���ˌeƽ��s�X�~2���ˌe��1z�g���d��ˌ;4c����[�Ɍ�o/3�wh�衟��:����^f,3�Ќ�C?�ou�'3����Xfܡ��~����Of<{��̸C3F�l����x��2c�q�f�^��~�<����e�2������Vx2���ˌe��1|�g�����^f,3�ό
��3]�Ɍ�o/3�wh����Of<{��̸C3�/�Lx2���ˌe��1|�g�����^f,3�Ќ�<���x��2c�q�f_��.�d��ˌ;4c�ψ��c����Y�����z>|�g:����^f,3�Ќ�C?ӡ��x��2c�q�f���d��ˌ�3c��\�~2���ˌe��1|��:����^f,3�Ќ�C?ס��x��2c�q�f���d��ˌ;4c���u�'3����XfܡÇ~�C?����e�2��>�s]�Ɍ�o/3�wh����Of<{��̸C3�/�\x2���ˌe��1|������^f,3�ό��]�Ɍ�o/3�wh��^�Of<{��̸C3�/�Bx2���ˌe��1|������^f,3�Ќ�����x��2c�q�f_��.�d��ˌ;4c�/���С�<���|y~�����d��ˌ;4c��/t�'3����XfܡÇ~�C?����e�2���8�C�ԡ��x��2c�q�f���d��ˌ;4c��/u�'3����XfܡÇ~�C?����e�2��>�K�Ɍ�o/3�wh��_��Of<{��̸C3��Rx2���ˌe��1|�������^f,3�Ќ�����x��2c�q�f_��.�d��ˌ�3�/�Jx2���ˌe��1|�W�����^f,3�Ќ�����x��2c�q�f_��.�d��ˌ;4c��t�'3����Xfܡ�x�<����e�2����+�j�t�'ϟ��<_�ߡ�Ç~�C?����e�2��>�+�Ɍ�o/3�wh�衟�x
���^k�����e���W��j�����3�����0��y�jfv��z�/�<Z-��G/��x6�vy�k�r?���A���\?�[D-��G�ծw��hd�2���ˌ{5�O~`����va�ֆ8.�G
�};���`^�-ђ-ъ�ъmLj�cD�1�5F�ƈ��F��m`D�FF�Ͷ�h�ED�-#�1�#s1cLŘ(�1D`C��1D`C��1D`C��1D`C��1D`C��1D`8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C�A0DC�A0DC�A(٩d�"�+٩dgg���5G�\U-�^f{y�<�Yx4~�*��G/��<ZݫG?�e�{�*3�/���Xfܫ?��j0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���E    &��L%�(J2Q�d�(�DQ���$EI&��$C�A2D�$C�A2D�$C�A2D�$C�A2D�$C�A2D�$C�A1DPC�A1DPC�A1DPC�A1DPC�A1DPC�A1DPC�A1DPC�AD�-AӘ�E�� �D0�AD#� �v�`�UCE$Jv.����Jvv��|��sUy�<Z-���ݳ�h�\U-��Gˣ�j׻G?�e�y�*3�ˌe�s��݌��\5�v�`�U�iW
�]5�v�`�U�iW
�]5�v�`�U�iW
�]5�v�`�U�iW
�]5�v�`�U�iW
�]5�v�`�U�iW
�]5�v�`�U�iW
�]5�v�`�U�iW
�]5�v�`�U�iW
�]5�v�`�U�iW
�]5�v�`�U�iW
�]5�v�`�U�iW
�]uS0f�3&�1�h�ED�-"�oь�ь�ќ�т-т-ђ-ъ�ъmLj�cD�1�5F�ƈ��F���!g��"p��!�`� "��!�`� "�TD�d�2�+٩dgg��Ϣ]U-��Gˣ�j��<?W�Gˣ��^-��գ�2�=W�ˌ��^f,3�Ռ��\5�(J0Q�`�(�DQ���E &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���EI&��L%�(J2Q�d�(�DQ���$EI��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"ȩ]���h�D4��1�h�ԮʌADS�S��E�W�S�ή����#}�*��Gˣ��s�{V
��ʣ���hy�\�z�臷�5�Ue�2c���x�v���S��ޯA�oQ�i�ZODQrjWe� �Q���U�1�hD%�vUf"Eɩ]���FDQrjWe� �Q���U�1�hLŘ(�1Qc�(�DQ���E1&�bL�"0��!c��"0��!c��"0��!c��"0��!c��"0��v�d�U�iWM�]5�v�d�U�iWM�]5�v�d�U�iWM�]5�v�d�U�iWM�]5�v�d�U�iWM�]5�v�d�U�iWM�]5�v�d�U�iWM�]5�v�d�U�iWM�]5�v�d�U�iWM�]5�v�d�U�iWM�]5�v�d�USE$Jv.����Jvv���,�U���hy�<z�v�ʣ�sUy�<z������^=��-c�sU���x��e�2�^��i�U�v�d�U�iWM�]5�v�d�U�iWM�]5�v�d�U�iWM�]5�v�d�U�iWM�]5�v�d�U�iWM�]5�v�d�U�iWM�]5�v�d�U�iW�����1c����h���hɈ��hɈV�hňV�h;F�#ڎ�1�5F�ƈ60�
�h#�Ȉ62���h�ED�-"Zmь��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(�j�o�t̷wwo77�?�;����|4Z�x����}�����n�^_�6�n�߼�\}�    ���E FMu�̘�E�� ��1�AD#���Vf"�����.������v}���Wy�<Z-���ݳ�h��U-��Gˣ�j׻G?�e�y�*3�ˌe�s��݌����~
�}�ȶLc��z"�RS]+3�ȶ�T�ʌAD#�-5յ2cшlKMu��D4"�RS]+3�ȶ�T�ʌADc�(�DQ���E1&�bLŘ(�1Qc�(��1D`C��1D`C��1D`C��1D`C��1D`C��1D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C�A0DC�A0DCj6Q�s���T���d�gQ�*��Gˣ��s�{V���ʣ���l/��G���o랫ʌe��l/3��j�O{�L%�(J0Q�`�(�DQ���E  &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���$EI&��L%�(J2Q������b�Z��k-������b�Z��k-������b�Z��k-������b�Z��k-������b�Z��k-������b�Z��k-������b�Z��k-������b�Z��k-������b�Z��k-������b�Z��k-������b�Z��k-������b�Z��k-������b�Z��k-�]��v�b�UwL��iW�1��;�]uǴ��v�Ӯ�c�Uw*"Q�s���T���d�#�H��ʣ���hy�\힕G���hy�<Z=W��=��-c�sU���Xf,3��]�f��窻�6��-�{g�$1&ђ-ъ�ъmLj�cD�1�5F�ƈ��F��m`D�FF�Ͷ�h�ED�-#�1�#�1�9#�3�9#C��1D`C��1D`C��1D`C��1D`C��1D`C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3DC�A0DC�A0D��D��e�W�S��Β��E��<Z-��G���Yy4~�*��G/��<ZݫG?�e�{�*3�/���Xfܫ?��j0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���EI&��L%�(J2Q�d�(�DQ���$EI&��$C�A2D�$C�A2D�$C�A2D�$C�A2D�$C�A2D�C�A1DPC�A1DPC�A1DPC�A1DPC�A1DPC�A1DPC�A1DPCE��M@�i���Mc�"�� �D��[��1�h4�(ٹ��Jv*��U��s��U���hy�<z�v�ʣ�sUy�<Z-���]���湪�Xf,3��ծw3~�s�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮژv�ƴ�6�]�1���iWmL�jc�UӮڦvUC�83&�1ňV�hň�cD�1���#ZcDk�h#���60���h##ڈ�[D��"�Ŗ�ь�ќ�ќM�N%;�^�N%;;Kv~���hy�<Z=W�g�����<Z����hyt����Xf���2c�q�f����k}0�����3Q�`�(�DQ���E &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���$EI&��L%�(J2Q�d�(�DQ�!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"�vUf���Mc�"�� �D0L���D4��(ٹ��Jv*��U��s��U���hy�<z�v�ʣ�sUy�<Z-���]���湪�Xf,3��ծw3~�s�ajW%޷�(�4y�'�(�D4"�2L���D4"�2L���D4"�2L���D4"�2L���D4"�2L���D4&�bLŘ(�1Qc�(�DQ���E1&�bL�"0��!c��"0��!c��"0��!c��"0��!c��"0��!c��"p��!g��"p��!g��"p��!g��"@�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�(ٹ��Jv*��Y��hW�Gˣ�����=+���U����e��Gˣ{�臷�u�Ue�2�e��ˌ{5�=WE�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U�]u`�U��]Ց1ΌIbL1�#Z1���v�h;F�ƈ��#���60�
�h##�Ȉ6"�����h�eD3F4cD3F4gDsF4gDF�`DF4��!�b��"(��!�b��"(��!�b��"(��!�b��"(�� �qjWeƬ/�4� �i"A�ԮʌAD#�`T���m�d���]%;1G�\U-��Gˣ�j��<>W�Gˣ��������ok��ʌe�2c��\�z7�<W�vU�}���Lc��z"�2�AD#�(�ԮʌAD#�(�ԮʌAD#�(�ԮʌAD#�(�ԮʌAD#�(�ԮʌADc�(�DQ���E1&�bLŘ(�1Qc�(�DQ�!c��"0��!c��"0��!c��"0��!c��"0��!c��"0��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"��!�`� "��!�`� "�TD�d�2�+٩dgg��Ϣ]U-��Gˣ�j��<?W�Gˣ��^-��գ�2�=W�ˌ��^f,3�Ռ��\5�(J0Q�`�(�DQ���E &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���$EI&��L%�(J2Q�d�(�DQ���$EI��!�d�iW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vՑiW�vU�"���cV�~"@�c�"�~O#@�c є�T�s���T���d�c���ʣ���hy�l힕G���hy�<Z=[��=��-c�sU���Xf,3��]�f����5�(������Q��1�h@�8��܏AD�(�1@�~"E9��(�cр(�qE���6�3�1�~ˌqf!�m�l��f[F4cD3F4cDsF4gDsF�`DF�`DKF�dDKF�bD+F�bD�1���v�h��1�5F��m`Dc��"0��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"��!�`� "��!�`� "�TD�d�2�+٩dgg��ϡ]U-��Gˣgk��<?W�Gˣ��^-��գ�2�=W�ˌ��^f,3�Ռ��\5�(J0Q�`�(�DQ���E  &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���$EI&��L%�(J2Q�d�(�DQ���$EI��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�"���vUf���Mc�"�� �D`S�*3� S���m�d���]%;1G�\U-��Gˣ�j��<>W�Gˣ��������ok��ʌe�2c��\�z7�<W��]�x�&�(�䵞��Lcш(�M���D4"�bS�*3����ԮʌAD#�(6��2cш(�1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��1��ƴ�ӮjL��M����qfLcb��[D��2�#�1�#�3�9#�S�)٩d��+٩dgg��Ϣ]U-��Gˣ�j��<?W�Gˣ��^-��գ�2�=W�ˌ��^f,3�Ռ��\5�y��>���dDKF�dD+F�bD+F�#ڎmLj��#ZcD�F�����E    &��L%�(J2Q�d�(�DQ���$EI&��L%"H��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�d� "(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(�� ��U�1�6�AD#�`��F�O���D4�\E$Jv.����Jvv��|��sUy�<Z-���ݳ�h�\U-��Gˣ�j׻G?�e�y�*3�ˌe�s��݌��\էvU�}���Lc��z"�2�AD#�(>��2cш(�O���D4"��S�*3����ԮʌAD#�(>��2cј(�1Qc�(�DQ���E1&�bLŘ(�1Qc��"0��!c��"0��!c��"0��!c��"0��!c��"0��!c��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�(ٹ��Jv*��Y��hW�Gˣ�����=+���U����e��Gˣ{�臷�u�Ue�2�e��ˌ{5�=WE�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙvUg�U�iWu�]ՙv�i�2&�1��2cъmLj�cD�1�5F�ƈ��F��m`D�FF�-�vUf���Mcь�ь�ќ�)є�T�s���T���d�#�H��ʣ���hy�\힕G���hy�<Z=W��=��-c�sU���Xf,3��]�f���1��������Z��hDe��FDQ�1�hD%�vUf"E��]���FDQbjWe� �Q���U�1�hLŘ(�1Qc�(�DQ���E1&�bLŘ(�1D`C��1D`C��1D`C��1D`C��1D`C��1D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C�A0DC�A0DC���H��\f{%;���,��Y��ʣ���hy�\힕G���hy�2�ˣ�ѽz��[ƺ�2c��2�ˌeƽ��Ӟ�E   &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�d�(�DQ���$EI&��L%�(J2Q�d�(�A2D�$C�A2D�$C�A2D�$C�A2D�$C�A2D�$C�A1DPC�A1DPC�A1DPC�A1D���ӮL�j0�����ӮL�j0�����ӮL�j0�����ӮL�j0���r�j��l�+����YQ��1�h���D�U���U��t"ڪDp:F�N%;�^�N%;�Hv��9b��hy�<Z�����x4u�*��Gˣ��~=z�臷�U�Ue�2c���x��G�f�$��X5�r:y�_5��q̪Q��1�h�FQ>�Y5�r:m�(��1�FQN� ��E�8f�(��D�U�(ǬE9���j��U�(�cј(ʺ���c��mW�8����ۮz:����ۮz:�!�u�UO� �1D�n���D4��mW=��������c�"X�]�t"C붫��ADc�`�v��1�h붫��!D[�]����c��o���nnxw���_�����|<���_o��77�۷�W��ͫ��7����>���W�A�u�ZO���Ę�o�1�h����hɈ��hňV�hň�cD�1���#ZcDk�h#���60���h##ڈ�[D��"�Ŗ�ь�ќ�!�`�@�&��.������v}ںVy�<Z-�^���l<��Gˣ��^-��գ�2ֽ�ˌ��^f,3�Ռ���5�(J0Q�`�(�DQ���E &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���$EI&��L%�(J2Q�d�(�DQ���$EI��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�"����Vf���Mc�"�� �D`S]+3� S����m�d���]%;1G�\U-��Gˣ�j��<>W�Gˣ��������ok��ʌe�2c��\�z7�<W����x�&�(�䵞��Lcш(�Mu��D4"�bS]+3����T�ʌAD#�(6յ2cш(�Mu��D4&�bLŘ(�1Qc�(�DQ���E1&�bL�"0��!c��"0��!c��"0��!c��"0��!c��"0��!c��"p��!g��"p��!g�iW5�]՘vUc�U�iW5�]՘vUc�U�iW5�]՘vUc�U�iW5�]՘vUc�U�iW5�]՘vUc�U�iW5�]՘vUc�U�iW5�]՘vUc�U�iW5�]՘vUc�UME$Jv.����Jvv���,�U���hy�<z�v�ʣ�sUy�<z������^=��-c�sU���x��e�2�^��i�U�vUc�U�iW5�]՘vUc�U�iW5�]՘vUc�U�iW5�]՘v�i�7dLc�����60���h##ڈ��[D�㏍�D4cD3F4cDsF4gDsF�`DF�`DKF�dDKF�bD+F�bD�1���v�h��!�d� "H��!�d� "H��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�b��"(��!�"���vUf���Mc�"�� �D�S�*3� W���m�d���]%;1G�\U-��Gˣ�j��<>W�Gˣ��������ok��ʌe�2c��\�z7�<W��]�x�&�(�䵞��Lcш(�O���D4"��S�*3����ԮʌAD#�(>��2cш(�O���D4&�bLŘ(�1Qc�(�DQ���E1&�bL�"0��!c��"0��!c��"0��!c��"0��!c��"0��!c��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!�`� "��!�`� "��!�`�@E$Jv.����Jvv���,�U���hy�<z�v�ʣ�sUy�<z������^=��-c�sU���x��e�2�^��i�U���E   &�L%�(J0Q�`�(�DQ���E    &�L%�(
Ү�L��3��δ�:Ӯ�L��3��δ�:Ӯ�L��3��δ�:Ӯ�L��3��δ�:Ӯ�L��3��δ�:Ӯ�L��3��δ�:Ӯ�L��3��δ�:Ӯ�L��3��δ�:Ӯ�L��3��δ�:Ӯ�L��3��δ�:Ӯ�L��4�dLc|�e� �9#Z0�#Z0�%#Z2�%#Z1�#Z1���v�h;F�ƈ��#���60�
�h##�Ȉ6��ԮʌY_�i"�1�D0�AD#�`��FA��D�΅�W�S�ή����#}�*��Gˣ��s�{V
��ʣ���hy�\�z�臷�5�Ue�2c���x�v���S���ԮJ�oQ�i�ZODQ�1�hD%�vUf"E��]���FDQbjWe� �Q���U�1�hD%�vUf"E1&�bLŘ(�1Qc�(�DQ���E1&�bC��1D`C��1D`C��1D`C��1D`C��1D`8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C��3D�8C�A0DC�A0DC�A0D�"%;��^�N%;;Kv~���hy�<Z=W�g�����<Z����hyt����Xf���2c�q�f����DQ���E  &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���E    &�L%�(J2Q�d�(�DQ���$EI&��L%�(J2D�$C�A2D�$C�A2D�$C�A2D�$C�A2D�$C�A2DPC�A1D���ӮL�j0�����ӮL�j0�����ӮL�j0�����ӮL�j0�����ӮL�j0�����ӮL�j0�����Ӯ�L�j2��ɴ��Ԯ:"c���gDsF4�DS�S���W�S�ή����#}�*��Gˣ��s�{V
��ʣ���hy�\�z�臷�5�Ue�2c���x�v���S���ԮJ�o�Z�k}2�%#Z2�#Z1�#ڎmLj�cDk�h��1�
�h#���62���h#"�m�l��f[F4&�bLŘ(�1Qc�(�DQ�!c��"0��!c��"0��!c��"0��!c��"0��!c��"0��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"p��!g��"��!�`� "��!�`� "�TD�d�2�+٩dgg��Ϣ]U-��Gˣ�j��<?W�Gˣ��^-��գ�2�=W�ˌ��^f,3�Ռ��\5�(J0Q�`�(�DQ���E &�L%�(J0Q�`�(�DQ���E    &�L%�(J0Q�`�(�DQ���$EI&��L%�(J2Q�d�(�DQ���$EI��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�d� "H��!�b��"(��!�����ʖ]�}�Wɷ�~(U̵֌q�h4 ���!�s� 3/U���Tf���q�!Y$������}ƣ0׮������19�A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F��ZA���燶?CBF�f]�ͺj�u�6�m�U;C$iv>����L��T��/�Q����atF��C1����atF���~�-�突q`�G�;;���\�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWݟ�xf��yf�gHhmBkZ�Ю&�� �jB�Lh� m3��Lh7�̈́v7��Mhwڼ��慄6/&�2��   �LhÄ6LhC��fg����4;��<Y��XW
���0:�>�݇b4?W
����|}F���o�e<�\50����q`|V���������Zo�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���,SEY���Le�*�2U�e�(�TQ���,SEY��1�e�`#X��1�e�`#X��1�e�`#X��1�e�`#X��1�e�`#X��A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����0���E����C۟!�  #؟!�    #��\��ϐЄ\3D�f烾>��4;O�����jF��a���>��jF��a�������2�y�Ɓq`|4����=�U�/QEٟ!�֋*���"�(�3$4QE��\De��&�(ח����ϐ�D��rU�����\_.���?CBU���ETQ�gHh��R��R��R��R��R��R��R��R��R��R��A#(ce����1�2FP��A#(ce����1�2FP��A#(ce�`#��1�a�`#��1�a�`#��1��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W���?����2�L� m�І m����L��_�fg��'kv~�atF��G��P���at������2����瞫Ɓ�c�>0��
��=W���}{�_���~�Ж  m��ڄ�&�6�]MhW�Մ���6�fB���n&�� �nB����$���6ψЖ��,SEY���Le�*�2U�e�(��2F��,c��2F��,c��2F��,c��2F��,c��2F��,c�A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�F����燶?CBF�?CBF�����0�-C$iv>����L��T��/�Q����atF��C1����atF���~�-�突q`�G�;;���\u��U��ۢ��?C~�U�����l���y��&�(۾�j�!��*ʶ���gHh���������l���y��f�(e�(e�(e�(e�(e�(e�(e�(e�(e�(e����1�2FP��A#(ce����1�2FP��A#(ce����1�2FP��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��Ⱥ�f�U7����u�ͬ�nf]u3�[�H��|�קٙf�ɚ�_źjF��a���>���jF?����0���~�-�突q`�������}�Uɺ�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7���?�g���<3_�<3�3$�eB[&�eBkZ��ڄv5�]MhW�fB�Lh�   �fB���n&��  �nB���n���y����ϐ�ʄV&�2�
�0�    #�e�$��}}��iv����8�s�0:�����}(F�s�0:����ٝ��o�e<�\50����hvg��{����uU������ϐ_�Ee��&�(�}]�<CBU�۾�j�!��*�m_W5ϐ�D嶯��gHh��r��U�3$4SE)SE)SE)SE)SE)SE)SE)SE)SE)SE)ce����1�2FP��A#(ce����1�2FP��A#(ce����1�2F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��4F0�Lc��4F0�LcYI��1_��e*�'�\~��atF��G��P��w�at������2�����ޑƁ�c�>0��
���#��?������LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�2U�e�(�TQ���,SEY���Le�*�2F��,c��2F��,c��2F��,c��2F��,c��2F��,c��2F���1�6F���A#hcm����u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��uջYW��uջYW��uջYW��uջYW�g!$��}}��iv����8�s�0:�����}(F�s�0:����ٝ��o�e<�\50����hvg��{����?�������ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�}_W��i�i�̸��ƅ�6.&�2��    �LhÄ6LhÄ6Mhӄ6Mh˄�Lh˄�&�6��  �jB��Ю&�̈́���6�̈́v3��Lh��1�a�`#���1�i�`#���1�i� C$iv>����L��d�ίb]5����0�hv���\5����at}VF�����s��80~��Ɓ�Ya����TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�2U�e�(�TQ���,SEY���Le�*�2F��,c��2F��,c��2F��,c��2F��,c��2F��,c��2F���1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#h`u��U�3O��0��gHh�>?���Z��iv>����L��L��/�����atF��C1ڞ���atF���~�-�突q`Ƈ�;;���\���!~�U��gȯ�����PEy}���(��U��gHh����PEy}���(��U��gHh����PEy}���(��U��gHh��R��R��R��R��R��R��R��R��R��A#(ce����1�2FP��A#(ce����1�2FP��A#몯ϐЌ�u��gDhb]��3�ĺ��3$4cb]���1����   ��XW}}��f�@���>CB3F �U_�!�#몯ϐЌ�u��gHh�ĺ��3"4�����M��~~��XW}}��f�@���>�fg����4;��<Y��kXW
���0:�>�݇b4?W
����|}F���o�e<�\50����q`|V�﹪XW�/:̯���"�U??c�(b]������u��gHh��"�U_�!��*�XW}}��f�(b]������u��gDhb]���XW������u��gHh��"�U_�!�#몯ϐЌ�u��gHh�ĺ��3$4cb]���1����L/�����3�<CB����&�;    �/$�����bB+Z��ʄ6LhÄ6Lhӄ6Mhӄ�Lh˄�LhmBkZ�Ю&��   �jB�Lh� �A#hcm����1�FP���y����ϐЄ�ϐЄԾ�j�!��ٙf�C�>��4;O�����jF��a���>��jF��a�������2�y�Ɓq`|4����=�U_?C��-�(�3��zQE�}]�<CBU���U�3$4QE�}]�<CBU���U�3$4QE�}]�<CBU���U�3$4SE)SE)SE)SE)SE)SE)SE)SE)SE)ce����1�2FP��A#(ce����1�2FP��A#(ce����1�2FP��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#���1�i�`#���1�i� C$iv>����L��d�ίb]5����0�hv���\5����at}VF�����s��80~��Ɓ�Ya����TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�2U�e�(�TQ���,SEY���Le�*�2F��,c��2F��,c��2F��,c��2F��,cd]�̺j�u�2�e�Uˬ��YW-��Zf]�̺j�u�2�e�Uˬ��YW-��Zf]�̺j�u�2�e�Uˬ��YW-��Zf]�̺j�u�2�e�Uˬ��YW-��Zf]�̺j�u�2�e�U����r�|��ZjG�>
�4�N�P�8�1��u���*0�}`�ƅa�ۍ����Ɓ�    a��^ߛ�q`|������0��+0�}`��ø�����Ɓ� a����80>���q`|B_1���80>���q`|BoƷ�80>���q`|B�0��q`|������0�[W.���_��q���^`|������0�x������Ɓ�   a�/�*x������_�U.���_�'�1��{����39��}�某��Яr����80>!��_��/0>���q`|B�C�ʡ_`|������0Ƈ~�C�����Ɓ�  a��F���_�����~#�~����������ǿ>0�Oc|�7r����80>!���ȡ_`|������0Ƈ~#x������_��\��ǿ>0�Oc|�7r����80>!����^`|������0�x#x������_��\��ǿ>0���/�f.���_�'�1�������}`���o�/0>���q`|B��������Ɓ� a�/�ڛ9��}�某���o��/0>���q`|B�C��C�����Ɓ�    a��f���_�'�1>��9���}`����o��/0>���q`|>/|�r����80>!���ʡ_`|������0Ƈ~+�~����������ǿ>0�Oc|�r����80>!����^`|������0�x+x������_�\��ǿ>0�Oc|��r����80>!��^�/0>���q`|>7���\��ǿ>0�Oc|�׹���}`����s����80>!��^�/0>���q`|B��6S{�C�0��ׇ�a�  ���:�~�������u���_�'�1>����ǿ>0�Oc|��9���}`���Я^.9���}`�
��#�q���_�'�1=���K���_�'�1=���K���_�'�1=���K���_�'�1=���K.���_�'�1����K.���_�'�1����K.���_�'�1����K.���_�'�1����K.���_�'�1���\��ǿ>0����x������Ɓ�  a�/�*x������_�U.���_�'�1���\��ǿ>0�Oc|�Wbj�^*�~a�����2�U���_�'�1>����ǿ>0�Oc|�W9���}`���Яr����80>!���ȡ_`|�����|0��o��/0>���q`|B�C��C�����Ɓ�  a��F���_�'�1>�9���}`����o�/0>���q`|B��������Ɓ�   a�/�F.���_�'�1������}`���o�/0>���q`|B��������Ɓ��`<���^`|������0�x3x������_��\��ǿ>0�Oc|�7s����80>!���4S{3�~a�����2����ǿ>0�Oc|�7s����80>!���̡_`|������0Ƈ~3�~����������ǿ>0����V���_�'�1>�[9���}`����o��/0>���q`|B�C��C�����Ɓ�    a��V.���_�'�1��[����}`���o�/0>���q`|B��������Ɓ�    a�/�V.���_�'�1���\��ǿ>0����x������Ɓ�   a�/�:x������_�u.���_�'�1���\��ǿ>0�Oc|��fj�s����0?�?!��_��/0>���q`|B�C�Ρ_`|������0Ƈ~�C�����Ɓ�  a��:�~�����˜����w��2�3)g珖|}�h�-g�������o����w��������OO�GF��at�����u}{ݮ=�/n���Oa��������HF��G�;;��O4�q`�������_��������]]��6?}����!~ߞ���i~��&�eB[&�eBkZ��&ϴx��R��Մ���6�fB���n&�� �nB����$�����BB��   �LheB��;��<3LhÄ6Lhӄ6Mhӄ�Lh˄�LhmB3FP��A#(ce����1�2FP��A#(ce�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�i�`#���1�i�`#��f��iv>����L��d�ο
G�F�я��0:�����at������2����瞫Ɓ�c�>0��
��=W���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���,SEY���Le�*�2U�e�(�TQ�1�e�`#X��1�e�`#X��1�e�`#X��1�e�`#X��1�e�`#X��1�e����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#�/a�3�m��&�`��&�`���Z��iv>����L��T��/�Q����atF��C1����atF���~�-�突q`�G�;;���\��3��ۢ��?C~�U�����gHh��2�uU�    MTQ�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�����gn/e����݄v7��Ih�BBڸ��ʄV&�2�
�0�
�4�M�4�-�2�-Z��ڄ�&��    �jB���6�fB3F0�c��0F0�c��4F0�Lc��4F0�Lc"I��1_�fg��'kv~�atF��G��P���at������2����瞫Ɓ�c�>0��
��=W���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���,SEY���Le�*�2U�e�(�TQ�1�e�`#X��1�e�`#X��1�e�`#X��1�e�`#X��1�e�`#X��1�e����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#X���y����ϐЄ�ϐЄ�}]�<CBK�3�·|}��iv����8�s�0:�����}(F�s�0:����ٝ��o�e<�\50����hvg��{���~��}[TQ�gȯ�����uU�   MTQ־�j�!��*���U�3$4QEY���y��&�(k_W5ϐ�De�������������������������������1�2FP��A#(ce����1�2FP��A#(ce����.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ��������O�3�Γ5;��u�0:�����}(F�s�0:�~�ׇ�a�Y��[�s�U���1_�g������u�e�U�YW]f]u�u�e�U�YW]f]u�u�e�U�YW]f]u�u�e�U�YW]f]u�u�e�U�YW]f]ufn��|�k�yF��.&�2�� �LhÄ6LhÄ6Mhӄ6Mh˄�Lh˄�&�6��  �jB��Ю&�̈́���6�̈́v3��Lhw�1�e����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#�}]�<����gHh��gHh�z_W5ϐ���L��!_�fg���jv~��\5����0�hv���\5����0�hvgg��o�<W
���80>���a��窯�!~�U���k������j�!��*J���������j�!��*J���������j�!��*J�������������������������������1�2FP��A#(ce����1�2FP��A#(ce����1�2FP��A#(c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�Lc��4F0�Lc��4F�!�4;��iv��y�f�W��F��at}4��h~�F�я��0:�>+��~�x�j`?������0~�s�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE!�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�j�U�g�<��z)�    �LhÄ6Lhiv�����O�3��S5;�G}�F��at}4��h|�F��at}4��3����g��Ɓq`���0~�s����oO�k�4��O�2�-�2�� �MhmB��Ю&�� m3�m&�̈́v3��Lh7�݄v7��Ihu!�����������������������1�2FP��A#(ce����1�2FP��A#(ce����1�2FP��A#(c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�Lc��4F0�Lc��4F�!�4;��iv��y�f�W��F��at}4��h~�F�я��0:�>+��~�x�j`?������0~�s�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�2U�e�(�TQ���,SEY���Le#X��1�e�`#X��1�e�`#X��1�e�`#X��1�e�`#X��1�e�`#X��A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����0�m_W5�<?�ͬ�nf]u3몛YW�̺�f�U�������O�3��S5;�G}�F��at}4��h|�F��at}4��3����g��Ɓq`���0~�s�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺��L��3ח2�L� m3�m&�̈́v3��Lh7�݄v7��Ih�BB�ڼ��ʄV&�2�
�0��ٙf�C�>��4;O���*�U��0:���f����U��0�1_F��ge��o�=W
���|}`���{���3�����Z?ͯ�ӄ�Lh˄�LhmBk���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�2U�e�(�TQ���,SEY���Le�*�2F��,c��2F��,c��2F��,c��2F��,c��2F��,c��2F���1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#ha�}]�<����gHh��gHh�n���y���fg����4;��<U��p��atF��G��P���atF��G�;;��~�x�j`Ɓ������<W}�������ϐ_�E嶯��gHh��r��U�3$4QE���������uU� MTQn���y��&�(�}]�<CB3U�2U�2U�2U�2U�2U�2U�2U�2U�2FP��A#(ce����1�2FP��A#(ce����1�2FP��A#(ce�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`# �7��z3�7��z3�7��z3�7��z3�7��z3�7��z3�7��z3�7��z3�7��z3�7��z3몷������O�3�Γ5;��u�0:�����}(F�s�0:�~�ׇ�a�Y��[�s�U���1_�g������u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW��u՛YW����e\�3K<S/�    �LhÄ6LhÄ6Mhӄ6Mh˄�Lh˄�&�6��  �jB��Ю&�̈́���6�̈́v3��Lhw�݄v�}N��?����gHh��gHh��/a�3$4a�������O�3��S5;�G}�F��at}4��h|�F��at}4��3����g��Ɓq`���0~�s���ETQ�gȯ���r��*��  MTQ�/QEٟ!��*���"�(�3$4QE��\De��&�(������ϐ�D��rU���������������������������������1�2FP��A#(ce����1�2FP��A#(ce����1�2FP��A#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�i�`#���1�i�`#���1�i� C$iv>����L��d�ίb]5����0�hv���\5����at}VF�����s��80~��Ɓ�Ya����TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�2U�e�(�TQ���,SEY���Le�*�2F��,c��2F��,c��2F��,c��2F��,c��2F��,c��2F��Ⱥ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ɺ���^���^�yzh�ϐЀ�>CBF��`�ϐЀ�>�fg����4;��<S��Kp��atF�ч��P���atF�ч�;;��~�x�j`Ɓ�����w<W��������TQ>?�(�ϐ�@��3����  
TQ>?�(�ϐ�@��3���� 
TQ>?�(�ϐ�@��3���� �TQĺ��3"4����SE몯Ϭό��yf�gHhӄ6Mhӄ�Lh˄�LhmBkZ�Ю&��  �jB�Lh� m3��Lh7�̈́v7��Mhw�g�0ψ��ńV&�2�#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#���1�i�`#���1�i�`#��2D�f�c�>��4;O����U��0:��g����U��0�1_F��ge��o�=W
���|}`���{�:Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���,SEY���Le�*�2U�e�(�TQ���,c��2F��,c��2F��,c��2F��,c��2F��,c��2F��,cm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F��ZA���燶?CBF�?CBFP���y��&��2D�f烾>��4;O�����jF��a���>��jF��a�������2�y�Ɓq`|4����=�Uk_W�o�*����^TQ�gHh��R���y��&�(����gHh��R���y��&�(����gHh��R���y��f�(e�(e�(e�(e�(e�(d]�̺j�u�2�e�Uˬ��YW-��Zf]�̺j�u�2�e�Uˬ��YW-��Zf]�̺j�u�2�e�Uˬ��YW-��Zf]�̺j�u�2�e�Uˬ��YW-��Zf]�̺j�u�2�e�Uˬ��YW-��Zf]�̺j�u�2��3c�g�xf{��gHh�  �fB���n&��  �nB���慄6/$�y1�� �LheB&�aB*�4;��|�קٙf�ɚ�_źjF��a���>���jF?����0���~�-�突q`�������}�U�4��O�k�4��/�2�-Z��ڄ�&�� �TQ���LSE���2Me�*�4U�i�(�TQ���LSEY���Le�*�2U�e�(�TQ���,SEY����,c��2F��,c��2F��,c��2F��,c��2F��,c��2F���1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hac_W5�<?���0���0�����gHh�F�H��|�קٙf穚�_��>W
���0:�>�݇b4>W
���0:�>�����[�3�U��80��fwv�����U��ۢ��?C~�U������}]�<CBU�����gHh��2�uU�  MTQƾ�j�!��*���U�3$4SE)SE)SE)SE)SE)SE)SE)SE)SE)SE)ce����1�2FP��A#(ce����1�2FP��A#(ce����1�2F0�c��0F0�c��0F0�c��0F0�c��0F0�c�YWf]u�u�a�U�YWf]u�u�a�U�YWf]u�u�a�U�YWf]u�u�a�U�YWf]u�u�a�UG�H��|�קٙf�ɚ�_źjF��a���>���jF?����0���~�-�突q`�������}�Uɺ�0�ì���:̺�0�ì���:̺�0�ì���:̺�0�ì���:̺�0�ì���:̺�0�ì���:̺�0�ì���:̺�0�c_W��a�Y�eB[&�eBkZ��ڄv5�]MhW�fB�Lh�    �fB���n&��  �nB����BB� �/&�2�� �LhÄ6LhÄf����1�6F���A#hcm����1�6F���A#hcm����1�6F��澮j�y~h�3$4a�3$4as_W5ϐЄ�������O�3��S5;�G}�F��at}4��h|�F��at}4��3����g��Ɓq`���0~�sչ���߷Ee��Z/�(�3$4QE����y��&�(s_W5ϐ�De�������}]�<CBU�����gHh��R��R��R��R��R��R��R��R��R��R��A#(ce����1�2FP��A#(ce����1�2FP��A#(ce�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�i�`#���1�i�`#���1�������O�3�Γ5;��u�0:�����}(F�s�0:�~�ׇ�a�Y��[�s�U���1_�g�����NSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�e�(�TQ���,SEY���Le�*�2U�e�(d]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u�i�U�YW�f]u�u���u�������u�?}扡��3$����>CB{�����>CB/k�g��L��_�fg���hv�����U��0:������0Z����atF?�Ǚ��[�S�U��80�����0~�s�?~�|��߷��0ϐ_�  m�Ж �MhmBk�Մv5�]Mh�    m3�m&�� �fB����&��  �NB�   �.$����ʄV&�2�
�0��*J#(ce����1�2FP��A#(ce����1�2FP��A#(ce����1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#���1�i�`#���1�i�`#��2D�f�c�>��4;O��|�u�0:�������0���at������2����瞫Ɓ�c�>0��
��=W���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���,SEY���Le�*�2U�e�(�TQ�1�e�`#X��1�e�`#X��1�e�`#X��1�e�`#X��1�e�`#X��1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hc-���uU���C۟!�   #؟!�    #�}]�<CBFP"I��A_�fg���jv~��\5����0�hv���\5����0�hvgg��o�<W
���80>���a���e�Uˬ��YW-��Zf]�̺j�u�2�e�Uˬ��YW-��Zf]�̺j�u�2�e�Uˬ��YW-��Zf]�̺j�u�2�e�Uˬ��YW-��Zf]�̺j�u�2�e�Uˬ��YW-��Zf]uf4yf�g�/�    �jB�Lh� m3��Lh7�̈́v7��Mhwڸ��ƅ�6.&�2��  �LhÄ6LhÄ6Mhӄ6Mh˄�Lh˄�&4c��0F0�c��0F0�c��0F0�c��4F0�Lc��4F0�Lc��4F�!�4;��iv��y�f�W��F��at}4��h~�F�я��0:�>+��~�x�j`?������0~�s�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE����Le�*�2U�e�(�TQ���,SEY���Le#X��1�e�`#X��1�e�`#X��1�e�`#X��1�e�`#X��1�e�`#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F��ƾ�j�y~h�3$4a�3$4ac_W5ϐЄ�������O�3��S5;�G}�F��at}4��h|�F��at}4��3����g��Ɓq`���0~�sձ���߷Ee��Z/�(�3$4QE���y��&�(c_W5ϐ�De�������}]�<CBU�����gHh��R��R��R��R��R��R��R��R��R��R��A#(ce����1��:̺�0�ì���:̺�0�ì���:̺�0�ì���:̺�0�ì���:̺�0�ì���:̺�0�ì���:̺�0�ì���:̺�0�ì���:̺�0�ì���:̺�0�ì���:̺�0�ì���:̺�0�ì���:̺�0�ì���:2D�f烾>��4;O���*�U��0:���f����U��0�1_F��ge��o�=W
���|}`���{�J�U�YWf]u��W��0�,�L��ڄ�&��   �jB���6�fB�Lh7�̈́v3��Mhwڝ��.$��m4ϐ�ʄV&�2�
�0�
�4�M�4�#X��1�e�`#X��1�e�`#X��1�e�`#X��1�e�`#X��A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����0�����g��� M��   M���U�3$4a3C$iv>����L��T��/�Q����atF��C1����atF���~�-�突q`�G�;;���\u����mQEٟ!�֋*��  MTQ澮j�!��*���U�3$4QE����y��&�(s_W5ϐ�De����������������������������������1�2FP��A#(ce����1�2FP��A#(ce����1�2FP��A#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�i�`#���1�i�`#���1�i� C$iv>����L��d�ίb]5����0�hv���\5����at}VF�����s��80~��Ɓ�Ya����TQ���LSE!�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�Ӭ�N��:ͺ�4�s_W��3�<��37�̈́v3��Mhw����uU���C۟!��  �LheB&�aB*�4;��|�קٙf穚�_��>W
���0:�>�݇b4>W
���0:�>�����[�3�U��80��fwv�����U�����Z?ͯ�˄�Lh˄�&�6�� �jB��Ю&4QEٟ!��*���U�3$4QEY���y��f�(e�(e�(e�(e�(e�(e�(e�(e�(e�(e����1�2FP��A#(ce����1�2FP��A#(ce����1�2FP��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#���1�i�`#���1�i�`#�I�����4;��<Y��XW
���0:�>�݇b4?W
����|}F���o�e<�\50����q`|V���4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSEY���Le�*�2U�e�(�TQ���,SEY����,c��2F��,c��2F��,c��2F��,c��2F��,c��2F���1�6F���A#hcm����1�6F���A#hcm����1�6F���A# �ˬ�.���̺�2�ˬ�.���̺�2�m�U۬��YWm���f]�ͺj�u�6�m�U;C$iv>����L��T��/�Q����atF��C1����atF���~�-�突q`�G�;;���\�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u�6�m�U۬��YWm���f]�ͺj�u���u{�3��r1��   �LheB+�0�
�0�M�4�M�2�-�2��    �MhmB��Ю&�� m3�m&�̈́v3��Lh7�݄v7�#���1�i�`#���1�i�`#��2D�f�c�>��4;O���*�U��0:���f����U��0�1_F��ge��o�=W
���|}`���{�:Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���,SEY���Le�*�2U�e�(�TQ���,c��2F��,c��2F��,c��2F��,c��2F��,c��2F��,cm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F��Z�u_W5�<?���0���0�뾮j�!�  #�f�$��}}��iv����8�s�0:�����}(F�s�0:����ٝ��o�e<�\50����hvg��{��^�uU������ϐ_�Ee��&�(�}]�<CBU�뾮j�!��*�u_W5ϐ�D庯��gHh��r��U�3$4SE)SE)SE)SE)SE)SE)SE)SE)SE)SE)ce����1�2FP��A#(ce����1�2FP��A#(ce����1��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5�W��z5��������O�3�Γ5;��u�0:�����}(F�s�0:�~�ׇ�a�Y��[�s�U���1_�g������uիYW��uիYW��uիYW��uիYW��uիYW��uիYW��u���q'�,����b�!��Lhw�݄v'�� ��_�3$�2�� �LhÄ6LhÄ6Mhӄ6Mh˄�Lh˄�&�6��  �jB��Ю&�̈́f�`#X��1�e�`#X��1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hc-�`��U�3�m��&�`��&�`��U�3$4a[�H��|�קٙf穚�_��>W
���0:�>�݇b4>W
���0:�>�����[�3�U��80��fwv��궯��߷Ee��Z/�(�3$4QE��uU�   MTQ�}]�<CBU�m_W5ϐ�De��U�3$4QE��uU�   �TQ�TQ�TQ�TQ�TQ�TQ�TQ�TQ�TQ�TQ�A#(ce����1�2FP��A#(ce����1�2FP��A#(ce���c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��4F0�Lc��4F0�Lc��4F�!�4;��iv��y�f�W��F��at}4��h~�F�я��0:�>+��~�x�j`?������0~�s�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���B�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u3몛YW�̺�f�U7����u�ͬ�nf]u�/��//e���Z��ʄV&�aB&�aB�&�iB�&�eB[&�eBkZ��ڄv5�]MhW�fB�Lh� �fB���n&��  �nBFp{�#؟y~h�3$4a�3$4a���0���0�[�H��|�קٙf穚�_��>W
���0:�>�݇b4>W
���0:�>�����[�3�U��80��fwv�����"�(�3��zQE��\De��&�(������ϐ�D��rU������^.���?CBU���ETQ�gHh��r{��*��   �TQ�TQ�TQ�TQ�TQ�TQ�TQ�TQ�TQ�TQ�A#(ce����1�2FP��A#(ce����1�2FP��A#(ce���c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��4F0�Lc��4F0�Lc��4F�!�4;��iv��y�f�W��F��at}4��h~�F�я��0:�>+��~�x�j`?������0~�s�i�(s��"ϴxf��y���LhmBkZ�Ю&�� �jB�Lh� m3��Lh7�̈́v7��Mhw��_�gDh�bB+Z��ʄ6LhÄ6Lhӄf�`#X��1�e�`#X��1�e�`#X��1�e�`#X��1�e�`#X��1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hc-�ྯ��g���    M��   M�}_W5ϐЄ�3D�f烾>��4;O�����jF��a���>��jF��a�������2�y�Ɓq`|4����=�U�����}[TQ�gȯ����?CBU����j�!��*�}_W5ϐ�D徯��gHh��r��U�3$4QE�����������������������������������1�2FP��A#(ce����1�2FP��A#(ce����1�2FP��A#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�i�`#���1�i�`#���1�i� C$iv>����L��d�ίb]5����0�hv���\5����at}VF�����s��80~��Ɓ�Ya����TQȺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ��ͺ�ݬ����A�i�����3$��   �nB����$�����ں��ʄV&�2�
�0����7�yf�Ц   m�Ж m�Ж �MhmBk�Մv5�]Mh�    ��2F��,c��2F��,cm����1�6F���A#hcm����1�6F���A#hcm����1�6F���A#hc}{���������~�����O?�����W��k�����m��O�|��7?~��?|�ӧo~����}��_��
F1�(F�h�
�.�\�y�顽>CB���    
(��g�b�>CBK�3·|}:��p����%8���0:������}(F���?���u�����71䏂�Qp4���Q���'޿Ɓq`���0~���ϟ�-�ϐ_�A���3����  
t[>?�-�ϐ�@���3���� 
t[>?�-�ϐ�@���3���� 
TQ>?�(�ϐ�L�L�L�L�L�L�L�L�L��O�e����1�2FP��A#(ce����1�2FP��A#(ce����1�2FP��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#��1�a�`#���1�i�`#���1�i� �#�\>��S�L��d�˯aG5����0�pv���\5����at}VF�����;��80~��Ɓ�Ya��w��g�s~�6U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSEs��ϐ�LE̵�>CB3U1����M̵�>#Bs���1U1��� �TQ�\��3$4cb����11���   ���k}}��f�@̵�>CB3F �Z_�!�#s��ϐЌ����gDhb�����k���11���    ���k}}��f�@̵�>CB3F �Z_�!�#s��ϐЮ/5�3�<��̈́���6�̈́v3��Lhw�݄v�վ�j�y~h�3$�2��   �LhÄ6Lhiv�����O�3��S5;�G}�F��at}4��h|�F��at}4��3����g��Ɓq`���0~�s����oO�k�4��O�2�-�2�� �MhmBU�����Ծ�j�!��*J������Ծ�j�!��*J�*J�*J�*J�*J�*J�*J�*J�*J#(ce����1�2FP��A#(ce����1�2FP��A#(ce����1�2F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��4F0�Lc��4F0�Lc"I��1_�fg��'kv~�atF��G��P���at������2����瞫Ɓ�c�>0��
��=W���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���LSE���2Me�*�4U�i�(�TQ���,SEY���Le� �TQ���,SEY��1�e�`#X��1�e�`#X��1�e�`#X��1�e�`#X��1�e�`�_.۟>��?���o~��_�駟_~1�U�m���q�]�����?|�㧟~���?}��W?����X����O�}�]o�ˮo{ܾ����H��gY�Y�8Kgi�,m�����q�6���Y�8Kgi�,m�����q�6���Y�8Kg!��e�_�쿖�-��Zf����k���2��e�_�쿖�/�����M:t����t�ҡ;U��O����g�_߫�80>���q`|B�q�K��_�'��;�{}oƁ�����xb��80>���q`|B/����_�'�qc_�����Ɓ�  a|�0������Ɓ�   a�a������Ɓ�   a|�0�Ɓ������na\����}`�ƅ/�*x������_�U.���_�'�1���\��ǿ>0�Oc|�������gr����0?�?!��_��/0>���q`|B�C�ʡ_`|������0Ƈ~�C�����Ɓ�  a��*�~�������U���_�'�1>�9���}`������ǿ>0�Oc|�7r����80>!��ߘ�q`|������0�ƹ���}`���o�/0>���q`|B��������Ɓ�   a�/�F.���_�'�1������}`���o�/0>���q`|B��������Ɓ��`<���^`|������0�x3x������_��\��ǿ>0�Oc|��g�=kjo��/�?��a~�B��C��C�����Ɓ� a��f���_�'�1>��9���}`����o��/0>���q`|B�C��C�����Ɓ�  a��V���_���‡~+�~����������ǿ>0�Oc|�f`���80>!�'�q.���_�'�1��[����}`���o�/0>���q`|B��������Ɓ�  a�/�V.���_�'�1��[����}`����s����80>�_�u.���_�'�1���\��ǿ>0�Oc|�׹���}`������{��^��/�?��a~�B��C�Ρ_`|������0Ƈ~�C�����Ɓ�   a��:�~�������u���_�'�1>����ǿ>0�Ocz�W/���ǿ>0���?��8�~�����˜���%�~�����˜���eƁ�����xb�/0>���q`|B��z��/0>���q`|B��z��/0>���q`|B��z��/0>���q`|B��z��/0>���q`|B��z��/0>���q`|B���^`|�����|0.|�W����}`����r����80>!��^�/0>���q`|B��?{�9S{�?+��}�某��Яr����80>!��_��/0>���q`|B�C�ʡ_`|������0Ƈ~�C�����Ɓ� a��*�~����������ǿ>0����F���_�'�1>�9���}`����o��80>���q`|BO�\��ǿ>0�Oc|�7r����80>!����^`|������0�x#x������_��\��ǿ>0�Oc|�7r����80>!����^`|�����|0��o�/0>���q`|B��������Ɓ�   a�/�f.���_�'�1������5�7s����0?�?!���̡_`|������0Ƈ~3�~����������ǿ>0�Oc|�7s����80>!���̡_`|������0Ƈ~+�~�������x�C��C�����Ɓ�   a��V���_�'�1>�[30�}`���8x������_�\��ǿ>0�Oc|��r����80>!����^`|������0�x+x������_�\��ǿ>0�Oc|�׹���}`�ƍ/�:x������_�u.���_�'�1���\��ǿ>0�Oc|��g�=kj�s����0?�?!��_��/0>���q`|B�C�Ρ_`|������0Ƈ~�C�����Ɓ� a��:�~�������u���_�'�1=�/%J�e�gR��-���ђ?Z��G�_��˷�~w����_mU������.����0���<>������]{�_�~y��������_�0:���fwvF��h���_�g����/�����l�m~����QC��=ͯ���Z?Mh˄�Lh��/���L��yf�gHhW�Մv5�m&�̈́���n&��    �fB����&�;  �.$�����bB+Z�����9��0�
�4�M�4�-�2�#(ce����1�2FP��A#(ce����1�2FP���0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0���K5yf�gZ<S&�2�����s�&�aBK�3�·|}��iv����W���U��0�1_F�����\5����at}VF�����s��80~��Ɓ�Ya��窟?C��=ͯ���Z?Mh˄�Lh˄�&�6��  �jB��Ю&�̈́���6�̈́v3��Lhw�݄v'�-SEY���Le�*�2U�e�(�TQ���,c��2F��,c��2F��,c��2F��,c��2F��,c��2F��,c�A#hcm���t��+y��3��3$�aB�&�iB�&�eB[&�eBkZ��ڄv5�]MhW�fB�Lh�    �fB���n&��  �nB������B۟y~h�3$�2�    #؟!�    #؟!��ٙf�C�>��4;O���������?����O�|�/?������'�|��~�w�����=�f�Ÿ�������eݷ���������W�u~��������ï�R�����������7����7����/�������~����/�;��_~��b�����ݧ������_���y����?���������׿������������o_?`o��uy{�>�����n�����O�o~a��_F�������~�q��zy�����������w���ϟ��?��_��ӏ?��^/��'������������������7�i���7���!���%�_�����hvg�ᛔ?��20����hvg��{�]�~���Vt*�g��΢S1��P� Mt*�>j�!��N��gB�3$4ѩ��L�y��&:s�   5ϐ�D�b�3����T��T��en���K�gHheB&�aB&�iB�&�iB[&�eB[&�6�� �MhW�Մv5�m&�̈́���n&��   �fB����&�;  m\Hh��0F0�c��0F0�c��0F0�c��0F0�c��0F0�c��0F0����gn/e����݄v7��Ih�BB�ڼ��ʄV&�2�
�0��ٙf�C�>��4;O���*fB��0:���f���7ܟ>�]F��a��y���o�e<�\50����q`|V������oO�k�4��O�2�-�2��  �MhmB��Ю&�� m3�m&4SE���2Me�*�4U�i�(�TQ���,SEY���Le�*�2U�e�(�TQ�1�e�`#X��1�e�`#X��1�e�`]_�N����l&�̈́���n&��    �fB����&�;  �/$�����bB+Z��ʄ6LhÄ6Lhӄ6Mhӄ�Lh˄�LhmBkZ�Ќ�1�6F���A#hcm���/�yf�g�ӟY/�m����ϐ�ʄV&�2�
�0�
Z��iv>����L��T��/�Q����atF��C1����atF��C1_H}M���� s��Ƈgn�������_�������/���_|�_�����_��K~��o��/�����ߞ������w�����|���}������?����˨�2��������O��-Z�[����_�����?��_~�{�������߰4�������i~��g�i~�^&�eB[&�6��    �MhW�Մv5�m&�̈́���n&����_�����?��������^u�ּ����O�|��7?~��?|�ӧo~�����ߝ�o��XG�$��𫴷�W�Q7��C��Zc9�c��^H
Ѡ��ꯉ�`���/�����û����|������^��׽Ǿ�ߟ�㿿��߿�?}����/�~�N0_^�~��˟O������^~���ߞ������������/������e�ꅉr�!�eeeeeeeeee��k��a�f��k��a�f��k��a�f��k��a�f"��~�rf�3    �� m^Hh�bB&�aB&�iB�&�iBZ��„�&�4��  �LheB+�Մv5�]Mh�    �0�&�eB[&�eB3D0
LCa� �!�0D��A"Ca��wHڲ�ϯo˾-����q���������[��P�_�vGwG���wGwG?jG�~�x�q�.�.�.�.�[�{�2~��t@%��FE ���QQ¨(aT�0*J%��FE   ���QQ¨(aT�0*J%��FE   ���QQҨ(iT�4*J%���FEI���QQҨ(i� 
�!�4D���A"�z���Iq��|1gHhW�aB;Lh�   m�Ж m�ж m��6    �.$�����bB&�aB&�iB�&�iBZ��„�&�4��   �Lh��A"(Ce���!�2DP��A"(Ce���9�jμ}h�� ��  MA��� MA�B�#w���e����6;��5��4;R���jwtwtwtw���}����U��������o���;��[�[>W�2�2�2�2�5�G/��|�Z�F���-T���Z/T��  M�(unĚ3$4��ԹkΐЄ�R�F�9CB*J�[��    M�(u���3$4��������������������C��0D0C��0D0C��0D0C�x�AΤ8��/�  m�ж m��6    m^Hh�BB��0�
�0�M�4�MZ��„&�4��   -MheB+Z�Ю&��   �jB;Lh��!�i�`"���!�i�`"Ca� �!�0D��A"C=D�f�}~}��mv>���K��vGwGwGwGߚ݇�h�\�;�;�>��;�;�Q;��[��>W�2�2�ϯ�2�2~�2~��aT�0*J%��FE ���QQ¨(aT�0*J%��FE   ���QQ¨(aT�0*J%��FEI���QQҨ(iT�4*J%���FEI���!�4D���A"HCi� 
�!�4D���A"HCi� 
�!�4D���A"(Ce���!�2DP��A"(Ce���!�2DP��A"(Ce����y&9����|1gHh� m�Ж m�ж m��6�z���3o�y��6LhÄ6Lhӄ6MhS��fg��w��mv���Pf�O�Q?W���5�����jwtwtwtw���=zG�~�x��]�]�]�]Ʒf��e���U�纪���k}���iBKZ��ʄV&�2�]MhBE9ϐЄ�r�!� �z���3$4��\�uUs��fT�aT�aT�aT�aT�aT�aT�aT�aT�aT�a�`"��!�a�`"��!�a�`"��!�a�`"��!�a�`"��!�a�`"���!�i�`"���!�i�`"���!�i�`"���!�i�`"���!�i�`"���!�i�`"���!�i�`"���A"Ca� �!�0D��A���y�_�fg��fv���������ѷf��:�?W�ϯ��~Ԏ~����U������뻌�������j%��FE  ���QQ¨(aT�0*J%��FE   ���QQ¨(aT�0*J%��FE   ���QQҨ(iT�4*J%���FEI���QQҨ(i� 
�!�4D���A"HCi� 
�!�4D���A"HCi� 
�!�4D���A"(Ce���!�2DP��A"(Ce���!�2DP��A"(Cd]�j�U�f]�j�U�f]�j�U�f]�j�U�f]�j�U�f]�0몇YW=̺�a�U��z�u�ì�f]�0�G���y�_�fg��ev���s���������[��P���vGwGwGwGߚݣw�뷌�|��e�e�e�e|kv�^���\�0몇YW=̺�a�U��z�u�ì�f]�0몇YW=̺�a�U��z�u�ì�f]�0몇YW=̺�a�U��z�u���,r&ř�|1gHhÄ6Mhӄ6MhaBZ��҄�&�4�� �LheB��Ю&�� �0�&�Ä�Lh˄�Lhۄ�Mh��6/$�i�`"���!�i�`"���!�i�`"���!�i�`"���!�i�`"���!�i�`"���!�i�`"���!�i� �!�0D��A"Ca� �I�����mv���`f�/������}kv���s������������G���oo�\�˸��>��˸��Q��}���QQ¨(aT�0*J%��FE  ���QQ¨(aT�0*J%��FE   ���QQ¨(aT�0*J%���FEI���QQҨ(iT�4*J%�����A"HCi� 
�!�4D���A"HCi� 
�!�4D���A"HCi���!�2DP��A"(Ce���!�2DP��A"(Ce���!�2DP��A"(Ce���!�2DP��A    "X纪9����gHh��3$4A�\W5gHh�V���y�_�fg��ev���s���������[��P���vGwGwGwGߚݣw�뷌�|��e�e�e�e|kv�^���\u�����PQ�3�k�PQ�3$4���s]՜!�  e���  M�(�\W5gHhBEY纪9CB*�:�U��QQ�QQȺ�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.���̺�2�ˬ�.��z��Wr&ř�|1gHhÄ6Mhӄ6Uhmv��y�_�fg��fv���������ѷf��:�?W�ϯ��~Ԏ~����U������뻌�������j��Z�k}���iBKZ��ʄV&�2�]MhW�Մv���aB[&�eB[&�mB�&�MB� -���FEI���QQҨ(iT�4*J%
�!�4D���A"HCi� 
�!�4D���A"HCi� 
�!�4D���A"(Ce���!�2DP��A"(Ce���!�2DP��A"(Ce���!�2DP��A"(Ce���!�D��uUs��C;ϐ��gHh����jΐ��"i��N����6;���I9���������ѷf��:?W���5�G���oo�\�˸˸˸���������>�U��m���g��z���gHhBE�纪9CB*�>�U��PQ���jΐЄ���uUs��&T�}���3$4��������������������C��0D0C��0D0C��0D0C��0D0C��0D0C��4D0
LC��4D0
LC��4D0
LC��4D0
LC��4D0
|?����������ח�����oϟ�c�e^������<}}�����|y�����_��?��-Ę1�A�icĘ1�A�icĘ1� �k�f�u���m�Z��k�f�u���m�Zw/��*z�_ߪh�����s��������ѷf��:���ϯ��~Ԏ~����_������뻌�������+�k�f�u���m�Z��k�f�u���m�Z��k�f�u���m�Z��k�f�u���m�Z��k�f�u���m�Z��k�f�u���m�Z��k�f�u���m�Z��k�f�u���m�Z��k�f�u���m�Z��k�f�u���m�Z��k�f�u���m�Z��k�f�u���m�Z��k�f�u���m�Z��k�f�u�����s����PK8>a�'���(PKm�([8>a�'���(  ��logUT�3�hPK:a�

Delete flows.json

DELETE {{edgeUrl}}/flows-manager/flows/{{flow_id}}/option/flows.json

Delete flows.json

Removes the flow's flows.json (the Node-RED definition file) without removing the flow itself. The flow runtime continues to exist but starts with an empty editor on the next Start Flow.

Use this to reset a flow's design while keeping its ID, memory limit, and credentials.

Endpoint

DELETE {{edgeUrl}}/flows-manager/flows/{{flow_id}}/option/flows.json

The option/flows.json suffix selects only the flows.json file as the delete target. Other targeted values: instance (whole flow), flows_cred.json (credentials), logs, node_modules.

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Path parameters

Location Name Required Description
Path {{flow_id}} Yes Flow ID.

No request body.

Response

200 OK on success.

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

Recoverability

There is no undo. Export flows.json via Download Flow File first if you may want to restore.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Response

Status: 204 No Content


Delete Flows Credential JSON

DELETE {{edgeUrl}}/flows-manager/flows/{{flow_id}}/option/flows_cred.json

Delete Flows Credential JSON

Removes the flow's encrypted credential blob flows_cred.json. Every node that uses credentials (HTTP basic auth, MQTT password, API keys, etc.) loses them and must be re-entered in the Node-RED editor.

Use this when rotating secrets, when migrating a flow between encryption keys, or to clear forgotten credentials.

Endpoint

DELETE {{edgeUrl}}/flows-manager/flows/{{flow_id}}/option/flows_cred.json

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Path parameters

Location Name Required Description
Path {{flow_id}} Yes Flow ID.

No request body.

Response

200 OK on success.

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

Operational note

If you delete credentials on a running flow, the runtime continues to hold the in-memory credentials until Stop Flow / Start Flow. The deletion only affects what is reloaded on next start.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Response

Status: 204 No Content


Delete Flows Logs

DELETE {{edgeUrl}}/flows-manager/flows/{{flow_id}}/option/logs

Delete Flows Logs

Removes the flow's log directory contents. Use this to free disk space or to start a clean log window before reproducing an issue. Equivalent to truncate -s 0 per log file plus deletion of rotated archives.

Endpoint

DELETE {{edgeUrl}}/flows-manager/flows/{{flow_id}}/option/logs

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Path parameters

Location Name Required Description
Path {{flow_id}} Yes Flow ID.

No request body.

Response

200 OK on success. New log lines from a running flow will start accumulating in fresh files immediately.

For an archive snapshot before deleting, call Download Flow Logs Binary first.

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Response

Status: 204 No Content


Delete Flow Node Modules

DELETE {{edgeUrl}}/flows-manager/flows/{{flow_id}}/option/node_modules

Delete Flow Node Modules

Wipes the flow's node_modules directory. The next Start Flow will re-install every contrib module referenced by flows.json. Use this to:

Endpoint

DELETE {{edgeUrl}}/flows-manager/flows/{{flow_id}}/option/node_modules

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Path parameters

Location Name Required Description
Path {{flow_id}} Yes Flow ID.

No request body.

Response

200 OK on success. The next start downloads and installs modules from scratch, which can take from a few seconds to a few minutes depending on the flow's module manifest and the device's internet connectivity.

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

Operational note

For online-restricted devices, ensure your local npm registry mirror is reachable before triggering this. A wipe with no reachable registry leaves the flow unable to start until modules are restored manually.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Response

Status: 204 No Content


Flows Manager Prometheus Metrics

GET {{edgeUrl}}/flows-manager/metrics

Flows Manager Prometheus Metrics

Returns Flows Manager metrics in the Prometheus exposition format, for direct Prometheus scraping. The DeviceHub, DataHub, Analytics and Integration services expose the same kind of endpoint.

Endpoint

GET {{edgeUrl}}/flows-manager/metrics

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Parameters

None.

Response

200 OK -- text/plain. Standard Prometheus exposition.

Metric Type Description
flows_count gauge Number of flows defined on the device.
# HELP flows_count
# TYPE flows_count gauge
flows_count 1

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

Response

Status: 200 OK

# HELP flows_count 
# TYPE flows_count gauge
flows_count 1


Create Module Upload Session

POST {{edgeUrl}}/flows-manager/flows/{{flow_id}}/upload_modules/v2

Create Module Upload Session

Opens a resumable upload session for a flow's Node-RED modules, the first step of the Upload Modules action on a flow card in the LE UI. The file is a .zip of the modules (the UI's file picker accepts application/zip only).

The full sequence:

  1. This call, which returns the session id.
  2. Upload Module Chunk once per chunk, in order. The UI sends chunks of 1,024,000 bytes. When the last byte arrives the response says "done": true, the server extracts the archive and the session ends by itself.
  3. Get Module Upload Session at any point before that to read how many bytes the server holds, for example to resume after a dropped connection.
  4. Close Module Upload Session to abandon an unfinished upload.

A flow has at most one session. Calling this again replaces the open session: the old id then answers session is not match.

The archive must contain explicit directory entries (the default for zip -r and most archivers). An archive that lists only files fails on the last chunk with 500 and creating output file: ... no such file or directory.

Endpoint

POST {{edgeUrl}}/flows-manager/flows/{{flow_id}}/upload_modules/v2
Content-Type: application/json

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Path parameters

Location Name Required Description
Path {{flow_id}} Yes Flow ID from List Flows.

Request body

Field Type Required Description
size integer Yes Total file size in bytes. The upload is complete when this many bytes have arrived.
name string No File name.
{
  "size": 445,
  "name": "node_modules.zip"
}

Response

200 OK -- application/json. The session id, used as {{flow_upload_session_id}} by Upload Module Chunk and Get Module Upload Session.

{ "id": "c23c8775-9949-480c-8afe-103ebcddb859" }

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Request Body

{
    "size": 445,
    "name": "node_modules.zip"
}

Response

Status: 200 OK

{
    "id": "c23c8775-9949-480c-8afe-103ebcddb859"
}

Upload Module Chunk

PUT {{edgeUrl}}/flows-manager/flows/{{flow_id}}/upload_modules/v2/resume/{{flow_upload_session_id}}

Upload Module Chunk

Sends one chunk of the module .zip into the session opened by Create Module Upload Session. Repeat for each chunk in order. The last chunk completes the upload; there is nothing to close afterwards.

Endpoint

PUT {{edgeUrl}}/flows-manager/flows/{{flow_id}}/upload_modules/v2/resume/{{flow_upload_session_id}}
Content-Type: multipart/form-data
Upload-Offset: <bytes already sent>
Upload-Length: <upper bound for this chunk>

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Path parameters

Location Name Required Description
Path {{flow_id}} Yes Flow ID from List Flows.
Path {{flow_upload_session_id}} Yes Session id from Create Module Upload Session.

Headers

Name Description
Upload-Offset Where this chunk starts in the file: 0 for the first chunk, then the offset returned by the previous call. The server writes at this position as given and does not check it against what it already holds, so a wrong value corrupts the file.
Upload-Length The most bytes the server reads from this request. Bytes past it are dropped (a 100-byte chunk sent with Upload-Length: 1 stores 1 byte). The LE UI sends the chunk size plus 199; any value at least the chunk size works.

Request body

multipart/form-data with one file part:

Part Description
uploadFile The chunk's bytes.
curl -k -u "$TOKEN:" -X PUT \
  -H "Upload-Offset: 0" -H "Upload-Length: 1024199" \
  -F "uploadFile=@chunk-000" \
  "$EDGE/flows-manager/flows/2/upload_modules/v2/resume/$SESSION"

Response

200 OK -- application/json.

Field Type Description
id string Session ID.
offset integer Bytes the server now holds. Send it as Upload-Offset on the next chunk.
done boolean true once offset reaches the session size. The server then extracts the archive and ends the session.
{ "id": "c23c8775-9949-480c-8afe-103ebcddb859", "offset": 445, "done": true }

A session that was replaced by a newer Create Module Upload Session answers 400 with session is not match.

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Headers

Key Value
Upload-Offset 0
Upload-Length 1024199

Request Body

Response

Status: 200 OK

{
    "id": "c23c8775-9949-480c-8afe-103ebcddb859",
    "offset": 445,
    "done": true
}

Get Module Upload Session

GET {{edgeUrl}}/flows-manager/flows/{{flow_id}}/upload_modules/v2/{{flow_upload_session_id}}

Get Module Upload Session

Returns how many bytes of an open module upload the server holds. Use it to resume an interrupted upload: send the next chunk with Upload-Offset set to this offset.

Endpoint

GET {{edgeUrl}}/flows-manager/flows/{{flow_id}}/upload_modules/v2/{{flow_upload_session_id}}

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Path parameters

Location Name Required Description
Path {{flow_id}} Yes Flow ID from List Flows.
Path {{flow_upload_session_id}} Yes Session id from Create Module Upload Session.

Response

200 OK -- application/json.

{ "offset": 0 }
Status Body message When
404 session is not found No open session: the upload finished, was closed, or never started.
500 session is not match The flow has a newer session than this id.

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Response

Status: 200 OK

{
    "offset": 0
}

Close Module Upload Session

DELETE {{edgeUrl}}/flows-manager/flows/{{flow_id}}/upload_modules/v2

Close Module Upload Session

Discards the flow's open module upload session and whatever it received. Use it to abandon an upload; a completed upload ends its session by itself and needs no close.

The call takes no session ID: it closes whichever session the flow has, and still answers 204 when there is none. Note the LE UI's own close request (DELETE .../upload_modules/v2/<session id> with a sessionId header) is not a valid route on 4.0.x and answers 405.

Endpoint

DELETE {{edgeUrl}}/flows-manager/flows/{{flow_id}}/upload_modules/v2

Authentication

HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.

Path parameters

Location Name Required Description
Path {{flow_id}} Yes Flow ID from List Flows.

No request body.

Response

204 No Content, empty body.

Errors

HTTP status When it happens
400 Bad Request Missing or malformed query/body parameter.
401 Unauthorized Missing or invalid credentials.
403 Forbidden Token lacks permission for this operation.
404 Not Found Target entity does not exist.
5xx Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support.

TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.

Response

Status: 200 OK


View this page as Markdown