/*
object-assign
(c) Sindre Sorhus
@license MIT
*/

/*! *****************************************************************************
      Copyright (c) Microsoft Corporation.
      
      Permission to use, copy, modify, and/or distribute this software for any
      purpose with or without fee is hereby granted.
      
      THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
      REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
      AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
      INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
      LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
      OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
      PERFORMANCE OF THIS SOFTWARE.
      ***************************************************************************** */

/**
               * This is an async method that returns a Promise that resolves with the authorization URL.
               *
               * @param {GetAuthURLConfig} config - (Optional) A config object to force initialization and pass
               * custom path parameters such as the fidp parameter.
               *
               * @return {Promise<string>} - A promise that resolves with the authorization URL.
               *
               * @example
               * ```
               * auth.getAuthorizationURL().then((url)=>{
               *  // console.log(url);
               * }).catch((error)=>{
               *  // console.error(error);
               * });
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getAuthorizationURL
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This is an async method that sends a request to obtain the access token and returns a Promise
               * that resolves with the token and other relevant data.
               *
               * @param {string} authorizationCode - The authorization code.
               * @param {string} sessionState - The session state.
               *
               * @return {Promise<TokenResponse>} - A Promise that resolves with the token response.
               *
               * @example
               * ```
               * auth.requestAccessToken(authCode, sessionState).then((token)=>{
               *  // console.log(token);
               * }).catch((error)=>{
               *  // console.error(error);
               * });
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#requestAccessToken
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method allows you to send a request with a custom grant.
               *
               * @param {CustomGrantRequestParams} config - The request parameters.
               *
               * @return {Promise<HttpResponse<any> | SignInResponse>} - A Promise that resolves with
               * the value returned by the custom grant request.
               *
               * @example
               * ```
               * auth.customGrant({
               *   attachToken: false,
               *   data: {
               *       client_id: "{{clientId}}",
               *       grant_type: "account_switch",
               *       scope: "{{scope}}",
               *       token: "{{token}}",
               *   },
               *   id: "account-switch",
               *   returnResponse: true,
               *   returnsSession: true,
               *   signInRequired: true
               * });
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#customgrant
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method clears all authentication data and returns the sign-out URL.
               *
               * @return {Promise<string>} - A Promise that resolves with the sign-out URL.
               *
               * @example
               * ```
               * const signOutUrl = await auth.signOut();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#signOut
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method decodes the payload of the ID token and returns it.
               *
               * @return {Promise<DecodedIDTokenPayload>} - A Promise that resolves with the decoded ID token payload.
               *
               * @example
               * ```
               * const decodedIdToken = await auth.getDecodedIDToken();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getDecodedIDToken
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method decodes the payload of the id token and returns it.
               *
               * @return {Promise<DecodedIdTokenPayloadInterface>} - A Promise that resolves with
               * the decoded payload of the id token.
               *
               * @example
               * ```
               * auth.getDecodedIDToken().then((response)=>{
               *     // console.log(response);
               * }).catch((error)=>{
               *     // console.error(error);
               * });
               * ```
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getdecodedidtoken
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method disables callback functions attached to the http client.
               *
               * @return {Promise<boolean>} - A promise that resolves with True.
               *
               * @example
               * ```
               * auth.disableHttpHandler();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#disableHttpHandler
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method enables callback functions attached to the http client.
               *
               * @return {Promise<boolean>} - A promise that resolves with True.
               *
               * @example
               * ```
               * auth.enableHttpHandler();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#enableHttpHandler
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method ends a user session. The access token is revoked and the session information is destroyed.
               *
               * **To fire a callback function after ending user session, use the `on()` method.**
               * **To learn more about the `on()` method:**
               * @see {@link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#on}
               *
               * @return {Promise<boolean>} - A promise that resolves with `true` if the process is successful.
               *
               * @example
               * ```
               * auth.endUserSession();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#endusersession
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method initializes the `AsgardeoSPAClient` instance.
               *
               * @param {ConfigInterface} config The config object to initialize with.
               *
               * @return {Promise<boolean>} - Resolves to `true` if initialization is successful.
               *
               * @example
               * ```
               * auth.initialize({
               *     signInRedirectURL: "http://localhost:3000/sign-in",
               *     clientID: "client ID",
               *     serverOrigin: "https://localhost:9443"
               * });
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#initialize
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method initiates the authentication flow. This should be called twice.
               *  1. To initiate the authentication flow.
               *  2. To obtain the access token after getting the authorization code.
               *
               * To satisfy the second condition, one of the two strategies mentioned below can be used:
               *  1. Redirect the user back to the same login page that initiated the authentication flow.
               *  2. Call the `signIn()` method in the page the user is redirected to after authentication.
               *
               * **To fire a callback function after signing in, use the `on()` method.**
               * **To learn more about the `on()` method:**
               * @see {@link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#on}
               *
               * @param {SignInConfig} config - The sign-in config.
               * The `SignInConfig` object has these two attributes in addition to any custom key-value pairs.
               *  1. fidp - Specifies the FIDP parameter that is used to take the user directly to an IdP login page.
               *  2. forceInit: Specifies if the OIDC Provider Meta Data should be loaded again from the `well-known`
               * endpoint.
               *  3. Any other parameters that should be appended to the authorization request.
               *
               * @return {Promise<BasicUserInfo>} - A promise that resolves with the user information.
               *
               * @example
               * ```
               * auth.signIn();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#signin
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method initiates the sign-out flow.
               *
               * **To fire a callback function after signing out, use the `on()` method.**
               * **To learn more about the `on()` method:**
               * @see {@link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#on}
               *
               * @return {Promise<boolean>} - Returns a promise that resolves with `true` if sign out is successful.
               *
               * @example
               * ```
               * auth.signOut();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#signout
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method refreshes the access token and returns a Promise that resolves with the new access
               * token and other relevant data.
               *
               * @return {Promise<TokenResponse>} - A Promise that resolves with the token response.
               *
               * @example
               * ```
               * auth.refreshAccessToken().then((response)=>{
               *  // console.log(response);
               * }).catch((error)=>{
               *  // console.error(error);
               * });
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#refreshAccessToken
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method refreshes the access token.
               *
               * @return {TokenResponseInterface} - A Promise that resolves with an object containing
               * information about the refreshed access token.
               *
               * @example
               * ```
               * auth.refreshToken().then((response)=>{
               *      // console.log(response);
               * }).catch((error)=>{
               *      // console.error(error);
               * });
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#refreshtoken
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method return a Promise that resolves with the access token.
               *
               * **This method will not return the access token if the storage type is set to `webWorker`.**
               *
               * @return {Promise<string>} - A Promise that resolves with the access token.
               *
               * @example
               * ```
               *   auth.getAccessToken().then((token) => {
               *       // console.log(token);
               *   }).catch((error) => {
               *       // console.error(error);
               *   });
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getaccesstoken
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method return the ID token.
               *
               * @return {Promise<string>} - A Promise that resolves with the ID token.
               *
               * @example
               * ```
               * const idToken = await auth.getIDToken();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getIDToken
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method returns OIDC service endpoints that are fetched from the `.well-known` endpoint.
               *
               * @return {Promise<OIDCEndpoints>} - A Promise that resolves with an object containing the OIDC service endpoints.
               *
               * @example
               * ```
               * const endpoints = await auth.getOIDCServiceEndpoints();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getOIDCServiceEndpoints
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method returns a Promise that resolves with an object containing the service endpoints.
               *
               * @return {Promise<ServiceResourcesType} - A Promise that resolves with an object containing the service endpoints.
               *
               * @example
               * ```
               * auth.getServiceEndpoints().then((endpoints) => {
               *      // console.log(endpoints);
               *  }).error((error) => {
               *      // console.error(error);
               *  });
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getserviceendpoints
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method returns a Promise that resolves with the basic user information obtained from the ID token.
               *
               * @return {Promise<BasicUserInfo>} - A promise that resolves with the user information.
               *
               * @example
               * ```
               * auth.getBasicUserInfo().then((response) => {
               *    // console.log(response);
               * }).catch((error) => {
               *    // console.error(error);
               * });
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getuserinfo
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method returns if the sign-out is successful or not.
               *
               * @param {string} signOutRedirectUrl - The URL to which the user has been redirected to after signing-out.
               *
               * **The server appends path parameters to the `signOutRedirectURL` and these path parameters
               *  are required for this method to function.**
               *
               * @return {boolean} - `true` if successful, `false` otherwise.
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#isSignOutSuccessful
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method returns if the user is authenticated or not.
               *
               * @return {Promise<boolean>} - A Promise that resolves with `true` if the user is authenticated, `false` otherwise.
               *
               * @example
               * ```
               * await auth.isAuthenticated();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#isAuthenticated
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method returns the ID token.
               *
               * @return {Promise<string>} - A Promise that resolves with the ID token.
               *
               * @example
               * ```
               * const idToken = await auth.getIDToken();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getIDToken
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method returns the PKCE code generated during the generation of the authentication URL.
               *
               * @return {Promise<string>} - A Promise that resolves with the PKCE code.
               *
               * @example
               * ```
               * const pkce = await getPKCECode();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getPKCECode
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method returns the `DataLayer` object that allows you to access authentication data.
               *
               * @return {DataLayer} - The `DataLayer` object.
               *
               * @example
               * ```
               * const data = auth.getDataLayer();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getDataLayer
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method returns the access token.
               *
               * @return {Promise<string>} - A Promise that resolves with the access token.
               *
               * @example
               * ```
               * const accessToken = await auth.getAccessToken();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getAccessToken
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method returns the basic user information obtained from the ID token.
               *
               * @return {Promise<BasicUserInfo>} - A Promise that resolves with an object containing the basic user information.
               *
               * @example
               * ```
               * const userInfo = await auth.getBasicUserInfo();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getBasicUserInfo
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method returns the instance of the singleton class.
               *
               * @return {AsgardeoSPAClient} - Returns the instance of the singleton class.
               *
               * @example
               * ```
               * const auth = AsgardeoSPAClient.getInstance();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#getinstance
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method returns the sign-out URL.
               *
               * **This doesn't clear the authentication data.**
               *
               * @return {Promise<string>} - A Promise that resolves with the sign-out URL.
               *
               * @example
               * ```
               * const signOutUrl = await auth.getSignOutURL();
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#getSignOutURL
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method revokes the access token.
               *
               * **This method also clears the authentication data.**
               *
               * @return {Promise<AxiosResponse>} - A Promise that returns the response of the revoke-access-token request.
               *
               * @example
               * ```
               * auth.revokeAccessToken().then((response)=>{
               *  // console.log(response);
               * }).catch((error)=>{
               *  // console.error(error);
               * });
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#revokeAccessToken
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method sends a custom-grant request and returns a Promise that resolves with the response
               * depending on the config passed.
               *
               * @param {CustomGrantConfig} config - A config object containing the custom grant configurations.
               *
               * @return {Promise<TokenResponse | AxiosResponse>} - A Promise that resolves with the response depending
               * on your configurations.
               *
               * @example
               * ```
               * const config = {
               *   attachToken: false,
               *   data: {
               *       client_id: "{{clientID}}",
               *       grant_type: "account_switch",
               *       scope: "{{scope}}",
               *       token: "{{token}}",
               *   },
               *   id: "account-switch",
               *   returnResponse: true,
               *   returnsSession: true,
               *   signInRequired: true
               * }
               *
               * auth.requestCustomGrant(config).then((response)=>{
               *  // console.log(response);
               * }).catch((error)=>{
               *  // console.error(error);
               * });
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#requestCustomGrant
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method sends an API request to a protected endpoint.
               * The access token is automatically attached to the header of the request.
               * This is the only way by which protected endpoints can be accessed
               * when the web worker is used to store session information.
               *
               * @param {HttpRequestConfig} config -  The config object containing attributes necessary to send a request.
               *
               * @return {Promise<HttpResponse>} - Returns a Promise that resolves with the response to the request.
               *
               * @example
               * ```
               *  const requestConfig = {
               *      headers: {
               *          "Accept": "application/json",
               *          "Access-Control-Allow-Origin": "https://localhost:9443/myaccount",
               *          "Content-Type": "application/scim+json"
               *      },
               *      method: "GET",
               *      url: "https://localhost:9443/scim2/me"
               *  };
               *
               *  return auth.httpRequest(requestConfig)
               *     .then((response) => {
               *           // console.log(response);
               *      })
               *      .catch((error) => {
               *           // console.error(error);
               *      });
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#httprequest
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method sends multiple API requests to a protected endpoint.
               * The access token is automatically attached to the header of the request.
               * This is the only way by which multiple requests can be sent to protected endpoints
               * when the web worker is used to store session information.
               *
               * @param {HttpRequestConfig[]} config -  The config object containing attributes necessary to send a request.
               *
               * @return {Promise<HttpResponse[]>} - Returns a Promise that resolves with the responses to the requests.
               *
               * @example
               * ```
               *  const requestConfig = {
               *      headers: {
               *          "Accept": "application/json",
               *          "Content-Type": "application/scim+json"
               *      },
               *      method: "GET",
               *      url: "https://localhost:9443/scim2/me"
               *  };
               *
               *  const requestConfig2 = {
               *      headers: {
               *          "Accept": "application/json",
               *          "Content-Type": "application/scim+json"
               *      },
               *      method: "GET",
               *      url: "https://localhost:9443/scim2/me"
               *  };
               *
               *  return auth.httpRequest([requestConfig, requestConfig2])
               *     .then((responses) => {
               *           response.forEach((response)=>{
               *              // console.log(response);
               *           });
               *      })
               *      .catch((error) => {
               *           // console.error(error);
               *      });
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master#httprequestall
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method sets the PKCE code to the data store.
               *
               * @param {string} pkce - The PKCE code.
               *
               * @example
               * ```
               * await auth.setPKCECode("pkce_code")
               * ```
               *
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#setPKCECode
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method specifies if the user is authenticated or not.
               *
               * @return {Promise<boolean>} - A Promise that resolves with `true` if the user is authenticated.
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
               * This method updates the configuration that was passed into the constructor when instantiating this class.
               *
               * @param {Partial<AuthClientConfig<T>>} config - A config object to update the SDK configurations with.
               *
               * @example
               * ```
               * const config = {
               *     signInRedirectURL: "http://localhost:3000/sign-in",
               *     clientID: "client ID",
               *     serverOrigin: "https://localhost:9443"
               * }
               *
               * await auth.updateConfig(config);
               * ```
               * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#updateConfig
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This method updates the configuration that was passed into the constructor when instantiating this class.
               *
               * @param {Partial<AuthClientConfig<T>>} config - A config object to update the SDK configurations with.
               *
               * @example
               * ```
               * const config = {
               *     signInRedirectURL: "http://localhost:3000/sign-in",
               *     clientID: "client ID",
               *     serverOrigin: "https://localhost:9443"
               * }
               * const auth.updateConfig(config);
               * ```
               * @link https://github.com/asgardeo/asgardeo-auth-spa-sdk/tree/master/lib#updateConfig
               *
               * @memberof AsgardeoAuthClient
               *
               * @preserve
               */

/**
               * This methods returns the Axios http client.
               *
               * @return {HttpClientInstance} - The Axios HTTP client.
               *
               * @memberof AsgardeoSPAClient
               *
               * @preserve
               */

/**
             * This is the constructor method that returns an instance of the .
             *
             * @param {Store} store - The store object.
             *
             * @example
             * ```
             * const _store: Store = new DataStore();
             * const auth = new AsgardeoAuthClient<CustomClientConfig>(_store);
             * ```
             *
             * @link https://github.com/asgardeo/asgardeo-auth-js-sdk/tree/master#constructor
             * @preserve
             */

/**
 * A better abstraction over CSS.
 *
 * @copyright Oleg Isonen (Slobodskoi) / Isonen 2014-present
 * @website https://github.com/cssinjs/jss
 * @license MIT
 */

/** @license React v0.16.2
 * scheduler.production.min.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

/** @license React v16.10.1
 * react-dom.production.min.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

/** @license React v16.13.1
 * react-is.production.min.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

/** @license React v16.14.0
 * react-jsx-runtime.production.min.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

/** @license React v16.14.0
 * react.production.min.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

/** @license React v17.0.1
 * react-is.production.min.js
 *
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
