├── 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 |
19 | 20 | 21 | 22 |
23 | 26 |
27 | 28 | 29 | 30 |
31 |
32 | {% if results %} 33 | {% for result in results %} 34 |
35 | 36 | 37 | 38 |
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 | 57 | 58 | 59 | {% for json in tikwm_freq %} 60 | {% if json %} 61 | 62 | 63 | 64 | 65 | {% else %} 66 | {% endif %} 67 | {% endfor %} 68 | 69 | {% endif %} 70 |
FreqProfile
{{ tikwm_freq[json] }}{{ json }}
71 |
72 | 73 |
74 | Youtube Links 75 | 76 | 77 | {% for link in yt_links %} 78 | {% if link %} 79 | 80 | 81 | 82 | {% endif %} 83 | {% endfor %} 84 | 85 |
{{ link }}
86 |
87 | 88 |
89 | First Names 90 | 91 | 92 | {% for names in firstname %} 93 | 94 | 95 | 96 | {% endfor %} 97 | 98 |
{{ names }}
99 |
100 | 101 |
102 | Last Names 103 | 104 | 105 | {% for names in lastname %} 106 | 107 | 108 | 109 | {% endfor %} 110 | 111 |
{{ names }}
112 |
113 | 114 |
115 | Frequent Words 116 | 117 | 118 | {% for word in freqlist %} 119 | 120 | 121 | 122 | {% endfor %} 123 | 124 |
{{ word }}
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 --------------------------------------------------------------------------------