@camunda/connectors-element-templates 1.0.14 → 1.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6500,6 +6500,11 @@
6500
6500
  "name": "ignoreNullValues",
6501
6501
  "type": "zeebe:input"
6502
6502
  },
6503
+ "condition": {
6504
+ "property": "method",
6505
+ "oneOf": ["POST", "PUT", "PATCH"],
6506
+ "type": "simple"
6507
+ },
6503
6508
  "tooltip": "Null values will not be sent",
6504
6509
  "type": "Boolean"
6505
6510
  },
@@ -175,7 +175,7 @@
175
175
  "$schema": "https://unpkg.com/@camunda/zeebe-element-templates-json-schema/resources/schema.json",
176
176
  "name": "Hugging Face Outbound Connector",
177
177
  "id": "io.camunda.connectors.HuggingFace.v1",
178
- "version": 2,
178
+ "version": 3,
179
179
  "engines": {
180
180
  "camunda": "^8.5"
181
181
  },
@@ -229,7 +229,7 @@
229
229
  "label": "Hugging Face API key",
230
230
  "group": "authentication",
231
231
  "feel": "optional",
232
- "description": "Your Hugging Face API key",
232
+ "description": "Your Hugging Face API key. Get one at <a href=\"https://huggingface.co/settings/tokens\" target=\"_blank\">huggingface.co/settings/tokens</a>",
233
233
  "type": "String",
234
234
  "binding": {
235
235
  "type": "zeebe:input",
@@ -240,33 +240,42 @@
240
240
  }
241
241
  },
242
242
  {
243
- "label": "Model",
243
+ "label": "Model ID",
244
244
  "group": "input",
245
245
  "feel": "optional",
246
- "description": "Desired model name",
246
+ "description": "Full model repository ID (e.g., meta-llama/Llama-3.2-3B-Instruct, mistralai/Mistral-7B-Instruct-v0.3). Browse models at <a href=\"https://huggingface.co/models\" target=\"_blank\">huggingface.co/models</a>",
247
247
  "type": "String",
248
248
  "binding": {
249
249
  "type": "zeebe:input",
250
- "name": "modelName"
250
+ "name": "modelId"
251
251
  },
252
252
  "constraints": {
253
253
  "notEmpty": true
254
254
  }
255
255
  },
256
256
  {
257
- "label": "Input",
257
+ "label": "Messages",
258
258
  "group": "input",
259
259
  "feel": "required",
260
- "description": "Desired input for your model. <a href=\"https://huggingface.co/docs/api-inference/detailed_parameters\" target=\"_blank\">See official documentation</a>",
260
+ "description": "Chat messages array in format: [{\"role\": \"user\", \"content\": \"Your message\"}]. Use 'system' role for instructions and 'user' role for queries. <a href=\"https://huggingface.co/docs/inference-providers/index#http--curl\" target=\"_blank\">See documentation</a>",
261
261
  "type": "Text",
262
262
  "binding": {
263
263
  "type": "zeebe:input",
264
- "name": "body"
264
+ "name": "messages"
265
265
  },
266
266
  "constraints": {
267
267
  "notEmpty": true
268
268
  }
269
269
  },
