adb and fastboot extracted - Android Q&A, Help & Troubleshooting

I have extracted adb and fastboot from the AOSP tree. Now I can compile it anywhere. So I can administrate one Android device from an other over USB On-The-Go. The dependencies are only zlib and openssl.
Download:
http://x-alina.name/downloads/android/utils/

Related

Ubuntu ADB Device List Empty

Has anyone successfully connected to their device via adb in Ubuntu?
Whenever I do
./adb devices
Click to expand...
Click to collapse
it shows me an empty list of devices.
I had originally set it up for my G1. Now that I try it with the Vibrant, it does not work.
I modified 51-android.rules file and entered this:
SUBSYSTEM=="usb", SYSFS{idVendor}=="04e8", MODE="0666"
Click to expand...
Click to collapse
The code is bold was taken after I did the lsusb command.
I have connected with Ubuntu , which build of Ubuntu are you using? I am on Lucid (10.04) and it connected easily the first time.
srqt said:
I have connected with Ubuntu , which build of Ubuntu are you using? I am on Lucid (10.04) and it connected easily the first time.
Click to expand...
Click to collapse
I am also running 10.04
Can you please do me a favor and tell me what files the following folder has:
/etc/udev/rules.d
I'm interested in knowing if it has 50-android.rules and/or 51-android.rules and what are the contents of them.
Thanks!
dublued said:
I am also running 10.04
Can you please do me a favor and tell me what files the following folder has:
/etc/udev/rules.d
I'm interested in knowing if it has 50-android.rules and/or 51-android.rules and what are the contents of them.
Thanks!
Click to expand...
Click to collapse
It has 51-android.rules with the following contents
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
Click to expand...
Click to collapse
Still showing up empty, thanks though.
This is what I used in Ubuntu 10.04 x86 and 9.04 x32
First download my zip file
Put the 3 rules files in your /etc/udev/rules.d folder (sudo nautilus /etc/udev/rules.d (This will open the folder with root access from the terminal))
Then right click on each file and go to properties
From there click on the permissions tab and make sure all files are checked to allow exe then change the owner from root to your username then close.
Then put the adb file in your android sdk/tools folder and replace the original one.
Then restart your computer
Once restarted make sure your phone is in debugging mode plug it into the usb and type sudo ./adb devices in the terminal and your phone should show up.
thanks the3dman13, that did the trick!
i'm curious thought, why did I need to replace the adb file?
It seems both adb's work. Not sure but the contents of the 3 rules files are the same which may mean you only need one of them.
this works for me - samsung vibrant
$ uname -a
desktop 2.6.35-22-generic #33-Ubuntu SMP UTC 2010 x86_64 GNU/Linux
$ cat /etc/issue
Ubuntu maverick (development branch) \n \l
$ cat /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", SYSFS{idVendor}=="04e8", MODE="0666"
$ sudo chmod a+rx /etc/udev/rules.d/51-android.rule
$ sudo restart udev
$ adb kill-server
$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
emulator-5554 device
T959xxxxxxxx device
Never had to do any of this... all I have to do every once in a while is:
Make sure debugging is enabled on the phone
Plug in the phone via USB to the computer
Bring up a terminal in the tools folder
Run 'sudo ./adb kill-server'
Then run 'sudo ./adb start-server'
Run './adb devices' (add sudo if necessary but it isn't for me at this point)
still no luk
ive tried every method on this page
and none works
what am i doing wrong
or what must i do to debug/correct this problem?
I had the same issue with a fresh install of 10.04. I was finally able to get ADB to recognize the device by booting into the recovery menu. After it recognized it once, ADB continued to recognize the phone even when it was on.
testdev said:
$ uname -a
desktop 2.6.35-22-generic #33-Ubuntu SMP UTC 2010 x86_64 GNU/Linux
$ cat /etc/issue
Ubuntu maverick (development branch) \n \l
$ cat /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", SYSFS{idVendor}=="04e8", MODE="0666"
$ sudo chmod a+rx /etc/udev/rules.d/51-android.rule
$ sudo restart udev
$ adb kill-server
$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
emulator-5554 device
T959xxxxxxxx device
Click to expand...
Click to collapse
This worked
Try this
puccaso said:
ive tried every method on this page
and none works
what am i doing wrong
or what must i do to debug/correct this problem?
Click to expand...
Click to collapse
You might try this: sudo tools/android update sdk --no-ui
As written in android-sdk-linux read me file:
Welcome to the Android SDK!
The Android SDK archive initially contains only the basic SDK tools. It does
not contain an Android platform or any third-party libraries. In fact, it
doesn't even have all the tools you need to develop an application.
In order to start developing applications, you must install the Platform-tools
and at least one version of the Android platform, using the SDK Manager.
Platform-tools contains build tools that are periodically updated to support new
features in the Android platform (which is why they are separate from basic
SDK tools), including adb, dexdump, and others.
To install Platform-tools, Android platforms and other add-ons, you must
have an Internet connection, so if you plan to use the SDK while
offline, please make sure to download the necessary components while online.
To start the SDK Manager, please execute the program "android".
From the command-line you can also directly trigger an update by
executing:
tools/android update sdk --no-ui
joshuapurcell said:
Never had to do any of this... all I have to do every once in a while is:
Make sure debugging is enabled on the phone
Plug in the phone via USB to the computer
Bring up a terminal in the tools folder
Run 'sudo ./adb kill-server'
Then run 'sudo ./adb start-server'
Run './adb devices' (add sudo if necessary but it isn't for me at this point)
Click to expand...
Click to collapse
adb:command not found,but "adb devices"works.
---------- Post added at 12:58 PM ---------- Previous post was at 12:48 PM ----------
testdev said:
$ uname -a
desktop 2.6.35-22-generic #33-Ubuntu SMP UTC 2010 x86_64 GNU/Linux
$ cat /etc/issue
Ubuntu maverick (development branch) \n \l
$ cat /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", SYSFS{idVendor}=="04e8", MODE="0666"
$ sudo chmod a+rx /etc/udev/rules.d/51-android.rule
$ sudo restart udev
$ adb kill-server
$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
emulator-5554 device
T959xxxxxxxx device
Click to expand...
Click to collapse
it does't got 51 rules,how to add it in?
---------- Post added at 01:38 PM ---------- Previous post was at 12:58 PM ----------
the3dman said:
This is what I used in Ubuntu 10.04 x86 and 9.04 x32
First download my zip file
Put the 3 rules files in your /etc/udev/rules.d folder (sudo nautilus /etc/udev/rules.d (This will open the folder with root access from the terminal))
Then right click on each file and go to properties
From there click on the permissions tab and make sure all files are checked to allow exe then change the owner from root to your username then close.
Then put the adb file in your android sdk/tools folder and replace the original one.
Then restart your computer
Once restarted make sure your phone is in debugging mode plug it into the usb and type sudo ./adb devices in the terminal and your phone should show up.
Click to expand...
Click to collapse
testdev said:
$ uname -a
desktop 2.6.35-22-generic #33-Ubuntu SMP UTC 2010 x86_64 GNU/Linux
$ cat /etc/issue
Ubuntu maverick (development branch) \n \l
$ cat /etc/udev/rules.d/51-android.rules
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", SYSFS{idVendor}=="04e8", MODE="0666"
$ sudo chmod a+rx /etc/udev/rules.d/51-android.rule
$ sudo restart udev
$ adb kill-server
$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
emulator-5554 device
T959xxxxxxxx device
Click to expand...
Click to collapse
what i got has only one thing that does't match your post despite the list,that is i don't got "SUBSYSTEM=="usb", SYSFS{idVendor}=="04e8", MODE="0666"".the list is empty yet.does this infect to?
---------- Post added at 01:50 PM ---------- Previous post was at 01:38 PM ----------
the3dman said:
This is what I used in Ubuntu 10.04 x86 and 9.04 x32
First download my zip file
Put the 3 rules files in your /etc/udev/rules.d folder (sudo nautilus /etc/udev/rules.d (This will open the folder with root access from the terminal))
Then right click on each file and go to properties
From there click on the permissions tab and make sure all files are checked to allow exe then change the owner from root to your username then close.
Then put the adb file in your android sdk/tools folder and replace the original one.
Then restart your computer
Once restarted make sure your phone is in debugging mode plug it into the usb and type sudo ./adb devices in the terminal and your phone should show up.
Click to expand...
Click to collapse
I do it right what you post orderly,but the list is still empty.Could you help me alone?

[GUIDE] Enable ADB USB Drivers And Fastboot For Tegra Devices(windows, linux and mac)

1. Linux(easy)
2. Mac(easy)
3. Windows(medium)
________________________________________________________
1. Linux
You don't need any special drivers for SDK on linux(adb shell), but you don't get fastboot binary in SDK package. To set fastboot for linux follow instructions:
1. Download SDK(this isn't need if you want just fastboot)
http://developer.android.com/sdk/index.html
2. Download fastboot linux binary
http://www.mediafire.com/?ldlovlzi9mx3pbh
3. Copy it to your SDK directory
/path_to_your_SDK_directory/platform-tools
or
if you use fastboot often and you don't want to type cd /path_to_your_SDK_directory/platform-tools, ./fastboot <action> every time, you can do this:
1. Open Terminal and type:
sudo nautilus
to get file browser with root privileges.
2. Copy fastboot binary to /bin directory
Now, just open terminal and type fastboot <action> and that's it?
Copy this file to /etc/udev/rules.d
EDIT:
Code:
sudo chmod a+r /etc/udev/rules.d/51-android.rules
Easy?
______________________________________________________________
2. Mac
I don't have Mac, but it should be like for linux:
1. Download SDK(this isn't need if you want just fastboot)
http://developer.android.com/sdk/index.html
2. Download fastboot Mac binary:
http://www.mediafire.com/?kjozh1q5dyyqhn3
3. Copy it to your SDK directory
/path_to_your_SDK_directory/platform-tools
or
(I don't know that this is possible on Mac, try to change nautilus with Mac's default file browser?)If you use fastboot often and you don't want to type cd /path_to_your_SDK_directory/platform-tools, ./fastboot <action> every time, you can do this:
1. Open Terminal and type:
sudo nautilus
to get file browser with root privileges.
2. Copy fastboot binary to /bin directory
Now, just open terminal and type fastboot <action> and that's it? Easy?
______________________________________________________________
3. Windows
1. Download SDK
http://developer.android.com/sdk/index.html
2. Download Google USB Drivers from SDK Manager
3. After download, there're located in /path_to_your_SDK_directory/extras/google/usb_driver
4. Open android_winusb.inf and add this after [Google.NTx86] or [Google.NTamd64](32 bit or 64bit)
;NVIDIA Tegra
%SingleAdbInterface% = USB_Install, USB\VID_0955&PID_7000
%CompositeAdbInterface% = USB_Install, USB\VID_0955&PID_7100&MI_01
(Here is my modificated android_winusb.inf file here, but it's old and an updated version arrived from Google and it's compatible with 32bit and 64bit)
5. Open CMD from Start>Run and type:
echo 0x955 >> "%USERPROFILE%\.android\adb_usb.ini"
6. Reboot
==========================================================
7. On tablet go to Settings > Applications > Development and enable USB Debugging if it wasn't enabled and connect tablet with computer via USB.
8. Right-click on Computer and click Manage. Identify your device from the list(I think it's Tegra with board icon), right-click it and click Update Driver Software
9. Choose to browse your computer for driver software and then select to pick from a list device drivers on your computer
10. Choose to view all devices and click Have Disk
11. Browse to the google-usb_driver folder inside your Android SDK folder(/path_to_your_SDK_directory/extras/google/usb_driver) and select the android_winusb.inf file
12. If you get any warnings prompts telling you that the driver might not be compatible, just choose to continue installing
13. Once the drivers have been installed, you should be able to use ADB with your device
14. To confirm that your device is recognized, launch a Command Prompt window and enter these commands:
adb kill-server
adb start-server
adb devices
If you see your device name or a few numbers as the output under the list of devices, your device is now recognized by ADB
For fastboot you need to go to /path_to_your_SDK_directory/platform-tools in terminal(cd /path_to_your_SDK_directory/platform-tools) and type fastboot(.exe) <action> and before it to change ADB Interface to ADB
That's it, if you have some complaints, post them.
Bye!!!
EDIT: Changed android_winusb.inf file due error in it.
EDIT2:Changed android_winusb.inf file due error in it again.
echo 0x955 >> "%USERPROFILE%\.android\adb_usb.ini"
shut the cmd say something ? because when i write the command and push enter its just jump to another line and says nothing ???
No. You can go to that file("%USERPROFILE%\.android\adb_usb.ini") and manualy add 0x955 to it.
Sorry!
I cannot connect to this link:http://www.mediafire.com/?kjozh1q5dyyqhn3
Please do me a favor, send fastboot as an attachment to this mail address:
[email protected]
I'll try because I'm not at home, I went to my grand parents and I have really slow internet.
Hello guys I have a problem, the step 5. Open CMD from Start> Run and type:
echo 0x955>> "% USERPROFILE% \. Android \ adb_usb.ini"
I run this step but I open a txt file that says this:
Android # USB Vendor ID 3RD PARTY LIST - DO NOT EDIT.
# USE 'adb Android update' TO GENERATE.
USB Vendor ID # 1 FOR LINE.
0x955
I now do not understand where I write echo 0x955?
/documents_and_settings/[your user name]/.Android(hidden file)/adb_usb.ini
Sent from my Xoom using Tapatalk
Nice guide. Think you forgot the udev rule for Linux:
Create a file called /etc/udev/rules.d/51-android.rules containing:
Code:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0955", MODE="0666"
Without that Linux won't give you write permission to the device.
Ok, I'll add.
Sent from my IDEOS S7 Slim using XDA App
So when I want to use fastboot, I install the Android Bootloader Interface driver? Not the ADB interface driver?
Needless to say I haven't got fastboot working yet but ADB works. One other thing: If I manage to install a firmware and do a wipe and everything works; can it be that I would experiance better performance if I as well managed to to a full wipe with fastboot? I mean, can it flush things that CWM can't? I'm using the latest cyanogenmod (test version) from DerArtem, but I am a bit interested in trying the latest progress of honeycomb...
I have problems with interfaces. On one computer is ADB interface and on other is something else but I prefer linux for doing any job that's connected with android. In theory wiping should be same with fastboot and recovery but, again, I prefer fastboot because it's JUST erase all on data/cache/system partition and recovery might don't have support for other partition types as well as other problems, but I don't say that it can be different.
Thanks. I hope I continue to have a functioning cwm. If it breaks I will have to install Linux
ı do everything but when ı wrote adb devices nothing
Linux or Windows?
Jon2555 said:
Linux or Windows?
Click to expand...
Click to collapse
windows 7 x64
When the tablet is open in USB Debugging mode I can see my device adb devices list but when ı restart my tablet fastboot mode ı can't find
The best slow to install Linux via VM. It complicated on windows, it's different from computer to computer.
Sent from my IDEOS S7 Slim using XDA App
do i type this exactly with all the " ???
echo 0x955 >> "%USERPROFILE%\.android\adb_usb.ini"
????????????????/
HELP PLEASE
No
Sent from my IDEOS S7 Slim using XDA App
When i tipe the echo 0x955 line
It keeps on saying that system cannot find the path specified
can someone please help?
even when i open comand prompt and type adb it says adb is not recognised as an internal or external.........

[TOOL]ADB + Fastboot v1.0.31 for OS X/4.3 [NOW Includes ADB & Fastboot][08-17-2013]

[TOOL]ADB + Fastboot v1.0.31 for OS X/4.3 [NOW Includes ADB & Fastboot][08-17-2013]
ADB & FASTBOOT FOR OS X​
There has been some confusion since I discuss using Fastboot in this post, but the zip only contained ADB. This is completely my fault and I apologize. Either way I've updated the .zip to include ADB & Fastboot.​UPDATED: 08/17/2013 - Added Fastboot to adb-1.0.31-mac.zip​
I've seen several people having issues on OS X trying to use ADB since the release of Android 4.3. In my case ADB recognized my device, but each time I ran adb devices my device would be reported as offline. I downloaded the SDK from Google several times and always ended up with ADB v1.0.29 (4.2.2).
This will should solve your OS X & ADB issues if you're running Android 4.3. This ONLY includes the ADB & Fastboot executable files and is for Mac OS X ONLY. I, like many others, do not need the full SDK. If you're not an app developer, like myself, this is all you need to have ADB working on your machine.
For any new OS X users I'll add a how to just so you don't have to go search for it else where:
How to setup ADB + Fastboot on OS X
Note: This is for not for developers. This only includes ADB & Fastboot and is not the full Android SDK
Step 1: Download the ZIP containing ADB & Fastboot
Step 2: Extract the ZIP to the directory of your choice
Step 3: Optional Create an environment variable
1. Open Terminal
2. Type cd to take you to your home directory.
Code:
cd
3. Type touch .profile to create a hidden file in your home directory named .profile
Code:
touch .profile
4. Type open -e .profile to open the file you just created in TextEdit
Code:
open -e .profile
5. In the file, add the following:
Code:
export PATH=${PATH}:/PathToDirectoryWhereYouExtractedTheZIP
6. Save the file and close TextEdit, quit Terminal, and relaunch the Terminal
Step 4: In Terminal type adb devices, you should see your phone's corresponding serial number Ex: HXM1005HNF012345 device
Code:
adb devices
Note: If you choose not to create an environment variable from Step 3 it effects two things:
1. You will need to cd to the directory containing ADB each time you want to run ADB.
2. When executing ADB commands you will need to add ./ in front of ADB. Ex: ./adb devices
Dropbox Download
Alternate Download
wad3g, thanks for helping out.. but for some reason adb version is still showing 1.0.29 for me. I extracted the zip, removed the old adb and fasboot, restarted my machine.. ran kill-server, start-server but no luck.. any ideas? not sure what to do at this point.
mamba_nz said:
wad3g, thanks for helping out.. but for some reason adb version is still showing 1.0.29 for me. I extracted the zip, removed the old adb and fasboot, restarted my machine.. ran kill-server, start-server but no luck.. any ideas? not sure what to do at this point.
Click to expand...
Click to collapse
Hey, I was having the same issue so I took the adb and fastboot files from the SDK. You can copy them to usr/bin/ and run normally (as if the third step in the op's post had been completed), or by following the op's procedure if you're not an admin user.
kunjunk said:
Hey, I was having the same issue so I took the adb and fastboot files from the SDK. You can copy them to usr/bin/ and run normally (as if the third step in the op's post had been completed), or by following the op's procedure if you're not an admin user.
Click to expand...
Click to collapse
Thank you so much!
For some reason, that zip still reports ADB version 1.0.29.
I found the latest version (1.0.31) from https://ftp.mozilla.org/pub/mozilla.org/labs/r2d2b2g/. It has zips for linux, mac and windows adb.
kunjunk said:
Hey, I was having the same issue so I took the adb and fastboot files from the SDK. You can copy them to usr/bin/ and run normally (as if the third step in the op's post had been completed), or by following the op's procedure if you're not an admin user.
Click to expand...
Click to collapse
thanks that works fine 4 me

ZTE Nubia Z11 Mini (NX529J) - Does It Support Fastboot?

I am trying to flash TWRP and although adb seems to work, fastboot doesn't.
Code:
$ adb devices
List of devices attached
NX529J device
$ adb reboot-bootloader
$ fastboot devices
$
I am using Ubuntu 16.04 and installed adb and fastboot with
Code:
sudo apt install android-tools-adb android-tools-fastboot
Does the NX529J support fastboot or did ZTE/nubia disable it somehow?
I found a Chinese TWRP on Chinese website (but the download link is now broken)
http://bbs.nubia.cn/forum.php?mod=viewthread&tid=647594&extra=page=1&filter=typeid&typeid=443
http://www.microsofttranslator.com/...tra=page%3D1%26filter%3Dtypeid%26typeid%3D443
However, I found it mirrored on a Polish website
http://telchina.pl/nubia-z11-mini-nx529j-t28452-24.html
which links to https://drive.google.com/file/d/0B0hidJ2sijwIb0ctdk9kaWFGSmc/view
Inside was a bat file that had an extra parameter command
Code:
fastboot -i 0x19d2 boot NX529J_TWRP_3.0.2-0-521.img
According to the fastboot docs you can force fastboot to work with a device even if the vendor ID is unknown by the fastboot binary by using the -i parameter
http://elinux.org/Android_Fastboot#Commands
Code:
-i <vendor id> specify a custom USB vendor id
You can find the vendor ID of devices using lsusb
e.g.
Code:
lsusb |grep ZTE|cut -d: -f2
ID 19d2
That enabled fastboot to work and TWRP started.
It was in Chinese but there is an English button that says Change Language and you can change to English.
He has also packaged SuperSu in the Advanced menu under "Stalence Tools" in order to root your phone.
opticyclic said:
I am trying to flash TWRP and although adb seems to work, fastboot doesn't.
Code:
$ adb devices
List of devices attached
NX529J device
$ adb reboot-bootloader
$ fastboot devices
$
I am using Ubuntu 16.04 and installed adb and fastboot with
Code:
sudo apt install android-tools-adb android-tools-fastboot
Does the NX529J support fastboot or did ZTE/nubia disable it somehow?
Click to expand...
Click to collapse
type this first fastboot oem unlock-go to unlock bootloader
before that you need to enable oem unlock and usb debugging in options
and I use this twrp
Interestingly I didn't need to unlock the bootloader.
The fastboot oem unlock command didn't work like that though because of my fastboot binary not being aware of the vendor as mentioned in the previous post).
The TWRP you linked to (NX529J-TWRP_3.0.2.3_CUOCO92) is the Italian one.
Is the source available?
Is there an English menu in it?
yes, it is in English but maybe not at first run. to set English follow procedures on pictures
OK.
That is a bit weird though.
Why is an Italian compiling TWRP in Chinese?
The one by Stalance/Silent Star has a button on the first page in English that jumps you to the language section.
I'm trying to compile it myself atm but I don't know how to specify the blobs to extract to create a vendor tree.
The other issue was because I installed adb from the repos.
That was version 1.0.32 but the version at https://developer.android.com/studio/releases/platform-tools.html is 1.0.36.
When I download, unzip and run
Code:
sudo fastboot devices
this time it recognises the device and I don't have to pass the vendor id.
opticyclic said:
I am trying to flash TWRP and although adb seems to work, fastboot doesn't.
I am using Ubuntu 16.04 and installed adb and fastboot with
Does the NX529J support fastboot or did ZTE/nubia disable it somehow?
Click to expand...
Click to collapse
i don't have to unlock, i was already unlocked, should i replace the device
i need qcn NX529J my phone empty imei, but i dont backup

Unpacking TWRP Recovery File Android 11?

Hello:
I have rooted my Samsung Galaxy Tablet S7 Plus Wifi with TWRP. I would like to dig into the files in /system so that I can enable ADP root and rebuild images in Android Studio. Following this guide: https://forum.xda-developers.com/t/guide-unpack-repack-ext4-android-system-images.1588461/
from 2012 for EXT4 .img files does not seem to work.
Code:
simg2img twrp-gts7xl-3.5.0_10-A11_3_ianmacd.img twrp-gts7xl-3.5.0_10-A11_3_ianmacd.raw
Invalid sparse file format at header magic
Failed to read sparse file
Since the links to the packager from the person who created the post no longer hosts the file, I used apt-get to get the files:
sudo apt-get install simg2img
sudo apt-get install android-sdk-ext4-utils
I am wondering if something has changed in Android 11 for these files?
Images | Android Open Source Project
source.android.com
I have read over the following from the Androoid project, but not understanding I guess. Has anyone been able to extract the image?
Nevermind I just compiled Android 11 R3 with the "make eng" option to turn on ro.debuggable for adp root.
I didn't even know that a TWRP image is an ext4 filesystem?? Very interesting!

Categories

Resources