The disclosure relates generally to a data processing layer and, more particularly, to systems and methods intrinsic processing of data formatted in accordance with an interoperability standard for the exchange of data.
Fast Healthcare Interoperability Resources (FHIR™) is a standard for healthcare data exchange created with the aim of facilitating clinical interoperability. For this purpose, FHIR™ defines and enforces a common set of APIs used primarily for data transmission to enable healthcare systems to communicate with each other. The FHIR™ specifications are generally free to use and employ technologies and web standards commonly used across other industries, for example, the REST architectural style of APIs. Developers can combine different components of FHIR™ to target specific clinical use cases or create extensions upon the core specifications.
One of the FHIR™ standard's objectives is to provide a set of data elements (referred to in the standard and herein throughout as “resources”) that can be combined together through the use of “references” in order to capture most clinical use cases. Resources are typically not used independently and rather are intended to reference other resources. For example, linking a Patient resource to other resource types, such as an Observation (an assertion concerning a patient), Condition (a diagnosis or issue), or Medication (ingredients, amount, strength of medications, etc.), by way of a reference, allows for different, specific scenarios to be implemented. Extensibility, in the event that a given scenario will not adequately be captured by existing resources, is supported through the use of “profiles” that, in general, can be used to either constrain or extend an existing resource type as required in order to better or more completely describe the scenario presented.
A FHIR™ profile will commonly, but not always, comprise a general requirements section describing its goal, category, and the resource(s) being configured by the profile, a snapshot section presenting a full configuration of the profiled resource, and a differential section to highlight differences between the base resource and as profiled. Some standard FHIR™ profiles have been created and published, while other FHIR™ profiles will be developed by individual users to meet the requirements of a specific project or use case. In any case, profiling a FHIR™ resource can be used to define missing extensions and how API functions and terminologies should be configured.
Substitutable Medical Applications, Reusable Technologies (SMART™) is another open-source, standards-based API that leverages the OAuth 2.0 standard to provide secure, universal access to electronic health records (EHRs). The SMART™ platform builds on and extends the FHIR™ standard and consequently is sometimes referred to as “SMART on FHIR”. One of the functions that SMART on FHIR enables is secure authentication of client systems or applications, which it accomplishes in part through the use of “scopes”. Scope is a term that originates from the OAuth 2.0 standard to represent the range of functionality requested by, and potentially granted to, a client application by an authorization server. For example, the granted permissions may be actions like read, write, or delete, among others. While the OAuth2.0 standard does not generally define the contents of a scope, only the available permissions that can be granted between client and server, SMART on FHIR does define a pattern for how scopes can be utilized at the resource or profile level.
Scopes are defined in SMART on FHIR in terms of certain pre-defined categories or contexts including, at the clinical data level, both patient-specific scopes (e.g., data or information concerning a particular patient, such as an illness or condition the patient is experiencing) and user-specific scopes (e.g, data or information that a particular user may access, such as an appointment time), as well as system-specific scopes. While scopes were initially utilized for permissioning of FHIR™ resources to be consumed by client applications, enhancements to the SMART on FHIR standard have now also enabled the use of scopes for profiled resources as well.
In general, the disclosure provides methods and systems for functional modules with capabilities that are mappable to an interoperability standard, such as the FHIR™ standard, to not just exchange data with external systems, clients, or applications by following the interoperability standard, but to also process data intrinsically in the same data format. Thus, functional modules may effectively utilize an interoperability standard as an operational data schema and, in so doing, expose an API that enables both interoperability with third party sources, but with also other internal resources that have been similarly configured. This organizational structure can allow for the federation of data processing systems as a collection of locally encapsulated services, microservices, or generally any other configuration of functional or capability modules, which have both internal and external compatibility and extensibility.
In at least one broad aspect, the embodiments set forth herein disclose a system for processing data formatted in accordance with an interoperability statement for electronic exchange of data. The system may include at least one functional module within a capability layer and a router in electronic communication with each at least one functional module. The at least one functional module are each configured to include a capability statement that imposes at least one operational constraint on the processing of data by the functional module, and to publish at least one scope that imposes a set of permissions and restrictions on the data processed by the functional module, in which the the capability statement is defined based on at least one parameter of the interoperability standard, and the at least one scope is defined based on the at least one parameter of the capability statement. The router is configured to, for each at least one functional module, control the flow of data to and therefrom based on the corresponding at least scope published by that functional module and accessed by the router.
In at least one broad aspect, the embodiments set forth herein disclose a method of processing data. The method may include, for each of at least one functional module included within a data processing system, configuring a capability statement that imposes at least one operational constraint of the processing of data by the functional module, and publishing at least one scope that imposes a set of permissions and restrictions on the data processed by the functional module, in which the capability statement is defined based on at least one parameter of an interoperability standard for electronic exchange of data, and the at least one scope is defined based on the at least one parameter of the capability statement. The method may further include receiving a flow of data at a router in electronic communication with each at least one functional module and directing the received flow of data to the at least one functional module selectively based on the corresponding at least scope published by the at least one functional module and accessed by the router.
In at least one broad aspect, the embodiments set forth herein disclose a router for router for controlling the flow of data between at least one functional module included within a data processing system. The router may include a scope registry and a reverse proxy in communication with the scope registry. The scope registry is configured to store, for each of the at least one functional module, at least one scope published by that functional module, in which the at least one scope is defined based on at least one parameter of a capability statement included within the corresponding functional module, and the capability statement imposes at least one operational constraint on the processing of data by that functional module and is defined based on at least one parameter of an interoperability standard for electronic exchange of data within the data processing system. The reverse proxy is configured to route data traffic to and from each at least one functional module by enforcing the corresponding at least one scope stored in the scope registry.
Additional details of these and other aspects of the disclosed embodiments are provided below.
Reference will be made herein to the accompanying drawings, in which:
For clarity and ease of description, like reference numerals will be used in the drawings to describe the same or like parts.
The description which follows, and the embodiments described therein, are provided by way of illustration of example embodiments of the disclosed invention(s). These examples are provided for the purposes of explanation and disclosure and, unless stated explicitly or otherwise inferred from context, are not intended to limit or narrow any aspect or underlying principle of operation or functionality.
Data interoperability standards have been adopted as a way of enabling unrelated systems, clients, or applications to exchange data by providing a common format that will be interpretable by each entity on either side of the exchange. However, such standards do not necessarily provide a conducive schema for internal utilization or processing of data by functional or capabilities modules implemented within a data processing layer. This is, at least in part, because of modern architectural approaches that will often incorporate service or microservice encapsulation to provide a degree of independence between different components of an overall system. Commonly each such encapsulated service or microservice would exercise sovereignty over its own data schema, which tends to decrease scalability and reliability, and reduce the ability of each encapsulated module to interact and exchange data with other modules implemented within the layer.
Embodiments of the invention(s) described herein provide an architectural pattern for a data processing system that utilizes a router to unify all individual instances of functional or capability modules into a single, distributed server. The router in such an architecture is generally configured based on a federated model in which all functional modules are responsible for maintaining their own data stores and communicate with one another only indirectly by way of the router. For its part, the router leverages parameters of the interoperability standard in order to enforce access permissions on and allow for efficient routing of data packets between the functional modules. Through operation of the router, the functional modules included within the capability layer are able to achieve degrees of autonomy of encapsulation that are advantageous from a design productivity and operational standpoint.
Further details of various embodiments of invention(s), including at least one preferred embodiment, will now be provided with reference to the drawings.
Reference is initially made to
Client systems 115 may include one or more interconnected hardware devices that are configured for two-way network communication with host server 105 through an access program, such as a mobile or computer application, web browser, or other type or configuration of network interface. For example, client systems 115 may in some cases execute the front end of a user or client application including functions such as displays, visualizations, and presentations, user interfaces, data inputs and outputs, error alerts and notifications, alarms, and so on, as well as communicate with the application backend that is being implemented on host server 105. Likewise the application backend can perform data processing functions, such as data storage and retrieval, verification, authentication, processing business logic, security, and others.
In some cases, host server 105 may be or include any local or on-premises computer system configured with hardware and/or software resources that allow local or remote access by client systems 115. Alternatively, host server 105 may instead be implemented on a distributed or cloud-based environment, such as Google™ Cloud Services, Amazon™ Web Service, or Microsoft™ Azure™ Cloud Computing Platform, which may be located remotely at one or more third party data centres.
Host server 105 provides a computing and data processing platform that is operable to coordinate the operation of data processing system 100 and deliver programs, applications, media, packets, and other electronic content to client systems 115 across network 110. Host server 105 can be implemented using or including a client-server configuration in which the exchange of data between host server 105 and client systems 115 is controlled using remote procedure calls and API-level communication. In some cases, host server 105 may also incorporate encryption, such as SSL or other suitable security protocols, to secure communication and exchange of confidential and/or personal information with client devices 115.
One or more data storage systems can be implemented within system 100 including, for example, both a networked (e.g., cloud-based or third party hosted) data warehouse 120 that is accessible to host server 105 over network 110 and/or a local data warehouse 125 that is dedicated to host server 105 directly. The number of different data storage systems 120,125 can vary in different implementations to support different applications. Each data storage system 120,125 can be any suitable type or configuration, such as an enterprise data warehouse (or data mart) used for business intelligence and analytics, a datalake, a transactional or operational datastore, or others, and can be implemented, for example, as memory, disk, or monolithic or distributed database configured to store information and data sets that are processed within a data processing layer of host server 105 as described herein.
In some cases, data storage systems 120,125 may be or include any local or on-premises computer system that is network-enabled or otherwise in communication with host server 105. Alternatively, either or both of data warehouses 120, 125 may also be implemented on a distributed or cloud-based environment, such as Google™ Cloud Services, Amazon™ Web Service, or Microsoft™ Azure™ Cloud Computing Platform, which may be located remotely at one or more third party data centres, or may in some cases be instead third party hosted by a managed database services provider.
The networked environment shown in
In accordance with some embodiments, electronic device 200 can couple or be coupled to one or more different connected devices such as, but not limited to, a fitness tracker 205, a smart watch 210, a personal medical device or sensor 215, such as a heart rate or blood pressure sensor, or some other type of wearable or connected device designed to detect or measure a physical or biometric user parameter. When worn and activated by the user of device 200, connected devices 205,210,215 can detect or monitor different metrics or user health parameters that are uploaded a connected program or application executing on mobile device 200 and which may then be transmitted over network 110 for processing by host server 105 as described further herein.
Example biometric parameters that connected devices 205,210,215 can be configured to measure may relate to different physiological data variables or metrics of the user, such as step count or another measure of distance travelled or energy expenditure, e.g., calorie burn, floors climbed and/or descended, heart rate, heartbeat waveform, heart rate variability, heart rate recovery, respiration, oxygen saturation, blood volume, blood glucose, skin moisture, location (e.g., via a GPS or GLONASS), and/or elevation. Other user biometric parameters that connected devices 205,210,215 may be configured to measure may include user blood pressure, blood glucose levels, skin conductivity, skin and/or body temperature; muscle state (e.g., as measured by electromyography), brain activity (e.g., as measured by electroencephalography), weight, body fat percentages, caloric intake, measures of sleep function (including bed and rise times, sleep phases, sleep quality and/or duration), pH levels, hydration levels, and respiration rate, for example.
In some cases, connected devices 205,210,215 can further be configured to measure or detect different environmental parameters, for example, barometric pressure, weather conditions (e.g., temperature, humidity, pollen count, air quality, rain/snow conditions, wind speed), light exposure (e.g., ambient light, UV light exposure, time and/or duration spent in darkness), noise exposure, radiation exposure, and/or magnetic field.
In addition to physical or biometric user parameters that are detected and measured by connected devices 205,210,215, in some cases, electronic device 200 may also originate data or signals of interest that supplements or even substitutes for the data or signals generated by connected devices 205,210,215. For example, connected devices 205,210,215 may be monitoring user sleep activity when electronic device 200 registers that the user has received (answered) or placed a phone call, or some other interaction from the user. If connected devices 205,210,215 had determined that the user is asleep during this period when that is not in fact the case, the data or signals from electronic device 200 may correct the erroneous signal reading from connected devices 205,210,215.
Data or and biometric parameters that connected devices 205,210,215 can be communicated wirelessly to electronic device 200 using a short-range communication protocol such as through connection to a wireless access point, personal area network (PAN), Bluetooth pairing, or wireless local area network (WLAN). In some cases, connected devices 205,210,215 can pair wirelessly with a mobile application or program executing on electronic device 200 that is configured to fetch or receive detected user biometric parameters from connected devices 205,210,215.
In accordance with the described embodiments, electronic device 200 may also include a short-range communication subsystem 315 that enables communication over local area or short-range wireless networks. For example, short-range communication subsystem 315 may include transmitters and receivers that are configured according to Bluetooth™, near field communication (NFC), and other communication protocols that are intended for communications between paired electronic devices over short distances. For example, electronic device 200 may use short-range communication subsystem 315 to enable interconnectivity with connected devices such as fitness tracker 205, smart watch 210, or personal medical device or sensor 215 that are depicted in
Electronic device 200 may generally also include or be provided with random access memory (RAM) 320 and a memory 325, such as a hard drive, flash memory, or other persistent storage device, in which can be stored an operating system 330 and/or one or more functional applications or programs 335 that are executable by microprocessor 305. Applications or programs 335 can be either pre-loaded onto electronic device 200 or, in some cases, loaded or downloaded onto electronic device 200, for example, by the user accessing network 110 using long-range communications subsystem 310.
In some embodiments, electronic device 200 can be powered using an onboard battery 340, which can be a rechargeable battery designed for use in mobile electronic devices, such as a nickel-cadmium (NiCd), nickel metal hydride (NiMH), lithium-ion (Li-Ion), lithium polymer (Li-Po), and the like. Alternatively, in some embodiments, battery 340 can be replaced with and/or include a fixed power supply or adapter for a fixed power supply, such as an electrical grid.
When operated, a user can interact with electronic device 200 by way of one or more different input/output devices or components that can be included in different configurations of electronic device 200. For example, in some cases, electronic device 200 may also be equipped with a display 345, which may include a touch-sensitive screen, microphone 350, speaker 355, actuator 360, which can be an accelerometer, sensor(s) 365, and other device subsystems 370 generally without limitation.
Received signals, such as text messages, e-mail messages, instant messages, or web pages, may be processed by either long- and short-range communication subsystems 310,315 and then provided to microprocessor 305. Signals and data received at microprocessor 305 may then be routed to different subcomponents of device 200, such as an application or program 335, display 345, speaker 355, and so on in accordance with operation of the device 200. Users may also compose data items, such as text or email messages, using the touch sensitive display 345 or other input components, which messages can then be transmitted over network 110 using long-range communications subsystem 310.
In general, when operated by a user, electronic device 200 can be used to download and store any number and type of applications or programs 335 of the user's choosing. Often, but not necessarily, such applications or programs 335 can be retrieved and downloaded from an internet site or application repository, such as a mobile app store, to suit the user's interests. Some users may elect to download applications or programs 335 that are intended for the user to monitor and track general health and wellness.
In accordance with the described embodiments, a user may download an application or program 335 onto electronic device 200 that is compatible with one or more of connected devices 205,210,215 shown in
For any user metric or parameter of interest that connected device 205,210,215 may measure, a data stream containing those measurements may be transmitted by electronic device 200 through network 110 for processing by host server 105 in order to generate a baseline measurement of the user's habits or patterns and/or a regularity score indicative of the user's adherence to their established habits or pattern of behaviour. Host server 105 may then transmit the computed regularity back to electronic device 200 for display to the user and/or for use by the user's mobile application to drive other health-related actions, recommendations, or outcomes.
Each module 410 may communicate with the data platform 420 by way of a corresponding API exposed by that module 410 for data exchange with other modules 410 and across the data platform 420. As described further below, each API exposed by a module 410 may enforce and be configured according to an interoperability standard for exchange of data that has been adopted intrinsically by data platform 420 and capability layer 405 for operations. This data exchange standard may in some cases be the FHIR™ standard and data platform 420 may then correspondingly be configured to store and process data in FHIR™ format in its own internal operations, not just on exchange or interoperation with third party systems, clients, or applications that are external to host server 105.
As described further below with reference to
Data can be received into data platform 420 from third party sources 455 that include both native (configured according to the specified interoperability standard) and non-native (configured according to a different data standard) third party sources. Third party sources 455 may in general correspond to any external entity that transmits data to or from host server 105, such as a third party service provider or extension. Data provided from a third party source 455 that is already configured according to the specific interoperability standard is received by adaptor 460 wherein it may be further configured or formatted for ingestion into data platform 420, e.g., in accordance with capability requirements of one or more functional modules 410. If the data being received from third party source 455 is not formatted according to the interoperability standard, rather than being provided directly to adaptor 460, it may instead be first received by data mapper and broker 465 for conversion into the specified interoperability standard. In some embodiments, data mapper and broker 465 may additionally enforce data contracts or other limitations on the types and kind of data received from third party sources 455 as required or desired. While illustrated in
For example, in order to facilitate communication with router 425 (described further below with reference to
In some embodiments, each API 515 may further include a scope 525 defined for that module 410 that is defined based on the at least one parameter of capability statement 520, and through which module 410 may advertise to router 425 the granular access (read, write, etc.) permissions that are enforced on the types of resources and profiles that have been implemented by that functional module 410. In this way, router 425 can moderate the exchange of data according to the requirements and permissions of each module 410 as defined by their respective capability statement 520 and scope(s) 525. API 515 may additionally define operations 530 that allow for data centric business logic to be exposed to router 425, for example, through the use of verbs or other parameters within API 515. Operations 530 may be used in some cases to create abstractions for business concepts used by functional module 410 (e.g., as part of other programmatic functionality 510) as part of its operational capability or, alternatively, for module 410 to maintain control or ownership of data by restricting the availability of certain data operations (such as write or create) from external users or networked resources.
Optionally, in some embodiments, API 515 may include additional elements or components including subscriptions 535 and streaming I/O 540. Subscriptions 535 can be utilized to provide a mechanism for external users to observe any changes or modifications made to the type of resources handled by functional module 410 as also reflected, for example, in an updated capability statement 520. Such changes can be broadcasted through one or more different communication channels, such as REST-hook, Websocket, e-mail, and other custom channels. In some cases, subscriptions 535 may communicate with a pub/sub module 545 for this purpose, whereby each functional module 410 is responsible for defining which resources are observable and the granularity of the topics that are provided to pub/sub module 545.
Streaming I/O 540 may be included in API 515 in order to provide either synchronous (e.g., real time) or asynchronous sharing of data to a data warehouse 550, for example, which can be configured as a business intelligence or analytics database, or which is used for external data sharing, disaster recovery, to provide auxiliary capabilities of module 410, or for some other purpose. In some cases, streaming I/O 540 may also be used to maintain an auditable record of data transactions.
Router 425 can in some cases be configured based on a federated model, in which each functional module 410 included within capability layer 405 can be responsible for the data on which it operates, but also wherein each functional module 410 communicates with each other functional module 410 by routing data messages through router 425 and from there on to its destination. This allows for communication among all functional modules 410 without requiring any single functional module 410 to know how any other functional module 410 has been configured, which also contributes to modularity and scalability.
Router 425 may include a reverse proxy 605 through which data is exchanged with each of the functional modules 410 and registry 610 in communication with reverse proxy 605 that stores an up to date list of permissible scopes that each functional module 410 has published or exposed to router 425. In the example configuration shown, all data traffic to and between functional modules 410 is routed through reverse proxy 605 operating in conjunction with scopes registry 610. Reverse proxy 605 can thereby enforce read/write access permissions for each module 410 based on the scope(s) that reverse proxy 650 retrieves from scopes registry 610. Advantageously, this allows router 425 to both regulate what data is accessible by each module 410 and, as described further below, to efficiently handle data traffic among modules 410 through selective routing of data requests to the correct destinations.
Referring back to
To overcome this, in accordance with the described embodiments, each functional module 410 may be configured to adopt profiled resources that are effectively unique to that functional module 410, in which case each functional module 410 may then also correspondingly define a unique scope based on that profiled resource. For example, assume that two functional modules 410 each utilize the same resource, such as an observation resource, with equivalent read and write permissions. To provide differentiation, the two functional modules 410 may each define respective profiles as follows: {module1-observation, module2-observation), which can be parameterized as profile (n)=modulen-observation for any arbitrary number of other functional modules 410. Thus, by invoking the name of the functional module 410 in its corresponding profile, no two profiles will be the same across all modules 410 so long as each functional module 410 has a unique name or identifier. The full profiled scopes for these two functional modules 410 may then take the following form, for example: {system/Observation.cruds?_profile=module1-observation, system/Observation.cruds?_profile=module2-observation}.
Referring back to
In some embodiments, router 425 generally and reverse proxy 605 specifically are able to process non-profiled requests, in addition to profiled requests as described herein through the use of scopes. A non-profiled request, in contrast to profiled requests, may be sent to all functional modules 410 in an undifferentiated fashion without restricting or limiting which of functional modules 410 are queried. General requests of this nature, while possible, may come with certain disadvantages such as inefficient routing as well as limitation on reverse proxy 605 acting as a streaming proxy, because the responses of querying multiple functional modules 410 concurrently would in such case be processed and combined together into a single aggregate response.
Some implementations of router 425 may include a tagging engine 615 that can be utilized to process data traffic handled by reverse proxy 605 by writing to one or more fields of metadata in such data packets that are supported by the specified interoperability standard. While in some cases, data packets may be tagged by the individual functional modules 410 that process or utilize, in other cases, it may be preferable or advantageous to utilize router 425 and tagging engine 615 more specifically to deploy a centralized or global tagging strategy across all functional modules 410 in order to avoid individual functional modules 410 utilize different tagging strategies.
For example, as shown, tagging engine 615 may include a tagging strategy registry 620 that maintains an index of tag collections for data processed by functional modules 410. The tag collections may, for example, correspond to different segmentation strategies or other ways to organize or categorize the data into different subsets including for personalization of user experience. Using a common index of tag collections in this manner can provide for uniform data categorizations across all functional modules 410. Tag collections may be saved in tagging strategy registry 620, for example, using a suitable resource in the specific interoperability standard that allows for the querying of data through router 425.
Tagging engine 625 may monitor the data being processed in functional modules 410 through pub/sub service 545, for example, including the addition, modification, or deletion of data by any given functional module 410. Tagging service 625 included in tagging engine 615 may, in response to such events, write to data packets passing through reverse proxy 605 by pulling the appropriate tag(s) from the index maintained in tagging strategy registry 620.
In some embodiments, router 425 may further include an audit record 630 that utilizes one or more resources in the specific interoperability standards, for example, AuditEvent and Provenance resources, in order to preserve a record of operations performed on data objects. Thus, in some cases, audit record 630 may be provided with a record of all operations performed by functional modules 410 through a suitable subscription to pub/sub service 545. Provenance dataflow 635 may transform the stream of operations received from pub/sub service 545 into the relevant AuditEvent and Provenance resources, for example, so as to record when, what, and/or who performed an operation on data resources, on an anonymized basis, without holding any individually identifiable data or information. Such records may then be provided by provenance dataflow 603 to an API 640, which can be configured as a non-federated API instance that is compatible with the specified interoperability standard, for storage and later use.
For example, as illustrated, method 700 may begin at 705 by configuring a corresponding capability statement for each of one or more functional modules, such as the configuration of functional module 410 shown in
At 715, a stream of data consisting of one or more individual data packets originating from different sources may be received at a router. As explained here, the data may originate both from internal sources, such as one or more of the functional modules, as well as sources that are external to the host server or data processing system. In general, data packets received from functional modules will already be formatted in accordance with the interoperability standard, while data from external sources may not be. Unformatted data may be adapted as necessary before being provided to the router for compatibility with the specified interoperability standard or schema.
At 720, in some cases, the router may process the stream of data by writing to the metadata of individual data packets. For example, data packets may be tagged according to the pre-populated index or collection of tags as described herein for different purposes, such as data segmentation or categorization, or to enable the capabilities of different functional modules more generally.
Data packets received by the router at 715, and optionally tagged at 720, may then at 725 be forwarded on to one or more of the functional modules through enforcement of the permissions or restrictions contained within the respective scope(s) that each functional module made available for retrieval by the router for this purpose, as described herein.
Other aspects of method 700 and its operation in various different embodiments are as described herein with reference to data processing system 100 and host server 105 shown in drawings and for the sake of expediency will not be described further.
Although the disclosure has been presented with reference to certain specific embodiments, various modifications thereof will be apparent to those skilled in the art without departing from the scope of the disclosure. The scope of the claims should not be limited by the illustrative embodiments set forth in the examples, but should be given the broadest interpretation consistent with the description as a whole.
This application claims priority to U.S. Application Ser. No. 63/613,900, filed on Dec. 22, 2023, and entitled PROCESSING DATA FORMATTED IN ACCORDANCE WITH AN INTEROPERABILITY STANDARD FOR ELECTRONIC EXCHANGE OF DATA, the entire contents of which are hereby incorporated by reference.
Number | Date | Country | |
---|---|---|---|
63613900 | Dec 2023 | US |