├── daniel.jpg
├── requirements.txt
├── templates
├── index.html
└── results.html
├── README.md
├── static
├── style.css
└── script.js
├── FaSeek.py
├── main.py
└── text_files
└── LastNames.txt
/daniel.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/crmulent/FaSeek/HEAD/daniel.jpg
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | blinker==1.8.2
2 | certifi==2024.7.4
3 | charset-normalizer==3.3.2
4 | click==8.1.7
5 | colorama==0.4.6
6 | Flask==3.0.3
7 | idna==3.7
8 | itsdangerous==2.2.0
9 | Jinja2==3.1.4
10 | MarkupSafe==2.1.5
11 | pillow==10.4.0
12 | python-dotenv==1.0.1
13 | requests==2.32.3
14 | scrapingbee==2.0.1
15 | urllib3==2.2.2
16 | Werkzeug==3.0.3
17 |
--------------------------------------------------------------------------------
/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | Clipboard Image Paste
11 |
12 |
13 |
14 |
15 |
16 | Drop image here or paste it!
17 |
18 |
19 |
20 |
![]()
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # FaSeek
2 |
3 | ## Description
4 | This Python-based reverse imaging program is designed to facilitate Open Source Intelligence (OSINT) gathering and facial recognition by leveraging PimEyes. The tool sends the image to PimEyes for processing and returns links to pages where those matches were found. It provides an efficient way to perform reverse image searches and gather relevant information from the web. This tool can be useful for investigative purposes, security research, and finding more information about people from their photos.
5 |
6 | ## Features
7 | - Perform reverse image searches using PimEyes’ API.
8 | - Retrieve links to web pages where the image matches were found.
9 | - Display a preview of the image and corresponding links in a web application.
10 | - Support for both clipboard pasting and file uploads for image input.
11 |
12 | ## Requirements
13 | - Python 3.x
14 | - ScrapingBee API Key
15 |
16 | ## Installation
17 |
18 | ### Clone the Repository
19 | Clone the repository to your local machine using:
20 | ```
21 | $ git clone https://github.com/crmulent/FaSeek.git
22 | $ cd FaSeek
23 | ```
24 |
25 | ### Install Dependencies
26 | Install the required Python packages by running:
27 | ```
28 | $ pip install -r requirements.txt
29 | ```
30 |
31 | ### Adding ScrapingBee's API Key
32 | Make a **.env** file containing the [ScrapingBee's API](https://www.scrapingbee.com/):
33 | ```
34 | API_KEY=
35 | ```
36 | **Note:** Make sure to change the value to your own API key.
37 |
38 | ## Usage
39 |
40 | ### Running the Web App Locally
41 | To run the web application locally and open it in your browser:
42 | ```
43 | $ python main.py
44 | ```
45 | After running the above command, open the program by clicking [here](http://localhost:5000/).
46 |
47 | ## Web App Features
48 | - **Image Preview**: Displays a preview of the uploaded or pasted image.
49 | - **Search Results**: Shows the preview and when clicked, redirects to the unblurred image (the value).
50 | - **Upload Support**: Allows uploading of image files in addition to clipboard pasting.
51 |
52 | ## Contribution
53 | Contributions are welcome! If you have suggestions for improvements or encounter issues, please open an issue or submit a pull request.
54 |
--------------------------------------------------------------------------------
/static/style.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --dark1: #121212;
3 | --accent1: #660167;
4 | color: white;
5 | background-color: var(--dark1);
6 | font-size: 30px;
7 | font-family: "JetBrains Mono", monospace
8 | }
9 |
10 | * {
11 | font-family: "JetBrains Mono", monospace
12 | }
13 |
14 | body {
15 | margin: 0;
16 | padding: 0;
17 | overflow-x: hidden;
18 | }
19 |
20 | .index_body {
21 | display: flex;
22 | justify-content: center;
23 | align-items: center;
24 | height: 100vh;
25 | margin: 0;
26 | }
27 |
28 | #image-container {
29 | display: flex;
30 | flex-direction: column;
31 | border: 2px dashed #ccc;
32 | padding: 20px;
33 | text-align: center;
34 | }
35 |
36 | #image-container img {
37 | max-width: 100%;
38 | max-height: 400px;
39 | object-fit: cover;
40 | }
41 |
42 | button {
43 | margin: 20px;
44 | padding: 10px 20px;
45 | background-color: var(--accent1);
46 | color: white;
47 | border: none;
48 | cursor: pointer;
49 | font-size: 30px;
50 | border-radius: 100px;
51 | }
52 |
53 | .result_title {
54 | color: white;
55 | text-align: center;
56 | margin: 10px;
57 | }
58 |
59 | #image_searched {
60 | display: flex;
61 | flex-wrap: wrap;
62 | gap: 10px;
63 | margin: 10px;
64 | justify-content: center;
65 | align-items: center;
66 | }
67 |
68 | .button_container {
69 | margin: 10px;
70 | display: flex;
71 | justify-content: center;
72 | text-align: center;
73 | }
74 |
75 | div.previews {
76 | width: 300px;
77 | height: 300px;
78 | overflow: hidden;
79 | transition: 0.3s ease;
80 | border: 3px solid white;
81 | border-radius: 10px;
82 | }
83 |
84 | div.previews:hover {
85 | transform: scale(1.1);
86 | }
87 |
88 | .previews>a>img {
89 | top: 0;
90 | left: 0;
91 | width: 100%;
92 | height: 100%;
93 | object-fit: cover;
94 | }
95 |
96 | .container {
97 | width: 100%;
98 | display: flex;
99 | flex-direction: row;
100 | justify-content: center;
101 | }
102 |
103 | .left-container {
104 | width: 75%;
105 | flex-grow: 1;
106 | box-sizing: border-box;
107 | }
108 |
109 | .right-container {
110 | top: 0;
111 | position: sticky;
112 | display: none;
113 | width: 25%;
114 | transition: width 300ms;
115 | border: 1px solid transparent;
116 | box-sizing: border-box;
117 | height: 100vh;
118 | overflow-y: scroll;
119 | }
120 |
121 | table {
122 | width: 100%;
123 | border-collapse: collapse;
124 | table-layout: auto;
125 | }
126 |
127 | th,
128 | td {
129 | border: 1px solid var(--accent1);
130 | padding: 8px;
131 | text-align: left;
132 | overflow: hidden;
133 | text-overflow: ellipsis;
134 | white-space: nowrap;
135 | }
136 |
137 | th {
138 | background-color: var(--accent1);
139 | color: white;
140 | }
141 |
142 | a:visited {
143 | color: white;
144 | }
145 |
--------------------------------------------------------------------------------
/static/script.js:
--------------------------------------------------------------------------------
1 | const fileInput = document.getElementById('fileInput');
2 | const dropArea = document.getElementById('dropArea');
3 | const imagePreview = document.getElementById('imagePreview');
4 | let imageDataUrl = ''; // Variable to hold the image data URL
5 |
6 |
7 | function processImage() {
8 | if (!imageDataUrl) {
9 | alert('No image to process!');
10 | return;
11 | }
12 |
13 | var form = document.createElement('form');
14 | form.method = 'POST';
15 | form.action = '/process_image';
16 | form.style.display = 'none';
17 |
18 | var input = document.createElement('input');
19 | input.type = 'hidden';
20 | input.name = 'image_data';
21 | input.value = imageDataUrl.split(',')[1];
22 | form.appendChild(input);
23 |
24 | document.body.appendChild(form);
25 | form.submit();
26 | }
27 |
28 | document.onpaste = function (event) {
29 | var items = (event.clipboardData || event.originalEvent.clipboardData).items;
30 | for (var index in items) {
31 | var item = items[index];
32 | if (item.kind === 'file') {
33 | var blob = item.getAsFile();
34 | var reader = new FileReader();
35 | reader.onload = function (event) {
36 | imageDataUrl = event.target.result;
37 | displayImage(imageDataUrl);
38 | };
39 | reader.readAsDataURL(blob);
40 | }
41 | }
42 | };
43 |
44 | function displayImage(imageDataUrl) {
45 | var imgElement = document.getElementById('pasted-image');
46 | imgElement.src = imageDataUrl;
47 | }
48 |
49 | // Function to display image and set the imageDataUrl
50 | function displayImage(imageDataUrl) {
51 | imagePreview.src = imageDataUrl;
52 | imagePreview.style.display = 'block';
53 | }
54 |
55 | // Function to handle image file and convert it to data URL
56 | function handleImageFile(file) {
57 | const reader = new FileReader();
58 | reader.onload = function (event) {
59 | imageDataUrl = event.target.result; // Set the image data URL
60 | displayImage(imageDataUrl);
61 | };
62 | reader.readAsDataURL(file);
63 | }
64 |
65 | // Handle file input change event
66 | fileInput.addEventListener('change', (event) => {
67 | const file = event.target.files[0];
68 | if (file) {
69 | handleImageFile(file);
70 | }
71 | });
72 |
73 | // Handle paste event
74 | document.onpaste = function (event) {
75 | const items = (event.clipboardData || event.originalEvent.clipboardData).items;
76 | for (const index in items) {
77 | const item = items[index];
78 | if (item.kind === 'file') {
79 | const blob = item.getAsFile();
80 | handleImageFile(blob);
81 | }
82 | }
83 | };
84 |
85 | // Handle drop event
86 | dropArea.addEventListener('drop', (event) => {
87 | event.preventDefault();
88 | const file = event.dataTransfer.files[0];
89 | if (file) {
90 | handleImageFile(file);
91 | }
92 | });
93 |
94 | // Prevent default behavior for dragover
95 | dropArea.addEventListener('dragover', (event) => {
96 | event.preventDefault();
97 | });
98 |
99 | function sidebar() {
100 | var x = document.getElementById("right-container");
101 | var computedStyle = window.getComputedStyle(x);
102 |
103 | if (computedStyle.display === "none") {
104 | x.style.display = "block";
105 | } else {
106 | x.style.display = "none";
107 | }
108 | }
109 |
110 | function downloadAllImages() {
111 | fetch('/download_all_images')
112 | .then(response => {
113 | if (response.ok) {
114 | return response.blob();
115 | } else {
116 | throw new Error('Failed to download images');
117 | }
118 | })
119 | .catch(error => {
120 | console.error('Error:', error);
121 | });
122 | }
--------------------------------------------------------------------------------
/templates/results.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Search Results
9 |
10 |
11 |
12 |
13 |
14 |
15 | Search Result
16 |
17 |
18 |
31 |
32 | {% if results %}
33 | {% for result in results %}
34 |
39 | {% endfor %}
40 | {% else %}
41 |
No images available.
42 | {% endif %}
43 |
44 |
45 |
46 |
47 | {% if freqlist %}
48 |
49 |
50 |
51 | Tiktok Links
52 | {% if tikwm_freq %}
53 |
54 |
55 |
56 | | Freq |
57 | Profile |
58 |
59 | {% for json in tikwm_freq %}
60 | {% if json %}
61 |
62 | | {{ tikwm_freq[json] }} |
63 | {{ json }} |
64 |
65 | {% else %}
66 | {% endif %}
67 | {% endfor %}
68 |
69 | {% endif %}
70 |
71 |
72 |
73 |
74 | Youtube Links
75 |
76 |
77 | {% for link in yt_links %}
78 | {% if link %}
79 |
80 | | {{ link }} |
81 |
82 | {% endif %}
83 | {% endfor %}
84 |
85 |
86 |
87 |
88 |
89 | First Names
90 |
91 |
92 | {% for names in firstname %}
93 |
94 | | {{ names }} |
95 |
96 | {% endfor %}
97 |
98 |
99 |
100 |
101 |
102 | Last Names
103 |
104 |
105 | {% for names in lastname %}
106 |
107 | | {{ names }} |
108 |
109 | {% endfor %}
110 |
111 |
112 |
113 |
114 |
115 | Frequent Words
116 |
117 |
118 | {% for word in freqlist %}
119 |
120 | | {{ word }} |
121 |
122 | {% endfor %}
123 |
124 |
125 |
126 |
127 | {% else %}
128 | {% endif %}
129 |
130 |
131 |
132 |
134 |
135 |
136 |
137 |
--------------------------------------------------------------------------------
/FaSeek.py:
--------------------------------------------------------------------------------
1 | import os, re, json, base64, requests
2 | from dotenv import load_dotenv
3 | from scrapingbee import ScrapingBeeClient
4 |
5 | load_dotenv()
6 | API_KEY = os.getenv('API_KEY')
7 |
8 | class FaSeek:
9 | def __init__(self, image_path, nsfw=False):
10 | self.api_key = API_KEY
11 | self.client = ScrapingBeeClient(api_key=self.api_key)
12 | self.image_path = image_path
13 | self.url = 'https://pimeyes.com'
14 | self.headers = {
15 | 'Content-Type': 'application/json',
16 | 'Host': 'pimeyes.com',
17 | }
18 | self.nsfw = nsfw
19 | self.results = {}
20 | self.links = []
21 |
22 | def image_to_base64(self):
23 | with open(self.image_path, 'rb') as f:
24 | image_bytes = f.read()
25 | base64_bytes = base64.b64encode(image_bytes)
26 | base64_string = base64_bytes.decode('utf-8')
27 | return base64_string
28 |
29 | def post(self, custom_url, payload):
30 | response = self.client.post(
31 | self.url + custom_url,
32 | headers = self.headers,
33 | data = payload,
34 | params = {
35 | 'render_js': 'False',
36 | }
37 | )
38 | return response
39 |
40 | def upload_image(self):
41 | payload = {
42 | "g-recaptcha-response": None,
43 | "image": "data:image/png;base64," + self.image_to_base64()
44 | }
45 | response = requests.post(self.url+'/api/upload/file', json=payload)
46 | response = json.loads(response.text)
47 | return response
48 |
49 | def premium_search(self, face_id):
50 | payload = {
51 | "faces": [face_id],
52 | "time": "any",
53 | "type": "PREMIUM_SEARCH",
54 | "g-recaptcha-response": None
55 | }
56 | json_payload = json.dumps(payload)
57 | response = json.loads(self.post('/api/search/new', json_payload).text)
58 | return response
59 |
60 | def get_api_url(self, collector_hash, search_hash, face_id):
61 | url = f'{self.url}/en/results/{collector_hash}_{search_hash}?query={face_id}'
62 | response = requests.get(url)
63 | api_url = re.findall(r"jsc\d+", response.text)[0]
64 | return api_url
65 |
66 | def get_results(self, api_url, search_hash):
67 | url = f"https://{api_url}.pimeyes.com/get_results"
68 |
69 | payload = {
70 | "hash": search_hash,
71 | "limit": 250,
72 | "offset": 0,
73 | "retryCount": 0
74 | }
75 | headers = {
76 | 'Host': f'{api_url}.pimeyes.com',
77 | 'Content-Type': 'application/json',
78 | 'Content-Length': str(len(payload)),
79 | }
80 | response = requests.post(
81 | url=url,
82 | headers=headers,
83 | json=payload
84 | )
85 | results = json.loads(response.text)
86 | return results
87 |
88 | def process_search(self):
89 | print("Starting search process...")
90 | try:
91 | # Upload Image
92 | print("Uploading image...")
93 | image_result = self.upload_image()
94 | face_id = image_result['faces'][0]['id']
95 | print(f"Uploaded image successfully. Face ID: {face_id}")
96 |
97 | # Search Image
98 | print("Performing premium search...")
99 | search_result = self.premium_search(face_id)
100 | search_hash = search_result['searchHash']
101 | print(f"Premium search completed. Search hash: {search_hash}")
102 |
103 | # Fetch Results
104 | print("Fetching results...")
105 | collector_hash = search_result['searchCollectorHash']
106 | api_url = self.get_api_url(collector_hash, search_hash, face_id)
107 | results = self.get_results(api_url, search_hash)
108 | results = results['results']
109 | print("Results fetched successfully.")
110 | except (KeyError, IndexError, json.decoder.JSONDecodeError):
111 | return None
112 |
113 | if self.nsfw:
114 | print("Validating links (NSFW mode)...")
115 | for result in results:
116 | thumbnail_url = result['thumbnailUrl']
117 | decoded_url = json.loads(bytes.fromhex(
118 | thumbnail_url.split('/')[-1]).decode("utf-8"))['url']
119 | self.results[thumbnail_url] = decoded_url
120 | self.links.append(decoded_url)
121 | else:
122 | print("Validating links (Non-NSFW mode)...")
123 | for result in results:
124 | if result['adultContent'] == 'true':
125 | continue
126 | thumbnail_url = result['thumbnailUrl']
127 | decoded_url = json.loads(bytes.fromhex(
128 | thumbnail_url.split('/')[-1]).decode("utf-8"))['url']
129 | self.results[thumbnail_url] = decoded_url
130 | self.links.append(decoded_url)
131 | print("Search process completed.")
132 |
133 |
134 | if __name__ == '__main__':
135 | api = FaSeek('daniel.jpg', nsfw=True)
136 | api.process_search()
137 | for link in api.links:
138 | print(link)
139 |
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | from flask import Flask, render_template, request, jsonify, redirect
2 | import datetime, re, base64, requests, os, json, time
3 | from urllib.parse import unquote, urlparse, parse_qs
4 | from collections import Counter
5 | from dotenv import load_dotenv
6 | from FaSeek import FaSeek
7 | from io import BytesIO
8 | from PIL import Image
9 |
10 | load_dotenv()
11 | API_KEY = os.getenv('API_KEY')
12 |
13 | image_counter = 1
14 | results, links, tikwm_data = [], [], []
15 | freqlist, tikwm_data, tikwm_freq = {}, [], {}
16 | firstname, lastname, words, yt_links = [], [], [], []
17 | base_path = os.path.dirname(os.path.abspath(__file__))
18 | text_path = os.path.join(base_path, 'text_files')
19 | app = Flask(__name__)
20 |
21 | def process_tikwm(vid_ids):
22 | url = 'https://www.tikwm.com/api/'
23 | headers = {
24 | 'Host': 'www.tikwm.com',
25 | 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
26 | }
27 | data = f'url={vid_ids}&count=12&cursor=0&web=1&hd=1'
28 | r = requests.post(url, headers=headers, data=data)
29 | data = json.loads(r.text)
30 | return data
31 |
32 | def extract_tikwm(links):
33 | results = []
34 | for link in links:
35 | if re.search(r"tikwm\.com", link):
36 | results.append(re.search(r'\d+', link))
37 | return results
38 |
39 | def extract_and_create_youtube_links(urls):
40 | pattern = r'vi/([^/]+)'
41 | youtube_links = []
42 | for url in urls:
43 | match = re.search(pattern, url)
44 |
45 | if match:
46 | video_id = match.group(1)
47 | youtube_url = f'https://www.youtube.com/watch?v={video_id}'
48 | youtube_links.append(youtube_url)
49 | return youtube_links
50 |
51 | def remove_keys_from_json(json_data, keys_to_remove):
52 | json_copy = json_data.copy()
53 |
54 | for key in keys_to_remove:
55 | if key in json_copy:
56 | del json_copy[key]
57 |
58 | keys_to_remove_based_on_length = [key for key in json_copy if len(key) < 4]
59 | for key in keys_to_remove_based_on_length:
60 | del json_copy[key]
61 |
62 | keys_to_remove_based_on_numbers = [key for key in json_copy if key.isdigit()]
63 | for key in keys_to_remove_based_on_numbers:
64 | del json_copy[key]
65 |
66 | keys_to_remove_based_on_pattern = [key for key in json_copy if 4 <= len(key) <= 5 and len(re.findall(r'\d', key)) >= 2]
67 | for key in keys_to_remove_based_on_pattern:
68 | del json_copy[key]
69 |
70 | return json_copy
71 |
72 | def filter_json_by_keys(json_data, key_array):
73 | lower_json_data = {key.lower(): value for key, value in json_data.items()}
74 | lower_key_array = [key.lower() for key in key_array]
75 | filtered_data = {key: json_data[key] for key in lower_key_array if key in lower_json_data}
76 | return filtered_data
77 |
78 | def word_freq(text):
79 | text = re.sub(r'<[^>]+>', '', text)
80 | text = re.sub(r'[~`!@#$%^&*(){}\[\];:"<,.>?\/\\|_+=-]', ' ', text)
81 | words = text.lower().split()
82 | freqlist = {}
83 | for word in words:
84 | if word.strip():
85 | freqlist[word] = freqlist.get(word, 0) + 1
86 | tuples = list(freqlist.items())
87 | tuples.sort(key=lambda x: x[1], reverse=True)
88 | return {f'{key}': value for key, value in tuples}
89 |
90 | def sanitize_filename(filename):
91 | return re.sub(r'[\\/*?:"<>|]', "_", filename)
92 |
93 | def download_image(url, save_path):
94 | try:
95 | response = requests.get(url)
96 | response.raise_for_status()
97 | with open(save_path, 'wb') as f:
98 | f.write(response.content)
99 | return True
100 | except requests.exceptions.RequestException as e:
101 | print(f"Error downloading {url}: {e}")
102 | return False
103 |
104 | def is_image_url(url):
105 | try:
106 | response = requests.get(url)
107 | response.raise_for_status()
108 |
109 | content_type = response.headers.get('Content-Type', '')
110 | if 'image' not in content_type:
111 | return False
112 |
113 | try:
114 | img = Image.open(BytesIO(response.content))
115 | img.verify()
116 | except (IOError, SyntaxError):
117 | return False
118 |
119 | return True
120 | except Exception as e:
121 | print(f"Error checking image URL: {e}")
122 | return False
123 |
124 | def get_image_name_from_url(url):
125 | if not is_image_url(url):
126 | print("URL does not point to a valid image")
127 | return None
128 |
129 | parsed_url = urlparse(url)
130 | query_params = parse_qs(parsed_url.query)
131 | path = parsed_url.path
132 | filename = path.split('/')[-1]
133 |
134 | basename, ext = os.path.splitext(filename)
135 | timestamp = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
136 |
137 | allowed_extensions = ['.png', '.jpg']
138 | if ext.lower() not in allowed_extensions:
139 | ext = '.jpg'
140 |
141 | if 'width' in query_params and 'quality' in query_params:
142 | width = query_params['width'][0]
143 | quality = query_params['quality'][0]
144 | basename = f"{basename}_w{width}_q{quality}_{timestamp}"
145 | else:
146 | basename = f"{basename}_{timestamp}"
147 |
148 | filename = f"{basename}{ext}"
149 |
150 | return sanitize_filename(filename)
151 |
152 | @app.route('/')
153 | def index():
154 | return render_template('index.html')
155 |
156 | @app.route('/process_image', methods=['POST'])
157 | def process_image():
158 | global results, links, freqlist, firstname, lastname, tikwm_data, tikwm_freq, yt_links
159 |
160 | [i.clear() for i in [results, links, freqlist, firstname, lastname, tikwm_data, tikwm_freq]]
161 |
162 | firstname, lastname = [], []
163 |
164 | data = request.form if request.form else request.json
165 | if 'image_data' not in data:
166 | return jsonify({'error': 'No image data received'}), 400
167 |
168 | base64_data = data['image_data']
169 | image_bytes = base64.b64decode(base64_data)
170 |
171 | with open('temp_image.png', 'wb') as f:
172 | f.write(image_bytes)
173 |
174 | api = FaSeek('temp_image.png', nsfw=False)
175 | api.process_search()
176 | results = api.results
177 | links = [unquote(link) for link in api.links]
178 | freqlist = word_freq(' '.join(links))
179 | print("Length:", len(results))
180 |
181 | with open(os.path.join(text_path, 'htmlWordList.txt'), 'r', encoding='utf-8') as file:
182 | for line in file:
183 | words.append(line.strip())
184 | with open(os.path.join(text_path, 'FirstNames.txt'), 'r', encoding='utf-8') as file:
185 | for line in file:
186 | firstname.append(line.strip())
187 | with open(os.path.join(text_path, 'LastNames.txt'), 'r', encoding='utf-8') as file:
188 | for line in file:
189 | lastname.append(line.strip())
190 |
191 | results = results if results else []
192 | freqlist = freqlist if freqlist else {}
193 | tikwm_links = extract_tikwm(links)
194 | for vid in tikwm_links:
195 | tikwm_data.append(process_tikwm(vid))
196 | print(vid)
197 | time.sleep(1)
198 |
199 | yt_links = extract_and_create_youtube_links(links)
200 |
201 | temp_data = []
202 | for i in tikwm_data:
203 | try:
204 | temp_data.append(i['data']['author']['unique_id'])
205 | except KeyError:
206 | pass
207 | tikwm_freq = dict(Counter(temp_data).most_common())
208 | freqlist = remove_keys_from_json(freqlist, words)
209 | firstname = filter_json_by_keys(freqlist, firstname)
210 | lastname = filter_json_by_keys(freqlist, lastname)
211 |
212 | return redirect('/display_results', code=302)
213 |
214 | @app.route('/display_results')
215 | def display_results():
216 | return render_template(
217 | 'results.html',
218 | results=results,
219 | freqlist=freqlist,
220 | firstname=firstname,
221 | lastname=lastname,
222 | tikwm_freq=tikwm_freq,
223 | yt_links = yt_links
224 | )
225 |
226 | @app.route('/download_all_images')
227 | def download_all_images():
228 | global links, image_counter
229 |
230 | if not links:
231 | return jsonify({'error': 'No images to download'}), 400
232 |
233 | dl_path = os.path.join(base_path, 'downloads')
234 |
235 | folder_name = f'Images_{image_counter}'
236 | folder_path = os.path.join(dl_path, folder_name)
237 |
238 | while os.path.exists(folder_path):
239 | image_counter += 1
240 | folder_name = f'Images_{image_counter}'
241 | folder_path = os.path.join(dl_path, folder_name)
242 |
243 | try:
244 | os.makedirs(folder_path, exist_ok=True)
245 | except Exception as e:
246 | return jsonify({'error': f'Failed to create directory: {e}'}), 500
247 |
248 | for link in links:
249 | try:
250 | image_name = get_image_name_from_url(link)
251 | save_path = os.path.join(folder_path, image_name)
252 | if not download_image(link, save_path):
253 | print(f"Failed to download image from link: {link}")
254 | except Exception as e:
255 | print(f"{e}")
256 |
257 | return jsonify({'message': 'Images have been downloaded successfully'}), 200
258 |
259 | if __name__ == '__main__':
260 | app.run(debug=True)
261 |
--------------------------------------------------------------------------------
/text_files/LastNames.txt:
--------------------------------------------------------------------------------
1 | james
2 | john
3 | robert
4 | michael
5 | william
6 | david
7 | richard
8 | charles
9 | joseph
10 | thomas
11 | christopher
12 | daniel
13 | paul
14 | mark
15 | donald
16 | george
17 | kenneth
18 | steven
19 | edward
20 | brian
21 | ronald
22 | anthony
23 | kevin
24 | jason
25 | matthew
26 | gary
27 | timothy
28 | jose
29 | larry
30 | jeffrey
31 | frank
32 | scott
33 | eric
34 | stephen
35 | andrew
36 | raymond
37 | gregory
38 | joshua
39 | jerry
40 | dennis
41 | walter
42 | patrick
43 | peter
44 | harold
45 | douglas
46 | henry
47 | carl
48 | arthur
49 | ryan
50 | roger
51 | joe
52 | juan
53 | jack
54 | albert
55 | jonathan
56 | justin
57 | terry
58 | gerald
59 | keith
60 | samuel
61 | willie
62 | ralph
63 | lawrence
64 | nicholas
65 | roy
66 | benjamin
67 | bruce
68 | brandon
69 | adam
70 | harry
71 | fred
72 | wayne
73 | billy
74 | steve
75 | louis
76 | jeremy
77 | aaron
78 | randy
79 | howard
80 | eugene
81 | carlos
82 | russell
83 | bobby
84 | victor
85 | martin
86 | ernest
87 | phillip
88 | todd
89 | jesse
90 | craig
91 | alan
92 | shawn
93 | clarence
94 | sean
95 | philip
96 | chris
97 | johnny
98 | earl
99 | jimmy
100 | antonio
101 | danny
102 | bryan
103 | tony
104 | luis
105 | mike
106 | stanley
107 | leonard
108 | nathan
109 | dale
110 | manuel
111 | rodney
112 | curtis
113 | norman
114 | allen
115 | marvin
116 | vincent
117 | glenn
118 | jeffery
119 | travis
120 | jeff
121 | chad
122 | jacob
123 | lee
124 | melvin
125 | alfred
126 | kyle
127 | francis
128 | bradley
129 | jesus
130 | herbert
131 | frederick
132 | ray
133 | joel
134 | edwin
135 | don
136 | eddie
137 | ricky
138 | troy
139 | randall
140 | barry
141 | alexander
142 | bernard
143 | mario
144 | leroy
145 | francisco
146 | marcus
147 | micheal
148 | theodore
149 | clifford
150 | miguel
151 | oscar
152 | jay
153 | jim
154 | tom
155 | calvin
156 | alex
157 | jon
158 | ronnie
159 | bill
160 | lloyd
161 | tommy
162 | leon
163 | derek
164 | warren
165 | darrell
166 | jerome
167 | floyd
168 | leo
169 | alvin
170 | tim
171 | wesley
172 | gordon
173 | dean
174 | greg
175 | jorge
176 | dustin
177 | pedro
178 | derrick
179 | dan
180 | lewis
181 | zachary
182 | corey
183 | herman
184 | maurice
185 | vernon
186 | roberto
187 | clyde
188 | glen
189 | hector
190 | shane
191 | ricardo
192 | sam
193 | rick
194 | lester
195 | brent
196 | ramon
197 | charlie
198 | tyler
199 | gilbert
200 | gene
201 | marc
202 | reginald
203 | ruben
204 | brett
205 | angel
206 | nathaniel
207 | rafael
208 | leslie
209 | edgar
210 | milton
211 | raul
212 | ben
213 | chester
214 | cecil
215 | duane
216 | franklin
217 | andre
218 | elmer
219 | brad
220 | gabriel
221 | ron
222 | mitchell
223 | roland
224 | arnold
225 | harvey
226 | jared
227 | adrian
228 | karl
229 | cory
230 | claude
231 | erik
232 | darryl
233 | jamie
234 | neil
235 | jessie
236 | christian
237 | javier
238 | fernando
239 | clinton
240 | ted
241 | mathew
242 | tyrone
243 | darren
244 | lonnie
245 | lance
246 | cody
247 | julio
248 | kelly
249 | kurt
250 | allan
251 | nelson
252 | guy
253 | clayton
254 | hugh
255 | max
256 | dwayne
257 | dwight
258 | armando
259 | felix
260 | jimmie
261 | everett
262 | jordan
263 | ian
264 | wallace
265 | ken
266 | bob
267 | jaime
268 | casey
269 | alfredo
270 | alberto
271 | dave
272 | ivan
273 | johnnie
274 | sidney
275 | byron
276 | julian
277 | isaac
278 | morris
279 | clifton
280 | willard
281 | daryl
282 | ross
283 | virgil
284 | andy
285 | marshall
286 | salvador
287 | perry
288 | kirk
289 | sergio
290 | marion
291 | tracy
292 | seth
293 | kent
294 | terrance
295 | rene
296 | eduardo
297 | terrence
298 | enrique
299 | freddie
300 | wade
301 | austin
302 | stuart
303 | fredrick
304 | arturo
305 | alejandro
306 | jackie
307 | joey
308 | nick
309 | luther
310 | wendell
311 | jeremiah
312 | evan
313 | julius
314 | dana
315 | donnie
316 | otis
317 | shannon
318 | trevor
319 | oliver
320 | luke
321 | homer
322 | gerard
323 | doug
324 | kenny
325 | hubert
326 | angelo
327 | shaun
328 | lyle
329 | matt
330 | lynn
331 | alfonso
332 | orlando
333 | rex
334 | carlton
335 | ernesto
336 | cameron
337 | neal
338 | pablo
339 | lorenzo
340 | omar
341 | wilbur
342 | blake
343 | grant
344 | horace
345 | roderick
346 | kerry
347 | abraham
348 | willis
349 | rickey
350 | jean
351 | ira
352 | andres
353 | cesar
354 | johnathan
355 | malcolm
356 | rudolph
357 | damon
358 | kelvin
359 | rudy
360 | preston
361 | alton
362 | archie
363 | marco
364 | wm
365 | pete
366 | randolph
367 | garry
368 | geoffrey
369 | jonathon
370 | felipe
371 | bennie
372 | gerardo
373 | ed
374 | dominic
375 | robin
376 | loren
377 | delbert
378 | colin
379 | guillermo
380 | earnest
381 | lucas
382 | benny
383 | noel
384 | spencer
385 | rodolfo
386 | myron
387 | edmund
388 | garrett
389 | salvatore
390 | cedric
391 | lowell
392 | gregg
393 | sherman
394 | wilson
395 | devin
396 | sylvester
397 | kim
398 | roosevelt
399 | israel
400 | jermaine
401 | forrest
402 | wilbert
403 | leland
404 | simon
405 | guadalupe
406 | clark
407 | irving
408 | carroll
409 | bryant
410 | owen
411 | rufus
412 | woodrow
413 | sammy
414 | kristopher
415 | mack
416 | levi
417 | marcos
418 | gustavo
419 | jake
420 | lionel
421 | marty
422 | taylor
423 | ellis
424 | dallas
425 | gilberto
426 | clint
427 | nicolas
428 | laurence
429 | ismael
430 | orville
431 | drew
432 | jody
433 | ervin
434 | dewey
435 | al
436 | wilfred
437 | josh
438 | hugo
439 | ignacio
440 | caleb
441 | tomas
442 | sheldon
443 | erick
444 | frankie
445 | stewart
446 | doyle
447 | darrel
448 | rogelio
449 | terence
450 | santiago
451 | alonzo
452 | elias
453 | bert
454 | elbert
455 | ramiro
456 | conrad
457 | pat
458 | noah
459 | grady
460 | phil
461 | cornelius
462 | lamar
463 | rolando
464 | clay
465 | percy
466 | dexter
467 | bradford
468 | merle
469 | darin
470 | amos
471 | terrell
472 | moses
473 | irvin
474 | saul
475 | roman
476 | darnell
477 | randal
478 | tommie
479 | timmy
480 | darrin
481 | winston
482 | brendan
483 | toby
484 | van
485 | abel
486 | dominick
487 | boyd
488 | courtney
489 | jan
490 | emilio
491 | elijah
492 | cary
493 | domingo
494 | santos
495 | aubrey
496 | emmett
497 | marlon
498 | emanuel
499 | jerald
500 | edmond
501 | emil
502 | dewayne
503 | will
504 | otto
505 | teddy
506 | reynaldo
507 | bret
508 | morgan
509 | jess
510 | trent
511 | humberto
512 | emmanuel
513 | stephan
514 | louie
515 | vicente
516 | lamont
517 | stacy
518 | garland
519 | miles
520 | micah
521 | efrain
522 | billie
523 | logan
524 | heath
525 | rodger
526 | harley
527 | demetrius
528 | ethan
529 | eldon
530 | rocky
531 | pierre
532 | junior
533 | freddy
534 | eli
535 | bryce
536 | antoine
537 | robbie
538 | kendall
539 | royce
540 | sterling
541 | mickey
542 | chase
543 | grover
544 | elton
545 | cleveland
546 | dylan
547 | chuck
548 | damian
549 | reuben
550 | stan
551 | august
552 | leonardo
553 | jasper
554 | russel
555 | erwin
556 | benito
557 | hans
558 | monte
559 | blaine
560 | ernie
561 | curt
562 | quentin
563 | agustin
564 | murray
565 | jamal
566 | devon
567 | adolfo
568 | harrison
569 | tyson
570 | burton
571 | brady
572 | elliott
573 | wilfredo
574 | bart
575 | jarrod
576 | vance
577 | denis
578 | damien
579 | joaquin
580 | harlan
581 | desmond
582 | elliot
583 | darwin
584 | ashley
585 | gregorio
586 | buddy
587 | xavier
588 | kermit
589 | roscoe
590 | esteban
591 | anton
592 | solomon
593 | scotty
594 | norbert
595 | elvin
596 | williams
597 | nolan
598 | carey
599 | rod
600 | quinton
601 | hal
602 | brain
603 | rob
604 | elwood
605 | kendrick
606 | darius
607 | moises
608 | son
609 | marlin
610 | fidel
611 | thaddeus
612 | cliff
613 | marcel
614 | ali
615 | jackson
616 | raphael
617 | bryon
618 | armand
619 | alvaro
620 | jeffry
621 | dane
622 | joesph
623 | thurman
624 | ned
625 | sammie
626 | rusty
627 | michel
628 | monty
629 | rory
630 | fabian
631 | reggie
632 | mason
633 | graham
634 | kris
635 | isaiah
636 | vaughn
637 | gus
638 | avery
639 | loyd
640 | diego
641 | alexis
642 | adolph
643 | norris
644 | millard
645 | rocco
646 | gonzalo
647 | derick
648 | rodrigo
649 | gerry
650 | stacey
651 | carmen
652 | wiley
653 | rigoberto
654 | alphonso
655 | ty
656 | shelby
657 | rickie
658 | noe
659 | vern
660 | bobbie
661 | reed
662 | jefferson
663 | elvis
664 | bernardo
665 | mauricio
666 | hiram
667 | donovan
668 | basil
669 | riley
670 | ollie
671 | nickolas
672 | maynard
673 | scot
674 | vince
675 | quincy
676 | eddy
677 | sebastian
678 | federico
679 | ulysses
680 | heriberto
681 | donnell
682 | cole
683 | denny
684 | davis
685 | gavin
686 | emery
687 | ward
688 | romeo
689 | jayson
690 | dion
691 | dante
692 | clement
693 | coy
694 | odell
695 | maxwell
696 | jarvis
697 | bruno
698 | issac
699 | mary
700 | dudley
701 | brock
702 | sanford
703 | colby
704 | carmelo
705 | barney
706 | nestor
707 | hollis
708 | stefan
709 | donny
710 | art
711 | linwood
712 | beau
713 | weldon
714 | galen
715 | isidro
716 | truman
717 | delmar
718 | johnathon
719 | silas
720 | frederic
721 | dick
722 | kirby
723 | irwin
724 | cruz
725 | merlin
726 | merrill
727 | charley
728 | marcelino
729 | lane
730 | harris
731 | cleo
732 | carlo
733 | trenton
734 | kurtis
735 | hunter
736 | aurelio
737 | winfred
738 | vito
739 | collin
740 | denver
741 | carter
742 | leonel
743 | emory
744 | pasquale
745 | mohammad
746 | mariano
747 | danial
748 | blair
749 | landon
750 | dirk
751 | branden
752 | adan
753 | numbers
754 | clair
755 | buford
756 | german
757 | bernie
758 | wilmer
759 | joan
760 | emerson
761 | zachery
762 | fletcher
763 | jacques
764 | errol
765 | dalton
766 | monroe
767 | josue
768 | dominique
769 | edwardo
770 | booker
771 | wilford
772 | sonny
773 | shelton
774 | carson
775 | theron
776 | raymundo
777 | daren
778 | tristan
779 | houston
780 | robby
781 | lincoln
782 | jame
783 | genaro
784 | gale
785 | bennett
786 | octavio
787 | cornell
788 | laverne
789 | hung
790 | arron
791 | antony
792 | herschel
793 | alva
794 | giovanni
795 | garth
796 | cyrus
797 | cyril
798 | ronny
799 | stevie
800 | lon
801 | freeman
802 | erin
803 | duncan
804 | kennith
805 | carmine
806 | augustine
807 | young
808 | erich
809 | chadwick
810 | wilburn
811 | russ
812 | reid
813 | myles
814 | anderson
815 | morton
816 | jonas
817 | forest
818 | mitchel
819 | mervin
820 | zane
821 | rich
822 | jamel
823 | lazaro
824 | alphonse
825 | randell
826 | major
827 | johnie
828 | jarrett
829 | brooks
830 | ariel
831 | abdul
832 | dusty
833 | luciano
834 | lindsey
835 | tracey
836 | seymour
837 | scottie
838 | eugenio
839 | mohammed
840 | sandy
841 | valentin
842 | chance
843 | arnulfo
844 | lucien
845 | ferdinand
846 | thad
847 | ezra
848 | sydney
849 | aldo
850 | rubin
851 | royal
852 | mitch
853 | earle
854 | abe
855 | wyatt
856 | marquis
857 | lanny
858 | kareem
859 | jamar
860 | boris
861 | isiah
862 | emile
863 | elmo
864 | aron
865 | leopoldo
866 | everette
867 | josef
868 | gail
869 | eloy
870 | dorian
871 | rodrick
872 | reinaldo
873 | lucio
874 | jerrod
875 | weston
876 | hershel
877 | barton
878 | parker
879 | lemuel
880 | lavern
881 | burt
882 | jules
883 | gil
884 | eliseo
885 | ahmad
886 | nigel
887 | efren
888 | antwan
889 | alden
890 | margarito
891 | coleman
892 | refugio
893 | dino
894 | osvaldo
895 | les
896 | deandre
897 | normand
898 | kieth
899 | ivory
900 | andrea
901 | trey
902 | norberto
903 | napoleon
904 | jerold
905 | fritz
906 | rosendo
907 | milford
908 | sang
909 | deon
910 | christoper
911 | alfonzo
912 | lyman
913 | josiah
914 | brant
915 | wilton
916 | rico
917 | jamaal
918 | dewitt
919 | carol
920 | brenton
921 | yong
922 | olin
923 | foster
924 | faustino
925 | claudio
926 | judson
927 | gino
928 | edgardo
929 | berry
930 | alec
931 | tanner
932 | jarred
933 | donn
934 | trinidad
935 | tad
936 | shirley
937 | prince
938 | porfirio
939 | odis
940 | maria
941 | lenard
942 | chauncey
943 | chang
944 | tod
945 | mel
946 | marcelo
947 | kory
948 | augustus
949 | keven
950 | hilario
951 | bud
952 | sal
953 | rosario
954 | orval
955 | mauro
956 | dannie
957 | zachariah
958 | olen
959 | anibal
960 | milo
961 | jed
962 | frances
963 | thanh
964 | dillon
965 | amado
966 | newton
967 | connie
968 | lenny
969 | tory
970 | richie
971 | lupe
972 | horacio
973 | brice
974 | mohamed
975 | delmer
976 | dario
977 | reyes
978 | dee
979 | mac
980 | jonah
981 | jerrold
982 | robt
983 | hank
984 | sung
985 | rupert
986 | rolland
987 | kenton
988 | damion
989 | chi
990 | antone
991 | waldo
992 | fredric
993 | bradly
994 | quinn
995 | kip
996 | burl
997 | walker
998 | tyree
999 | jefferey
1000 | ahmed
1001 | willy
1002 | stanford
1003 | oren
1004 | noble
1005 | moshe
1006 | mikel
1007 | enoch
1008 | brendon
1009 | quintin
1010 | jamison
1011 | florencio
1012 | darrick
1013 | tobias
1014 | minh
1015 | hassan
1016 | giuseppe
1017 | demarcus
1018 | cletus
1019 | tyrell
1020 | lyndon
1021 | keenan
1022 | werner
1023 | theo
1024 | geraldo
1025 | lou
1026 | columbus
1027 | chet
1028 | bertram
1029 | markus
1030 | huey
1031 | hilton
1032 | dwain
1033 | donte
1034 | tyron
1035 | omer
1036 | isaias
1037 | hipolito
1038 | fermin
1039 | chung
1040 | adalberto
1041 | valentine
1042 | jamey
1043 | bo
1044 | barrett
1045 | whitney
1046 | teodoro
1047 | mckinley
1048 | maximo
1049 | garfield
1050 | sol
1051 | raleigh
1052 | lawerence
1053 | abram
1054 | rashad
1055 | king
1056 | emmitt
1057 | daron
1058 | chong
1059 | samual
1060 | paris
1061 | otha
1062 | miquel
1063 | lacy
1064 | eusebio
1065 | dong
1066 | domenic
1067 | darron
1068 | buster
1069 | antonia
1070 | wilber
1071 | renato
1072 | jc
1073 | hoyt
1074 | haywood
1075 | ezekiel
1076 | chas
1077 | florentino
1078 | elroy
1079 | clemente
1080 | arden
1081 | neville
1082 | kelley
1083 | edison
1084 | deshawn
1085 | carrol
1086 | shayne
1087 | nathanial
1088 | jordon
1089 | danilo
1090 | claud
1091 | val
1092 | sherwood
1093 | raymon
1094 | rayford
1095 | cristobal
1096 | ambrose
1097 | titus
1098 | hyman
1099 | felton
1100 | ezequiel
1101 | erasmo
1102 | stanton
1103 | lonny
1104 | len
1105 | ike
1106 | milan
1107 | lino
1108 | jarod
1109 | herb
1110 | andreas
1111 | walton
1112 | rhett
1113 | palmer
1114 | jude
1115 | douglass
1116 | cordell
1117 | oswaldo
1118 | ellsworth
1119 | virgilio
1120 | toney
1121 | nathanael
1122 | del
1123 | britt
1124 | benedict
1125 | mose
1126 | hong
1127 | leigh
1128 | johnson
1129 | isreal
1130 | gayle
1131 | garret
1132 | fausto
1133 | asa
1134 | arlen
1135 | zack
1136 | warner
1137 | modesto
1138 | francesco
1139 | manual
1140 | jae
1141 | gaylord
1142 | gaston
1143 | filiberto
1144 | deangelo
1145 | michale
1146 | granville
1147 | wes
1148 | malik
1149 | zackary
1150 | tuan
1151 | nicky
1152 | eldridge
1153 | cristopher
1154 | cortez
1155 | antione
1156 | malcom
1157 | long
1158 | korey
1159 | jospeh
1160 | colton
1161 | waylon
1162 | von
1163 | hosea
1164 | shad
1165 | santo
1166 | rudolf
1167 | rolf
1168 | rey
1169 | renaldo
1170 | marcellus
1171 | lucius
1172 | lesley
1173 | kristofer
1174 | boyce
1175 | benton
1176 | man
1177 | kasey
1178 | jewell
1179 | hayden
1180 | harland
1181 | arnoldo
1182 | rueben
1183 | leandro
1184 | kraig
1185 | jerrell
1186 | jeromy
1187 | hobert
1188 | cedrick
1189 | arlie
1190 | winford
1191 | wally
1192 | patricia
1193 | luigi
1194 | keneth
1195 | jacinto
1196 | graig
1197 | franklyn
1198 | edmundo
1199 | sid
1200 | porter
1201 | leif
1202 | lauren
1203 | jeramy
1204 | elisha
1205 | buck
1206 | willian
1207 | vincenzo
1208 | shon
1209 | michal
1210 | lynwood
1211 | lindsay
1212 | jewel
1213 | jere
1214 | hai
1215 | elden
1216 | dorsey
1217 | darell
1218 | broderick
1219 | alonso
1220 | dela Cruz
1221 | Garcia
1222 | Reyes
1223 | Ramos
1224 | Mendoza
1225 | Santos
1226 | Flores
1227 | Gonzales
1228 | Bautista
1229 | Villanueva
1230 | Fernandez
1231 | Cruz
1232 | de Guzman
1233 | Lopez
1234 | Perez
1235 | Castillo
1236 | Francisco
1237 | Rivera
1238 | Aquino
1239 | Castro
1240 | Sanchez
1241 | Torres
1242 | de Leon
1243 | Domingo
1244 | Martinez
1245 | Rodriguez
1246 | Santiago
1247 | Soriano
1248 | Delos Santos
1249 | Diaz
1250 | Hernandez
1251 | Tolentino
1252 | Valdez
1253 | Ramirez
1254 | Morales
1255 | Mercado
1256 | Tan
1257 | Aguilar
1258 | Navarro
1259 | Manalo
1260 | Gomez
1261 | Dizon
1262 | del Rosario
1263 | Javier
1264 | Corpuz
1265 | Gutierrez
1266 | Salvador
1267 | Velasco
1268 | Miranda
1269 | David
1270 | Salazar
1271 | Ferrer
1272 | Alvarez
1273 | Sarmiento
1274 | Pascual
1275 | Lim
1276 | Delos Reyes
1277 | Marquez
1278 | Jimenez
1279 | Cortez
1280 | Antonio
1281 | Agustin
1282 | Rosales
1283 | Manuel
1284 | Mariano
1285 | Evangelista
1286 | Pineda
1287 | Enriquez
1288 | Ocampo
1289 | Alcantara
1290 | Pascua
1291 | de Vera
1292 | Romero
1293 | de Jesus
1294 | dela Peña
1295 | Valencia
1296 | Ignacio
1297 | Vergara
1298 | Padilla
1299 | Angeles
1300 | Espiritu
1301 | Fuentes
1302 | Legaspi
1303 | Cañete
1304 | Peralta
1305 | Vargas
1306 | Cabrera
1307 | Fajardo
1308 | Gonzaga
1309 | Espinosa
1310 | Guevarra
1311 | Samson
1312 | Ortega
1313 | Molina
1314 | Serrano
1315 | Chavez
1316 | Briones
1317 | Medina
1318 | Palma
1319 | Tamayo
1320 | Arellano
1321 | Atienza
1322 | Villegas
1323 | Estrada
1324 | Martin
1325 | Acosta
1326 | Ortiz
1327 | Sison
1328 | Trinidad
1329 | Zamora
1330 | Asuncion
1331 | Abad
1332 | Moreno
1333 | Valenzuela
1334 | Mallari
1335 | Caballero
1336 | Villamor
1337 | Bernardo
1338 | Robles
1339 | Concepcion
1340 | Fernando
1341 | Gregorio
1342 | Borja
1343 | Magbanua
1344 | de Castro
1345 | Panganiban
1346 | Galang
1347 | Nuñez
1348 | Roxas
1349 | Ruiz
1350 | Pangilinan
1351 | Vicente
1352 | Chua
1353 | Suarez
1354 | Avila
1355 | Ali
1356 | Austria
1357 | Magno
1358 | dela Torre
1359 | Luna
1360 | de La Cruz
1361 | Pepito
1362 | Solis
1363 | Uy
1364 | dela Rosa
1365 | Duran
1366 | Abella
1367 | Mahinay
1368 | Esguerra
1369 | Roque
1370 | Andres
1371 | Jose
1372 | Sevilla
1373 | Beltran
1374 | Gabriel
1375 | Mateo
1376 | Ybañez
1377 | Nicolas
1378 | Mendez
1379 | Cunanan
1380 | Vasquez
1381 | Ancheta
1382 | Ventura
1383 | Lorenzo
1384 | Cordero
1385 | Toledo
1386 | Galvez
1387 | Abdul
1388 | Natividad
1389 | Marasigan
1390 | Herrera
1391 | Silva
1392 | Miguel
1393 | Gamboa
1394 | Estrella
1395 | Villa
1396 | Bartolome
1397 | Usman
1398 | Sales
1399 | Custodio
1400 | Ong
1401 | Lucero
1402 | Abdullah
1403 | Manzano
1404 | Ibañez
1405 | Marcelo
1406 | Ponce
1407 | Gallardo
1408 | Rosario
1409 | Delgado
1410 | Canlas
1411 | Cariño
1412 | Yap
1413 | Go
1414 | Esteban
1415 | Ilagan
1416 | Tuazon
1417 | Carpio
1418 | Carreon
1419 | Baltazar
1420 | Pablo
1421 | Lozada
1422 | Guzman
1423 | Guerrero
1424 | Padua
1425 | Salcedo
1426 | Camacho
1427 | San Juan
1428 | Bueno
1429 | Blanco
1430 | Cuevas
1431 | Carlos
1432 | Andaya
1433 | Lozano
1434 | Aguirre
1435 | Baguio
1436 | Cervantes
1437 | Bernal
1438 | Bustamante
1439 | Arevalo
1440 | Villar
1441 | Sabado
1442 | Labrador
1443 | Ronquillo
1444 | Panes
1445 | Cristobal
1446 | Prado
1447 | Guillermo
1448 | Dulay
1449 | Apostol
1450 | Oliveros
1451 | Santillan
1452 | Abalos
1453 | Quinto
1454 | Montero
1455 | Alfonso
1456 | Umali
1457 | Campos
1458 | Constantino
1459 | Baylon
1460 | Malinao
1461 | Franco
1462 | Calderon
1463 | Quijano
1464 | Velasquez
1465 | Marcos
1466 | Alonzo
1467 | Lazaro
1468 | Mata
1469 | Cinco
1470 | Geronimo
1471 | Cordova
1472 | Eugenio
1473 | Rubio
1474 | Viray
1475 | Delfin
1476 | Canoy
1477 | Crisostomo
1478 | Mejia
1479 | Rico
1480 | Punzalan
1481 | Benitez
1482 | Bernabe
1483 | Buenaventura
1484 | Ballesteros
1485 | Clemente
1486 | Sy
1487 | Peña
1488 | Jacinto
1489 | Vidal
1490 | Salas
1491 | Tomas
1492 | Matias
1493 | Yu
1494 | de Asis
1495 | Andrade
1496 | Magallanes
1497 | Roldan
1498 | Asis
1499 | Ledesma
1500 | Cortes
1501 | Feliciano
1502 | Sayson
1503 | de Luna
1504 | Borromeo
1505 | del Mundo
1506 | Bello
1507 | Manansala
1508 | Bondoc
1509 | Lacson
1510 | Salinas
1511 | Barrientos
1512 | Conde
1513 | Collado
1514 | Juan
1515 | Villareal
1516 | Teves
1517 | Laurente
1518 | Quiambao
1519 | Mohammad
1520 | Oliva
1521 | Bonifacio
1522 | Rojas
1523 | Alejandro
1524 | Sebastian
1525 | Frias
1526 | Catalan
1527 | Espina
1528 | Lee
1529 | Lucas
1530 | Sali
1531 | Dominguez
1532 | Mangubat
1533 | Calma
1534 | Chan
1535 | Villarin
1536 | Cayabyab
1537 | Rosal
1538 | Basa
1539 | Basilio
1540 | Tejada
1541 | Samonte
1542 | Viernes
1543 | Plaza
1544 | Gallego
1545 | Castor
1546 | Dionisio
1547 | Musa
1548 | Sultan
1549 | Tenorio
1550 | Solomon
1551 | Española
1552 | Narciso
1553 | San Jose
1554 | Pangan
1555 | Pelayo
1556 | Romano
1557 | Lachica
1558 | Arcilla
1559 | Alba
1560 | Espino
1561 | Raymundo
1562 | Pilapil
1563 | Cuizon
1564 | Aragon
1565 | Medrano
1566 | Ang
1567 | Guinto
1568 | Castañeda
1569 | Paras
1570 | Alvarado
1571 | Omar
1572 | Hipolito
1573 | Porras
1574 | de Mesa
1575 | Tecson
1576 | Basco
1577 | Pimentel
1578 | Adriano
1579 | Santa Ana
1580 | Sagun
1581 | Pacheco
1582 | Muñoz
1583 | Landicho
1584 | Arroyo
1585 | Rodrigo
1586 | Neri
1587 | Malabanan
1588 | Bravo
1589 | Lara
1590 | dela Cerna
1591 | Villaflor
1592 | Galicia
1593 | Junio
1594 | de Los Santos
1595 | Villaruel
1596 | Hilario
1597 | Añonuevo
1598 | Felipe
1599 | Montes
1600 | Gaspar
1601 | Belen
1602 | Sotto
1603 | Patricio
1604 | Bernardino
1605 | Madrid
1606 | Alarcon
1607 | Verano
1608 | Casas
1609 | Barrios
1610 | Ariola
1611 | Cano
1612 | Advincula
1613 | Marcelino
1614 | Macaraeg
1615 | Alejo
1616 | Andal
1617 | Dalisay
1618 | Aguila
1619 | Lao
1620 | Sunga
1621 | de Chavez
1622 | Montemayor
1623 | Coronel
1624 | Silvestre
1625 | Carillo
1626 | Bermudez
1627 | Zapanta
1628 | Co
1629 | Murillo
1630 | Billones
1631 | Belarmino
1632 | Dimaano
1633 | Mahilum
1634 | Alegre
1635 | Nepomuceno
1636 | de Ocampo
1637 | Alberto
1638 | Abas
1639 | Manlangit
1640 | Vega
1641 | Manalang
1642 | Liwanag
1643 | Paglinawan
1644 | Meneses
1645 | Ibrahim
1646 | Aguinaldo
1647 | Bacani
1648 | Hassan
1649 | Cariaga
1650 | Burgos
1651 | Maranan
1652 | Recto
1653 | Villafuerte
1654 | Imperial
1655 | San Pedro
1656 | Manabat
1657 | Zabala
1658 | Figueroa
1659 | Amante
1660 | Paz
1661 | Sandoval
1662 | Delima
1663 | Urbano
1664 | Quiñones
1665 | Decena
1666 | de Villa
1667 | Salonga
1668 | Andrada
1669 | Policarpio
1670 | Pasion
1671 | Roa
1672 | Capistrano
1673 | Cabahug
1674 | Carandang
1675 | Madriaga
1676 | Ismael
1677 | Saavedra
1678 | Mama
1679 | dela Vega
1680 | Julian
1681 | de Los Reyes
1682 | Pancho
1683 | Nolasco
1684 | Jacob
1685 | Fontanilla
1686 | Tobias
1687 | Benito
1688 | Donato
1689 | Bacus
1690 | Magsino
1691 | Valerio
1692 | Dy
1693 | Rivas
1694 | Paraiso
1695 | Viloria
1696 | Paredes
1697 | Solano
1698 | Jumawan
1699 | Regala
1700 | Villena
1701 | Rojo
1702 | Magpantay
1703 | Arceo
1704 | Mina
1705 | Florendo
1706 | Centeno
1707 | Encarnacion
1708 | Mendiola
1709 | Regalado
1710 | Baluyot
1711 | Mojica
1712 | Mayo
1713 | Acuña
1714 | Alfaro
1715 | de Torres
1716 | Gatchalian
1717 | Mahusay
1718 | Soria
1719 | Osorio
1720 | Araneta
1721 | Divinagracia
1722 | Montaño
1723 | Barredo
1724 | Sumalinog
1725 | Akmad
1726 | Largo
1727 | Lauron
1728 | Simon
1729 | Sabanal
1730 | Hidalgo
1731 | Barrera
1732 | Valiente
1733 | Macapagal
1734 | Barcelona
1735 | Isidro
1736 | Bacalso
1737 | Rafael
1738 | Loyola
1739 | Resurreccion
1740 | Santa Maria
1741 | Razon
1742 | Capili
1743 | Felix
1744 | Velarde
1745 | Teodoro
1746 | Bernales
1747 | Infante
1748 | Navales
1749 | Dorado
1750 | Yabut
1751 | Duque
1752 | Caballes
1753 | Benedicto
1754 | Pastor
1755 | Abubakar
1756 | Mondejar
1757 | Faustino
1758 | Pasco
1759 | Estacio
1760 | Hermoso
1761 | Lazo
1762 | Buenaflor
1763 | Danao
1764 | Peñaflor
1765 | Mesa
1766 | Bantilan
1767 | Marzan
1768 | Dayrit
1769 | Bohol
1770 | Catacutan
1771 | Pagaduan
1772 | Palacio
1773 | Belleza
1774 | Dacanay
1775 | Magnaye
1776 | Peñaranda
1777 | Arguelles
1778 | Almazan
1779 | Pamintuan
1780 | Candelaria
1781 | Inocencio
1782 | Macatangay
1783 | Morillo
1784 | Lapuz
1785 | Palmes
1786 | Sarip
1787 | Amil
1788 | Suan
1789 | Borres
1790 | Sulit
1791 | Tadeo
1792 | Magat
1793 | Padernal
1794 | Dumlao
1795 | Balbuena
1796 | Villarosa
1797 | Guanzon
1798 | Parreño
1799 | Puno
1800 | Revilla
1801 | Cardenas
1802 | Paulino
1803 | Mijares
1804 | Panaligan
1805 | Alih
1806 | Manlapaz
1807 | Cabral
1808 | Manalili
1809 | Maravilla
1810 | Ampuan
1811 | Llagas
1812 | Arenas
1813 | Parcon
1814 | Leonardo
1815 | Alcala
1816 | Bermejo
1817 | Buenafe
1818 | Sangalang
1819 | Gallo
1820 | Diego
1821 | Fabian
1822 | Costales
1823 | Soliman
1824 | Jordan
1825 | de Guia
1826 | Salva
1827 | Tayag
1828 | Comia
1829 | Amor
1830 | Jayme
1831 | Rosete
1832 | Cuaresma
1833 | Nazareno
1834 | Abayon
1835 | Pastrana
1836 | Maglasang
1837 | Tupas
1838 | Catapang
1839 | Adam
1840 | Belmonte
1841 | Cayetano
1842 | Mamaril
1843 | Cacho
1844 | Dueñas
1845 | Florentino
1846 | San Diego
1847 | Barrameda
1848 | Poblete
1849 | Papa
1850 | Real
1851 | Laxamana
1852 | Abarquez
1853 | Cadiz
1854 | Amparo
1855 | Singson
1856 | Cueto
1857 | dela Paz
1858 | Moral
1859 | Abao
1860 | Banaag
1861 | Montoya
1862 | Pitogo
1863 | Campo
1864 | Valle
1865 | Gloria
1866 | Cuenca
1867 | Salik
1868 | Eusebio
1869 | Bulan
1870 | Ampaso
1871 | Arias
1872 | Rey
1873 | Victoria
1874 | Granada
1875 | Pama
1876 | Almonte
1877 | Celis
1878 | Malate
1879 | Almario
1880 | Balingit
1881 | Olivar
1882 | Joaquin
1883 | Tagalog
1884 | Sibayan
1885 | Contreras
1886 | Montejo
1887 | Palomo
1888 | Lagman
1889 | Quizon
1890 | Apolinario
1891 | Paragas
1892 | Gaviola
1893 | Dayao
1894 | Andales
1895 | Silvano
1896 | Montilla
1897 | Estrera
1898 | Aban
1899 | Alcaraz
1900 | Fronda
1901 | Ibarra
1902 | Morada
1903 | Diamante
1904 | Naval
1905 | Pulido
1906 | Balansag
1907 | Rosas
1908 | Mariñas
1909 | Cornelio
1910 | Bañez
1911 | Palomar
1912 | Adolfo
1913 | Amaro
1914 | Rendon
1915 | Sanico
1916 | Valera
1917 | Buan
1918 | Amores
1919 | Caro
1920 | Castillon
1921 | Mora
1922 | Ando
1923 | Baron
1924 | Coronado
1925 | Balmes
1926 | Nacario
1927 | Datu
1928 | Gorospe
1929 | Simbajon
1930 | Pantaleon
1931 | de Lara
1932 | Ceniza
1933 | Olarte
1934 | Samillano
1935 | Torio
1936 | Rama
1937 | Escalante
1938 | Tagle
1939 | Claro
1940 | Escobar
1941 | Avenido
1942 | Rabino
1943 | Salvacion
1944 | Pelaez
1945 | Yumul
1946 | Leal
1947 | Amar
1948 | Gerona
1949 | Nava
1950 | Zulueta
1951 | Tampus
1952 | Alferez
1953 | Aranas
1954 | Galvan
1955 | Francia
1956 | Agcaoili
1957 | Mirasol
1958 | Kasim
1959 | Nacion
1960 | Posadas
1961 | Canillo
1962 | de Dios
1963 | Estabillo
1964 | Gumban
1965 | Buena
1966 | Doria
1967 | Ilao
1968 | Alano
1969 | Velez
1970 | Daniel
1971 | Noble
1972 | Pardillo
1973 | Sarabia
1974 | Bayani
1975 | Llanes
1976 | Catubig
1977 | Quirante
1978 | Abbas
1979 | Vinluan
1980 | Villas
1981 | Salem
1982 | Dagohoy
1983 | Lariosa
1984 | Caparas
1985 | Verzosa
1986 | Sicat
1987 | Viñas
1988 | Buendia
1989 | Manalastas
1990 | Alipio
1991 | Candelario
1992 | Pareja
1993 | Esmael
1994 | Manahan
1995 | Amerol
1996 | Abello
1997 | Rivero
1998 | Nobleza
1999 | Coloma
2000 | Maceda
2001 | Marcial
2002 | Pamplona
2003 | Mauricio
2004 | Veloso
2005 | Balaba
2006 | Adlawan
2007 | Bañares
2008 | Aba
2009 | Daño
2010 | Arce
2011 | Magtibay
2012 | Alburo
2013 | Isip
2014 | Gervacio
2015 | Manatad
2016 | Jumao-As
2017 | Opeña
2018 | Parungao
2019 | Arnaiz
2020 | Cayanan
2021 | Abuan
2022 | Daud
2023 | Montecillo
2024 | Claveria
2025 | Gatdula
2026 | Royo
2027 | Galo
2028 | Biñas
2029 | Pedro
2030 | Celeste
2031 | Villaruz
2032 | Ayson
2033 | Rada
2034 | Palermo
2035 | Roble
2036 | Gallano
2037 | Miñoza
2038 | Suico
2039 | Barbosa
2040 | Arcega
2041 | Mission
2042 | Grande
2043 | Candido
2044 | Cerezo
2045 | Bolivar
2046 | Untalan
2047 | Pajarillo
2048 | Maquiling
2049 | Alim
2050 | Maghanoy
2051 | Tolosa
2052 | Cabiles
2053 | Tiu
2054 | Ordoñez
2055 | del Castillo
2056 | Palencia
2057 | Dimaculangan
2058 | Labajo
2059 | Guarin
2060 | Cagas
2061 | Dalida
2062 | Menor
2063 | Monte
2064 | Soliven
2065 | Garces
2066 | Mabini
2067 | Balbin
2068 | Celestial
2069 | Esmail
2070 | Balagtas
2071 | Sampang
2072 | Tejero
2073 | Camba
2074 | Villaflores
2075 | Barba
2076 | Joson
2077 | Abubacar
2078 | Paran
2079 | Espejo
2080 | Monares
2081 | Macalalad
2082 | Mayor
2083 | Cuyos
2084 | Mohamad
2085 | Somera
2086 | Malana
2087 | Marco
2088 | Pino
2089 | Brillantes
2090 | Barroga
2091 | Vallejo
2092 | Cantos
2093 | Segovia
2094 | Marfil
2095 | Abdulla
2096 | Paclibar
2097 | Piamonte
2098 | Baquiran
2099 | Bustillo
2100 | Tizon
2101 | Amper
2102 | Garay
2103 | Abordo
2104 | Palmares
2105 | Bayot
2106 | Formentera
2107 | Dacillo
2108 | Mallorca
2109 | Ricafort
2110 | Solaiman
2111 | Bacolod
2112 | Quintana
2113 | Montenegro
2114 | Agbayani
2115 | Manaloto
2116 | Paguio
2117 | Tumbaga
2118 | Pedrosa
2119 | Ubaldo
2120 | Baring
2121 | Dungca
2122 | Borbon
2123 | Mapa
2124 | Bobis
2125 | Villalobos
2126 | Pagulayan
2127 | Abo
2128 | Gascon
2129 | Alon
2130 | Vista
2131 | Galon
2132 | Badilla
2133 | Villaluz
2134 | Layug
2135 | Zafra
2136 | Abing
2137 | Dinglasan
2138 | Divina
2139 | Lanuza
2140 | Antolin
2141 | Evangelio
2142 | Rondina
2143 | Macaraig
2144 | Tapia
2145 | Baluyut
2146 | Cañada
2147 | Soberano
2148 | Madera
2149 | Sántos
2150 | Kusain
2151 | Español
2152 | Silverio
2153 | Abellana
2154 | Palad
2155 | Medalla
2156 | Ferolino
2157 | Cajes
2158 | Doctor
2159 | Azucena
2160 | Villagracia
2161 | Bato
2162 | Garrido
2163 | Cabarles
2164 | Ambrocio
2165 | Paloma
2166 | Padillo
2167 | Juarez
2168 | Prieto
2169 | Cabasag
2170 | Acob
2171 | de Juan
2172 | Montalban
2173 | Bulatao
2174 | Guerra
2175 | Morante
2176 | Escala
2177 | Palo
2178 | Yambao
2179 | Talib
2180 | Jocson
2181 | Amador
2182 | Alegado
2183 | Lising
2184 | Millan
2185 | Loreto
2186 | Maturan
2187 | Credo
2188 | Caringal
2189 | Wenceslao
2190 | Bernaldez
2191 | Laguna
2192 | Ebrahim
2193 | Tupaz
2194 | Sia
2195 | Yuson
2196 | Agravante
2197 | Joven
2198 | Balasabas
2199 | Nieva
2200 | Taruc
2201 | Capulong
2202 | Avelino
2203 | Leaño
2204 | Mira
2205 | Amora
2206 | Victoriano
2207 | Tiongson
2208 | Cabaluna
2209 | Simbulan
2210 | Wong
2211 | Laureta
2212 | Camposano
2213 | Mercader
2214 | Dolor
2215 | Usop
2216 | Guevara
2217 | Villacorta
2218 | Salgado
2219 | Degamo
2220 | Cho
2221 | Choi
2222 | Chong
2223 | Choo
2224 | Chou
2225 | Chow
2226 | Choy
2227 | Chu
2228 | Chuang
2229 | Chui
2230 | Chun
2231 | Chung
2232 | Cong
2233 | Cui
2234 | Dai
2235 | Dang
2236 | Dea
2237 | Deng
2238 | Ding
2239 | Do
2240 | Dong
2241 | Doo
2242 | Du
2243 | Duan
2244 | Dung
2245 | Eng
2246 | Fan
2247 | Fang
2248 | Fei
2249 | Feng
2250 | Fok
2251 | Fong
2252 | Foo
2253 | Fu
2254 | Fung
2255 | Gan
2256 | Gang
2257 | Gao
2258 | Gau
2259 | Ge
2260 | Geng
2261 | Goh
2262 | Gong
2263 | Gu
2264 | Guan
2265 | Guo
2266 | Ha
2267 | An
2268 | Ao
2269 | Au
2270 | Au Yeung
2271 | Ba
2272 | Bai
2273 | Ban
2274 | Bao
2275 | Bau
2276 | Bi
2277 | Bo
2278 | Bu
2279 | Cai
2280 | Cao
2281 | Cha
2282 | Chai
2283 | Cham
2284 | Chang
2285 | Chao
2286 | Chau
2287 | Che
2288 | Cheah
2289 | Chee
2290 | Chen
2291 | Cheng
2292 | Cheong
2293 | Chern
2294 | Cheung
2295 | Chew
2296 | Chi
2297 | Chia
2298 | Chiang
2299 | Chiao
2300 | Chien
2301 | Chim
2302 | Chin
2303 | Ching
2304 | Chiong
2305 | Chiou
2306 | Chiu
2307 | Hai
2308 | Han
2309 | Hang
2310 | Hao
2311 | Hau
2312 | He
2313 | Ho
2314 | Hoh
2315 | Hom
2316 | Hon
2317 | Hong
2318 | Hoo
2319 | Hou
2320 | Hsi
2321 | Hsia
2322 | Hsiao
2323 | Hsieh
2324 | Hsiung
2325 | Hsu
2326 | Hsueh
2327 | Hu
2328 | Hua
2329 | Huang
2330 | Hui
2331 | Huie
2332 | Hum
2333 | Hung
2334 | Huo
2335 | Hwang
2336 | Hy
2337 | Ing
2338 | Ip
2339 | Jan
2340 | Jang
2341 | Jen
2342 | Jeng
2343 | Jeung
2344 | Jew
2345 | Jia
2346 | Jian
2347 | Jiang
2348 | Jiao
2349 | Jim
2350 | Jin
2351 | Jing
2352 | Jo
2353 | Joe
2354 | Jong
2355 | Joo
2356 | Jou
2357 | Jow
2358 | Ju
2359 | Jue
2360 | Jung
2361 | Kam
2362 | Kan
2363 | Kang
2364 | Kao
2365 | Kau
2366 | Ke
2367 | Keng
2368 | Kho
2369 | Khoo
2370 | Kiang
2371 | King
2372 | Ko
2373 | Koh
2374 | Kong
2375 | Koo
2376 | Kook
2377 | Kou
2378 | Ku
2379 | Kuan
2380 | Kuang
2381 | Kuk
2382 | Kung
2383 | Kuo
2384 | Kwan
2385 | Kwock
2386 | Kwok
2387 | Kwon
2388 | Kwong
2389 | Lai
2390 | Lam
2391 | Lan
2392 | Lang
2393 | Lau
2394 | Lei
2395 | Leng
2396 | Leong
2397 | Leung
2398 | Lew
2399 | Li
2400 | Lian
2401 | Liang
2402 | Liao
2403 | Liaw
2404 | Lien
2405 | Liew
2406 | Lin
2407 | Ling
2408 | Liou
2409 | Liu
2410 | Lo
2411 | Loh
2412 | Lok
2413 | Long
2414 | Loo
2415 | Lou
2416 | Louie
2417 | Lu
2418 | Lua
2419 | Lui
2420 | Luk
2421 | Lum
2422 | Lung
2423 | Luo
2424 | Ma
2425 | Mah
2426 | Mai
2427 | Mak
2428 | Man
2429 | Mao
2430 | Mar
2431 | Mau
2432 | May
2433 | Mei
2434 | Meng
2435 | Miao
2436 | Min
2437 | Ming
2438 | Miu
2439 | Mo
2440 | Mok
2441 | Mon
2442 | Mou
2443 | Moy
2444 | Mu
2445 | Mui
2446 | Na
2447 | Ng
2448 | Ngai
2449 | Ngan
2450 | Ngo
2451 | Ni
2452 | Nie
2453 | Ning
2454 | Niu
2455 | On
2456 | Ou
2457 | Ou Yang
2458 | Ow
2459 | Owyang
2460 | Pan
2461 | Pang
2462 | Pao
2463 | Pau
2464 | Pei
2465 | Peng
2466 | Pi
2467 | Ping
2468 | Po
2469 | Pon
2470 | Pong
2471 | Poon
2472 | Pu
2473 | Pun
2474 | Qi
2475 | Qian
2476 | Qiao
2477 | Qin
2478 | Qiu
2479 | Qu
2480 | Quan
2481 | Que
2482 | Rao
2483 | Ren
2484 | Rong
2485 | Ruan
2486 | Sam
2487 | San
2488 | Sang
2489 | Seto
2490 | Sha
2491 | Sham
2492 | Shan
2493 | Shang
2494 | Shao
2495 | Shaw
2496 | Shek
2497 | Shen
2498 | Sheng
2499 | Sheu
2500 | Shi
2501 | Shiau
2502 | Shieh
2503 | Shih
2504 | Shing
2505 | Shiu
2506 | Shu
2507 | Shum
2508 | Shy
2509 | Shyu
2510 | Si
2511 | Sieh
2512 | Sin
2513 | Sing
2514 | Sit
2515 | Situ
2516 | Siu
2517 | So
2518 | Soh
2519 | Song
2520 | Soo
2521 | Soo Hoo
2522 | Soon
2523 | Soong
2524 | Su
2525 | Suen
2526 | Sui
2527 | Sum
2528 | Sun
2529 | Sung
2530 | Sze
2531 | Szeto
2532 | Tai
2533 | Tam
2534 | Tang
2535 | Tao
2536 | Tay
2537 | Te
2538 | Teh
2539 | Teng
2540 | Teo
2541 | Tian
2542 | Tien
2543 | Tin
2544 | Ting
2545 | To
2546 | Toh
2547 | Tom
2548 | Tong
2549 | Tsai
2550 | Tsang
2551 | Tsao
2552 | Tsay
2553 | Tse
2554 | Tseng
2555 | Tso
2556 | Tsoi
2557 | Tsou
2558 | Tsu
2559 | Tsui
2560 | Tu
2561 | Tuan
2562 | Tung
2563 | Tzeng
2564 | U
2565 | Un
2566 | Ung
2567 | Wah
2568 | Wai
2569 | Wan
2570 | Wang
2571 | Wee
2572 | Wei
2573 | Wen
2574 | Weng
2575 | Wing
2576 | Woo
2577 | Woon
2578 | Wu
2579 | Xi
2580 | Xia
2581 | Xiang
2582 | Xiao
2583 | Xie
2584 | Xin
2585 | Xing
2586 | Xiong
2587 | Xu
2588 | Xue
2589 | Yam
2590 | Yan
2591 | Yang
2592 | Yao
2593 | Yau
2594 | Yaw
2595 | Ye
2596 | Yee
2597 | Yeh
2598 | Yen
2599 | Yep
2600 | Yeung
2601 | Yi
2602 | Yim
2603 | Yin
2604 | Ying
2605 | Yip
2606 | Yiu
2607 | Yong
2608 | Yoon
2609 | You
2610 | Young
2611 | Yuan
2612 | Yue
2613 | Yuen
2614 | Yun
2615 | Yung
2616 | Zang
2617 | Zeng
2618 | Zha
2619 | Zhan
2620 | Zhang
2621 | Zhao
2622 | Zhen
2623 | Zheng
2624 | Zhong
2625 | Zhou
2626 | Zhu
2627 | Zhuang
2628 | Zhuo
2629 | Zong
2630 | Zou
--------------------------------------------------------------------------------