The accompanying drawings illustrate a number of exemplary embodiments and are a part of the specification. Together with the following description, these drawings demonstrate and explain various principles of the present disclosure.
Throughout the drawings, identical reference characters and descriptions indicate similar, but not necessarily identical, elements. While the exemplary embodiments described herein are susceptible to various modifications and alternative forms, specific embodiments have been shown by way of example in the drawings and will be described in detail herein. However, the exemplary embodiments described herein are not intended to be limited to the particular forms disclosed. Rather, the present disclosure covers all modifications, equivalents, and alternatives falling within the scope of the appended claims.
A cloud platform may provide, to remote devices, cloud-based access to computing resources (e.g., data, applications, processing, etc.) available on the cloud platform, such as applications. A client device may connect to the cloud platform and run an application, hosted by the cloud platform, as if running natively on the client device. The server hosting environment of the cloud platform may maintain a user session data for the client device's application session to provide the native application experience. When the client device ends the session, the host server may no longer need to maintain the user session data and may therefore delete the user session data.
When users run applications natively on their own client device, the users may pause application sessions and later return. For example, a user may turn off his or her device, thereby pausing an application session of an active application running on the device. When the user turns on the device again, the application session for the active application may be resumed. The cloud platform may provide similar functionality of maintaining a user session by saving the user session data as a user session state when the client device pauses an application session. When the client device reconnects to the application session, the cloud platform may restore the user's session by retrieving the corresponding user session state.
However, storing the user session state indefinitely may be resource prohibitive. As application sessions increase, whether from the user using other applications or other users using applications, a number of user session states may increase such that storing all the user session states may quickly exhaust available memory. Although the user session states may be managed by deleting stale data, such schemes may cause a user's session state to be deleted before the user reconnects. The user's session may not be restored to the detriment of the user's experience.
The present disclosure is generally directed to managing session reconnects and dynamic resource allocation. As will be explained in greater detail below, embodiments of the present disclosure may detect a pause in a user session, determine a session preservation time for the user session, and storing a user session state of the user session for at least the session preservation time. By determining the session preservation time based on predicting a time for keeping the user session alive, the systems and methods described herein may provide a better user experience in reconnecting to sessions. The systems and methods described herein may improve the functioning of a computer itself by more efficiently storing and maintaining session state data. In addition, the systems and methods described herein may improve the field of state memory management by better predicting keep-alive times.
Features from any of the embodiments described herein may be used in combination with one another in accordance with the general principles described herein. These and other embodiments, features, and advantages will be more fully understood upon reading the following detailed description in conjunction with the accompanying drawings and claims.
The following will provide, with reference to
As illustrated in
In some embodiments, the term “user session” or “session” may refer to a temporary and interactive information interchange between communicating devices, such as a session of activity and/or interactions of a client referencing a resource that may be tracked by the resource's host. For example, a website host may track a user's activity during a session with a website provided by the website host. A user session may be used by a host to maintain user specific state, persistent objects, authenticated user identities, etc., and may further facilitate communication between the client and host by remembering previous interactions/communications. The state of the user session may be maintained in a memory during the session and as such, may be stored to a storage device and later retrieved. Thus, the user session may be paused, the session state stored, and the user session may be restored by retrieving the stored session state. For example, as will be discussed further below, the systems and methods described herein may manage user session states.
Various systems described herein may perform step 110.
In certain embodiments, one or more of modules 202 in
As illustrated in
As illustrated in
As illustrated in
Example system 200 in
Server 306 may represent or include one or more servers capable of hosting cloud-based software distribution platform. Server 306 may provide cloud-based access to applications to computing device 302. Server 306 may include a physical processor 230, which may include one or more processors, memory 240, which may store modules 202, and one or more of additional elements 220.
Computing device 302 may be communicatively coupled to server 306 through network 304. Network 304 may represent any type or form of communication network, such as the Internet, and may comprise one or more physical connections, such as LAN, and/or wireless connections, such as WAN.
As described herein, server 306 may correspond to a cloud-based software distribution host. In some embodiments, the cloud-based software distribution host may host software applications for cloud-based access. Software applications, particularly games, are often developed for a specific OS and require porting to run on other OSes. However, the cloud-based software distribution host described herein (also referred to as the cloud-based software distribution platform herein) may provide cloud-based access to games designed for a particular OS on a device running an otherwise incompatible OS for the games. For example, the platform may host a desktop game and allow a mobile device (or other device running an OS that is not supported by the game) to interact with an instance of the desktop game as if running on the mobile device. Similarly, the platform may host a mobile game and allow a desktop computer (or other device running an OS that is not supported by the game) to interact with an instance of the mobile game as if running on the desktop computer. Although the examples herein refer to games as well as OS incompatibility, in other examples the software applications may correspond to any software application that may not be supported or is otherwise incompatible with another computing device, including but not limited to OS, hardware, etc.
In some embodiments, the term “virtualization environment” may refer to an isolated application environment that may virtualize at least some aspects of the application environment such that an application may interface with the virtualized aspects as if running on the application's native environment. Examples of virtualization environments include, without limitation, containers and virtual machines (“VM”). In some embodiments, the term “container” may refer to an isolated application environment that virtualizes at least an operating system (“OS”) of the base host machine by sharing a system or OS kernel with the host machine. For example, if the base host machine runs Windows (or other desktop OS), the container may also run Windows (or other desktop OS) by sharing the OS kernel such that the container may not require a complete set of OS binaries and libraries. In some embodiments, the term “virtual machine” may refer to an isolated application environment that virtualizes hardware as well as an OS. Because a VM may virtualize hardware, an OS for the VM may not be restricted by the base host machine OS. For example, even if the base host machine is running Windows (or another desktop OS), a VM on the base host machine may be configured to run Android (or other mobile OS) by emulating mobile device hardware. In other examples, other combinations of OSes may be used.
VM 430 may run an application 420 and VM 432 may run an application 422. Host 406 may utilize nested virtualization environments (e.g., VM 430 running in container 440 and VM 432 running in container 442) to more efficiently manage virtualization environments. For instance, as a number of VMs are initiated and/or closed the nested virtualization may facilitate management of virtualization environments for various types of VMs as well as more efficiently scale the number of VMs running concurrently. Certain aspects which may be global across certain VMs may be better managed via containers.
Computing device 402, which may correspond to an instance of computing device 302, may access application 420 via network 404. Computing device 403, which may correspond to another instance of computing device 302, may access application 422 via network 404. As shown in
Although
Returning to
For example, at time t0, session module 204, as part of host 506, may establish user session 522 for application 520 for a client device (not depicted). The client device may connect to host 506 to initiate user session 522 for using application 520. User session 522 may include state data for the user's activity using application 520. For example, if application 520 corresponds to a video game, user session 522 may correspond to a current state of the user's progress in the video game.
At time t1, host 506 may detect a pause in user session 522. The user may have minimized application 520. For example, the user may have actively minimized application 520 or passively minimized application 520 (e.g., the user may have shut off his or her device, the user may have timed out, another application or program may have minimized application 520, and/or the user may have otherwise performed an action causing application 520 to minimize, etc.). Accordingly, host 506 may receive a message from the client device that indicates that user session 522 should be paused. In other examples, host 506 may detect that the client device disconnected from host 506. For example, the client device may have timed out or its network connection may be intentionally or unintentionally be disconnected. Host 506 may determine that the client device has not responded to communications for an idle time threshold. Thus, at time t1 as illustrated in
Turning back to
In some embodiments, the term “session state” may refer to a data representation of a user session which may facilitate maintaining the user session. A session state may allow restoring a user session by preserving a memory state (e.g., relevant data and/or code stored in volatile and/or non-volatile memory used during current execution of the application) of the user session. Examples of session states include, without limitation, a memory state stored as a backup image, virtual image, or other replica of the memory state, a buffer dump of the current memory state, the memory state stored in a particular format, etc.
A session state may include current configurations of the application such that restoring the user session with the session state may include restoring a match or near-match to the user's experience with the application when the user session was paused. Some applications, such as video games, file editing software, etc., may allow the user to save a file (e.g., saving the user's progress in the video game, saving the user's edits to a file, etc.). Saving the file may allow the user to start a new session with the application and load the saved progress. The user may experience a new session, (e.g., having the application reinitialized) having some of the user's progress restored (e.g., by loading the user's saved file). However, restoring a session using a saved session state may allow the user to more closely resume the experience when the session was paused. For example, the session state may preserve temporary application states (e.g., cursor location, selections or other configurations made, etc.) as well as other unsaved progress. For example, if the user is playing a video game, the user may experience, for a new session, reinitializing the game and loading the user's saved game progress. However, if the user is reconnecting and restoring the user's previous session, the user may experience picking back up the game at the moment the session was paused as if the session were not interrupted.
The systems described herein may perform step 120 in a variety of ways. In one example, as illustrated in
At step 130 one or more of the systems described herein may determine, based on one or more session characteristics relating to the user session, a session preservation time for preserving the user session state. The session preservation time may correspond to a predicted time for keeping the user session alive. For example, preservation module 208 may determine session preservation time 226 for preserving user session state 224.
In some embodiments, the term “session preservation time” may refer to a time for retaining a session state, which may further correspond to a time for keeping a corresponding user session alive. The session preservation time may correspond to a minimum time or floor for keeping the user session alive. In other words, after the session preservation time elapses, the corresponding session may not be guaranteed to be recoverable. After the session preservation time elapses, the corresponding session state may be deleted to free up resources (e.g., free up storage and/or memory for holding other session states).
The systems described herein may perform step 130 in a variety of ways. In one example, preservation module 208 may analyze various signals to predict how long to preserve user session 222. Session preservation time 226 may correspond to a predicted minimum time for storing user session state 224 such that user session state 224 may be available to restore user session 222 when the user reconnects without requiring indefinite storage of user session state 224.
For example, as illustrated in
In some examples, preservation module 208 may analyze session characteristics including an application characteristic of the application, a popularity of the application, or a return rate of users of the application. Certain types of applications may exhibit certain session behaviors. For example, entertainment applications (e.g., video games, social media applications, etc.) may exhibit short sessions with frequent pauses in sessions, and short time periods for resuming sessions. Entertainment applications may be associated with shorter session preservation times, which may further correspond to faster return rates of users. Productivity applications (e.g., office applications, specialized software for jobs, etc.), may exhibit longer sessions with less frequent pauses in sessions, and longer time periods for resuming sessions. Productivity applications may be associated with longer session preservation times, which may also correspond to slower return rates for users. Other characteristics of the application may be factored into the session preservation time. For instance, a popular application may exhibit a high turnover rate for sessions, which may be associated with shorter session preservation times to account for the high turnover. Resource requirements for the application may also factor into the session preservation time. For example, an application requiring large session states may be associated with shorter session preservation times compared to an application with small session states, in order to utilize limited resources more efficiently.
In other examples, preservation module 208 may analyze session characteristics including an application usage pattern of a user, or a return rate of the user. The user himself or herself may exhibit particular session behavior as may be determined from the user's history. For example, a given user may be inclined to use a given application at certain times of the day such that session preservation time 226 may account for the user's usage pattern. Session preservation time 226 may be longer when overlapping the expected use time (e.g., due to a higher probability of the user reconnecting to the session) and/or may be shorter otherwise. In another example, a given user's application usage pattern may indicate that the user tends to return quickly to sessions (which may correspond to shorter times for session preservation time 226) or may tend to return slowly to sessions (which may correspond to longer times for session preservation time 226). In some examples, the user may indicate, either via settings or at the time of pausing user session 222, whether the user expects and/or intends to return to user session 222 after a different than normal relative time (e.g., faster than average for the user and/or class of users, slower than average) and/or absolute time (e.g., indicating a specific expected return time such as within 1 hour or at a time such as 7:00 PM). In some examples, preservation module 208 may use an average reconnection time (e.g., average time for the user to reconnect to a given session) for determining session preservation time 226. For example, the average reconnection time may be used as a basis for session preservation time 226 that may be further modified based on the factors described herein.
Preservation module 208 may further consider additional factors and use various analysis schemes, such as statistical analysis, machine learning, etc., to balance optimal usage of available storage for session states with minimizing dropped sessions for users. In some examples, preservation module 208 may dynamically update session preservation time 226 based on success rates (e.g., session reconnects before deleting corresponding session states) of prior session preservation times.
At step 140 one or more of the systems described herein may store the saved user session state in a session state buffer for at least the determined session preservation time. For example, buffer module 210 (and/or preservation module 208) may store user session state 224 in session state buffer 228 for at least a time indicated by session preservation time 226.
Session state buffer 228 may correspond to any data structure implemented with any storage and/or memory device as described herein. For example, session state buffer 228 may be a queue, stack, heap, vector, array, series of registers, etc.
As illustrated in
Buffer module 210 may store user session states (e.g., at least user session states 624A, 624B, 624D, 624E) with corresponding session preservation times for each state. Buffer module 210 may store the corresponding session preservation times with each state (e.g., as a flag, bit, metadata, or other status indicator). Alternatively or in addition, buffer module 210 may maintain a lookup table or similar data structure for correlating session preservation times with session states.
As will be described further below, buffer module 210 may periodically and/or automatically flush stale entries (e.g., user session states having elapsed or expired session preservation times) from session state buffer 628. However, when adding a new user session state (e.g., user session state 624N) to session state buffer 628 when full, buffer module 210 may select one of the stored user session states for flushing. Buffer module 210 may select a candidate user session state for flushing based on, for example, a time to expire (e.g., a user session state having a session preservation time that is close to or already lapsed may be more likely to be selected), a time in buffer (e.g., a user session state having been stored in session state buffer 628 longer than other user session states may be more likely to be selected), and/or other factors to determine which user session state may be flushed with a least impact to overall user experiences (e.g., a user session unlikely or least likely to be reconnected). As illustrated in
Returning to method 100, the systems described herein may perform step 140 in a variety of ways. In one example, as illustrated in
In some examples, session module 204 may detect, before session preservation time 226 elapses, a reconnection of user session 222. For example, in
In some examples, session module 204 may track a reconnection time of user session 522. An average reconnection time for the user may be updated based on this reconnection time such that preservation module 208 may use the updated average reconnection time for determining session preservation times.
As described herein, successfully predicting a session preservation time may reduce a likelihood that a user will not be able to reconnect to a paused session. Thus, at time t2 in
Turning back to
The systems described herein may perform step 150 in a variety of ways. In one example, buffer module 210 may automatically and/or periodically check whether each user session state in session state buffer 228 is valid or have elapsed. In some examples, preservation module 208 may dynamically update session preservation time 226 such that buffer module 210 may require active management and flushing of stale entries. In other examples, buffer module 210 may be given instructions to flush a particular entry. For example, the user may indicate that the user does not intend to reconnect to a session such that buffer module 210 may be instructed to flush the corresponding user session state. In another example, the user's account may be terminated or otherwise suspended such that all of the user's session states may be flushed. In yet another example, the corresponding application may have changed (e.g., updated, modified, deleted, etc.), such that related user session states may no longer be data compliant with the application and therefore may be flushed.
By identifying and flushing stale entries, buffer module 210 may maintain session state buffer 228 such that new entries may be added. For example, in
As referenced above, the systems and methods described herein are directed to dynamic resource allocation for managing user session states. A cloud application platform may provide a user with virtualized access to an application. On a client device, the user may normally expect to be able to pause a current application session and later seamlessly return to the session. However, providing such an experience via a server hosting a virtualized application may be prohibitively resource (e.g., memory) intensive. For example, keeping a user session alive may require saving the user's session state, which may be a waste of resources if the user does not intend to reconnect to the same session. The systems and methods described herein may determine which user sessions to keep alive and which user sessions to close in order to free up resources. The systems and methods described herein may use various signals, such as aspects relating to the application and aspects relating to the user, to determine how long to preserve each session.
Example 1: A computer-implemented method comprising: (i) detecting, by a cloud-based software distribution host providing cloud-based access to an application to a client device, a pause in a user session of the application; (ii) in response to the detection, saving a user session state of the user session, wherein the user session state includes a memory state of the application corresponding to a user's activity during the user session; (iii) determining, based on one or more session characteristics relating to the user session, a session preservation time for preserving the user session state, wherein the session preservation time corresponds to a predicted time for keeping the user session alive; (iv) storing the saved user session state in a session state buffer for at least the determined session preservation time; and (v) removing the user session state from the session state buffer after the session preservation time elapses.
Example 2: The method of Example 1, further comprising: detecting, before the session preservation time elapses, a reconnection of the user session; and loading the user session state from the session state buffer to restore the user session.
Example 3: The method of Example 2, further comprising tracking a reconnection time of the user session, wherein the one or more session characteristics includes an average reconnection time for the user and the session preservation time is further based on the average reconnection time.
Example 4: The method of Examples 1, 2, or 3, wherein the one or more session characteristics includes at least one of an application characteristic of the application, a popularity of the application, or a return rate of users of the application.
Example 5: The method of any of Examples 1-4, wherein the one or more session characteristics includes at least one of an application usage pattern of a user, or a return rate of the user.
Example 6: The method of any of Examples 1-5, wherein the pause corresponds to at least one of the client device disconnecting from the cloud-based software distribution host, or the user minimizing the application.
Example 7: The method of any of Examples 1-6, wherein the application comprises a video game and the user session state corresponds to a progress of the user in the video game.
Example 8: A system comprising: at least one physical processor; physical memory comprising computer-executable instructions that, when executed by the physical processor, cause the physical processor to: (i) detect, by a cloud-based software distribution host providing cloud-based access to an application to a client device, a pause in a user session of the application; (ii) in response to the detection, save a user session state of the user session, wherein the user session state includes a memory state of the application corresponding to a user's activity during the user session; (iii) determine, based on one or more session characteristics relating to the user session, a session preservation time for preserving the user session state, wherein the session preservation time corresponds to a predicted time for keeping the user session alive; (iv) store the saved user session state in a session state buffer for at least the determined session preservation time; and (v) remove the user session state from the session state buffer after the session preservation time elapses.
Example 9: The system of Example 8, wherein the instructions further comprise instructions for: detecting, before the session preservation time elapses, a reconnection of the user session; and loading the user session state from the session state buffer to restore the user session.
Example 10: The system of Example 9, wherein the instructions further comprise instructions for tracking a reconnection time of the user session, wherein the one or more session characteristics includes an average reconnection time for the user and the session preservation time is further based on the average reconnection time.
Example 11: The system of Example 8, 9, or 10, wherein the one or more session characteristics includes at least one of an application characteristic of the application, a popularity of the application, or a return rate of users of the application.
Example 12: The system of any of Examples 8-11, wherein the one or more session characteristics includes at least one of an application usage pattern of a user, or a return rate of the user.
Example 13: The system of any of Examples 8-12, wherein the pause corresponds to at least one of the client device disconnecting from the cloud-based software distribution host, or the user minimizing the application.
Example 14: A non-transitory computer-readable medium comprising one or more computer-executable instructions that, when executed by at least one processor of a computing device, cause the computing device to: (i) detect, by a cloud-based software distribution host providing cloud-based access to an application to a client device, a pause in a user session of the application; (ii) in response to the detection, save a user session state of the user session, wherein the user session state includes a memory state of the application corresponding to a user's activity during the user session; (iii) determine, based on one or more session characteristics relating to the user session, a session preservation time for preserving the user session state, wherein the session preservation time corresponds to a predicted time for keeping the user session alive; (iv) store the saved user session state in a session state buffer for at least the determined session preservation time; and (v) remove the user session state from the session state buffer after the session preservation time elapses.
Example 15: The non-transitory computer-readable medium of Example 14, wherein the instructions further comprise instructions for: detecting, before the session preservation time elapses, a reconnection of the user session; and loading the user session state from the session state buffer to restore the user session.
Example 16: The non-transitory computer-readable medium of Example 15, wherein the instructions further comprise instructions for tracking a reconnection time of the user session, wherein the one or more session characteristics includes an average reconnection time for the user and the session preservation time is further based on the average reconnection time.
Example 17: The non-transitory computer-readable medium of Example 14, 15, or 16, wherein the one or more session characteristics includes at least one of an application characteristic of the application, a popularity of the application, or a return rate of users of the application.
Example 18: The non-transitory computer-readable medium of any of Examples 14-17, wherein the one or more session characteristics includes at least one of an application usage pattern of a user, or a return rate of the user.
Example 19: The non-transitory computer-readable medium of any of Examples 14-18, wherein the pause corresponds to at least one of the client device disconnecting from the cloud-based software distribution host, or the user minimizing the application.
Example 20: The non-transitory computer-readable medium of any of Examples 14-19, wherein the application comprises a video game and the user session state corresponds to a progress of the user in the video game.
As detailed above, the computing devices and systems described and/or illustrated herein broadly represent any type or form of computing device or system capable of executing computer-readable instructions, such as those contained within the modules described herein. In their most basic configuration, these computing device(s) may each include at least one memory device and at least one physical processor.
In some examples, the term “memory device” generally refers to any type or form of volatile or non-volatile storage device or medium capable of storing data and/or computer-readable instructions. In one example, a memory device may store, load, and/or maintain one or more of the modules described herein. Examples of memory devices include, without limitation, Random Access Memory (RAM), Read Only Memory (ROM), flash memory, Hard Disk Drives (HDDs), Solid-State Drives (SSDs), optical disk drives, caches, variations or combinations of one or more of the same, or any other suitable storage memory.
In some examples, the term “physical processor” generally refers to any type or form of hardware-implemented processing unit capable of interpreting and/or executing computer-readable instructions. In one example, a physical processor may access and/or modify one or more modules stored in the above-described memory device. Examples of physical processors include, without limitation, microprocessors, microcontrollers, Central Processing Units (CPUs), Field-Programmable Gate Arrays (FPGAs) that implement softcore processors, Application-Specific Integrated Circuits (ASICs), portions of one or more of the same, variations or combinations of one or more of the same, or any other suitable physical processor.
Although illustrated as separate elements, the modules described and/or illustrated herein may represent portions of a single module or application. In addition, in certain embodiments one or more of these modules may represent one or more software applications or programs that, when executed by a computing device, may cause the computing device to perform one or more tasks. For example, one or more of the modules described and/or illustrated herein may represent modules stored and configured to run on one or more of the computing devices or systems described and/or illustrated herein. One or more of these modules may also represent all or portions of one or more special-purpose computers configured to perform one or more tasks.
In addition, one or more of the modules described herein may transform data, physical devices, and/or representations of physical devices from one form to another. For example, one or more of the modules recited herein may receive session data to be transformed, transform the session data, output a result of the transformation to manage session data, use the result of the transformation to maintain the session data, and store the result of the transformation to store the session data. Additionally or alternatively, one or more of the modules recited herein may transform a processor, volatile memory, non-volatile memory, and/or any other portion of a physical computing device from one form to another by executing on the computing device, storing data on the computing device, and/or otherwise interacting with the computing device.
In some embodiments, the term “computer-readable medium” generally refers to any form of device, carrier, or medium capable of storing or carrying computer-readable instructions. Examples of computer-readable media include, without limitation, transmission-type media, such as carrier waves, and non-transitory-type media, such as magnetic-storage media (e.g., hard disk drives, tape drives, and floppy disks), optical-storage media (e.g., Compact Disks (CDs), Digital Video Disks (DVDs), and BLU-RAY disks), electronic-storage media (e.g., solid-state drives and flash media), and other distribution systems.
The process parameters and sequence of the steps described and/or illustrated herein are given by way of example only and can be varied as desired. For example, while the steps illustrated and/or described herein may be shown or discussed in a particular order, these steps do not necessarily need to be performed in the order illustrated or discussed. The various exemplary methods described and/or illustrated herein may also omit one or more of the steps described or illustrated herein or include additional steps in addition to those disclosed.
The preceding description has been provided to enable others skilled in the art to best utilize various aspects of the exemplary embodiments disclosed herein. This exemplary description is not intended to be exhaustive or to be limited to any precise form disclosed. Many modifications and variations are possible without departing from the spirit and scope of the present disclosure. The embodiments disclosed herein should be considered in all respects illustrative and not restrictive. Reference should be made to the appended claims and their equivalents in determining the scope of the present disclosure.
Unless otherwise noted, the terms “connected to” and “coupled to” (and their derivatives), as used in the specification and claims, are to be construed as permitting both direct and indirect (i.e., via other elements or components) connection. In addition, the terms “a” or “an,” as used in the specification and claims, are to be construed as meaning “at least one of.” Finally, for ease of use, the terms “including” and “having” (and their derivatives), as used in the specification and claims, are interchangeable with and have the same meaning as the word “comprising.”
This application claims the benefit of U.S. Provisional Application No. 63/105,320, filed 25 Oct. 2020, and U.S. Provisional Application No. 63/194,821, filed 28 May 2021, the disclosures of each of which are incorporated, in their entirety, by this reference. Co-pending U.S. application Ser. No. 17/506,640, filed 20 Oct. 2021, is incorporated, in its entirety, by this reference.
Number | Date | Country | |
---|---|---|---|
63194821 | May 2021 | US | |
63105320 | Oct 2020 | US |