270
+ {
271
+ "id": "bodyExpression",
272
+ "type": "Hidden",
273
+ "value": "={\"model\": modelId, \"messages\": messages, \"stream\": false}",
274
+ "binding": {
275
+ "type": "zeebe:input",
276
+ "name": "body"
277
+ }
278
+ },
270
279
  {
271
280
  "id": "method",
272
281
  "group": "endpoint",
@@ -280,7 +289,7 @@
280
289
  {
281
290
  "group": "endpoint",
282
291
  "type": "Hidden",
283
- "value": "=\"https://api-inference.huggingface.co/models/\"+modelName",
292
+ "value": "=\"https://router.huggingface.co/v1/chat/completions\"",
284
293
  "binding": {
285
294
  "type": "zeebe:input",
286
295
  "name": "url"
@@ -298,7 +307,7 @@
298
307
  },
299
308
  {
300
309
  "label": "Result expression",
301
- "description": "Expression to map the response into process variables. Details in the <a href=\"https://docs.camunda.io/docs/components/connectors/use-connectors/#result-expression\" target=\"_blank\">documentation</a>",
310
+ "description": "Expression to map the response into process variables. For chat completion, use: =response.body.choices[1].message.content to get the AI response. Details in the <a href=\"https://docs.camunda.io/docs/components/connectors/use-connectors/#result-expression\" target=\"_blank\">documentation</a>",
302
311
  "group": "output",
303
312
  "type": "Text",
304
313
  "feel": "required",
@@ -342,7 +351,7 @@
342
351
  "id": "version",
343
352
  "label": "Version",
344
353
  "description": "Version of the element template",
345
- "value": "2",
354
+ "value": "3",
346
355
  "group": "connector",
347
356
  "binding": {
348
357
  "key": "elementTemplateVersion",
@@ -0,0 +1,547 @@
1
+ [
2
+ {
3
+ "$schema": "https://unpkg.com/@camunda/zeebe-element-templates-json-schema/resources/schema.json",
4
+ "name": "Microsoft O365 Email Boundary Event Connector",
5
+ "id": "io.camunda.connectors.inbound.MSFT.O365.EmailBoundary.v1",
6
+ "description": "Poll M365 Outlook emails",
7
+ "metadata": {
8
+ "keywords": ["email", "Office365", "Outlook"]
9
+ },
10
+ "documentationRef": "https://docs.camunda.io/docs/components/connectors/out-of-the-box-connectors/microsoft-o365-mail-inbound/",
11
+ "version": 1,
12
+ "category": {
13
+ "id": "connectors",
14
+ "name": "Connectors"
15
+ },
16
+ "appliesTo": ["bpmn:BoundaryEvent"],
17
+ "elementType": {
18
+ "value": "bpmn:BoundaryEvent",
19
+ "eventDefinition": "bpmn:MessageEventDefinition"
20
+ },
21
+ "engines": {
22
+ "camunda": "^8.9"
23
+ },
24
+ "groups": [
25
+ {
26
+ "id": "authentication",
27
+ "label": "Authentication"
28
+ },
29
+ {
30
+ "id": "pollingConfig",
31
+ "label": "Listener Information"
32
+ },
33
+ {
34
+ "id": "postprocessing",
35
+ "label": "Postprocessing"
36
+ },
37
+ {
38
+ "id": "activation",
39
+ "label": "Activation"
40
+ },
41
+ {
42
+ "id": "correlation",
43
+ "label": "Correlation",
44
+ "tooltip": "Learn more about message correlation in the <a href=\"https://docs.camunda.io/docs/components/concepts/messages/#message-correlation-overview\">documentation</a>."
45
+ },
46
+ {
47
+ "id": "output",
48
+ "label": "Output mapping"
49
+ }
50
+ ],
51
+ "properties": [
52
+ {
53
+ "value": "io.camunda:connector-o365-email-inbound:1",
54
+ "binding": {
55
+ "name": "inbound.type",
56
+ "type": "zeebe:property"
57
+ },
58
+ "type": "Hidden"
59
+ },
60
+ {
61
+ "id": "authentication.tenantId",
62
+ "label": "Tenant ID",
63
+ "optional": false,
64
+ "constraints": {
65
+ "notEmpty": true
66
+ },
67
+ "feel": "optional",
68
+ "group": "authentication",
69
+ "binding": {
70
+ "name": "authentication.tenantId",
71
+ "type": "zeebe:property"
72
+ },
73
+ "tooltip": "Your Microsoft Entra (Azure AD) tenant ID. Find this in Azure Portal → Microsoft Entra ID → Overview. <a href=\"https://docs.camunda.io/docs/components/connectors/out-of-the-box-connectors/microsoft-o365-mail-inbound/#authentication\" target=\"_blank\">Learn more</a>",
74
+ "type": "String"
75
+ },
76
+ {
77
+ "id": "authentication.clientId",
78
+ "label": "Client ID",
79
+ "optional": false,
80
+ "constraints": {
81
+ "notEmpty": true
82
+ },
83
+ "feel": "optional",
84
+ "group": "authentication",
85
+ "binding": {
86
+ "name": "authentication.clientId",
87
+ "type": "zeebe:property"
88
+ },
89
+ "tooltip": "The application (client) ID from your app registration. Find this in Azure Portal → App registrations → Your app → Overview. <a href=\"https://docs.camunda.io/docs/components/connectors/out-of-the-box-connectors/microsoft-o365-mail-inbound/#authentication\" target=\"_blank\">Learn more</a>",
90
+ "type": "String"
91
+ },
92
+ {
93
+ "id": "authentication.clientSecret",
94
+ "label": "Client Secret",
95
+ "optional": false,
96
+ "constraints": {
97
+ "notEmpty": true
98
+ },
99
+ "feel": "optional",
100
+ "group": "authentication",
101
+ "binding": {
102
+ "name": "authentication.clientSecret",
103
+ "type": "zeebe:property"
104
+ },
105
+ "tooltip": "The client secret value from your app registration. Create this in Azure Portal → App registrations → Your app → Certificates & secrets. <a href=\"https://docs.camunda.io/docs/components/connectors/out-of-the-box-connectors/microsoft-o365-mail-inbound/#authentication\" target=\"_blank\">Learn more</a>",
106
+ "type": "String"
107
+ },
108
+ {
109
+ "id": "pollingConfig.userId",
110
+ "label": "Mailbox Owner",
111
+ "optional": false,
112
+ "constraints": {
113
+ "notEmpty": true
114
+ },
115
+ "feel": "optional",
116
+ "group": "pollingConfig",
117
+ "binding": {
118
+ "name": "pollingConfig.userId",
119
+ "type": "zeebe:property"
120
+ },
121
+ "tooltip": "The email address or user ID of the mailbox to monitor (e.g., user@example.com). <a href=\"https://docs.camunda.io/docs/components/connectors/out-of-the-box-connectors/microsoft-o365-mail-inbound/#configuration\" target=\"_blank\">Learn more</a>",
122
+ "type": "String"
123
+ },
124
+ {
125
+ "id": "pollingConfig.folder.folderSpecification",
126
+ "label": "Folder Identifier Type",
127
+ "description": "Prefer using a folder ID if you are using a well known folder otherwise use the folder name",
128
+ "value": "byId",
129
+ "group": "pollingConfig",
130
+ "binding": {
131
+ "name": "pollingConfig.folder.folderSpecification",
132
+ "type": "zeebe:property"
133
+ },
134
+ "type": "Dropdown",
135
+ "choices": [
136
+ {
137
+ "name": "Folder ID",
138
+ "value": "byId"
139
+ },
140
+ {
141
+ "name": "Folder Name",
142
+ "value": "byName"
143
+ }
144
+ ]
145
+ },
146
+ {
147
+ "id": "pollingConfig.folder.folderId",
148
+ "label": "Folder ID",
149
+ "optional": false,
150
+ "value": "inbox",
151
+ "constraints": {
152
+ "notEmpty": true
153
+ },
154
+ "feel": "optional",
155
+ "group": "pollingConfig",
156
+ "binding": {
157
+ "name": "pollingConfig.folder.folderId",
158
+ "type": "zeebe:property"
159
+ },
160
+ "condition": {
161
+ "property": "pollingConfig.folder.folderSpecification",
162
+ "equals": "byId",
163
+ "type": "simple"
164
+ },
165
+ "tooltip": "The well-known folder ID or custom folder ID. <a href='https://learn.microsoft.com/en-us/graph/api/resources/mailfolder?view=graph-rest-1.0#properties' target='_blank'>See folder properties in the API</a>",
166
+ "type": "String"
167
+ },
168
+ {
169
+ "id": "pollingConfig.folder.folderName",
170
+ "label": "Folder Name",
171
+ "optional": false,
172
+ "constraints": {
173
+ "notEmpty": true
174
+ },
175
+ "feel": "optional",
176
+ "group": "pollingConfig",
177
+ "binding": {
178
+ "name": "pollingConfig.folder.folderName",
179
+ "type": "zeebe:property"
180
+ },
181
+ "condition": {
182
+ "property": "pollingConfig.folder.folderSpecification",
183
+ "equals": "byName",
184
+ "type": "simple"
185
+ },
186
+ "tooltip": "The display name of the folder. Must be unique within the mailbox.",
187
+ "type": "String"
188
+ },
189
+ {
190
+ "id": "pollingConfig.pollingInterval",
191
+ "label": "Polling interval",
192
+ "optional": false,
193
+ "value": "PT30S",
194
+ "feel": "optional",
195
+ "group": "pollingConfig",
196
+ "binding": {
197
+ "name": "pollingConfig.pollingInterval",
198
+ "type": "zeebe:property"
199
+ },
200
+ "tooltip": "The interval between email polling requests, defined as ISO 8601 duration format. <a href='https://docs.camunda.io/docs/components/modeler/bpmn/timer-events/#time-duration' target='_blank'>How to configure a time duration</a>",
201
+ "type": "String"
202
+ },
203
+ {
204
+ "id": "pollingConfig.filterCriteria.filterSpecification",
205
+ "label": "Filter Specification",
206
+ "description": "Use predefined filter conditions or provide your own OData filter string",
207
+ "value": "simple",
208
+ "group": "pollingConfig",
209
+ "binding": {
210
+ "name": "pollingConfig.filterCriteria.filterSpecification",
211
+ "type": "zeebe:property"
212
+ },
213
+ "type": "Dropdown",
214
+ "choices": [
215
+ {
216
+ "name": "Simple",
217
+ "value": "simple"
218
+ },
219
+ {
220
+ "name": "Advanced",
221
+ "value": "advanced"
222
+ }
223
+ ]
224
+ },
225
+ {
226
+ "id": "pollingConfig.filterCriteria.onlyUnread",
227
+ "label": "Only Unread",
228
+ "optional": false,
229
+ "value": true,
230
+ "feel": "static",
231
+ "group": "pollingConfig",
232
+ "binding": {
233
+ "name": "pollingConfig.filterCriteria.onlyUnread",
234
+ "type": "zeebe:property"
235
+ },
236
+ "condition": {
237
+ "property": "pollingConfig.filterCriteria.filterSpecification",
238
+ "equals": "simple",
239
+ "type": "simple"
240
+ },
241
+ "tooltip": "Only fetch unread emails",
242
+ "type": "Boolean"
243
+ },
244
+ {
245
+ "id": "pollingConfig.filterCriteria.subjectContains",
246
+ "label": "Subject Contains",
247
+ "optional": true,
248
+ "feel": "optional",
249
+ "group": "pollingConfig",
250
+ "binding": {
251
+ "name": "pollingConfig.filterCriteria.subjectContains",
252
+ "type": "zeebe:property"
253
+ },
254
+ "condition": {
255
+ "property": "pollingConfig.filterCriteria.filterSpecification",
256
+ "equals": "simple",
257
+ "type": "simple"
258
+ },
259
+ "tooltip": "Only fetch emails where subject contains this text (case-sensitive)",
260
+ "type": "String"
261
+ },
262
+ {
263
+ "id": "pollingConfig.filterCriteria.fromAddress",
264
+ "label": "From Email Address",
265
+ "optional": true,
266
+ "feel": "optional",
267
+ "group": "pollingConfig",
268
+ "binding": {
269
+ "name": "pollingConfig.filterCriteria.fromAddress",
270
+ "type": "zeebe:property"
271
+ },
272
+ "condition": {
273
+ "property": "pollingConfig.filterCriteria.filterSpecification",
274
+ "equals": "simple",
275
+ "type": "simple"
276
+ },
277
+ "tooltip": "Only fetch emails from this sender address (exact match, e.g. 'invoice@vendor.com')",
278
+ "type": "String"
279
+ },
280
+ {
281
+ "id": "pollingConfig.filterCriteria.filterString",
282
+ "label": "OData Filter String",
283
+ "optional": false,
284
+ "constraints": {
285
+ "notEmpty": true
286
+ },
287
+ "group": "pollingConfig",
288
+ "binding": {
289
+ "name": "pollingConfig.filterCriteria.filterString",
290
+ "type": "zeebe:property"
291
+ },
292
+ "condition": {
293
+ "property": "pollingConfig.filterCriteria.filterSpecification",
294
+ "equals": "advanced",
295
+ "type": "simple"
296
+ },
297
+ "tooltip": "A custom OData filter expression. <a href='https://learn.microsoft.com/en-us/graph/filter-query-parameter' target='_blank'>See OData filter documentation</a>",
298
+ "type": "String"
299
+ },
300
+ {
301
+ "id": "operation.processingOperationDiscriminator",
302
+ "label": "Postprocessing configuration",
303
+ "value": "mark-read",
304
+ "group": "postprocessing",
305
+ "binding": {
306
+ "name": "operation.processingOperationDiscriminator",
307
+ "type": "zeebe:property"
308
+ },
309
+ "type": "Dropdown",
310
+ "choices": [
311
+ {
312
+ "name": "Delete",
313
+ "value": "delete"
314
+ },
315
+ {
316
+ "name": "Mark as Read",
317
+ "value": "mark-read"
318
+ },
319
+ {
320
+ "name": "Move to other folder",
321
+ "value": "move"
322
+ }
323
+ ]
324
+ },
325
+ {
326
+ "id": "operation.force",
327
+ "label": "Force delete (email is permanently deleted)",
328
+ "optional": false,
329
+ "value": false,
330
+ "feel": "static",
331
+ "group": "postprocessing",
332
+ "binding": {
333
+ "name": "operation.force",
334
+ "type": "zeebe:property"
335
+ },
336
+ "condition": {
337
+ "property": "operation.processingOperationDiscriminator",
338
+ "equals": "delete",
339
+ "type": "simple"
340
+ },
341
+ "type": "Boolean"
342
+ },
343
+ {
344
+ "id": "operation.targetFolder.folderSpecification",
345
+ "label": "Folder Identifier Type",
346
+ "description": "Prefer using a folder ID if you are using a well known folder otherwise use the folder name",
347
+ "value": "byId",
348
+ "group": "postprocessing",
349
+ "binding": {
350
+ "name": "operation.targetFolder.folderSpecification",
351
+ "type": "zeebe:property"
352
+ },
353
+ "condition": {
354
+ "property": "operation.processingOperationDiscriminator",
355
+ "equals": "move",
356
+ "type": "simple"
357
+ },
358
+ "type": "Dropdown",
359
+ "choices": [
360
+ {
361
+ "name": "Folder ID",
362
+ "value": "byId"
363
+ },
364
+ {
365
+ "name": "Folder Name",
366
+ "value": "byName"
367
+ }
368
+ ]
369
+ },
370
+ {
371
+ "id": "operation.targetFolder.folderId",
372
+ "label": "Folder ID",
373
+ "optional": false,
374
+ "value": "inbox",
375
+ "constraints": {
376
+ "notEmpty": true
377
+ },
378
+ "feel": "optional",
379
+ "group": "postprocessing",
380
+ "binding": {
381
+ "name": "operation.targetFolder.folderId",
382
+ "type": "zeebe:property"
383
+ },
384
+ "condition": {
385
+ "allMatch": [
386
+ {
387
+ "property": "operation.targetFolder.folderSpecification",
388
+ "equals": "byId",
389
+ "type": "simple"
390
+ },
391
+ {
392
+ "property": "operation.processingOperationDiscriminator",
393
+ "equals": "move",
394
+ "type": "simple"
395
+ }
396
+ ]
397
+ },
398
+ "tooltip": "The well-known folder ID or custom folder ID. <a href='https://learn.microsoft.com/en-us/graph/api/resources/mailfolder?view=graph-rest-1.0#properties' target='_blank'>See folder properties in the API</a>",
399
+ "type": "String"
400
+ },
401
+ {
402
+ "id": "operation.targetFolder.folderName",
403
+ "label": "Folder Name",
404
+ "optional": false,
405
+ "constraints": {
406
+ "notEmpty": true
407
+ },
408
+ "feel": "optional",
409
+ "group": "postprocessing",
410
+ "binding": {
411
+ "name": "operation.targetFolder.folderName",
412
+ "type": "zeebe:property"
413
+ },
414
+ "condition": {
415
+ "allMatch": [
416
+ {
417
+ "property": "operation.targetFolder.folderSpecification",
418
+ "equals": "byName",
419
+ "type": "simple"
420
+ },
421
+ {
422
+ "property": "operation.processingOperationDiscriminator",
423
+ "equals": "move",
424
+ "type": "simple"
425
+ }
426
+ ]
427
+ },
428
+ "tooltip": "The display name of the folder. Must be unique within the mailbox.",
429
+ "type": "String"
430
+ },
431
+ {
432
+ "id": "activationCondition",
433
+ "label": "Activation condition",
434
+ "description": "Condition under which the Connector triggers. Leave empty to catch all events",
435
+ "optional": true,
436
+ "feel": "required",
437
+ "group": "activation",
438
+ "binding": {
439
+ "name": "activationCondition",
440
+ "type": "zeebe:property"
441
+ },
442
+ "type": "String"
443
+ },
444
+ {
445
+ "id": "correlationKeyProcess",
446
+ "label": "Correlation key (process)",
447
+ "description": "Sets up the correlation key from process variables",
448
+ "constraints": {
449
+ "notEmpty": true
450
+ },
451
+ "feel": "required",
452
+ "group": "correlation",
453
+ "binding": {
454
+ "name": "correlationKey",
455
+ "type": "bpmn:Message#zeebe:subscription#property"
456
+ },
457
+ "type": "String"
458
+ },
459
+ {
460
+ "id": "correlationKeyPayload",
461
+ "label": "Correlation key (payload)",
462
+ "description": "Extracts the correlation key from the incoming message payload",
463
+ "constraints": {
464
+ "notEmpty": true
465
+ },
466
+ "feel": "required",
467
+ "group": "correlation",
468
+ "binding": {
469
+ "name": "correlationKeyExpression",
470
+ "type": "zeebe:property"
471
+ },
472
+ "type": "String"
473
+ },
474
+ {
475
+ "id": "messageIdExpression",
476
+ "label": "Message ID expression",
477
+ "description": "Expression to extract unique identifier of a message",
478
+ "optional": true,
479
+ "feel": "required",
480
+ "group": "correlation",
481
+ "binding": {
482
+ "name": "messageIdExpression",
483
+ "type": "zeebe:property"
484
+ },
485
+ "type": "String"
486
+ },
487
+ {
488
+ "id": "messageTtl",
489
+ "label": "Message TTL",
490
+ "description": "Time-to-live for the message in the broker (ISO-8601 duration)",
491
+ "optional": true,
492
+ "constraints": {
493
+ "notEmpty": false,
494
+ "pattern": {
495
+ "value": "^(PT.*|)$",
496
+ "message": "must be an ISO-8601 duration"
497
+ }
498
+ },
499
+ "feel": "optional",
500
+ "group": "correlation",
501
+ "binding": {
502
+ "name": "messageTtl",
503
+ "type": "zeebe:property"
504
+ },
505
+ "type": "String"
506
+ },
507
+ {
508
+ "id": "messageNameUuid",
509
+ "generatedValue": {
510
+ "type": "uuid"
511
+ },
512
+ "group": "correlation",
513
+ "binding": {
514
+ "name": "name",
515
+ "type": "bpmn:Message#property"
516
+ },
517
+ "type": "Hidden"
518
+ },
519
+ {
520
+ "id": "resultVariable",
521
+ "label": "Result variable",
522
+ "description": "Name of variable to store the response in",
523
+ "group": "output",
524
+ "binding": {
525
+ "name": "resultVariable",
526
+ "type": "zeebe:property"
527
+ },
528
+ "type": "String"
529
+ },
530
+ {
531
+ "id": "resultExpression",
532
+ "label": "Result expression",
533
+ "description": "Expression to map the response into process variables",
534
+ "feel": "required",
535
+ "group": "output",
536
+ "binding": {
537
+ "name": "resultExpression",
538
+ "type": "zeebe:property"
539
+ },
540
+ "type": "Text"
541
+ }
542
+ ],
543
+ "icon": {
544
+ "contents": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIGhlaWdodD0nMTYnIHdpZHRoPScxNicgdmlld0JveD0nLTI3NC42NjI3NSAtNDI1LjgzNCAyMzgwLjQxMDUgMjU1NS4wMDQnPgogICAgPHBhdGggZD0nTTE4MzEuMDgzIDg5NC4yNWE0MC44NzkgNDAuODc5IDAgMDAtMTkuNTAzLTM1LjEzMWgtLjIxM2wtLjc2Ny0uNDI2LTYzNC40OTItMzc1LjU4NWE4Ni4xNzUgODYuMTc1IDAgMDAtOC41MTctNS4wNjcgODUuMTcgODUuMTcgMCAwMC03OC4wOTggMCA4Ni4zNyA4Ni4zNyAwIDAwLTguNTE3IDUuMDY3bC02MzQuNDkgMzc1LjU4NS0uNzY2LjQyNmMtMTkuMzkyIDEyLjA1OS0yNS4zMzcgMzcuNTU2LTEzLjI3OCA1Ni45NDhhNDEuMzQ2IDQxLjM0NiAwIDAwMTQuMjU3IDEzLjg2OGw2MzQuNDkyIDM3NS41ODVhOTUuNjE3IDk1LjYxNyAwIDAwOC41MTcgNS4wNjggODUuMTcgODUuMTcgMCAwMDc4LjA5OCAwIDk1LjUyIDk1LjUyIDAgMDA4LjUxNy01LjA2OGw2MzQuNDkyLTM3NS41ODVhNDAuODQgNDAuODQgMCAwMDIwLjI2OC0zNS42ODV6JyBmaWxsPScjMEEyNzY3Jy8+CiAgICA8cGF0aCBkPSdNNTIwLjQ1MyA2NDMuNDc3aDQxNi4zOHYzODEuNjc0aC00MTYuMzh6TTE3NDUuOTE3IDI1NS41VjgwLjkwOGMxLTQzLjY1Mi0zMy41NTItNzkuODYyLTc3LjIwMy04MC45MDhINTg4LjIwNEM1NDQuNTUyIDEuMDQ2IDUxMCAzNy4yNTYgNTExIDgwLjkwOFYyNTUuNWw2MzguNzUgMTcwLjMzM3onIGZpbGw9JyMwMzY0QjgnLz4KICAgIDxwYXRoIGQ9J001MTEgMjU1LjVoNDI1LjgzM3YzODMuMjVINTExeicgZmlsbD0nIzAwNzhENCcvPgogICAgPHBhdGggZD0nTTEzNjIuNjY3IDI1NS41SDkzNi44MzN2MzgzLjI1TDEzNjIuNjY3IDEwMjJoMzgzLjI1VjYzOC43NXonIGZpbGw9JyMyOEE4RUEnLz4KICAgIDxwYXRoIGQ9J005MzYuODMzIDYzOC43NWg0MjUuODMzVjEwMjJIOTM2LjgzM3onIGZpbGw9JyMwMDc4RDQnLz4KICAgIDxwYXRoIGQ9J005MzYuODMzIDEwMjJoNDI1LjgzM3YzODMuMjVIOTM2LjgzM3onIGZpbGw9JyMwMzY0QjgnLz4KICAgIDxwYXRoIGQ9J001MjAuNDUzIDEwMjUuMTUxaDQxNi4zOHYzNDYuOTY5aC00MTYuMzh6JyBmaWxsPScjMTQ0NDdEJy8+CiAgICA8cGF0aCBkPSdNMTM2Mi42NjcgMTAyMmgzODMuMjV2MzgzLjI1aC0zODMuMjV6JyBmaWxsPScjMDA3OEQ0Jy8+CiAgICA8bGluZWFyR3JhZGllbnQgZ3JhZGllbnRUcmFuc2Zvcm09J21hdHJpeCgxIDAgMCAtMSAwIDE3MDUuMzMzKScgeTI9JzEuOTk4JyB4Mj0nMTEyOC40NTgnIHkxPSc4MTEuMDgzJyB4MT0nMTEyOC40NTgnIGdyYWRpZW50VW5pdHM9J3VzZXJTcGFjZU9uVXNlJyBpZD0nYSc+CiAgICAgICAgPHN0b3Agb2Zmc2V0PScwJyBzdG9wLWNvbG9yPScjMzViOGYxJy8+CiAgICAgICAgPHN0b3Agb2Zmc2V0PScxJyBzdG9wLWNvbG9yPScjMjhhOGVhJy8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPHBhdGggZD0nTTE4MTEuNTggOTI3LjU5M2wtLjgwOS40MjYtNjM0LjQ5MiAzNTYuODQ4Yy0yLjc2OCAxLjcwMy01LjU3OCAzLjMyMS04LjUxNyA0Ljc2OWE4OC40MzcgODguNDM3IDAgMDEtMzQuNDA3IDguNTE3bC0zNC42NjMtMjAuMjdhODYuNzA2IDg2LjcwNiAwIDAxLTguNTE3LTQuODk3TDQ0Ny4xNjcgOTA2LjAwM2gtLjI5OGwtMjEuMDM2LTExLjc1M3Y3MjIuMzg0Yy4zMjggNDguMTk2IDM5LjY1MyA4Ny4wMDYgODcuODQ5IDg2LjdoMTIzMC45MTRjLjcyNCAwIDEuMzYzLS4zNDEgMi4xMjktLjM0MWExMDcuNzkgMTA3Ljc5IDAgMDAyOS44MDgtNi4yMTcgODYuMDY2IDg2LjA2NiAwIDAwMTEuOTY2LTYuMjE3YzIuODUzLTEuNjE4IDcuNzUtNS4xNTIgNy43NS01LjE1MmE4NS45NzQgODUuOTc0IDAgMDAzNC44MzMtNjguNzcyVjg5NC4yNWEzOC4zMjMgMzguMzIzIDAgMDEtMTkuNTAyIDMzLjM0M3onIGZpbGw9J3VybCgjYSknLz4KICAgIDxwYXRoIGQ9J00xNzk3LjAxNyA4OTEuMzk3djQ0LjI4N2wtNjYzLjQ0OCA0NTYuNzkxLTY4Ni44Ny00ODYuMTc0YS40MjYuNDI2IDAgMDAtLjQyNi0uNDI2bC02My4wMjMtMzcuODk5di0zMS45MzhsMjUuOTc2LS40MjYgNTQuOTMyIDMxLjUxMiAxLjI3Ny40MjYgNC42ODQgMi45ODFzNjQ1LjU2MyAzNjguMzQ2IDY0Ny4yNjcgMzY5LjE5N2wyNC42OTggMTQuNDc4YzIuMTI5LS44NTIgNC4yNTgtMS43MDMgNi44MTMtMi41NTUgMS4yNzgtLjg1MiA2NDAuODc5LTM2MC42ODEgNjQwLjg3OS0zNjAuNjgxeicgZmlsbD0nIzBBMjc2Nycgb3BhY2l0eT0nLjUnLz4KICAgIDxwYXRoIGQ9J00xODExLjU4IDkyNy41OTNsLS44MDkuNDY4LTYzNC40OTIgMzU2Ljg0OGMtMi43NjggMS43MDMtNS41NzggMy4zMjEtOC41MTcgNC43NjlhODguOTYgODguOTYgMCAwMS03OC4wOTggMCA5Ni41NzggOTYuNTc4IDAgMDEtOC41MTctNC43NjlsLTYzNC40OS0zNTYuODQ4LS43NjYtLjQ2OGEzOC4zMjYgMzguMzI2IDAgMDEtMjAuMDU3LTMzLjM0M3Y3MjIuMzg0Yy4zMDUgNDguMTg4IDM5LjYxNiA4Ny4wMDQgODcuODAzIDg2LjdoMTIyOS42NGM0OC4xODguMzA3IDg3LjUtMzguNTA5IDg3LjgwNy04Ni42OTYgMC0uMDAxIDAgMCAwIDBWODk0LjI1YTM4LjMzIDM4LjMzIDAgMDEtMTkuNTA0IDMzLjM0M3onIGZpbGw9JyMxNDkwREYnLz4KICAgIDxwYXRoIGQ9J00xMTg1LjUyIDEyNzkuNjI5bC05LjQ5NiA1LjMyM2E5Mi44MDYgOTIuODA2IDAgMDEtOC41MTcgNC44MTIgODguMTczIDg4LjE3MyAwIDAxLTMzLjQ3IDguODU3bDI0MS40MDUgMjg1LjQ3OSA0MjEuMTA3IDEwMS40NzZhODYuNzg1IDg2Ljc4NSAwIDAwMjYuNy0zMy4zNDN6JyBvcGFjaXR5PScuMScvPgogICAgPHBhdGggZD0nTTEyMjguNTI5IDEyNTUuNDQybC01Mi41MDUgMjkuNTFhOTIuODA2IDkyLjgwNiAwIDAxLTguNTE3IDQuODEyIDg4LjE3MyA4OC4xNzMgMCAwMS0zMy40NyA4Ljg1N2wxMTMuMTAxIDMxMS44MzggNTQ5LjUzOCA3NC45ODlhODYuMTA0IDg2LjEwNCAwIDAwMzQuNDA3LTY4LjgxNXYtOS4zMjZ6JyBvcGFjaXR5PScuMDUnLz4KICAgIDxwYXRoIGQ9J001MTQuODMzIDE3MDMuMzMzaDEyMjguMzE2YTg4LjMxNiA4OC4zMTYgMCAwMDUyLjU5LTE3LjAzM2wtNjk3LjA4OS00MDguMzMxYTg2LjcwNiA4Ni43MDYgMCAwMS04LjUxNy00Ljg5N0w0NDcuMTI1IDkwNi4wODhoLS4yOThsLTIwLjk5My0xMS44Mzh2NzE5LjkxNGMtLjA0OCA0OS4yIDM5Ljc5OCA4OS4xMjIgODguOTk5IDg5LjE2OS0uMDAxIDAtLjAwMSAwIDAgMHonIGZpbGw9JyMyOEE4RUEnLz4KICAgIDxwYXRoIGQ9J00xMDIyIDQxOC43MjJ2OTA4LjMwM2MtLjA3NiAzMS44NDYtMTkuNDQgNjAuNDcxLTQ4Ljk3MSA3Mi4zOTJhNzMuMzgyIDczLjM4MiAwIDAxLTI4Ljk1NyA1Ljk2Mkg0MjUuODMzVjM4My4yNUg1MTF2LTQyLjU4M2g0MzMuMDczYzQzLjAxOS4xNjMgNzcuODM0IDM1LjAzNSA3Ny45MjcgNzguMDU1eicgb3BhY2l0eT0nLjEnLz4KICAgIDxwYXRoIGQ9J005NzkuNDE3IDQ2MS4zMDV2OTA4LjMwMmE2OS4zNiA2OS4zNiAwIDAxLTYuMzg4IDI5LjgwOGMtMTEuODI2IDI5LjE0OS00MC4wODMgNDguMjczLTcxLjU0IDQ4LjQxN0g0MjUuODMzVjM4My4yNWg0NzUuNjU2YTcxLjQ5MyA3MS40OTMgMCAwMTM1LjM0NCA4Ljk0M2MyNi4xMDQgMTMuMTUxIDQyLjU3NCAzOS44ODMgNDIuNTg0IDY5LjExMnonIG9wYWNpdHk9Jy4yJy8+CiAgICA8cGF0aCBkPSdNOTc5LjQxNyA0NjEuMzA1djgyMy4xMzZjLS4yMDggNDMtMzQuOTI4IDc3Ljg1My03Ny45MjcgNzguMjI1SDQyNS44MzNWMzgzLjI1aDQ3NS42NTZhNzEuNDkzIDcxLjQ5MyAwIDAxMzUuMzQ0IDguOTQzYzI2LjEwNCAxMy4xNTEgNDIuNTc0IDM5Ljg4MyA0Mi41ODQgNjkuMTEyeicgb3BhY2l0eT0nLjInLz4KICAgIDxwYXRoIGQ9J005MzYuODMzIDQ2MS4zMDV2ODIzLjEzNmMtLjA0NiA0My4wNjctMzQuODYxIDc4LjAxNS03Ny45MjcgNzguMjI1SDQyNS44MzNWMzgzLjI1aDQzMy4wNzJjNDMuMDYyLjAyMyA3Ny45NTEgMzQuOTUxIDc3LjkyNyA3OC4wMTNhLjU4OS41ODkgMCAwMS4wMDEuMDQyeicgb3BhY2l0eT0nLjInLz4KICAgIDxsaW5lYXJHcmFkaWVudCBncmFkaWVudFRyYW5zZm9ybT0nbWF0cml4KDEgMCAwIC0xIDAgMTcwNS4zMzMpJyB5Mj0nMzI0LjI1OScgeDI9Jzc3NC4wODYnIHkxPScxMzgzLjA3NCcgeDE9JzE2Mi43NDcnIGdyYWRpZW50VW5pdHM9J3VzZXJTcGFjZU9uVXNlJyBpZD0nYic+CiAgICAgICAgPHN0b3Agb2Zmc2V0PScwJyBzdG9wLWNvbG9yPScjMTc4NGQ5Jy8+CiAgICAgICAgPHN0b3Agb2Zmc2V0PScuNScgc3RvcC1jb2xvcj0nIzEwN2FkNScvPgogICAgICAgIDxzdG9wIG9mZnNldD0nMScgc3RvcC1jb2xvcj0nIzBhNjNjOScvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxwYXRoIGQ9J003OC4wNTUgMzgzLjI1aDc4MC43MjNjNDMuMTA5IDAgNzguMDU1IDM0Ljk0NyA3OC4wNTUgNzguMDU1djc4MC43MjNjMCA0My4xMDktMzQuOTQ2IDc4LjA1NS03OC4wNTUgNzguMDU1SDc4LjA1NWMtNDMuMTA5IDAtNzguMDU1LTM0Ljk0Ny03OC4wNTUtNzguMDU1VjQ2MS4zMDVjMC00My4xMDggMzQuOTQ3LTc4LjA1NSA3OC4wNTUtNzguMDU1eicgZmlsbD0ndXJsKCNiKScvPgogICAgPHBhdGggZD0nTTI0My45NiA3MTAuNjMxYTIyNy4wNSAyMjcuMDUgMCAwMTg5LjE3LTk4LjQ5NSAyNjkuNTYgMjY5LjU2IDAgMDExNDEuNjc1LTM1LjUxNSAyNTAuOTEgMjUwLjkxIDAgMDExMzEuMTE0IDMzLjY4MyAyMjUuMDE0IDIyNS4wMTQgMCAwMTg2Ljc0MiA5NC4xMDkgMzAzLjc1MSAzMDMuNzUxIDAgMDEzMC40MDUgMTM4LjM5NiAzMjAuNTY3IDMyMC41NjcgMCAwMS0zMS4yOTkgMTQ0Ljc4MyAyMzAuMzcgMjMwLjM3IDAgMDEtODkuNDI1IDk3LjM4OCAyNjAuODY0IDI2MC44NjQgMCAwMS0xMzYuMDExIDM0LjU3OCAyNTYuMzU1IDI1Ni4zNTUgMCAwMS0xMzQuMDEtMzQuMDY3IDIyOC40OTcgMjI4LjQ5NyAwIDAxLTg3Ljg5Mi05NC4yOCAyOTYuNTA3IDI5Ni41MDcgMCAwMS0zMC43NDUtMTM2LjczNSAzMjkuMjkgMzI5LjI5IDAgMDEzMC4yNzYtMTQzLjg0NXptOTUuMDQ2IDIzMS4yMjdhMTQ3LjM4NiAxNDcuMzg2IDAgMDA1MC4xNjMgNjQuODEyIDEzMS4wMjggMTMxLjAyOCAwIDAwNzguMzUzIDIzLjU5MSAxMzcuMjQ0IDEzNy4yNDQgMCAwMDgzLjYzNC0yNC4zNTggMTQxLjE1NiAxNDEuMTU2IDAgMDA0OC43MTUtNjQuODEyIDI1MS41OTQgMjUxLjU5NCAwIDAwMTUuNTQzLTkwLjQwNCAyNzUuMTk4IDI3NS4xOTggMCAwMC0xNC42NDktOTEuNTU0IDE0NC43NzUgMTQ0Ljc3NSAwIDAwLTQ3LjE4Mi02Ny41MzcgMTI5LjU4IDEyOS41OCAwIDAwLTgyLjkxLTI1LjU1IDEzNS4yMDIgMTM1LjIwMiAwIDAwLTgwLjE4NCAyMy44MDQgMTQ4LjYyNiAxNDguNjI2IDAgMDAtNTEuMSA2NS4zNjUgMjU5Ljc1OSAyNTkuNzU5IDAgMDAtLjM0MSAxODYuNzI4eicgZmlsbD0nI0ZGRicvPgogICAgPHBhdGggZD0nTTEzNjIuNjY3IDI1NS41aDM4My4yNXYzODMuMjVoLTM4My4yNXonIGZpbGw9JyM1MEQ5RkYnLz4KPC9zdmc+Cg=="
545
+ }
546
+ }
547
+ ]