Reference Material Open Issues & Decisions # Description Notes Decision 1 How to deal with hardcoded E2E NW Slicing model, spike 23 Apr 2021 Discusdons started with E2E NW Slicing Team, to be continued next week
2 Which Simulator to use? NetConf Simulator Netopeer v2Nokia Ericsson Honeycomb(?) lighty netconf simulator Rahul Tyagi Ericsson more lightweight, more experience. Available CSIT standard setup
Swaminathan Seetharaman mentioned 'Honeycomb' simulator they used before. Need to investigate if it supports get-schema method over RESTConf/NetConf
Need to check if we can use it with E2E NW Slicing model
3 Should (ONAP) dmi-instance be as separate (springboot) application Could be part of DMI Manager DMI-Instance interface should be an open standard Tony Finnerty and Team to allow easy integration of future 3rd part DMI-Plugin instances a separate application with its own REST Interface is required
4 What datastores are supported/recognized by NCMP Interface in Istanbul Release
ncmp-datastores:operational
(will use cached data when sync=On)ncmp-datastores:running
(will forward to DMI-Plugin in Istanbul release)ncmp-datastores:passthrough-operational
(always forward to DMI-Plugin)ncmp-datastores:passthrough-running
(always forward to DMI-Plugin)5 What datastores are supported/recognized by (ONAP) DMI-Plugin Interface in Istanbul Release Suggested exact same as NCMP supported options
ncmp-datastores:operational
(for with sync=Off)ncmp-datastores:running
ncmp-datastores:passthrough-operational
ncmp-datastores:passthrough-running
6 How to handle any other custom datastore value
Istanbul Roadmap
Priorities & Scope for Istanbul Release Priority Description Notes Istanbul commitment Jira(s) 1 Publish and Share NCMP Rest interface proposal detailed for Istanbul scope, general structure only for functionality related to later releases Committed
CPS-391
-
Getting issue details...
STATUS
2 Publish and Share DMI Plugin Rest interface proposal detailed for Istanbul scope, general structure only for functionality related to later releases Committed
CPS-390
-
Getting issue details...
STATUS
3 Register a DMI Plugin with NCMP
DMI plugin registration is implicit part of CM handle registration (inventory update), REST endpoint on NCMP (can be multiple calls) Committed
CPS-350
-
Getting issue details...
STATUS
CPS-384
-
Getting issue details...
STATUS
CPS-352
-
Getting issue details...
STATUS
CPS-353
-
Getting issue details...
STATUS
CPS-389
-
Getting issue details...
STATUS
CPS-442
-
Getting issue details...
STATUS
CPS-403
-
Getting issue details...
STATUS
CPS-404
-
Getting issue details...
STATUS
CPS-405
-
Getting issue details...
STATUS
4 Initial Inventory (semi hardcoded e.g. hidden rest endpoint
Additional properties for ONAP plugin may need ODL mountpoint, stored by NCMP and later provided to DMI plugin for each request. The mountpoint is created outside of CPS and DMI plugin. Committed
CPS-385
-
Getting issue details...
STATUS
CPS-406
-
Getting issue details...
STATUS
5 Passthrough Read operations for data (single cmHandle, synchronous only) Explicit specified Passthrough datastores only (ncmp-datastores:passthrough-*
, see Datastore Mapping below) i.e. no resource-path or data format transformations required. Committed
CPS-388
-
Getting issue details...
STATUS
CPS-394
-
Getting issue details...
STATUS
6 Create, Update & Delete operations for (single cmHandle , synchronous only )
Explicit specified Passthrough datastores only (ncmp-datastores:passthrough-*
Not expected these to be differ much from each other from a NCMP/DMI plugin perspective. Committed
CPS-395
-
Getting issue details...
STATUS
7 Inventory Changes define and implement interface to add & remove cm handle Related to #3 Committed
CPS-443
-
Getting issue details...
STATUS
CPS-444
-
Getting issue details...
STATUS
8 Model discovery (get and store model for a cm-handle) NCMP queries DMI plugin that provides information, for ONAP retrieved via SDNC/ODL Committed
CPS-386
-
Getting issue details...
STATUS
9 Retrieve list of modules (names) for a cmHandle - make higher priority Used by applications to get cached information from NCMP about models Committed 10 Manual (initial) data sync Includes both NCMP and DMI APIs Committed 11 Support dynamic inventory changes (ONAP DMU Plugin) React to events from AAI sent over DMaaP, in turn using API in #7 for updates Stretch
CPS-392
-
Getting issue details...
STATUS
CPS-393
-
Getting issue details...
STATUS
12 Yang Patch operations for single cmHandle with ds = pass-through, synchronous only Stretch 13 Retrieve list of cm-handles that have a given module Stretch 14 Support yang-data+json output for all datastores Stretch 15 Trigger (initial) Data Sync Metadata (per cmHandle) controls whether this will happen or not Out of Scope 16 Implement -async option for CRUD and Patch operations
Out of Scope 17 Support multiple cmHandles in a single call (bulk) Out of Scope 18 Support all cmHandles in a single call? Out of Scope 19 Support ds/ncmp-datastores:operational
for read and query operations This will probably be covered in Istanbul anyway for E2E NW Slicing Use-Case
Out of Scope
CPS-382
-
Getting issue details...
STATUS
from CPS-391Spike: Define and Agree NCMP REST Interface :
State Input Behavior Data Notes # Data-Sync Datastore parameter Expected resourcePath
format
Accept-Header Fields
(filter)
Data Source Included DataNodes (config)
1 On Not Specified cpsPath application/yang-data+json N/A Not supported N/A N/A 2 On Not Specified cpsPath application/json N/A Not supported N/A N/A 3 Off Not Specified
cpsPath application/yang-data+json N/A
Not supported
N/A N/A
4 Off Not Specified cpsPath N/A N/A Not supported N/A N/A there are NO DataNode objects in CPS to output as JSON) 5 Off Not Specified other then cpsPath N/A N/A Not supported N/A N/A Not supported Since NCMP can only convert cpsPaths 6 On | Off ncmp/passthrough-operational NCMP does not parse
NCMP does not parse depends on DMI-Plugin (supported in ONAP) Resolve DMI plugin
Forward request to plugin
Output received responseDMI-Plugin config + non-config The DMI plugin may error if the RP or accept header are not supported.
The DMI plugin may forward the request without processing too.7 On | Off ncmp/passthrough-running NCMP does not parse NCMP does not parse depends on DMI-Plugin (supported in ONAP) Resolve DMI plugin
Forward request to plugin
Output received responseDMI-Plugin config-only 8 On ncmp/operational cpsPath application/yang-data+json Not supported in Istanbul releases. Considered for Kohn Release Read from cache
output: application/yang-data+json
CPS-Core config + non-config NCMP/CPS-Core needs to remove DataNode wrapping 9 On ncmp/operational cpsPath application/json Not supported in Istanbul releases. Planned for Kohn Release Read from cache
output: application/json
CPS-Core config + non-config Output will use DataNode wrapping (as is from CPS-Core)
For forwarding (cached config off) dmi-reposne need to be wrapped explicitly in 'DataNode'
10 Off ncmp/operational cpsPath application/yang-data+json to be determined in spike, see issue #28
Resolve DMI plugin
Convert cpsPath to RESTConfPath*
Forward request to plugin | Read from DMI plugin
Output application/yang-data+json
DMI-Plugin config + non-config
11 On | Off ncmp/running cpsPath application/yang-data+json to be determined in spike, see issue #28 Resolve DMI plugin
Convert cpsPath to RESTConfPath*
Forward request to plugin | Read from DMI plugin
Output application/yang-data+json
DMI-Plugin config-only
*Note Convert cpsPath to RESTConfPath wil only support 'absolute' cpsPath for conversion no query-type paths
Read Example
{ncmpRoot}/ncmp/v1/ch/<cmHandle>/data/ds/<datastore>/{dataResourceIdentifier}?fields={fieldsExpression}
URI :{ncmpRoot}/ncmp/v1/ch/node123/data/ds/ncmp-datastores:operational/TopElement[@id=1]/SomeFunction[@id=1]?fields=cell-model:Cell/attributes(attr1;attr2)
Header :
Accept : application/yang-data+json
Response :
200 OK
{
"function-model:SomeFunction": [
{
"id": "1",
"cell-model:Cell": [
{
"id": "Cell-001",
"attributes": {
"attr1": "value1",
"attr2": "value2"
}
},
{
"id": "Cell-002",
"attributes": {
"attr3": "value3",
"attr4": "value4"
}
}
]
}
]
}
Works Items for above.
# Description Component Enables 1 Forward request from NCMP to CPS-Core NCMP 8,9 2 Forward request from NCMP to DMI-Plugin NCMP 6,7 3 Convert json (dataNode) to yang-data+json CPS-Core/NCMP 8 4 Convert cpsPath to RESTConf Path NCMP 10,11 5 Enhance &fields parameter where needed NCMP 10,11+fields option 6 NOT Supported N/A 1,2,3,4,5
Write operations are only supported on the ncmp-datastores:running and ncmp-datastores:passthrough-running datastores The Data Target for all write operation is DMI-Plugin Write operations are only supported for config=true data Fields and similar parameters are not supported for write operations State Input Behavior Notes # Data-Sync Operation Datastore parameter Expected resourcePath
format
Content-Type 1 On | Off Create ncmp/passthrough-running NCMP does not parse
larger JSON structure (see CPS-390 page) Resolve DMI plugin
Forward request to plugin
Output received response (success or failure)The DMI plugin may error if the RP or content type are not supported.
The DMI plugin may forward the request without processing too.2 On | Off Replace ncmp/passthrough-running NCMP does not parse
NCMP only checks it is valid JSON, then embeds the data in a larger JSON structure (see CPS-390 page) Resolve DMI plugin
Forward request to plugin
Output received response (success or failure)The DMI plugin may error if the RP or content type are not supported.
The DMI plugin may forward the request without processing too.3 On | Off Delete ncmp/passthrough-running NCMP does not parse
NCMP doesn't expect any input data from application, will create request body to DMI plugin without embedded data. Resolve DMI plugin
Forward request to plugin
Output received response (success or failure)The DMI plugin may error if the RP or content type are not supported.
The DMI plugin may forward the request without processing too.4 On | Off Patch ncmp/passthrough-running NCMP does not parse
NCMP only checks it is valid JSON, then embeds the data in a larger JSON structure (see CPS-390 page) Resolve DMI plugin
Forward request to plugin
Output received response (success or failure)The DMI plugin may error if the RP or content type are not supported.
The DMI plugin may forward the request without processing too.5 On | Off Create ncmp/running cpsPath application/yang-data+json Resolve DMI plugin
Convert cpsPath to RESTConfPath
Forward request to plugin
Output received response (success or failure)
6 On | Off Update ncmp/running cpsPath application/yang-data+json Resolve DMI plugin
Convert cpsPath to RESTConfPath
Forward request to plugin
Output received response (success or failure)
7 On | Off Delete ncmp/running cpsPath N/A Resolve DMI plugin
Convert cpsPath to RESTConfPath
Forward request to plugin
Output received response (success or failure)
8 On | Off Patch ncmp/running cpsPath application/yang-data +json
(*plain patch)
Resolve DMI plugin
Convert cpsPath to RESTConfPath
Forward request to plugin
Output received response (success or failure)
9 On | Off Patch ncmp/running cpsPath application/yang-patch +json Resolve DMI plugin
Convert cpsPath to RESTConfPath
Forward request to plugin
Output received response (success or failure)
Write Example
Epics Summary
# Epic Project/Component Description Comments 1 E2E Network Slicing
CPS-382
-
Getting issue details...
STATUS
CPS/NCMP create rest interface on northbound for GET/POST/PUT/DELETE to access yang data. Note. Currently driven by "E2E Network Slicing" Use Case mix of CPS-CORE and NCMP Interface
interfaces for yang data are: operational, intended, pass-through (selection can be done by parameter) check with netconf-sim if current nw slicing yang model can be imported including its imports.
2 DMI-Registry
CPS-350
-
Getting issue details...
STATUS
(NCMP) DMI-Registry Create dmi-registry. Data Model Inventory Interface (DMI)
'Internal service' no public Java or REST API
responsibilities are
Store & retrieve cm-handle/dmi-plugin mapping in yang modelled CPS data table. include additional data (key-value pars as provided by dmi-Plugin) Dmi manager is to select the dmi instance at runtime for cm handle for a northbound (write) request 3 DMI-Plugin
CPS-384
-
Getting issue details...
STATUS
DMI-Plugin (ONAP impl.) Common standard (REST and Java?) interface for extensibility
create dmi plugin for onap. Its responsibility of admin to provide instance of dmi.
extract dmi-plugin into separate container consensus on rest interface is needed. 4 Inventory
CPS-385
-
Getting issue details...
STATUS
DMI-Plugin (ONAP impl.) Capability to get initial Inventory Process Inventory updates5 Model & Data Sync
CPS-386
-
Getting issue details...
STATUS
DMI-Plugin (ONAP impl.) 6 Pass-Through Support
CPS-388
-
Getting issue details...
STATUS
DMI-Plugin (ONAP impl.) dmi plugin instance (onap-dmi) have sdnc connector to access sdnc. call get/post/put/delete towards restconf interface (forward northbound write requests) Possibly overlaps with #1 E2E Network Slicing
Data Stores
+-------------+ +-----------+
| <candidate> | | <startup> |
| (ct, rw) |<---+ +--->| (ct, rw) |
+-------------+ | | +-----------+
| | | |
| +-----------+ |
+-------->| <running> |<--------+
| (ct, rw) |
+-----------+
|
| // configuration transformations,
| // e.g., removal of nodes marked as
| // "inactive", expansion of
| // templates
v
+------------+
| <intended> | // subject to validation
| (ct, ro) |
+------------+
| // changes applied, subject to
| // local factors, e.g., missing
| // resources, delays
|
dynamic | +-------- learned configuration
configuration | +-------- system configuration
datastores -----+ | +-------- default configuration
| | |
v v v
+---------------+
| <operational> | <-- system state
| (ct + cf, ro) |
+---------------+
ct = config true; cf = config false
rw = read-write; ro = read-only
boxes denote named datastores
Datastore Mapping in ONAP DMI Plugin impl. # Incoming DS value (NCMP & DMI Rest interfaces) Outgoing (non-NMDA RestConf Node) Notes 1 /ds
/ncmp-datastores:operational
content=all
RO 2 /ds/ncmp-datastores:running
3 /ds/ncmp-datastores:passthrough-operational
content=all
RO 4 /ds/ncmp-datastores:passthrough-running
content=config
RW 5 /ds/
<anything-else> ? TBC
Component description diagram
eyJleHRTcnZJbnRlZ1R5cGUiOiIiLCJnQ2xpZW50SWQiOiIiLCJjcmVhdG9yTmFtZSI6IlRvaW5lIFNpZWJlbGluayIsIm91dHB1dFR5cGUiOiJibG9jayIsImxhc3RNb2RpZmllck5hbWUiOiJUb2luZSBTaWViZWxpbmsiLCJsYW5ndWFnZSI6ImVuIiwiZGlhZ3JhbURpc3BsYXlOYW1lIjoiIiwic0ZpbGVJZCI6IiIsImF0dElkIjoiMTAwODk1NTk4IiwiZGlhZ3JhbU5hbWUiOiJDUFMgTkNNUCBEZXBsb3ltZW50IFByb3Bvc2FsIiwiYXNwZWN0IjoiIiwibGlua3MiOiJhdXRvIiwiY2VvTmFtZSI6IkNQUy0zMzMgTmV0d29yayBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgKE5DTVApIHNjb3BlIGZvciBJIHJlbGVhc2UgY29uc2lkZXJhdGlvbnMiLCJ0YnN0eWxlIjoidG9wIiwiY2FuQ29tbWVudCI6ZmFsc2UsImRpYWdyYW1VcmwiOiIiLCJjc3ZGaWxlVXJsIjoiIiwiYm9yZGVyIjp0cnVlLCJtYXhTY2FsZSI6IjEiLCJvd25pbmdQYWdlSWQiOjEwMDg5NTU0OSwiZWRpdGFibGUiOmZhbHNlLCJjZW9JZCI6MTAzNDIwMjg2LCJwYWdlSWQiOiIiLCJsYm94Ijp0cnVlLCJzZXJ2ZXJDb25maWciOnsiZW1haWxwcmV2aWV3IjoiMSJ9LCJvZHJpdmVJZCI6IiIsInJldmlzaW9uIjoxNywibWFjcm9JZCI6Ijg1NjhmMzMwLWNlYWItNDQ4Ni05YWFkLTIwMGJlZDRjMDM1NCIsInByZXZpZXdOYW1lIjoiQ1BTIE5DTVAgRGVwbG95bWVudCBQcm9wb3NhbC5wbmciLCJsaWNlbnNlU3RhdHVzIjoiT0siLCJzZXJ2aWNlIjoiIiwiaXNUZW1wbGF0ZSI6IiIsIndpZHRoIjoiODg5Iiwic2ltcGxlVmlld2VyIjpmYWxzZSwibGFzdE1vZGlmaWVkIjoxNjE5MDE5MTA4MDAwLCJleGNlZWRQYWdlV2lkdGgiOmZhbHNlLCJvQ2xpZW50SWQiOiIifQ==
Interfaces
eyJleHRTcnZJbnRlZ1R5cGUiOiIiLCJnQ2xpZW50SWQiOiIiLCJjcmVhdG9yTmFtZSI6IlRvaW5lIFNpZWJlbGluayIsIm91dHB1dFR5cGUiOiJibG9jayIsImxhc3RNb2RpZmllck5hbWUiOiJUb2luZSBTaWViZWxpbmsiLCJsYW5ndWFnZSI6ImVuIiwiZGlhZ3JhbURpc3BsYXlOYW1lIjoiIiwic0ZpbGVJZCI6IiIsImF0dElkIjoiMTAzNDE2MzAzIiwiZGlhZ3JhbU5hbWUiOiJOQ01QIGFuZCBETUkiLCJhc3BlY3QiOiIiLCJsaW5rcyI6ImF1dG8iLCJjZW9OYW1lIjoiQ1BTLTMzMyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCAoTkNNUCkgc2NvcGUgZm9yIEkgcmVsZWFzZSBjb25zaWRlcmF0aW9ucyIsInRic3R5bGUiOiJ0b3AiLCJjYW5Db21tZW50IjpmYWxzZSwiZGlhZ3JhbVVybCI6IiIsImNzdkZpbGVVcmwiOiIiLCJib3JkZXIiOnRydWUsIm1heFNjYWxlIjoiMSIsIm93bmluZ1BhZ2VJZCI6MTAwODk1NTQ5LCJlZGl0YWJsZSI6ZmFsc2UsImNlb0lkIjoxMDM0MjAyODYsInBhZ2VJZCI6IiIsImxib3giOnRydWUsInNlcnZlckNvbmZpZyI6eyJlbWFpbHByZXZpZXciOiIxIn0sIm9kcml2ZUlkIjoiIiwicmV2aXNpb24iOjQsIm1hY3JvSWQiOiIxMGJkYjdjNi0yZTg0LTQ0YWUtODFmOC04ZmNmOTUwZTRiMGEiLCJwcmV2aWV3TmFtZSI6Ik5DTVAgYW5kIERNSS5wbmciLCJsaWNlbnNlU3RhdHVzIjoiT0siLCJzZXJ2aWNlIjoiIiwiaXNUZW1wbGF0ZSI6IiIsIndpZHRoIjoiMjAwIiwic2ltcGxlVmlld2VyIjpmYWxzZSwibGFzdE1vZGlmaWVkIjoxNjIwMzg4NjcyMDAwLCJleGNlZWRQYWdlV2lkdGgiOmZhbHNlLCJvQ2xpZW50SWQiOiIifQ==
Sequence diagrams
eyJleHRTcnZJbnRlZ1R5cGUiOiIiLCJnQ2xpZW50SWQiOiIiLCJjcmVhdG9yTmFtZSI6IlJhaHVsIFR5YWdpIiwib3V0cHV0VHlwZSI6ImJsb2NrIiwibGFzdE1vZGlmaWVyTmFtZSI6IlRvaW5lIFNpZWJlbGluayIsImxhbmd1YWdlIjoiZW4iLCJkaWFncmFtRGlzcGxheU5hbWUiOiIiLCJzRmlsZUlkIjoiIiwiYXR0SWQiOiIxMDA4OTU5NTgiLCJkaWFncmFtTmFtZSI6IkNvcHkgb2YgQ1BTIE5DTVAgRGVwbG95bWVudCBQcm9wb3NhbCIsImFzcGVjdCI6IiIsImxpbmtzIjoiYXV0byIsImNlb05hbWUiOiJDUFMtMzMzIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IChOQ01QKSBzY29wZSBmb3IgSSByZWxlYXNlIGNvbnNpZGVyYXRpb25zIiwidGJzdHlsZSI6InRvcCIsImNhbkNvbW1lbnQiOmZhbHNlLCJkaWFncmFtVXJsIjoiIiwiY3N2RmlsZVVybCI6IiIsImJvcmRlciI6dHJ1ZSwibWF4U2NhbGUiOiIxIiwib3duaW5nUGFnZUlkIjoxMDA4OTU1NDksImVkaXRhYmxlIjpmYWxzZSwiY2VvSWQiOjEwMzQyMDI4NiwicGFnZUlkIjoiIiwibGJveCI6dHJ1ZSwic2VydmVyQ29uZmlnIjp7ImVtYWlscHJldmlldyI6IjEifSwib2RyaXZlSWQiOiIiLCJyZXZpc2lvbiI6NSwibWFjcm9JZCI6ImIxNTUwYWZjLWI3Y2EtNDA2Ni1hMTc1LTI3YWMwYzNmN2UzZSIsInByZXZpZXdOYW1lIjoiQ29weSBvZiBDUFMgTkNNUCBEZXBsb3ltZW50IFByb3Bvc2FsLnBuZyIsImxpY2Vuc2VTdGF0dXMiOiJPSyIsInNlcnZpY2UiOiIiLCJpc1RlbXBsYXRlIjoiIiwid2lkdGgiOiI2OTEiLCJzaW1wbGVWaWV3ZXIiOmZhbHNlLCJsYXN0TW9kaWZpZWQiOjE2MTkwMTkyMTMwMDAsImV4Y2VlZFBhZ2VXaWR0aCI6ZmFsc2UsIm9DbGllbnRJZCI6IiJ9
eyJleHRTcnZJbnRlZ1R5cGUiOiIiLCJnQ2xpZW50SWQiOiIiLCJjcmVhdG9yTmFtZSI6IlJhaHVsIFR5YWdpIiwib3V0cHV0VHlwZSI6ImJsb2NrIiwibGFzdE1vZGlmaWVyTmFtZSI6IlRvaW5lIFNpZWJlbGluayIsImxhbmd1YWdlIjoiZW4iLCJkaWFncmFtRGlzcGxheU5hbWUiOiIiLCJzRmlsZUlkIjoiIiwiYXR0SWQiOiIxMDA4OTU5NjciLCJkaWFncmFtTmFtZSI6InJlZ2lzdGVyIGRtaS1zZXJ2aWNlIiwiYXNwZWN0IjoiIiwibGlua3MiOiJhdXRvIiwiY2VvTmFtZSI6IkNQUy0zMzMgTmV0d29yayBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgKE5DTVApIHNjb3BlIGZvciBJIHJlbGVhc2UgY29uc2lkZXJhdGlvbnMiLCJ0YnN0eWxlIjoidG9wIiwiY2FuQ29tbWVudCI6ZmFsc2UsImRpYWdyYW1VcmwiOiIiLCJjc3ZGaWxlVXJsIjoiIiwiYm9yZGVyIjp0cnVlLCJtYXhTY2FsZSI6IjEiLCJvd25pbmdQYWdlSWQiOjEwMDg5NTU0OSwiZWRpdGFibGUiOmZhbHNlLCJjZW9JZCI6MTAzNDIwMjg2LCJwYWdlSWQiOiIiLCJsYm94Ijp0cnVlLCJzZXJ2ZXJDb25maWciOnsiZW1haWxwcmV2aWV3IjoiMSJ9LCJvZHJpdmVJZCI6IiIsInJldmlzaW9uIjo0LCJtYWNyb0lkIjoiZjk3N2EyN2ItZGFlYy00NGVmLThiOTAtN2M5MzFkZjg4ZmU4IiwicHJldmlld05hbWUiOiJyZWdpc3RlciBkbWktc2VydmljZS5wbmciLCJsaWNlbnNlU3RhdHVzIjoiT0siLCJzZXJ2aWNlIjoiIiwiaXNUZW1wbGF0ZSI6IiIsIndpZHRoIjoiNjcxIiwic2ltcGxlVmlld2VyIjpmYWxzZSwibGFzdE1vZGlmaWVkIjoxNjE5MDE5MjgwMDAwLCJleGNlZWRQYWdlV2lkdGgiOmZhbHNlLCJvQ2xpZW50SWQiOiIifQ==
eyJleHRTcnZJbnRlZ1R5cGUiOiIiLCJnQ2xpZW50SWQiOiIiLCJjcmVhdG9yTmFtZSI6IlJhaHVsIFR5YWdpIiwib3V0cHV0VHlwZSI6ImJsb2NrIiwibGFzdE1vZGlmaWVyTmFtZSI6IlRvaW5lIFNpZWJlbGluayIsImxhbmd1YWdlIjoiZW4iLCJkaWFncmFtRGlzcGxheU5hbWUiOiIiLCJzRmlsZUlkIjoiIiwiYXR0SWQiOiIxMDA4OTU5ODEiLCJkaWFncmFtTmFtZSI6InN5bmMiLCJhc3BlY3QiOiIiLCJsaW5rcyI6ImF1dG8iLCJjZW9OYW1lIjoiQ1BTLTMzMyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gTWFuYWdlbWVudCAoTkNNUCkgc2NvcGUgZm9yIEkgcmVsZWFzZSBjb25zaWRlcmF0aW9ucyIsInRic3R5bGUiOiJ0b3AiLCJjYW5Db21tZW50IjpmYWxzZSwiZGlhZ3JhbVVybCI6IiIsImNzdkZpbGVVcmwiOiIiLCJib3JkZXIiOnRydWUsIm1heFNjYWxlIjoiMSIsIm93bmluZ1BhZ2VJZCI6MTAwODk1NTQ5LCJlZGl0YWJsZSI6ZmFsc2UsImNlb0lkIjoxMDM0MjAyODYsInBhZ2VJZCI6IiIsImxib3giOnRydWUsInNlcnZlckNvbmZpZyI6eyJlbWFpbHByZXZpZXciOiIxIn0sIm9kcml2ZUlkIjoiIiwicmV2aXNpb24iOjYsIm1hY3JvSWQiOiJjMjc4YzgzZS1kZTY2LTRkZDgtOTUxMi04YTQwMjY4MTdjMDEiLCJwcmV2aWV3TmFtZSI6InN5bmMucG5nIiwibGljZW5zZVN0YXR1cyI6Ik9LIiwic2VydmljZSI6IiIsImlzVGVtcGxhdGUiOiIiLCJ3aWR0aCI6Ijg2MSIsInNpbXBsZVZpZXdlciI6ZmFsc2UsImxhc3RNb2RpZmllZCI6MTYxOTAxOTM1MjAwMCwiZXhjZWVkUGFnZVdpZHRoIjpmYWxzZSwib0NsaWVudElkIjoiIn0=
eyJleHRTcnZJbnRlZ1R5cGUiOiIiLCJnQ2xpZW50SWQiOiIiLCJjcmVhdG9yTmFtZSI6IlJhaHVsIFR5YWdpIiwib3V0cHV0VHlwZSI6ImJsb2NrIiwibGFzdE1vZGlmaWVyTmFtZSI6IlRvaW5lIFNpZWJlbGluayIsImxhbmd1YWdlIjoiZW4iLCJkaWFncmFtRGlzcGxheU5hbWUiOiIiLCJzRmlsZUlkIjoiIiwiYXR0SWQiOiIxMDA4OTU5NzEiLCJkaWFncmFtTmFtZSI6InB1dC1wb3N0LWRlbGV0ZSIsImFzcGVjdCI6IiIsImxpbmtzIjoiYXV0byIsImNlb05hbWUiOiJDUFMtMzMzIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IChOQ01QKSBzY29wZSBmb3IgSSByZWxlYXNlIGNvbnNpZGVyYXRpb25zIiwidGJzdHlsZSI6InRvcCIsImNhbkNvbW1lbnQiOmZhbHNlLCJkaWFncmFtVXJsIjoiIiwiY3N2RmlsZVVybCI6IiIsImJvcmRlciI6dHJ1ZSwibWF4U2NhbGUiOiIxIiwib3duaW5nUGFnZUlkIjoxMDA4OTU1NDksImVkaXRhYmxlIjpmYWxzZSwiY2VvSWQiOjEwMzQyMDI4NiwicGFnZUlkIjoiIiwibGJveCI6dHJ1ZSwic2VydmVyQ29uZmlnIjp7ImVtYWlscHJldmlldyI6IjEifSwib2RyaXZlSWQiOiIiLCJyZXZpc2lvbiI6NCwibWFjcm9JZCI6ImZiYjA2MmUwLWJhZmItNGRiNi04NDdiLTQyZmFhOWQyYTMwYSIsInByZXZpZXdOYW1lIjoicHV0LXBvc3QtZGVsZXRlLnBuZyIsImxpY2Vuc2VTdGF0dXMiOiJPSyIsInNlcnZpY2UiOiIiLCJpc1RlbXBsYXRlIjoiIiwid2lkdGgiOiIxMzAxIiwic2ltcGxlVmlld2VyIjpmYWxzZSwibGFzdE1vZGlmaWVkIjoxNjE5MDE5NDEwMDAwLCJleGNlZWRQYWdlV2lkdGgiOmZhbHNlLCJvQ2xpZW50SWQiOiIifQ==
eyJleHRTcnZJbnRlZ1R5cGUiOiIiLCJnQ2xpZW50SWQiOiIiLCJjcmVhdG9yTmFtZSI6IlJhaHVsIFR5YWdpIiwib3V0cHV0VHlwZSI6ImJsb2NrIiwibGFzdE1vZGlmaWVyTmFtZSI6IlRvaW5lIFNpZWJlbGluayIsImxhbmd1YWdlIjoiZW4iLCJkaWFncmFtRGlzcGxheU5hbWUiOiIiLCJzRmlsZUlkIjoiIiwiYXR0SWQiOiIxMDA4OTU5NzciLCJkaWFncmFtTmFtZSI6ImdldC1vcCIsImFzcGVjdCI6IiIsImxpbmtzIjoiYXV0byIsImNlb05hbWUiOiJDUFMtMzMzIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50IChOQ01QKSBzY29wZSBmb3IgSSByZWxlYXNlIGNvbnNpZGVyYXRpb25zIiwidGJzdHlsZSI6InRvcCIsImNhbkNvbW1lbnQiOmZhbHNlLCJkaWFncmFtVXJsIjoiIiwiY3N2RmlsZVVybCI6IiIsImJvcmRlciI6dHJ1ZSwibWF4U2NhbGUiOiIxIiwib3duaW5nUGFnZUlkIjoxMDA4OTU1NDksImVkaXRhYmxlIjpmYWxzZSwiY2VvSWQiOjEwMzQyMDI4NiwicGFnZUlkIjoiIiwibGJveCI6dHJ1ZSwic2VydmVyQ29uZmlnIjp7ImVtYWlscHJldmlldyI6IjEifSwib2RyaXZlSWQiOiIiLCJyZXZpc2lvbiI6MywibWFjcm9JZCI6IjNlZTA3YTZlLTYwMWMtNDA5MS1hYjJiLWRiOTM5YzlmNTBiYiIsInByZXZpZXdOYW1lIjoiZ2V0LW9wLnBuZyIsImxpY2Vuc2VTdGF0dXMiOiJPSyIsInNlcnZpY2UiOiIiLCJpc1RlbXBsYXRlIjoiIiwid2lkdGgiOiI2NjEiLCJzaW1wbGVWaWV3ZXIiOmZhbHNlLCJsYXN0TW9kaWZpZWQiOjE2MTkwMTk0MzgwMDAsImV4Y2VlZFBhZ2VXaWR0aCI6ZmFsc2UsIm9DbGllbnRJZCI6IiJ9