Source: books android, android eclipse, android sdk among other things
Today in this tutorial or development guide I will show you some things or aspects about optmizaciones our terminal I must clarify that this tutorial oh information concerning this subject is to enhance the development of script in our terminals because personally eh oh seen many users and developers make scripts only make the truth terminals are put in some slow and somewhat confusing lines are flat oh that has nothing to do with the terminal
Disclaimer: There is no universal script as users postenado gone on topics I will talk about it here
Let's start
1.- host file: sometimes this file is in the user script optimizations oh android developers share with the community, this file according to the source cited in
wikipedia host according to information this file should not be in the script as optmizacion only used to block the advertising.
2.- sqlite3 file, this file is located in the eclipse program that is used to develop the different collaboration tools android SDK to your development as api respactiva know if this file is being useful at ou terminal applications?
3.-sysinit file, this file so you do is anchor the kernel command files but according to sony xperia developing this should not be so put an example of what is added to the kernel command
example kernel:
export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin
export LD_LIBRARY_PATH /vendor/lib:/system/lib
export ANDROID_BOOTLOGO 1
export ANDROID_ROOT /system
export ANDROID_ASSETS /system/app
export ANDROID_DATA /data
export ANDROID_STORAGE /storage
export ASEC_MOUNTPOINT /mnt/asec
export LOOP_MOUNTPOINT /mnt/obb
sysinit example:
export PATH=/sbin:/system/sbin:/system/bin:/system/xbin
/system/bin/logwrapper run-parts /system/etc/init.d
as you can see the codes of the lines are almost the same but this change is done in the file should be done when the kernel is modified sysinit file this should not bring those lines for a stock kernel
4.- and so a variety of files that can be found with erroneous command lines as lel source code of each terminal.
5.- is also very common to see the error of Internet optimization lets be honest in each terminal speeds loading and unloading of data in each terminal is different there is no universaol as many believe
for example I have this speed Internet:
setprop net.tcp.buffersize.default 4096,87380,110208,4096,16384,110208
setprop net.tcp.buffersize.wifi 524288,1048576,2097152,262144,524288,1048576
setprop net.tcp.buffersize.lte 524288,1048576,2097152,262144,524288,1048576
setprop net.tcp.buffersize.umts 4094,87380,110208,4096,16384,110208
setprop net.tcp.buffersize.hspa 4094,87380,1220608,4096,16384,1220608
setprop net.tcp.buffersize.hsupa 4094,87380,1220608,4096,16384,1220608
setprop net.tcp.buffersize.hsdpa 4094,87380,1220608,4096,16384,1220608
setprop net.tcp.buffersize.hspap 4094,87380,1220608,4096,16384,1220608
setprop net.tcp.buffersize.edge 4093,26280,35040,4096,16384,35040
setprop net.tcp.buffersize.gprs 4092,8760,11680,4096,8760,11680
setprop net.tcp.buffersize.evdo 4094,87380,262144,4096,16384,262144
(Developer should change these values ??by higher to improve internet speed... in conjunction with the mediaserver file located in the path /system/bin ).
as you can see and if you check with optmizacion that you have on file is build.prop is not the same as those had already mentioned are different concepts
to develop their own optimizations for terminal since so there has been no universal nigun guided?
for this we need the following application Kernel Tuner **root** and with this application you can now begin to develop their script and conf have seen maybe true if so delete them and keep editing yours oh high with low values ??according to your criteria and together with its terminal
if you think that the issue that I should give it a bad vistaso to another terminal and see if it contains the same values ??that we present in the screenshot
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
conf file construction
screenshot in 4 different options are shown:
1.-kernel
2.-vm
3.-fs
4.-net
I will put you one example:
my file was called sysctl kernel.conf
'll post here everything related to the kernel parameter can not amass other kernel parameters outside this can be seen in progracion llamese java, html for instance
sysctl kernel.conf my file will have something like this:
kernel.auto_msgmni = 1
modifying this value would read
kernel.auto_msgmni = 10
and so on with the others I hope they serve this because if down the script certainly has very different terminals common mistakes.
What?
Sent from above using xparent tapatalk blue
Sad to see tutorial without Readability.
Not sure what it's about...
maybe spam !
Related
Using various command lines tools of Linux can make working very easy for developers. Here are a few tricks than can really help out.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
1. grep
I cannot emphasize on this tool more, this utility is your one stop destination for searching anything. Want to look for all .so files in a folder? Type in
Code:
ls | grep .so
Or maybe a '.so' (library) file that starts with 'mtk' (e.g. mtkOmxVenc.so)
Code:
ls | grep mtk*.so
Or what if a '.so' (library) file that has 'Omx' somewhere in the name
Code:
ls | grep *Omx*.so
Awesome! Now that pole like character is simply called "the pipe" it pipes the output to another program, in this case grep. Now grep -s case-sensitive. To make it case insensitive, just use the -i flag with it. Now try looking for all .mp3 files in a folder!
What if you were in a folder with 1000s of files and were looking for a file with the text 'I love XDA Developers' in it? Pretty simple. Make sure your current directory is where you want to search, and type in
Code:
grep -R 'I love XDA Developers'
Great! You are becoming a command line genius! Now let's try some real world stuff. Say you want a rough idea on how many libraries or executables are somehow linked to 'libmediaservice.so'. It can be necessary when you get dlopen errors. Can you guess how to get an approximate result? Try to do it before looking any furter. Got it? 3... 2... 1... and the answer is
Code:
grep -R libmediaservice.so
Now was that too hard? Of course not!
2. head and tail
Quickly view the first few or last few lines of a text file with head or tail subsequently.
Code:
head logfile.log
Code:
tail logfile.log
3. sed
sed, short for stream editor can do tonnes of things, for now let's focus on searching and replacing. Say, we need to replace the text 'libxda.so' by 'libxdadev.so' in all the files within this current directory. We would simply command,
Code:
ls -1 | xargs sed -i 's/libxda.so/libxdadev.so/g'
(The -1 flag makes sure that ls ouputs in just ONE row, there is a better way to do this with find, we'll check that later)
4. find
This is the hypercharged version of grep; as the name implies, you can find stuff with it. For example, say you want to find all the folders under the current folder recursively.
Code:
find . -type d
[tip: . (dot) refers to the current folder]
you want to find all the files under the current folder recursively.
Code:
find . -type f
That was easy, but not too much useful. Let's try something more. Okay, here's a fun thing to do, we want to find empty files in the current folder whose name starts with 'xda', has executable permissions and is owned by 'tuxboy'.
Code:
find . -type f -name xda* -empty -executable -user tuxboy
Whoa! That was big! This baby is capable of doing so much more. Here are a few more options, self explanatory.
Code:
-empty
-fstype TYPE
-group NAME
-name PATTERN -newer FILE
-nouser
-nogroup
-path PATTERN
-perm [+-]MODE
-regex PATTERN
-readable -writable -executable
-wholename PATTERN
-size N[bcwkMG]
-type [bcdpflsD]
-user NAME
5. wc
This is the mother of all counters. You can count bytes, characters or lines in files with this tool. Want to know how many characters are there in a file?
Code:
wc -m filename.txt
Or, how many words are there in a file?
Code:
wc -w filename.txt
Or, how many lines are there in a file?
Code:
wc -l filename.txt
Or, the length of the longest line in a file?
Code:
wc -L filename.txt
Cool eh?
6. man and --help/-help/-h
Every command usually comes with some documentation. Say you want to get a short documentation on how to use the 'ls' command, at least one of the following commands should give you answers.
Code:
ls --help
Code:
ls -h
Code:
ls -help
If you want comprehensive documentation. Man is there for you!
Code:
man ls
Hope this will help you. If you have learned something new, hit Thanks!
This is beautiful, thank you :angel:.
We need:
-debian chroot tarball or raspberry pi image (Download debian arm64 tarball)
-Magisk
-busybox (Magisk module avaible)
-GNU/Linux(for adb shell)
-Android terminal emulator (Download))
1- download tarball or image on computer
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
2-push file to /sdcard/ directory
3-Open android shell. Move file to /data/ and unpack file
4- Move rootfs to /data/linux
5- now go phone and run mount.sh in terminal (AOSP terminal has issue so We need another terminal)
6- If phone doesn't have busybox You must use busybox magisk module or any busybox installer.
7-after that reboot phone and run mount.sh in terminal
8-run chroot.sh in terminal and check update
9- done
Notes:
-if you want to install gui, You can install vnc server and connect in android vnc viewers.
-You can only install arm64/arm architecture rootfs.
-if you access system directory in rootfs, You can create /data/linux/system/
-if apt doesnt have internet access, edit /data/linux/etc/passwd file and replace _apt users UID to 0
-If you have any questions, You tell me
Mount.sh
Code:
#!/bin/sh
busybox mount --bind /dev dev
busybox mount --bind /sys sys
busybox mount --bind /proc proc
busybox mount --bind /data/cache tmp
busybox mount --bind /dev/pts dev/pts
busybox mount --bind /system system #optional
busybox mount --bind /sdcard root
Chroot.sh
Code:
#!/bin/sh
export TERM=linux
export TMPDIR=/tmp
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
export USER=root
export HOME=/root
/system/bin/chroot . /bin/bash
Is chroot support present in stock kernel?
kvsjxd said:
Is chroot support present in stock kernel?
Click to expand...
Click to collapse
Yes. Just root needed.
An alternative method to do a ubuntu/debian chroot would be to install Termux and just follow the instructions on the termux-ubuntu repository on Github.
Basically you download a script and it installs everything for you.
The readme file of the repo follows:
A script to install Ubuntu chroot in Termux
You need to install wget and proot in Termux before using this script.
Code:
pkg install wget proot
The script will make its files in the current directory. So if you want your Ubuntu-filesystem at a particular location switch to that folder first and then call the script with it's relative path. Example:
Code:
mkdir -p ~/jails/ubuntu
cd ~/jails/ubuntu
wget https://raw.githubusercontent.com/Neo-Oli/termux-ubuntu/master/ubuntu.sh
bash ubuntu.sh
After running it you can run "start-ubuntu.sh" to switch into your ubuntu
Click to expand...
Click to collapse
Hi folks,
I've created a PowerShell script which will install or update Android Platform Tools to the latest version. It will also add the install path to Windows Environment Variables, which will make you able to type "adb" or "fastboot" in CMD from anywhere in Windows.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
ADB and Fastboot from anywhere.
Warning / Disclaimer
If this script does any harm or damage, I'm not responsible.
This project is very much a hobby project.
No guarantees are made.
You are responsible for what you do to your system.
License
I chose MIT license. You are free to use and reuse this code, but please point to the source (me) if you redestribute it.
Features
Installs latest Android Platform Tools (ADB & Fastboot).
Updates currently installed Android Platform Tools if newer version is available.
Adds Install Path to Windows Environment Variables, System Wide or Current User (controllable by boolean).
Issues of Feature Request
Please comment in the thread if you find any issues or have feature requests.
I won't guarantee fixes or new features implemented in any timely manner.
Usage
Download script from GitHub.
View as RAW.
Copy everything over to PowerShell ISE, Notepad++ or similar.
Save as "AndroidPlatformToolsUpdater.ps1".
Edit settings to your liking.
Run script as administrator.
Download
https://github.com/o-l-a-v/PowerShell-Projects/blob/master/AndroidPlatformToolsUpdater
Reserved for Changelogs
Thanks looks promising will try it out this evening
Thank you o-1-a-v!
First run I got:
Code:
Installed version is up to date (v0.0.0.0).
Add-AndroidPlatformToolsToEnvironmentVariables : Cannot validate argument on parameter 'PathDirAndroidPlatformTools'. The "[bool]$(Test-Path -Path
$_ -ErrorAction 'SilentlyContinue')" validation script for the argument with value "C:\Program Files (x86)\Android Platform Tools" did not return
a result of True. Determine why the validation script failed, and then try the command again.
At C:\Users\Xxx\Documents\AndroidPlatformToolsUpdater.ps1:335 char:104
+ ... les -PathDirAndroidPlatformTools $PathDirAndroidPlatformTools -System ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Add-AndroidPlat...onmentVariables], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Add-AndroidPlatformToolsToEnvironmentVariables
I created the "Android Platform Tools" dir, and then got:
Code:
Installed version is up to date (v0.0.0.0).
Checking and eventually adding Android Platform Tools to Current User Environment Variables. Success? True.
Running Windows 10.
andacro said:
Thank you o-1-a-v!
First run I got:
Code:
Installed version is up to date (v0.0.0.0).
Add-AndroidPlatformToolsToEnvironmentVariables : Cannot validate argument on parameter 'PathDirAndroidPlatformTools'. The "[bool]$(Test-Path -Path
$_ -ErrorAction 'SilentlyContinue')" validation script for the argument with value "C:\Program Files (x86)\Android Platform Tools" did not return
a result of True. Determine why the validation script failed, and then try the command again.
At C:\Users\Xxx\Documents\AndroidPlatformToolsUpdater.ps1:335 char:104
+ ... les -PathDirAndroidPlatformTools $PathDirAndroidPlatformTools -System ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Add-AndroidPlat...onmentVariables], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Add-AndroidPlatformToolsToEnvironmentVariables
I created the "Android Platform Tools" dir, and then got:
Code:
Installed version is up to date (v0.0.0.0).
Checking and eventually adding Android Platform Tools to Current User Environment Variables. Success? True.
Running Windows 10.
Click to expand...
Click to collapse
Thanks for feedback, I'll look into it
Updated the tool a bit today. Found more showstopper bugs. But think it's at least usefull now.
https://github.com/o-l-a-v/PowerShell-Projects/tree/master/AndroidPlatformToolsUpdater
Script updated with better logic to detect available version vs. installed version.
https://github.com/o-l-a-v/PowerShell-Projects/tree/master/AndroidPlatformToolsUpdater
Thanks for this bro
Made a script that can install ADB drivers on Windows. Not thoroughly tested, but seems to work.
C#:
#Requires -RunAsAdministrator
#Requires -Version 5.1
<#
.SYNOPSIS
Downloads and installs Google ADB drivers for Windows.
.DESCRIPTION
Downloads and installs Google ADB drivers for Windows.
* Currently there is no logic to check installed version vs. what's available.
* If already installed, running the script will just install the newest available driver again.
.NOTES
# About the script
Author: Olav Rønnestad Birkeland | github.com/o-l-a-v
Created: 220318
Modified: 220318
# Resources
* [Google ADB Drivers](https://developer.android.com/studio/run/win-usb)
* [PnPUtil return values](https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/pnputil-return-values)
.EXAMPLE
& $psISE.CurrentFile.FullPath
#>
# Input parameters
[OutputType($null)]
Param()
# Assets
$Uri = [string] 'https://dl-ssl.google.com/android/repository/latest_usb_driver_windows.zip'
$DownloadPath = [string] '{0}\{1}' -f $env:TEMP, $Uri.Split('/')[-1]
$ExtractDir = [string] $DownloadPath.Replace('.zip','')
$InfFileName = [string] 'android_winusb.inf'
# Download
Write-Output -InputObject '# Download'
if ([System.IO.File]::Exists($DownloadPath)) {
$null = [System.IO.File]::Delete($DownloadPath)
}
$null = [System.Net.WebClient]::new().DownloadFile(
$Uri,
$DownloadPath
)
Write-Output -InputObject ('$? = "{0}", $LASTEXITCODE = "{1}".' -f $?.ToString(), $LASTEXITCODE)
# Extract
Write-Output -InputObject '# Extract'
if ([System.IO.Directory]::Exists($ExtractDir)) {
$null = [System.IO.Directory]::Delete($ExtractDir,$true)
}
$null = Expand-Archive -Path $DownloadPath -DestinationPath $ExtractDir
Write-Output -InputObject ('$? = "{0}", $LASTEXITCODE = "{1}".' -f $?.ToString(), $LASTEXITCODE)
# Install .INF
Write-Output -InputObject '# Install .INF'
$InfFilePath = [string](Get-ChildItem -Path $ExtractDir -Filter $InfFileName -Recurse -File | Select-Object -ExpandProperty 'FullName')
$null = cmd /c ('pnputil.exe /add-driver "{0}" /install' -f $InfFilePath)
Write-Output -InputObject ('$? = "{0}", $LASTEXITCODE = "{1}".' -f $?.ToString(), $LASTEXITCODE)
# Check results
Write-Output -InputObject '# Checking if driver is found after install'
$InstalledDriver = [array](
Get-WindowsDriver -Online -All | Where-Object -FilterScript {$_.'ClassName' -eq 'AndroidUsbDeviceClass'}
)
if ($InstalledDriver.'Count' -ge 1) {
Write-Output -InputObject 'Found the driver.'
Exit 0
}
else {
Throw 'Did not find the driver.'
Exit 1
}
Maybe I'll add the to the main script later.
WhatsApp is set to receive the much-awaited dark mode on desktop platforms. According to a recent report by WABetaInfo, WhatsApp Web and WhatsApp for PC/Mac are currently being tested with a dark theme that paints the main screen and side panel in varying shades of dark grey. In recent builds the code for dark mode is available but there's no official option to enable it. So here's how can you enable it yourself.
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Enable dark mode in WhatsApp Desktop version of MacOS (Although it must be similar in windows client too)
PREREQUISITES
What things you need to install before starting up WhatsApp Desktop Application Homebrew Nodejs asar node module Installing section is just to install prerequisites if you already don't have them. Otherwise skip to Applying Dark Mode.
INSTALLING
Follow these Steps:
You need to install Whatsapp Desktop on your Mac(Download from OFFICIAL WEBSITE is suggested rather than app store version).
Open Terminal and Install Homebrew
Code:
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
This will install Homebrew on your Mac. To check the version type the following command.
Code:
$ brew -v
Install Nodejs using Homebrew
Code:
$ brew install node
If everything installed successfully then you can type in the following command in the terminal to check the Node and NPM version.
Code:
$ node -v
$ npm -v
Install asar node module globally
Code:
$ npm install -g asar
APPLYING DARK MODE
Go into the app’s directory and create a directory for our working
Code:
$ cd /Applications/WhatsApp.app/Contents/Resources
$ mkdir temp-darkmode
Unpack the app.asar file in the above directory using asar
Code:
$ asar extract app.asar temp-darkmode
Open directory temp-darkmode and insert the code
Code:
cd temp-darkmode
open index.html and edit
Code:
nano index.html
find body
HTML:
<body class="native darwin">
replace it with code below
HTML:
<body class="native darwin dark">
save the file, hit ctrl+x type y and enter
Pack the app.asar file,Go into the app’s directory
Code:
$ cd /Applications/WhatsApp.app/Contents/Resources
to pack type
Code:
$ sudo asar pack temp-darkmode app.asar
You are done
Source: Github
Hello
I had created a shell script for myself (just a trial lol) to extract the boot image from system. the script goes somewhat like this:
#!/system/bin/sh
#getting superuser rights with su command
su
#checking if we have su permission or not
if [ "$UID" -eq 0 ]
then
echo "you have root so you can easily backup boot image"
sleep 2
else
echo "you don't have root so you can't backup boot image using this script"
fi
#going to root directory for easy access to internal storage
cd /
#changing directory to internal storage to create folder for backup
cd sdcard
#creating folder for backup
mkdir ImageBackup
cd ImageBackup
mkdir Boot
#finally using dd command to get boot image from system
dd if=/dev/block/by-name/boot of=/sdcard/ImageBackup/Boot/boot.img
cd Boot
ls
echo "Your Boot image has been succesfully backed up and is stored in ImageBackup/Boot in your internal storage"
Click to expand...
Click to collapse
i use adb shell and then "su" command to run the script, its located in /data/local/tmp and i run it using "./boot" ("boot" is the file name). i dont get any output. as soon as i type "exit" the script starts running (screenshot attached).
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Code:
adb shell
opens an Android Terminal session - wherein shell commands like su can get applied - what finally gets closed with
Code:
exit
Take note that applying su doesn't output anything if processing it was successfull.
xXx yYy said:
Code:
adb shell
opens an Android Terminal session - wherein shell commands like su can get applied - what finally gets closed with
Code:
exit
Take note that applying su doesn't output anything if processing it was successfull.
Click to expand...
Click to collapse
I know that using commands like "su" dont give any output. Im telling that when i use "./boot" i.e. run the script, the script wont run until i use "exit" command. See in the screenshot
Again:
As soon as you execute adb shell in a Windows batch script without passing any arguments, a remote terminal session is opened in Android, which has to be closed with exit to continue with the next statement in the batch script.
In your case you have to code
Code:
adb shell "su"
instead of
Code:
adb shell
su
exit
what is senseless crap, IMO, because it simply opens a terminal session, establishes within this an elevated user ( AKA root ) and then immmediately closes this terminal session.