diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 000000000..aefa832ab Binary files /dev/null and b/.DS_Store differ diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 460c78a53..000000000 --- a/.dockerignore +++ /dev/null @@ -1,30 +0,0 @@ - - -__pycache__/ -*.py[cod] -*$py.class - - -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - - - -build/ - -/profiles/ - -/output/ - -/cache/ - -/error_logs/ - -local_storage.json - -db.sqlite3 \ No newline at end of file diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 335b80d04..000000000 --- a/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ - - -__pycache__/ -*.py[cod] -*$py.class - - -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - - - -build/ - -/profiles/ - -/output/ - -/cache/ - -/error_logs/ - -local_storage.json - -db.sqlite3 -.DS_Store diff --git a/.gitpod.yml b/.gitpod.yml deleted file mode 100644 index 2b5906a1b..000000000 --- a/.gitpod.yml +++ /dev/null @@ -1,4 +0,0 @@ -image: chetan1111/gitpod-botasaurus:3 - -tasks: - - init: pip install -r requirements.txt && python run.py install \ No newline at end of file diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 72b21408b..000000000 --- a/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM chetan1111/botasaurus:latest - -ENV PYTHONUNBUFFERED=1 - -COPY requirements.txt . - -RUN python -m pip install -r requirements.txt - -RUN mkdir app -WORKDIR /app -COPY . /app - -RUN python run.py install - -CMD ["python", "run.py"] \ No newline at end of file diff --git a/README.md b/README.md index c2062f682..e706f4f1e 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,8 @@ -![Google Maps Scraper Feautred Image](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/google-maps-scraper-feautred-image.png) +![Google Maps Extractor Feautred Image](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/google-maps-scraper-feautred-image.png)

✨ Google Maps Scraper 🤖

- -
(Programming Language - Python 3)
-

google-maps-scraper forks @@ -13,9 +10,6 @@ Repo stars - - google-maps-scraper License - issues @@ -24,94 +18,82 @@ View

-

- - Open in Gitpod - -

--- ## Disclaimer for Google Maps Scraper Project -> This Google Maps Scraper is provided for educational and research purposes only. By using this Google Maps Scraper, you agree to comply with local and international laws regarding data scraping and privacy. The authors and contributors are not responsible for any misuse of this software. This tool should not be used to violate the rights of others, for unethical purposes, or to use data in an unauthorized or illegal manner. +> This Google Maps Scraper is provided for educational and research purposes only. By using this Google Maps Extractor, you agree to comply with local and international laws regarding data scraping and privacy. The authors and contributors are not responsible for any misuse of this software. This tool should not be used to violate the rights of others, for unethical purposes, or to use data in an unauthorized or illegal manner. -We take the concerns of the Google Maps Scraper Project very seriously. For any concerns, please contact Chetan Jain at [chetan@omkar.cloud](mailto:chetan@omkar.cloud). We will promptly reply to your emails. +We take the concerns of the Google Maps Extractor Project very seriously. For any concerns, please contact Chetan Jain at [chetan@omkar.cloud](mailto:chetan@omkar.cloud). We will promptly reply to your emails. ## Explore Our Other Awesome Products -- ✅ [BOTASAURUS](https://github.com/omkarcloud/botasaurus): The All-in-One Web Scraping Framework with Anti-Detection, Parallelization, Asynchronous, and Caching Superpowers. - - - - - - +- ✅ [BOTASAURUS](https://www.omkar.cloud/l/google-maps-to-botasaurus/): The All-in-One Web Scraping Framework with Anti-Detection, Parallelization, Asynchronous, and Caching Superpowers. --- -Google Maps Scraper helps you find Business Profiles from Google Maps. +Google Maps Extractor helps you find Business Profiles from Google Maps. ## ⚡ Benefits -1. Easy-to-use, friendly dashboard. - -2. Limitless scraping: Say sayonara to costly subscriptions or expensive pay-per-result fees. - -3. Highly scalable, capable of running on Kubernetes, Docker, and servers. - -4. Scrape data for a specific type of business across all cities in a country. - -5. Get the exact results you need by easily sorting, filtering, and exporting data as CSV, Excel, or JSON files. - -6. Scrape reviews while ensuring the privacy of reviewers is maintained. +- Get Un-Limited Search Results, Say a Big-Big NO to Websites Selling Expensive Plans +- 100% Accurate, 40+ Data Points Extracted in Real-Time In the next 5 minutes, you'll extract **120 Search Results** from Google Maps. -![Google Maps Data Scraper CSV Result](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/gmap_result.png) +![Google Maps Data Extractor CSV Result](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/gmap_result.png) ## 📦 Requirements To use this tool, you'll need: -- Node.js version 16 or later to run the UI Dashboard (please check your Node.js version by running `node -v`) -- Python for running the scraper +- Google Chrome Browser -**Don't have Node.js or Python? No problem!** +Let's get started by following these super simple steps: -You can easily run this tool within Gitpod, a cloud-based development environment. We'll cover how to set that up later. +**1️⃣ Download and Install the Magic 🧙‍♀️:** -## 🚀 Getting Started +**1. For Windows:** +- [Download the Windows Version](https://google-maps-extractor-omkar-cloud.s3.amazonaws.com/Google+Maps+Extractor.exe) +- Temporarily, You will face a blue popup stating that Windows Defender has prevented an app from an **unknown publisher** from starting. We aim to become a verified publisher soon to resolve this. (Rest assured, the app is 100% safe and secure, with over 1,000 stars on GitHub and more than 500+ happy customers.) +- You may also see a popup indicating that Windows Firewall has blocked some features of the app. Please click 'Allow Access' to continue. -Let's get started by following these super simple steps: +**2. For Mac:** +- [Download the Mac Version](https://google-maps-extractor-omkar-cloud.s3.amazonaws.com/Google+Maps+Extractor.dmg) +- Our Mac version is signed and notarized by Apple, so you can install it without facing any issues. -1️⃣ Clone the Magic 🧙‍♀️: -```shell -git clone https://github.com/omkarcloud/google-maps-scraper -cd google-maps-scraper -``` +**3. For Ubuntu/Debian:** +- For Most Desktop Users: [Download .deb](https://google-maps-extractor-omkar-cloud.s3.amazonaws.com/Google+Maps+Extractor-amd64.deb) +- For Raspberry Pi and Some Cloud Servers: [Download .deb for arm64](https://google-maps-extractor-omkar-cloud.s3.amazonaws.com/Google+Maps+Extractor-arm64.deb) -2️⃣ Install Dependencies 📦: -```shell -python -m pip install -r requirements.txt && python run.py install -``` -3️⃣ Launch the UI Dashboard 🚀: -```shell -python run.py +On Ubuntu 24.04 and later, you can run the app **only** from the terminal using the following command: + +```bash +googlemapsextractor --no-sandbox ``` -4️⃣ Open your browser and go to [http://localhost:3000](http://localhost:3000), then press the Run button to have 120 search results within 2 minutes. 😎 +**4. For Fedora/CentOS/Red Hat:** +- For Most Desktop Users: [Download .rpm](https://google-maps-extractor-omkar-cloud.s3.amazonaws.com/Google+Maps+Extractor-x86_64.rpm) +- For Raspberry Pi and Some Cloud Servers: [Download .rpm for arm64](https://google-maps-extractor-omkar-cloud.s3.amazonaws.com/Google+Maps+Extractor-aarch64.rpm) + +**2️⃣ Now, Press the Run button to have 120 search results within 2 minutes. 😎** -![GIF of Google Maps Scraper Visit, Highlish Keyword, Run, See Results](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/demo.gif) +![GIF of Google Maps Extractor Visit, Highlight Keyword, Run, See Results](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/demo.gif) -*Note: If you don't have Node.js 16+ and Python installed or you are facing errors, follow this Simple FAQ [here](https://github.com/omkarcloud/google-maps-scraper/blob/master/advanced.md#-i-dont-have-python-or-im-facing-errors-when-setting-up-the-scraper-on-my-pc-how-to-solve-it), and you will have your search results in the next 5 Minutes* +*Note:* +1. If you face any problems or have questions, please reach out to us via: + - [WhatsApp](https://api.whatsapp.com/send?phone=918178804274&text=I%20need%20help%20with%20the%20installation%20of%20the%20Google%20Maps%20Extractor%20Tool.) + - [or Email](mailto:happy.to.help@omkar.cloud?subject=Help%20with%20Google%20Maps%20Extractor%20Tool%20Installation&body=I%20need%20help%20with%20the%20installation%20of%20the%20Google%20Maps%20Extractor%20Tool.) + +Rest assured, we will respond to your message within 1 Working Day. ## ⚡ Enlightening Questions ### ❓ How to Get Results for My Queries? -1. Visit [http://localhost:3000](http://localhost:3000) and enter your search queries. +1. Enter your search queries. ![Queries](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/queries.png) @@ -119,9 +101,14 @@ python run.py ![Run](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/run.png) +3. Get the results in 2 minutes, woo hoo! 🎉 + +![results-page.png](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/results-page.png) + + ### ❓ What are the different pages and how do they help me? -Primarily, there are 3 pages in the UI Dashboard: +Mainly, there are 3 pages in the UI Dashboard: - Home Page ('/') - Output Page ('/output') @@ -141,34 +128,10 @@ You can input your queries here and search by: - Scrape data for a specific type of business across all cities in a country. ![country-section](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/country-section.png) -- Get Social Details of Profiles like Email, LinkedIn, Facebook, Twitter, etc. -![social-section.png](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/social-section.png) - -Extracting social details is a compute-intensive process that involves searching various directories and websites parallelly using proxies. To help with this process, we've created an API. - -Kindly follow these steps to use the API and get the social details of the profiles: - -1. Sign up on RapidAPI by visiting [this link](https://rapidapi.com/auth/sign-up). - -![Sign Up on RapidAPI](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/sign-up.png) - -2. Subscribe to the Free Plan by visiting [this link](https://rapidapi.com/Chetan11dev/api/website-social-scraper-api/pricing). - -![Subscribe to Free Plan](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/subscribe.png) - -3. Copy the API key. -![Copy the API Key](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/key.png) - -4. Put the Key in the "Email and Social Links Extraction" section and run it: - -![social-section.png](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/social-section.png) - -The first 200 contact details are free to scrape with the API. After that, you can upgrade to the Pro Plan to scrape 1,000 contacts for 9,ドル which is affordable considering if you land just one customer, you could easily make hundreds of dollars, easily covering the investment. - -- Scrape Reviews +- Scrape Reviews ![reviews-section](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/reviews-section.png) -Kindly note that due to privacy concerns, we do not scrape personally identifiable information of reviewers, such as names, profile photos, and review links. We only scrape the review text, rating, owner response, and similar non-personally identifiable information. +Please note that you are guaranteed to receive at least **240 reviews** per place. However, in some cases, due to technical limitations, the complete set of reviews may not be available. #### Output Page ('/output') ![output-page.png](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/output-page.png) @@ -179,7 +142,7 @@ The Output page helps you manage your tasks. You can use it to: - Abort or delete any task. ![abort-delete.png](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/abort-delete.png) -- Additionally, Whenever you run a query, a task named "All Task" will be created for it, which combines results from multiple queries. +- Additionally, whenever you run a query, a task named "All Task" will be created for it, which combines results from multiple queries. For example, if you search for "Web Developers in Bangalore" and "Web Developers in Mumbai", the "All Task" will show you the combined results for both queries. @@ -217,40 +180,76 @@ To find the exact results you're looking for, click the "Show Filters" button an Download results in various formats (CSV, JSON, Excel) using the export button. -#### Api Page ('/api-integration') +### ❓ How many search results can I get in a single query? + +Google Maps gives at most 120 results per search query. Don't worry about running out of data, as you can always use country-level scraping to scrape thousands of cities. -![api-integration-page.png](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/api-integration-page.png) -The API Page provides documentation on integration of the Google Maps Scraper into your application via a REST API, for running tasks, getting results, and managing tasks. +### ❓ Are there any usage limits? -### ❓ How many search results can I get in a single query? +The free version only allows 20 searches per month. To get unlimited searches for a lifetime, consider upgrading to the Pro Version: +- The Pro Version gives you access to Unlimited searches for lifetime. Say a Big-Big NO to websites selling expensive plans. +- 100% accurate, [40+ data points](https://github.com/omkarcloud/google-maps-scraper/blob/master/fields.md) extracted in real-time. +- Only a one-time investment with lifetime updates and top-notch WhatsApp support, all for just 28ドル. +- Best of all? Absolutely zero risk, as we offer a generous 90-day, no-questions-asked refund guarantee. -Google Maps give at most 120 results per search query. Don't worry about running out of data, as you can always use country-level scraping to scrape thousands of cities. +[500+ Happy People](https://github.com/sponsors/omkarcloud?frequency=one-time) have already invested in the Pro Version and are reaping its benefits to grow their businesses. +![people](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/people-new.png) -### ❓ How can I access additional information like websites, phone numbers, geo-coordinates, and price ranges? +### ❓ How does your tool stack up against other website-based scrapers? -Free versions shows only a limited set of data points, the fields are hidden with "*". To access additional datapoints, consider upgrading to the Pro Version: +Our tool offers several advantages over other website-based scrapers: -* 🌐 **Website** -* 📞 **Phone Numbers** -* 🌍 **Geo-Coordinates** -* 💰 **Price Range** -* **And many more!** Explore a full list of data points here: [https://github.com/omkarcloud/google-maps-scraper/blob/master/fields.md](https://github.com/omkarcloud/google-maps-scraper/blob/master/fields.md) +1. 🔑 Unlimited Searches for Life + The single most important reason to choose our tool is that you get unlimited searches for a lifetime. Other websites typically charge around 28ドル for just 20 searches. With us, you pay once and enjoy unlimited searches forever. -With all these additional data points, you will be able to truly harness the power of Google Maps. +2. ⚡ Faster Performance + Our tool is a desktop application, which makes it much faster than website-based scrapers. -The Pro Version is a one-time investment with lifetime updates and absolutely zero risk because we offer a generous **90-Day Refund Policy!** +3. 🖥️ Easy and User-Friendly + Using our tool is incredibly easy to use. Simply open the app, enter your query, and get the results within 2 minutes. No need to navigate through complex websites or deal with login processes. + +4. 💰 One-Time Payment, No Recurring Costs + With our tool, you **OWN** the software. There are no subscriptions or recurring charges. You make a one-time payment and receive lifetime updates, making it a cost-effective investment in the long run. + +In summary, our tool offers unlimited searches, faster performance, easy, and a one-time payment model, setting it apart from other website-based scrapers. + +### ❓ What else can I use it for? + +1. Finding Customers + +2. Hiring Top Talent + - Example: To hire a good salesperson, search for "Sales Training" in a specific country and contact the training centers for candidate recommendations. + - Benefits: + - Much Much Higher quality candidates compared to online job portals + - Saves a lot of time that would otherwise be spent screening and interviewing a much larger pool of candidates +3. Discovering the Best Service Providers + - Find top-rated service providers in your area for specific needs. + - Examples: + - Search for "Yoga Classes" in your city to find the highest-rated yoga classes for health and long life. + - Search for "Library" in your city to find the bestest place to focus on your work. + - Search for "Restaurant" in your city to find the tastiest food options. + - Search for "Computer Repair" in your city to find the most reputable and reliable computer repair shops. + - The list goes on... + +Investing in this tool can save you time and money in various aspects of your personal and professional life :) ### ❓ How to Get the Pro Version? -Visit the GitHub Sponsorship Page [here](https://github.com/sponsors/omkarcloud?frequency=one-time) and make a one time payment of 28ドル by selecting Google Maps Scraper Pro Option. +1. Create an account on Omkar Cloud by visiting [this link](https://www.omkar.cloud/auth/sign-up). +![Sign Up](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/signup.png) + +2. Go to the [Google Maps Extractor Pricing Page](https://www.omkar.cloud/tools/google-maps-extractor?initial_tab=pricing) and make a one-time payment of 28ドル using PayPal or a credit/debit card. +![Pricing Page](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/pricing.png) -![Pay](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/pay.gif) +💳 Note: Your card details are handled securely by PayPal and never shared with us. -After payment, you'll see a success screen with instructions on how to use the Pro Version: +![PayPal Secure](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/paypal-secure.png) -![Success Screen](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/success-screen.png) +After payment, you'll see a link. Visiting the link will activate the Pro Version for lifetime. + +![Purchase Success](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/purchase-success.png) ### ❓ What if I Don't Get Value from It? @@ -258,104 +257,116 @@ We wholeheartedly ❤️ believe in the value our product brings for you, especi But, we also understand the reservations you might have. -That's why we've put the ball in your court: **If, within the next 90 days, you feel that our product hasn’t met your expectations, don't hesitate. Reach out to us, and within 24 hours, we will gladly refund your money, no questions and no hassles.** +That's why we've put the ball in your court: **If, within the next 90 days, you feel that our product hasn't met your expectations, simply get a refund in 2 clicks.** -The risk is entirely on us! because we're that confident in what we've created! +The risk is entirely on us because we're that confident in what we've created! ### ❓ How Do I Get a Refund? -We are ethical and honest people, and we will not keep your money if you are not happy with our product. Requesting a refund is a simple process that should only take about 5 minutes. To request a refund, ensure you have one of the following: +Your satisfaction is **most important**. We will gladly issue a refund if you are not happy with our product. + +Requesting a refund is a **simple two-click process**: -- **A PayPal Account (e.g., "myname@example.com" or "chetan@gmail.com")** -- **or a UPI ID (For India Only) (e.g., 'myname@bankname' or 'chetan@okhdfc')** +1. Go to the [Transactions Page](https://www.omkar.cloud/billing/transaction-history). +![Transactions Page](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/transactions-page.png) -Next, follow these steps to initiate a refund: +2. Click the **Request Refund** button. +![Request Refund Button](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/request-refund-button.png) -1. Send an email to `chetan@omkar.cloud` using the following template: +3. Confirm by clicking **Request Refund** again. +![Confirm Refund Request](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/confirm-refund-request.png) - - To request a refund via PayPal: - ``` - Subject: Request Refund - Content: Please send a refund to my PayPal email: myname@example.com - ``` +✅ That's it! You'll receive a confirmation email from PayPal, and your money will be returned to your original payment method within **1–2 business days**. - - To request a refund via UPI (For India Only): - ``` - Subject: Request Refund - Content: Please send a refund to my UPI ID: myname@bankname - ``` +### ❓ Do I Need to Do Anything Else to Use the Tool Effectively? - ![Email Image](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/email.png) +1. Disable Auto Sleep Mode + Auto sleep mode will prevent the tool from running and cause tasks to fail. Here's how to turn it off: -2. Next, go to the discussion [here](https://github.com/omkarcloud/google-maps-scraper/discussions/44) and comment to request a refund using this template: - ``` - I have sent a refund request from my email: myname@example.com. - ``` + - **On Windows**: + Go to **Start**> **Settings**> **System**> **Power & battery**> **System**> **Screen & Sleep**. Set the following settings to "Never" + ![windows-sleep](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/windows-sleep.png) - ![Discussion Image](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/discussion.png) + - **On Mac**: + Open **Settings**> **Lock Screen**, then set the following settings to "Never." + ![mac-sleep](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/mac-sleep.png) + - **Linux?**: + You're awesome at computers, so go ahead and figure it out! ;) -3. You can expect to receive your refund within 1 day. We will also update you in the GitHub Discussion [here](https://github.com/omkarcloud/google-maps-scraper/discussions/44) :) +2. Ensure you maintain a stable Internet connection, as switching connections will cause currently running tasks to fail. - ![PayPal Image](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/paypal.png) +### ❓ Love It? Star It ⭐! -Also, the Complete 28ドル will be refunded to you within 24 hours, without any questions and without any hidden charges. +I really hope that Google Maps Extractor will prove to be a valuable tool in helping you find more customers. -### ❓ Could you share resources that would be helpful to me, as I am sending personalized emails providing people with useful services? +If you're finding it helpful, could you please give us a **star ⭐** on GitHub? -I recommend reading [The Cold Email Manifesto](https://www.amazon.com/Cold-Email-Manifesto-pipeline-business-ebook/dp/B0B1DYNNSL) by Alex Berman to learn how to emails that get replies. +It only takes a click, but it means the world to me! -Rest assured, I have your interest at my heart, and the above link is not an affiliate link. It's just a really awesome book, that's why I'm recommending it to you. -### ❓ This Scraper is Truly One-of-a-Kind, Something I've Never Seen Before. How Did You Build It? +![Star us on GitHub](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/star-us.png) -Thank you! We used Botasaurus, which is the secret behind our awesome Google Maps Scraper. +### ❓ This Extractor is Truly One-of-a-Kind, Something I've Never Seen Before. How Did You Build It? + +Thank you! We used Botasaurus Desktop, which is the secret behind our awesome Google Maps Extractor. Botasaurus is a web scraping framework that makes life a lot easier for web scrapers. -It handled the hardest parts of our scraper, such as: +It handled the hardest parts of our extractor, such as: -- Creating a gorgeous UI dashboard with task management features +- Building a desktop app for Windows, Mac, and Linux. +- Creating a fantastic UI dashboard with task management features. - Sorting, filtering, and exporting data as CSV, JSON, Excel, etc. -- Caching, parallel and asynchronous scraping -- Built-in integration with Kubernetes, Docker, Server, Gitpod, and a REST API +- Caching, parallel, and asynchronous scraping. -If you're a web scraper, I really recommend learning about Botasaurus [here](https://github.com/omkarcloud/botasaurus) 🚀. +If you're a web scraper, I really recommend learning about Botasaurus Desktop [here](https://github.com/omkarcloud/botasaurus/blob/master/botasaurus-desktop-tutorial.md) 🚀. -Trust me, learning Botasaurus will only take 20 minutes, but I guarantee it will definitely save you thousands of hours in your life as a web scraper. +Trust me, learning Botasaurus Desktop will only take 5 minutes, but I guarantee it will definitely save you thousands of hours in your life as a web scraper.

- + botasaurus

-### ❓ Advanced Questions -Having read this page, you have all the knowledge needed to effectively use the tool. +### ❓ How can I get results via API? -You may choose to read the following questions based on your interests: +If you are a developer and need to get results programmatically, we offer a dedicated **[Google Maps Extractor API](https://www.omkar.cloud/tools/google-maps-extractor-api)**. It's perfect for integrating Google Maps data directly into your applications or running automated jobs on virtual machines. -1. [I Don't Have Python, or I'm Facing Errors When Setting Up the Scraper on My PC. How to Solve It?](https://github.com/omkarcloud/google-maps-scraper/blob/master/advanced.md#-i-dont-have-python-or-im-facing-errors-when-setting-up-the-scraper-on-my-pc-how-to-solve-it) -2. [Do I Need Proxies?](https://github.com/omkarcloud/google-maps-scraper/blob/master/advanced.md#-do-i-need-proxies) +The API includes all the features of our pro desktop app, including Unlimited searches and Unlimited devices, plus additional benefits: +- REST API interface +- Detailed documentation for Google Cloud VM installation -### ❓ Need More Help or Have Additional Questions? +The API is available for 16ドル/month, and you can try it free at [Google Maps Extractor API](https://www.omkar.cloud/tools/google-maps-extractor-api). -For further help, feel free to reach out to us through: +### ❓ In the exported file, the characters are in English instead of Japanese/Korean/Hindi. How can I preserve the original language when exporting? + +When exporting, any non-English characters are converted to English. For example, "しんちゃん" is converted to "Shinchan" -- **WhatsApp:** If you prefer WhatsApp, simply send a message [here](https://api.whatsapp.com/send?phone=918295042963&text=Hi,%20I%20would%20like%20to%20learn%20more%20about%20your%20products). Also, to help me provide the best possible answer, please include as much detail as possible. +We do this because Excel can't render non-English characters properly. - [![Contact Us on WhatsApp about Google Maps Scraper](https://raw.githubusercontent.com/omkarcloud/assets/master/images/whatsapp-us.png)](https://api.whatsapp.com/send?phone=918295042963&text=Hi,%20I%20would%20like%20to%20learn%20more%20about%20your%20products) +If you want to retain the original characters and avoid converting them to English, simply **uncheck** the English conversion checkbox: +![Uncheck English](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/uncheck-english.png) -- **GitHub Discussions:** If you believe your question could benefit the community, feel free to post it in our GitHub discussions [here](https://github.com/omkarcloud/google-maps-scraper/discussions). +Also, in case you are unable to view the non-English characters properly in Excel, then the easiest solution is to upload the file to Google Sheets, which should render the characters properly. - [![Contact Us on GitHub Discussion](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/ask-on-github.png)](https://github.com/omkarcloud/google-maps-scraper/discussions) +![character fix](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/character-fix.gif) -- **Email:** If you prefer email, kindly send your queries to [chetan@omkar.cloud](mailto:chetan@omkar.cloud). Also, to help me provide the best possible answer, please include as much detail as possible. +### ❓ Need More Help or Have Additional Questions? - [![Contact Us on Email about Google Maps Scraper](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/ask-on-email.png)](mailto:chetan@omkar.cloud) +For further help, feel free to reach out to us through: -We look forward to helping you and will respond to emails and whatsapp messages within 24 hours. -Also, If buying pro version is financially challenging for you, kindly let us know :) +- **WhatsApp:** If you prefer WhatsApp, simply send a message [here](https://api.whatsapp.com/send?phone=918178804274&text=I%20need%20help%20with%20using%20the%20Google%20Maps%20Extractor%20Tool.). Also, to help us provide the best possible answer, please include as much detail as possible. + + [![Contact Us on WhatsApp about Google Maps Scraper](https://raw.githubusercontent.com/omkarcloud/assets/master/images/whatsapp-us.png)](https://api.whatsapp.com/send?phone=918178804274&text=I%20need%20help%20with%20using%20the%20Google%20Maps%20Extractor%20Tool.) + + +- **Email:** If you prefer email, kindly send your queries to [happy.to.help@omkar.cloud](mailto:happy.to.help@omkar.cloud?subject=Help%20with%20Google%20Maps%20Extractor%20Tool&body=I%20need%20help%20with%20using%20the%20Google%20Maps%20Extractor%20Tool.). Also, to help us provide the best possible answer, please include as much detail as possible. + + [![Contact Us on Email about Google Maps Scraper](https://raw.githubusercontent.com/omkarcloud/assets/master/images/ask-on-email.png)](mailto:happy.to.help@omkar.cloud?subject=Help%20with%20Google%20Maps%20Extractor%20Tool&body=I%20need%20help%20with%20using%20the%20Google%20Maps%20Extractor%20Tool.) + +We look forward to helping you and will reply to your emails and WhatsApp messages within 1 Working Day. Good Luck! @@ -367,4 +378,8 @@ It's just one click, but it means the world to me. [![Stargazers for @omkarcloud/google-maps-scraper](https://bytecrank.com/nastyox/reporoster/php/stargazersSVG.php?user=omkarcloud&repo=google-maps-scraper)](https://github.com/omkarcloud/google-maps-scraper/stargazers) -## Made with ❤️ using [Botasaurus Web Scraping Framework](https://github.com/omkarcloud/botasaurus) +## Made with ❤️ using [Botasaurus Web Scraping Framework](https://www.omkar.cloud/l/google-maps-to-botasaurus/) + +### Not in your Budget? + +If you are a student or a person just starting your business, and the Pro Version is not in your budget, you can let us know via [WhatsApp](https://api.whatsapp.com/send?phone=918178804274&text=Kindly%20provide%20me%20the%20Pro%20Version%20of%20the%20Google%20Maps%20Extractor,%20as%20it%20is%20not%20in%20my%20budget.) or [Email](mailto:happy.to.help@omkar.cloud?subject=Request%20for%20Pro%20Version%20of%20Google%20Maps%20Extractor&body=Kindly%20provide%20me%20the%20Pro%20Version%20of%20the%20Google%20Maps%20Extractor%2C%20as%20it%20is%20not%20in%20my%20budget.) and we will provide you with the Pro Version. Don't hesitate, it will take 5 minutes to WhatsApp/Email, and it will make us mastastically happy 😊 to help you. \ No newline at end of file diff --git a/advanced.md b/advanced.md deleted file mode 100644 index 19e38c528..000000000 --- a/advanced.md +++ /dev/null @@ -1,64 +0,0 @@ -## 🤔 Advanced Questions - -### ❓ I don't have Python, or I'm facing errors when setting up the scraper on my PC. How to solve it? - -You can easily run the scraper in Gitpod, a browser-based development environment. Set it up in just 5 minutes by following these steps: - -1. Visit [this link](https://gitpod.io/#https://github.com/omkarcloud/google-maps-scraper) and sign up using your GitHub account. - - ![Screenshot (148)](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/open-in-gitpod.png) - -2. Once signed up, open it in Gitpod. - - ![gp-continue](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/gp-continue.png) - -3. In the terminal, run the following command: - ```bash - python run.py - ``` -4. You will see a popup notification with the heading "A service is available on port 3000". In the popup notification, click the **"Open Browser"** button to open the UI Dashboard in your browser - - ![open-browser.png](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/open-browser.png) - -5. Now, you can enter your search queries and press the Run button to get the results. - - ![gitpod-image](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/gitpod-image.png) - -Note, that it's important to regularly interact with the Gitpod environment, such as clicking within it every 30 minutes, to keep the machine active and prevent automatic shutdown. - -If you don't want to click every 30 minutes, then we encourage you to install Python and Node.js on your PC and run it locally. - -### ❓ Do I Need Proxies? - -No, you do not need to use proxies, you're free to run as many queries as you like. - -### ❓ Need More Help or Have Additional Questions? - -For further help, feel free to reach out to us through: - -- **WhatsApp:** If you prefer WhatsApp, simply send a message [here](https://api.whatsapp.com/send?phone=918295042963&text=Hi,%20I%20would%20like%20to%20learn%20more%20about%20your%20products). Also, to help me provide the best possible answer, please include as much detail as possible. - - [![Contact Us on WhatsApp about Google Maps Scraper](https://raw.githubusercontent.com/omkarcloud/assets/master/images/whatsapp-us.png)](https://api.whatsapp.com/send?phone=918295042963&text=Hi,%20I%20would%20like%20to%20learn%20more%20about%20your%20products) - - -- **GitHub Discussions:** If you believe your question could benefit the community, feel free to post it in our GitHub discussions [here](https://github.com/omkarcloud/google-maps-scraper/discussions). - - [![Contact Us on GitHub Discussion](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/ask-on-github.png)](https://github.com/omkarcloud/google-maps-scraper/discussions) - -- **Email:** If you prefer email, kindly send your queries to [chetan@omkar.cloud](mailto:chetan@omkar.cloud). Also, to help me provide the best possible answer, please include as much detail as possible. - - [![Contact Us on Email about Google Maps Scraper](https://raw.githubusercontent.com/omkarcloud/google-maps-scraper/master/screenshots/ask-on-email.png)](mailto:chetan@omkar.cloud) - -We look forward to helping you and will respond to emails and whatsapp messages within 24 hours. - -Good Luck! - -## Love It? [Star It ⭐!](https://github.com/omkarcloud/google-maps-scraper) - -Become one of our amazing stargazers by giving us a star ⭐ on GitHub! - -It's just one click, but it means the world to me. - -[![Stargazers for @omkarcloud/google-maps-scraper](https://bytecrank.com/nastyox/reporoster/php/stargazersSVG.php?user=omkarcloud&repo=google-maps-scraper)](https://github.com/omkarcloud/google-maps-scraper/stargazers) - -## Made with ❤️ using [Botasaurus Web Scraping Framework](https://github.com/omkarcloud/botasaurus) diff --git a/backend/__init__.py b/backend/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/backend/category.py b/backend/category.py deleted file mode 100644 index 737507f59..000000000 --- a/backend/category.py +++ /dev/null @@ -1 +0,0 @@ -category_options = [{"value":"abbey","label":"Abbey"},{"value":"accountant","label":"Accountant"},{"value":"acupuncturist","label":"Acupuncturist"},{"value":"aeroclub","label":"Aeroclub"},{"value":"airline","label":"Airline"},{"value":"airport","label":"Airport"},{"value":"airstrip","label":"Airstrip"},{"value":"allergist","label":"Allergist"},{"value":"amphitheatre","label":"Amphitheatre"},{"value":"anesthesiologist","label":"Anesthesiologist"},{"value":"anodizer","label":"Anodizer"},{"value":"appraiser","label":"Appraiser"},{"value":"aquarium","label":"Aquarium"},{"value":"arboretum","label":"Arboretum"},{"value":"architect","label":"Architect"},{"value":"archive","label":"Archive"},{"value":"arena","label":"Arena"},{"value":"artist","label":"Artist"},{"value":"asador","label":"Asador"},{"value":"ashram","label":"Ashram"},{"value":"astrologer","label":"Astrologer"},{"value":"atm","label":"Atm"},{"value":"audiologist","label":"Audiologist"},{"value":"auditor","label":"Auditor"},{"value":"auditorium","label":"Auditorium"},{"value":"babysitter","label":"Babysitter"},{"value":"bakery","label":"Bakery"},{"value":"band","label":"Band"},{"value":"bank","label":"Bank"},{"value":"bar","label":"Bar"},{"value":"barrister","label":"Barrister"},{"value":"basilica","label":"Basilica"},{"value":"bazar","label":"Bazar"},{"value":"beautician","label":"Beautician"},{"value":"berufsfachschule","label":"Berufsfachschule"},{"value":"bistro","label":"Bistro"},{"value":"blacksmith","label":"Blacksmith"},{"value":"bookbinder","label":"Bookbinder"},{"value":"bookmaker","label":"Bookmaker"},{"value":"botanica","label":"Botanica"},{"value":"boutique","label":"Boutique"},{"value":"brewery","label":"Brewery"},{"value":"brewpub","label":"Brewpub"},{"value":"bricklayer","label":"Bricklayer"},{"value":"bridge","label":"Bridge"},{"value":"bullring","label":"Bullring"},{"value":"cafe","label":"Cafe"},{"value":"cafeteria","label":"Cafeteria"},{"value":"camp","label":"Camp"},{"value":"campground","label":"Campground"},{"value":"cannery","label":"Cannery"},{"value":"cardiologist","label":"Cardiologist"},{"value":"carpenter","label":"Carpenter"},{"value":"carpool","label":"Carpool"},{"value":"casino","label":"Casino"},{"value":"castle","label":"Castle"},{"value":"cathedral","label":"Cathedral"},{"value":"cattery","label":"Cattery"},{"value":"cemetery","label":"Cemetery"},{"value":"chalet","label":"Chalet"},{"value":"chapel","label":"Chapel"},{"value":"charcuterie","label":"Charcuterie"},{"value":"charity","label":"Charity"},{"value":"chiropractor","label":"Chiropractor"},{"value":"choir","label":"Choir"},{"value":"church","label":"Church"},{"value":"churreria","label":"Churreria"},{"value":"circus","label":"Circus"},{"value":"class","label":"Class"},{"value":"cleaners","label":"Cleaners"},{"value":"clergyman","label":"Clergyman"},{"value":"clinic","label":"Clinic"},{"value":"club","label":"Club"},{"value":"coalfield","label":"Coalfield"},{"value":"college","label":"College"},{"value":"confectionery","label":"Confectionery"},{"value":"congregation","label":"Congregation"},{"value":"consultant","label":"Consultant"},{"value":"contractor","label":"Contractor"},{"value":"conveyancer","label":"Conveyancer"},{"value":"coppersmith","label":"Coppersmith"},{"value":"cottage","label":"Cottage"},{"value":"council","label":"Council"},{"value":"counselor","label":"Counselor"},{"value":"creche","label":"Creche"},{"value":"creperie","label":"Creperie"},{"value":"dairy","label":"Dairy"},{"value":"deli","label":"Deli"},{"value":"dentist","label":"Dentist"},{"value":"dermatologist","label":"Dermatologist"},{"value":"dhaba","label":"Dhaba"},{"value":"diabetologist","label":"Diabetologist"},{"value":"dietitian","label":"Dietitian"},{"value":"diner","label":"Diner"},{"value":"disco","label":"Disco"},{"value":"distillery","label":"Distillery"},{"value":"dj","label":"Dj"},{"value":"doctor","label":"Doctor"},{"value":"doula","label":"Doula"},{"value":"dressmaker","label":"Dressmaker"},{"value":"drugstore","label":"Drugstore"},{"value":"dyeworks","label":"Dyeworks"},{"value":"electrician","label":"Electrician"},{"value":"embassy","label":"Embassy"},{"value":"endocrinologist","label":"Endocrinologist"},{"value":"endodontist","label":"Endodontist"},{"value":"endoscopist","label":"Endoscopist"},{"value":"engineer","label":"Engineer"},{"value":"engraver","label":"Engraver"},{"value":"entertainer","label":"Entertainer"},{"value":"executor","label":"Executor"},{"value":"exhibit","label":"Exhibit"},{"value":"exporter","label":"Exporter"},{"value":"fairground","label":"Fairground"},{"value":"farm","label":"Farm"},{"value":"farmstay","label":"Farmstay"},{"value":"favela","label":"Favela"},{"value":"festival","label":"Festival"},{"value":"florist","label":"Florist"},{"value":"fortress","label":"Fortress"},{"value":"foundation","label":"Foundation"},{"value":"foundry","label":"Foundry"},{"value":"frituur","label":"Frituur"},{"value":"garden","label":"Garden"},{"value":"gardener","label":"Gardener"},{"value":"gasfitter","label":"Gasfitter"},{"value":"gastroenterologist","label":"Gastroenterologist"},{"value":"gastropub","label":"Gastropub"},{"value":"gemologist","label":"Gemologist"},{"value":"genealogist","label":"Genealogist"},{"value":"geriatrician","label":"Geriatrician"},{"value":"glazier","label":"Glazier"},{"value":"goldsmith","label":"Goldsmith"},{"value":"greenhouse","label":"Greenhouse"},{"value":"gym","label":"Gym"},{"value":"gynecologist","label":"Gynecologist"},{"value":"haberdashery","label":"Haberdashery"},{"value":"hammam","label":"Hammam"},{"value":"handicraft","label":"Handicraft"},{"value":"handyman","label":"Handyman"},{"value":"hauptschule","label":"Hauptschule"},{"value":"heliport","label":"Heliport"},{"value":"helpline","label":"Helpline"},{"value":"hematologist","label":"Hematologist"},{"value":"hepatologist","label":"Hepatologist"},{"value":"herbalist","label":"Herbalist"},{"value":"homeopath","label":"Homeopath"},{"value":"hospice","label":"Hospice"},{"value":"hospital","label":"Hospital"},{"value":"hostel","label":"Hostel"},{"value":"hotel","label":"Hotel"},{"value":"hypermarket","label":"Hypermarket"},{"value":"immunologist","label":"Immunologist"},{"value":"importer","label":"Importer"},{"value":"inn","label":"Inn"},{"value":"intensivist","label":"Intensivist"},{"value":"internist","label":"Internist"},{"value":"iut","label":"Iut"},{"value":"jeweler","label":"Jeweler"},{"value":"joiner","label":"Joiner"},{"value":"junkyard","label":"Junkyard"},{"value":"karaoke","label":"Karaoke"},{"value":"kennel","label":"Kennel"},{"value":"kindergarten","label":"Kindergarten"},{"value":"kinesiologist","label":"Kinesiologist"},{"value":"kinesiotherapist","label":"Kinesiotherapist"},{"value":"kiosk","label":"Kiosk"},{"value":"laboratory","label":"Laboratory"},{"value":"landscaper","label":"Landscaper"},{"value":"lapidary","label":"Lapidary"},{"value":"laundromat","label":"Laundromat"},{"value":"laundry","label":"Laundry"},{"value":"lawyer","label":"Lawyer"},{"value":"leisurecentre","label":"Leisurecentre"},{"value":"library","label":"Library"},{"value":"lido","label":"Lido"},{"value":"liquidator","label":"Liquidator"},{"value":"locksmith","label":"Locksmith"},{"value":"lodge","label":"Lodge"},{"value":"lodging","label":"Lodging"},{"value":"lounge","label":"Lounge"},{"value":"lyceum","label":"Lyceum"},{"value":"magician","label":"Magician"},{"value":"makerspace","label":"Makerspace"},{"value":"manufacturer","label":"Manufacturer"},{"value":"marae","label":"Marae"},{"value":"marina","label":"Marina"},{"value":"market","label":"Market"},{"value":"mechanic","label":"Mechanic"},{"value":"memorial","label":"Memorial"},{"value":"meyhane","label":"Meyhane"},{"value":"midwife","label":"Midwife"},{"value":"mill","label":"Mill"},{"value":"mine","label":"Mine"},{"value":"mission","label":"Mission"},{"value":"mohel","label":"Mohel"},{"value":"monastery","label":"Monastery"},{"value":"mortuary","label":"Mortuary"},{"value":"mosque","label":"Mosque"},{"value":"motel","label":"Motel"},{"value":"musalla","label":"Musalla"},{"value":"museum","label":"Museum"},{"value":"musician","label":"Musician"},{"value":"nephrologist","label":"Nephrologist"},{"value":"neurologist","label":"Neurologist"},{"value":"neurophysiologist","label":"Neurophysiologist"},{"value":"neuropsychologist","label":"Neuropsychologist"},{"value":"neurosurgeon","label":"Neurosurgeon"},{"value":"newsstand","label":"Newsstand"},{"value":"numerologist","label":"Numerologist"},{"value":"nunnery","label":"Nunnery"},{"value":"nutritionist","label":"Nutritionist"},{"value":"observatory","label":"Observatory"},{"value":"oilfield","label":"Oilfield"},{"value":"oncologist","label":"Oncologist"},{"value":"onsen","label":"Onsen"},{"value":"ophthalmologist","label":"Ophthalmologist"},{"value":"optician","label":"Optician"},{"value":"optometrist","label":"Optometrist"},{"value":"orchard","label":"Orchard"},{"value":"orchestra","label":"Orchestra"},{"value":"orphanage","label":"Orphanage"},{"value":"orthodontist","label":"Orthodontist"},{"value":"orthoptist","label":"Orthoptist"},{"value":"osteopath","label":"Osteopath"},{"value":"otolaryngologist","label":"Otolaryngologist"},{"value":"pachinko","label":"Pachinko"},{"value":"pagoda","label":"Pagoda"},{"value":"painter","label":"Painter"},{"value":"painting","label":"Painting"},{"value":"parapharmacy","label":"Parapharmacy"},{"value":"parish","label":"Parish"},{"value":"park","label":"Park"},{"value":"pathologist","label":"Pathologist"},{"value":"patisserie","label":"Patisserie"},{"value":"pediatrician","label":"Pediatrician"},{"value":"pedorthist","label":"Pedorthist"},{"value":"periodontist","label":"Periodontist"},{"value":"pharmacy","label":"Pharmacy"},{"value":"photographer","label":"Photographer"},{"value":"physiatrist","label":"Physiatrist"},{"value":"physiotherapist","label":"Physiotherapist"},{"value":"pizzatakeaway","label":"Pizzatakeaway"},{"value":"planetarium","label":"Planetarium"},{"value":"playground","label":"Playground"},{"value":"playgroup","label":"Playgroup"},{"value":"plumber","label":"Plumber"},{"value":"podiatrist","label":"Podiatrist"},{"value":"preschool","label":"Preschool"},{"value":"priest","label":"Priest"},{"value":"prison","label":"Prison"},{"value":"proctologist","label":"Proctologist"},{"value":"promenade","label":"Promenade"},{"value":"prosthetics","label":"Prosthetics"},{"value":"prosthodontist","label":"Prosthodontist"},{"value":"psychiatrist","label":"Psychiatrist"},{"value":"psychic","label":"Psychic"},{"value":"psychoanalyst","label":"Psychoanalyst"},{"value":"psychologist","label":"Psychologist"},{"value":"psychotherapist","label":"Psychotherapist"},{"value":"pub","label":"Pub"},{"value":"publisher","label":"Publisher"},{"value":"pulmonologist","label":"Pulmonologist"},{"value":"pyrotechnician","label":"Pyrotechnician"},{"value":"quarry","label":"Quarry"},{"value":"radiologist","label":"Radiologist"},{"value":"radiotherapist","label":"Radiotherapist"},{"value":"rafting","label":"Rafting"},{"value":"ranch","label":"Ranch"},{"value":"realschule","label":"Realschule"},{"value":"recruiter","label":"Recruiter"},{"value":"rectory","label":"Rectory"},{"value":"reflexologist","label":"Reflexologist"},{"value":"remodeler","label":"Remodeler"},{"value":"restaurant","label":"Restaurant"},{"value":"rheumatologist","label":"Rheumatologist"},{"value":"rodeo","label":"Rodeo"},{"value":"rugby","label":"Rugby"},{"value":"sacem","label":"Sacem"},{"value":"saddlery","label":"Saddlery"},{"value":"sailmaker","label":"Sailmaker"},{"value":"sambodrome","label":"Sambodrome"},{"value":"sauna","label":"Sauna"},{"value":"scaffolder","label":"Scaffolder"},{"value":"school","label":"School"},{"value":"scouting","label":"Scouting"},{"value":"sculptor","label":"Sculptor"},{"value":"sculpture","label":"Sculpture"},{"value":"seitai","label":"Seitai"},{"value":"seminary","label":"Seminary"},{"value":"sexologist","label":"Sexologist"},{"value":"shelter","label":"Shelter"},{"value":"shipyard","label":"Shipyard"},{"value":"shopfitter","label":"Shopfitter"},{"value":"showroom","label":"Showroom"},{"value":"shrine","label":"Shrine"},{"value":"silversmith","label":"Silversmith"},{"value":"slaughterhouse","label":"Slaughterhouse"},{"value":"soapland","label":"Soapland"},{"value":"spa","label":"Spa"},{"value":"stable","label":"Stable"},{"value":"stadium","label":"Stadium"},{"value":"stage","label":"Stage"},{"value":"statuary","label":"Statuary"},{"value":"store","label":"Store"},{"value":"stylist","label":"Stylist"},{"value":"supermarket","label":"Supermarket"},{"value":"surgeon","label":"Surgeon"},{"value":"surveyor","label":"Surveyor"},{"value":"synagogue","label":"Synagogue"},{"value":"tailor","label":"Tailor"},{"value":"tannery","label":"Tannery"},{"value":"taxidermist","label":"Taxidermist"},{"value":"toolroom","label":"Toolroom"},{"value":"translator","label":"Translator"},{"value":"turnery","label":"Turnery"},{"value":"university","label":"University"},{"value":"urologist","label":"Urologist"},{"value":"velodrome","label":"Velodrome"},{"value":"venereologist","label":"Venereologist"},{"value":"veterinarian","label":"Veterinarian"},{"value":"villa","label":"Villa"},{"value":"vineyard","label":"Vineyard"},{"value":"warehouse","label":"Warehouse"},{"value":"weir","label":"Weir"},{"value":"welder","label":"Welder"},{"value":"wholesaler","label":"Wholesaler"},{"value":"winery","label":"Winery"},{"value":"woodworker","label":"Woodworker"},{"value":"yakatabune","label":"Yakatabune"},{"value":"yeshiva","label":"Yeshiva"},{"value":"zoo","label":"Zoo"},{"value":"aadhar center","label":"Aadhar Center"},{"value":"abarth dealer","label":"Abarth Dealer"},{"value":"abortion clinic","label":"Abortion Clinic"},{"value":"abrasives supplier","label":"Abrasives Supplier"},{"value":"acai shop","label":"Acai Shop"},{"value":"acaraje restaurant","label":"Acaraje Restaurant"},{"value":"accounting firm","label":"Accounting Firm"},{"value":"accounting school","label":"Accounting School"},{"value":"acoustical consultant","label":"Acoustical Consultant"},{"value":"acrylic store","label":"Acrylic Store"},{"value":"acupuncture clinic","label":"Acupuncture Clinic"},{"value":"acupuncture school","label":"Acupuncture School"},{"value":"acura dealer","label":"Acura Dealer"},{"value":"administrative attorney","label":"Administrative Attorney"},{"value":"adoption agency","label":"Adoption Agency"},{"value":"adventure sports","label":"Adventure Sports"},{"value":"advertising agency","label":"Advertising Agency"},{"value":"advertising photographer","label":"Advertising Photographer"},{"value":"aerial photographer","label":"Aerial Photographer"},{"value":"aerobics instructor","label":"Aerobics Instructor"},{"value":"aeromodel shop","label":"Aeromodel Shop"},{"value":"aeronautical engineer","label":"Aeronautical Engineer"},{"value":"aerospace company","label":"Aerospace Company"},{"value":"afghani restaurant","label":"Afghani Restaurant"},{"value":"african restaurant","label":"African Restaurant"},{"value":"agenzia entrate","label":"Agenzia Entrate"},{"value":"aggregate supplier","label":"Aggregate Supplier"},{"value":"agistment service","label":"Agistment Service"},{"value":"agricultural association","label":"Agricultural Association"},{"value":"agricultural cooperative","label":"Agricultural Cooperative"},{"value":"agricultural engineer","label":"Agricultural Engineer"},{"value":"agricultural organization","label":"Agricultural Organization"},{"value":"agricultural production","label":"Agricultural Production"},{"value":"agricultural service","label":"Agricultural Service"},{"value":"agrochemicals supplier","label":"Agrochemicals Supplier"},{"value":"aikido club","label":"Aikido Club"},{"value":"aikido school","label":"Aikido School"},{"value":"air taxi","label":"Air Taxi"},{"value":"airbrushing service","label":"Airbrushing Service"},{"value":"aircraft dealer","label":"Aircraft Dealer"},{"value":"aircraft manufacturer","label":"Aircraft Manufacturer"},{"value":"airplane exhibit","label":"Airplane Exhibit"},{"value":"alcohol manufacturer","label":"Alcohol Manufacturer"},{"value":"alliance church","label":"Alliance Church"},{"value":"alsace restaurant","label":"Alsace Restaurant"},{"value":"alternator supplier","label":"Alternator Supplier"},{"value":"aluminium supplier","label":"Aluminium Supplier"},{"value":"aluminum welder","label":"Aluminum Welder"},{"value":"aluminum window","label":"Aluminum Window"},{"value":"amateur theatre","label":"Amateur Theatre"},{"value":"ambulance service","label":"Ambulance Service"},{"value":"american restaurant","label":"American Restaurant"},{"value":"ammunition supplier","label":"Ammunition Supplier"},{"value":"amusement center","label":"Amusement Center"},{"value":"amusement park","label":"Amusement Park"},{"value":"anago restaurant","label":"Anago Restaurant"},{"value":"andalusian restaurant","label":"Andalusian Restaurant"},{"value":"andhra restaurant","label":"Andhra Restaurant"},{"value":"anganwadi center","label":"Anganwadi Center"},{"value":"anglican church","label":"Anglican Church"},{"value":"animal hospital","label":"Animal Hospital"},{"value":"animal park","label":"Animal Park"},{"value":"animal shelter","label":"Animal Shelter"},{"value":"animation studio","label":"Animation Studio"},{"value":"anime club","label":"Anime Club"},{"value":"antique store","label":"Antique Store"},{"value":"apartment building","label":"Apartment Building"},{"value":"apartment complex","label":"Apartment Complex"},{"value":"apostolic church","label":"Apostolic Church"},{"value":"appliance store","label":"Appliance Store"},{"value":"apprenticeship center","label":"Apprenticeship Center"},{"value":"aquaculture farm","label":"Aquaculture Farm"},{"value":"aquarium shop","label":"Aquarium Shop"},{"value":"aquatic center","label":"Aquatic Center"},{"value":"arab restaurant","label":"Arab Restaurant"},{"value":"archaeological museum","label":"Archaeological Museum"},{"value":"archery club","label":"Archery Club"},{"value":"archery range","label":"Archery Range"},{"value":"archery store","label":"Archery Store"},{"value":"architects association","label":"Architects Association"},{"value":"architectural designer","label":"Architectural Designer"},{"value":"architecture firm","label":"Architecture Firm"},{"value":"architecture school","label":"Architecture School"},{"value":"argentinian restaurant","label":"Argentinian Restaurant"},{"value":"armenian church","label":"Armenian Church"},{"value":"armenian restaurant","label":"Armenian Restaurant"},{"value":"army base","label":"Army Base"},{"value":"army facility","label":"Army Facility"},{"value":"army museum","label":"Army Museum"},{"value":"aromatherapy class","label":"Aromatherapy Class"},{"value":"aromatherapy service","label":"Aromatherapy Service"},{"value":"art cafe","label":"Art Cafe"},{"value":"art center","label":"Art Center"},{"value":"art dealer","label":"Art Dealer"},{"value":"art gallery","label":"Art Gallery"},{"value":"art museum","label":"Art Museum"},{"value":"art school","label":"Art School"},{"value":"art studio","label":"Art Studio"},{"value":"arts organization","label":"Arts Organization"},{"value":"asian restaurant","label":"Asian Restaurant"},{"value":"asphalt contractor","label":"Asphalt Contractor"},{"value":"assamese restaurant","label":"Assamese Restaurant"},{"value":"assistante maternelle","label":"Assistante Maternelle"},{"value":"asturian restaurant","label":"Asturian Restaurant"},{"value":"athletic club","label":"Athletic Club"},{"value":"athletic field","label":"Athletic Field"},{"value":"athletic park","label":"Athletic Park"},{"value":"athletic track","label":"Athletic Track"},{"value":"atv dealer","label":"Atv Dealer"},{"value":"auction house","label":"Auction House"},{"value":"audi dealer","label":"Audi Dealer"},{"value":"australian restaurant","label":"Australian Restaurant"},{"value":"austrian restaurant","label":"Austrian Restaurant"},{"value":"auto auction","label":"Auto Auction"},{"value":"auto broker","label":"Auto Broker"},{"value":"auto market","label":"Auto Market"},{"value":"auto painting","label":"Auto Painting"},{"value":"auto upholsterer","label":"Auto Upholsterer"},{"value":"auto wrecker","label":"Auto Wrecker"},{"value":"automation company","label":"Automation Company"},{"value":"aviation consultant","label":"Aviation Consultant"},{"value":"awadhi restaurant","label":"Awadhi Restaurant"},{"value":"awning supplier","label":"Awning Supplier"},{"value":"ayurvedic clinic","label":"Ayurvedic Clinic"},{"value":"azerbaijani restaurant","label":"Azerbaijani Restaurant"},{"value":"baby store","label":"Baby Store"},{"value":"baden restaurant","label":"Baden Restaurant"},{"value":"badminton club","label":"Badminton Club"},{"value":"badminton complex","label":"Badminton Complex"},{"value":"badminton court","label":"Badminton Court"},{"value":"bag shop","label":"Bag Shop"},{"value":"bagel shop","label":"Bagel Shop"},{"value":"bait shop","label":"Bait Shop"},{"value":"bakery equipment","label":"Bakery Equipment"},{"value":"bakso restaurant","label":"Bakso Restaurant"},{"value":"balinese restaurant","label":"Balinese Restaurant"},{"value":"ballet school","label":"Ballet School"},{"value":"ballet theater","label":"Ballet Theater"},{"value":"balloon artist","label":"Balloon Artist"},{"value":"balloon store","label":"Balloon Store"},{"value":"bangladeshi restaurant","label":"Bangladeshi Restaurant"},{"value":"bangle shop","label":"Bangle Shop"},{"value":"bankruptcy attorney","label":"Bankruptcy Attorney"},{"value":"bankruptcy service","label":"Bankruptcy Service"},{"value":"banner store","label":"Banner Store"},{"value":"banquet hall","label":"Banquet Hall"},{"value":"baptist church","label":"Baptist Church"},{"value":"bar pmu","label":"Bar Pmu"},{"value":"bar tabac","label":"Bar Tabac"},{"value":"barbecue restaurant","label":"Barbecue Restaurant"},{"value":"barbecue spots","label":"Barbecue Spots"},{"value":"barber school","label":"Barber School"},{"value":"barber shop","label":"Barber Shop"},{"value":"bariatric surgeon","label":"Bariatric Surgeon"},{"value":"bark supplier","label":"Bark Supplier"},{"value":"barrel supplier","label":"Barrel Supplier"},{"value":"bartending school","label":"Bartending School"},{"value":"baseball club","label":"Baseball Club"},{"value":"baseball field","label":"Baseball Field"},{"value":"basket supplier","label":"Basket Supplier"},{"value":"basketball club","label":"Basketball Club"},{"value":"basketball court","label":"Basketball Court"},{"value":"basque restaurant","label":"Basque Restaurant"},{"value":"batak restaurant","label":"Batak Restaurant"},{"value":"bathroom remodeler","label":"Bathroom Remodeler"},{"value":"battery manufacturer","label":"Battery Manufacturer"},{"value":"battery store","label":"Battery Store"},{"value":"battery wholesaler","label":"Battery Wholesaler"},{"value":"bavarian restaurant","label":"Bavarian Restaurant"},{"value":"bbq area","label":"Bbq Area"},{"value":"beach club","label":"Beach Club"},{"value":"beach pavillion","label":"Beach Pavillion"},{"value":"bead store","label":"Bead Store"},{"value":"bead wholesaler","label":"Bead Wholesaler"},{"value":"bearing supplier","label":"Bearing Supplier"},{"value":"beauty salon","label":"Beauty Salon"},{"value":"beauty school","label":"Beauty School"},{"value":"bed shop","label":"Bed Shop"},{"value":"bedding store","label":"Bedding Store"},{"value":"beer distributor","label":"Beer Distributor"},{"value":"beer garden","label":"Beer Garden"},{"value":"beer hall","label":"Beer Hall"},{"value":"beer store","label":"Beer Store"},{"value":"belgian restaurant","label":"Belgian Restaurant"},{"value":"belt shop","label":"Belt Shop"},{"value":"bengali restaurant","label":"Bengali Restaurant"},{"value":"bentley dealer","label":"Bentley Dealer"},{"value":"berry restaurant","label":"Berry Restaurant"},{"value":"betawi restaurant","label":"Betawi Restaurant"},{"value":"betting agency","label":"Betting Agency"},{"value":"beverage distributor","label":"Beverage Distributor"},{"value":"bicycle club","label":"Bicycle Club"},{"value":"bicycle rack","label":"Bicycle Rack"},{"value":"bicycle store","label":"Bicycle Store"},{"value":"bicycle wholesale","label":"Bicycle Wholesale"},{"value":"bike wash","label":"Bike Wash"},{"value":"bilingual school","label":"Bilingual School"},{"value":"bingo hall","label":"Bingo Hall"},{"value":"biochemical supplier","label":"Biochemical Supplier"},{"value":"biochemistry lab","label":"Biochemistry Lab"},{"value":"biofeedback therapist","label":"Biofeedback Therapist"},{"value":"biotechnology company","label":"Biotechnology Company"},{"value":"biotechnology engineer","label":"Biotechnology Engineer"},{"value":"bird shop","label":"Bird Shop"},{"value":"birth center","label":"Birth Center"},{"value":"biryani restaurant","label":"Biryani Restaurant"},{"value":"blind school","label":"Blind School"},{"value":"blinds shop","label":"Blinds Shop"},{"value":"blood bank","label":"Blood Bank"},{"value":"blueprint service","label":"Blueprint Service"},{"value":"blues club","label":"Blues Club"},{"value":"bmw dealer","label":"Bmw Dealer"},{"value":"bmx club","label":"Bmx Club"},{"value":"bmx park","label":"Bmx Park"},{"value":"bmx track","label":"Bmx Track"},{"value":"boarding house","label":"Boarding House"},{"value":"boarding school","label":"Boarding School"},{"value":"boat builder","label":"Boat Builder"},{"value":"boat club","label":"Boat Club"},{"value":"boat dealer","label":"Boat Dealer"},{"value":"boat ramp","label":"Boat Ramp"},{"value":"boating instructor","label":"Boating Instructor"},{"value":"boiler manufacturer","label":"Boiler Manufacturer"},{"value":"boiler supplier","label":"Boiler Supplier"},{"value":"bonesetting house","label":"Bonesetting House"},{"value":"book publisher","label":"Book Publisher"},{"value":"book store","label":"Book Store"},{"value":"bookkeeping service","label":"Bookkeeping Service"},{"value":"books wholesaler","label":"Books Wholesaler"},{"value":"boot camp","label":"Boot Camp"},{"value":"boot store","label":"Boot Store"},{"value":"border guard","label":"Border Guard"},{"value":"botanical garden","label":"Botanical Garden"},{"value":"bowling alley","label":"Bowling Alley"},{"value":"bowling club","label":"Bowling Club"},{"value":"boxing club","label":"Boxing Club"},{"value":"boxing gym","label":"Boxing Gym"},{"value":"boxing ring","label":"Boxing Ring"},{"value":"bpo company","label":"Bpo Company"},{"value":"brake shop","label":"Brake Shop"},{"value":"branding agency","label":"Branding Agency"},{"value":"brazilian pastelaria","label":"Brazilian Pastelaria"},{"value":"brazilian restaurant","label":"Brazilian Restaurant"},{"value":"breakfast restaurant","label":"Breakfast Restaurant"},{"value":"brick manufacturer","label":"Brick Manufacturer"},{"value":"bridal shop","label":"Bridal Shop"},{"value":"bridge club","label":"Bridge Club"},{"value":"british restaurant","label":"British Restaurant"},{"value":"brunch restaurant","label":"Brunch Restaurant"},{"value":"buddhist temple","label":"Buddhist Temple"},{"value":"buffet restaurant","label":"Buffet Restaurant"},{"value":"bugatti dealer","label":"Bugatti Dealer"},{"value":"buick dealer","label":"Buick Dealer"},{"value":"building consultant","label":"Building Consultant"},{"value":"building designer","label":"Building Designer"},{"value":"building firm","label":"Building Firm"},{"value":"building inspector","label":"Building Inspector"},{"value":"building society","label":"Building Society"},{"value":"building surveyor","label":"Building Surveyor"},{"value":"bulgarian restaurant","label":"Bulgarian Restaurant"},{"value":"burmese restaurant","label":"Burmese Restaurant"},{"value":"burrito restaurant","label":"Burrito Restaurant"},{"value":"bus charter","label":"Bus Charter"},{"value":"bus company","label":"Bus Company"},{"value":"bus depot","label":"Bus Depot"},{"value":"business broker","label":"Business Broker"},{"value":"business center","label":"Business Center"},{"value":"business park","label":"Business Park"},{"value":"business school","label":"Business School"},{"value":"butcher shop","label":"Butcher Shop"},{"value":"butsudan store","label":"Butsudan Store"},{"value":"cabaret club","label":"Cabaret Club"},{"value":"cabinet maker","label":"Cabinet Maker"},{"value":"cabinet store","label":"Cabinet Store"},{"value":"cable company","label":"Cable Company"},{"value":"cadillac dealer","label":"Cadillac Dealer"},{"value":"cajun restaurant","label":"Cajun Restaurant"},{"value":"cake shop","label":"Cake Shop"},{"value":"californian restaurant","label":"Californian Restaurant"},{"value":"call center","label":"Call Center"},{"value":"call shop","label":"Call Shop"},{"value":"calligraphy lesson","label":"Calligraphy Lesson"},{"value":"cambodian restaurant","label":"Cambodian Restaurant"},{"value":"camera store","label":"Camera Store"},{"value":"camping cabin","label":"Camping Cabin"},{"value":"camping farm","label":"Camping Farm"},{"value":"camping store","label":"Camping Store"},{"value":"canadian restaurant","label":"Canadian Restaurant"},{"value":"candle store","label":"Candle Store"},{"value":"candy store","label":"Candy Store"},{"value":"cannabis club","label":"Cannabis Club"},{"value":"cannabis store","label":"Cannabis Store"},{"value":"canoeing area","label":"Canoeing Area"},{"value":"cantabrian restaurant","label":"Cantabrian Restaurant"},{"value":"cantonese restaurant","label":"Cantonese Restaurant"},{"value":"capoeira school","label":"Capoeira School"},{"value":"capsule hotel","label":"Capsule Hotel"},{"value":"car dealer","label":"Car Dealer"},{"value":"car factory","label":"Car Factory"},{"value":"car manufacturer","label":"Car Manufacturer"},{"value":"car repair","label":"Car Repair"},{"value":"car service","label":"Car Service"},{"value":"car wash","label":"Car Wash"},{"value":"carabinieri police","label":"Carabinieri Police"},{"value":"caribbean restaurant","label":"Caribbean Restaurant"},{"value":"carnival club","label":"Carnival Club"},{"value":"carpet installer","label":"Carpet Installer"},{"value":"carpet manufacturer","label":"Carpet Manufacturer"},{"value":"carpet store","label":"Carpet Store"},{"value":"carpet wholesaler","label":"Carpet Wholesaler"},{"value":"carvery restaurant","label":"Carvery Restaurant"},{"value":"casket service","label":"Casket Service"},{"value":"castilian restaurant","label":"Castilian Restaurant"},{"value":"cat breeder","label":"Cat Breeder"},{"value":"cat cafe","label":"Cat Cafe"},{"value":"cat trainer","label":"Cat Trainer"},{"value":"catalonian restaurant","label":"Catalonian Restaurant"},{"value":"catering service","label":"Catering Service"},{"value":"catholic cathedral","label":"Catholic Cathedral"},{"value":"catholic church","label":"Catholic Church"},{"value":"catholic school","label":"Catholic School"},{"value":"cattle farm","label":"Cattle Farm"},{"value":"cattle market","label":"Cattle Market"},{"value":"caucasian restaurant","label":"Caucasian Restaurant"},{"value":"cbse school","label":"Cbse School"},{"value":"cd store","label":"Cd Store"},{"value":"ceiling supplier","label":"Ceiling Supplier"},{"value":"cement manufacturer","label":"Cement Manufacturer"},{"value":"cement supplier","label":"Cement Supplier"},{"value":"cendol restaurant","label":"Cendol Restaurant"},{"value":"central authority","label":"Central Authority"},{"value":"central bank","label":"Central Bank"},{"value":"ceramic manufacturer","label":"Ceramic Manufacturer"},{"value":"ceramics wholesaler","label":"Ceramics Wholesaler"},{"value":"certification agency","label":"Certification Agency"},{"value":"chankonabe restaurant","label":"Chankonabe Restaurant"},{"value":"charter school","label":"Charter School"},{"value":"chartered accountant","label":"Chartered Accountant"},{"value":"cheese manufacturer","label":"Cheese Manufacturer"},{"value":"cheese shop","label":"Cheese Shop"},{"value":"cheesesteak restaurant","label":"Cheesesteak Restaurant"},{"value":"chemical engineer","label":"Chemical Engineer"},{"value":"chemical exporter","label":"Chemical Exporter"},{"value":"chemical manufacturer","label":"Chemical Manufacturer"},{"value":"chemical plant","label":"Chemical Plant"},{"value":"chemical wholesaler","label":"Chemical Wholesaler"},{"value":"chemistry faculty","label":"Chemistry Faculty"},{"value":"chemistry lab","label":"Chemistry Lab"},{"value":"chesapeake restaurant","label":"Chesapeake Restaurant"},{"value":"chess club","label":"Chess Club"},{"value":"chess instructor","label":"Chess Instructor"},{"value":"chettinad restaurtant","label":"Chettinad Restaurtant"},{"value":"chevrolet dealer","label":"Chevrolet Dealer"},{"value":"chicken hatchery","label":"Chicken Hatchery"},{"value":"chicken restaurant","label":"Chicken Restaurant"},{"value":"chicken shop","label":"Chicken Shop"},{"value":"child psychiatrist","label":"Child Psychiatrist"},{"value":"child psychologist","label":"Child Psychologist"},{"value":"childbirth class","label":"Childbirth Class"},{"value":"children hall","label":"Children Hall"},{"value":"children policlinic","label":"Children Policlinic"},{"value":"childrens cafe","label":"Childrens Cafe"},{"value":"childrens club","label":"Childrens Club"},{"value":"childrens farm","label":"Childrens Farm"},{"value":"childrens home","label":"Childrens Home"},{"value":"childrens hospital","label":"Childrens Hospital"},{"value":"childrens library","label":"Childrens Library"},{"value":"childrens museum","label":"Childrens Museum"},{"value":"childrens store","label":"Childrens Store"},{"value":"childrens theater","label":"Childrens Theater"},{"value":"chilean restaurant","label":"Chilean Restaurant"},{"value":"chimney services","label":"Chimney Services"},{"value":"chimney sweep","label":"Chimney Sweep"},{"value":"chinaware store","label":"Chinaware Store"},{"value":"chinese pastry","label":"Chinese Pastry"},{"value":"chinese restaurant","label":"Chinese Restaurant"},{"value":"chinese supermarket","label":"Chinese Supermarket"},{"value":"chinese takeaway","label":"Chinese Takeaway"},{"value":"chocolate artisan","label":"Chocolate Artisan"},{"value":"chocolate cafe","label":"Chocolate Cafe"},{"value":"chocolate factory","label":"Chocolate Factory"},{"value":"chocolate shop","label":"Chocolate Shop"},{"value":"chop bar","label":"Chop Bar"},{"value":"chophouse restaurant","label":"Chophouse Restaurant"},{"value":"christian church","label":"Christian Church"},{"value":"christian college","label":"Christian College"},{"value":"christmas market","label":"Christmas Market"},{"value":"christmas store","label":"Christmas Store"},{"value":"chrysler dealer","label":"Chrysler Dealer"},{"value":"cider bar","label":"Cider Bar"},{"value":"cider mill","label":"Cider Mill"},{"value":"cigar shop","label":"Cigar Shop"},{"value":"citroen dealer","label":"Citroen Dealer"},{"value":"city administration","label":"City Administration"},{"value":"city courthouse","label":"City Courthouse"},{"value":"city hall","label":"City Hall"},{"value":"city park","label":"City Park"},{"value":"civic center","label":"Civic Center"},{"value":"civil defence","label":"Civil Defence"},{"value":"civil engineer","label":"Civil Engineer"},{"value":"civil police","label":"Civil Police"},{"value":"civil registry","label":"Civil Registry"},{"value":"clothes market","label":"Clothes Market"},{"value":"clothing store","label":"Clothing Store"},{"value":"clothing supplier","label":"Clothing Supplier"},{"value":"clothing wholesaler","label":"Clothing Wholesaler"},{"value":"cng station","label":"Cng Station"},{"value":"coaching center","label":"Coaching Center"},{"value":"coal exporter","label":"Coal Exporter"},{"value":"coal supplier","label":"Coal Supplier"},{"value":"coat wholesaler","label":"Coat Wholesaler"},{"value":"cocktail bar","label":"Cocktail Bar"},{"value":"coed school","label":"Coed School"},{"value":"coffee roasters","label":"Coffee Roasters"},{"value":"coffee shop","label":"Coffee Shop"},{"value":"coffee stand","label":"Coffee Stand"},{"value":"coffee store","label":"Coffee Store"},{"value":"coffee wholesaler","label":"Coffee Wholesaler"},{"value":"coffin supplier","label":"Coffin Supplier"},{"value":"coin dealer","label":"Coin Dealer"},{"value":"collectibles store","label":"Collectibles Store"},{"value":"colombian restaurant","label":"Colombian Restaurant"},{"value":"comedy club","label":"Comedy Club"},{"value":"comic cafe","label":"Comic Cafe"},{"value":"commercial agent","label":"Commercial Agent"},{"value":"commercial printer","label":"Commercial Printer"},{"value":"commercial refrigeration","label":"Commercial Refrigeration"},{"value":"community center","label":"Community Center"},{"value":"community college","label":"Community College"},{"value":"community garden","label":"Community Garden"},{"value":"community school","label":"Community School"},{"value":"company registry","label":"Company Registry"},{"value":"computer club","label":"Computer Club"},{"value":"computer consultant","label":"Computer Consultant"},{"value":"computer service","label":"Computer Service"},{"value":"computer store","label":"Computer Store"},{"value":"computer wholesaler","label":"Computer Wholesaler"},{"value":"concert hall","label":"Concert Hall"},{"value":"concrete contractor","label":"Concrete Contractor"},{"value":"concrete factory","label":"Concrete Factory"},{"value":"condiments supplier","label":"Condiments Supplier"},{"value":"condominium complex","label":"Condominium Complex"},{"value":"confectionery wholesaler","label":"Confectionery Wholesaler"},{"value":"conference center","label":"Conference Center"},{"value":"conservation department","label":"Conservation Department"},{"value":"conservative club","label":"Conservative Club"},{"value":"conservative synagogue","label":"Conservative Synagogue"},{"value":"conservatory specialist","label":"Conservatory Specialist"},{"value":"consignment shop","label":"Consignment Shop"},{"value":"construction company","label":"Construction Company"},{"value":"container service","label":"Container Service"},{"value":"container supplier","label":"Container Supplier"},{"value":"container terminal","label":"Container Terminal"},{"value":"containers supplier","label":"Containers Supplier"},{"value":"continental restaurant","label":"Continental Restaurant"},{"value":"convenience store","label":"Convenience Store"},{"value":"convention center","label":"Convention Center"},{"value":"cookie shop","label":"Cookie Shop"},{"value":"cooking class","label":"Cooking Class"},{"value":"cooking school","label":"Cooking School"},{"value":"cooling plant","label":"Cooling Plant"},{"value":"cooperative bank","label":"Cooperative Bank"},{"value":"copper supplier","label":"Copper Supplier"},{"value":"copy shop","label":"Copy Shop"},{"value":"copywriting service","label":"Copywriting Service"},{"value":"corporate campus","label":"Corporate Campus"},{"value":"corporate office","label":"Corporate Office"},{"value":"cosmetic dentist","label":"Cosmetic Dentist"},{"value":"cosmetic surgeon","label":"Cosmetic Surgeon"},{"value":"cosmetics industry","label":"Cosmetics Industry"},{"value":"cosmetics store","label":"Cosmetics Store"},{"value":"cosmetics wholesaler","label":"Cosmetics Wholesaler"},{"value":"cosplay cafe","label":"Cosplay Cafe"},{"value":"costume store","label":"Costume Store"},{"value":"cottage rental","label":"Cottage Rental"},{"value":"cotton exporter","label":"Cotton Exporter"},{"value":"cotton mill","label":"Cotton Mill"},{"value":"cotton supplier","label":"Cotton Supplier"},{"value":"countertop contractor","label":"Countertop Contractor"},{"value":"countertop store","label":"Countertop Store"},{"value":"country club","label":"Country Club"},{"value":"country house","label":"Country House"},{"value":"country park","label":"Country Park"},{"value":"courier service","label":"Courier Service"},{"value":"court reporter","label":"Court Reporter"},{"value":"couscous restaurant","label":"Couscous Restaurant"},{"value":"couture store","label":"Couture Store"},{"value":"coworking space","label":"Coworking Space"},{"value":"craft store","label":"Craft Store"},{"value":"cramming school","label":"Cramming School"},{"value":"crane dealer","label":"Crane Dealer"},{"value":"crane service","label":"Crane Service"},{"value":"craniosacral therapy","label":"Craniosacral Therapy"},{"value":"credit union","label":"Credit Union"},{"value":"cremation service","label":"Cremation Service"},{"value":"creole restaurant","label":"Creole Restaurant"},{"value":"cricket club","label":"Cricket Club"},{"value":"cricket ground","label":"Cricket Ground"},{"value":"cricket shop","label":"Cricket Shop"},{"value":"croatian restaurant","label":"Croatian Restaurant"},{"value":"crop grower","label":"Crop Grower"},{"value":"croquet club","label":"Croquet Club"},{"value":"cruise agency","label":"Cruise Agency"},{"value":"cruise line","label":"Cruise Line"},{"value":"cruise terminal","label":"Cruise Terminal"},{"value":"crypto atm","label":"Crypto Atm"},{"value":"cuban restaurant","label":"Cuban Restaurant"},{"value":"culinary school","label":"Culinary School"},{"value":"cultural association","label":"Cultural Association"},{"value":"cultural center","label":"Cultural Center"},{"value":"cultural landmark","label":"Cultural Landmark"},{"value":"cupcake shop","label":"Cupcake Shop"},{"value":"cupra dealer","label":"Cupra Dealer"},{"value":"curling club","label":"Curling Club"},{"value":"curling hall","label":"Curling Hall"},{"value":"curtain store","label":"Curtain Store"},{"value":"custom tailor","label":"Custom Tailor"},{"value":"customs broker","label":"Customs Broker"},{"value":"customs consultant","label":"Customs Consultant"},{"value":"customs department","label":"Customs Department"},{"value":"customs office","label":"Customs Office"},{"value":"customs warehouse","label":"Customs Warehouse"},{"value":"cutlery store","label":"Cutlery Store"},{"value":"cycling park","label":"Cycling Park"},{"value":"czech restaurant","label":"Czech Restaurant"},{"value":"dacia dealer","label":"Dacia Dealer"},{"value":"daihatsu dealer","label":"Daihatsu Dealer"},{"value":"dairy farm","label":"Dairy Farm"},{"value":"dairy store","label":"Dairy Store"},{"value":"dairy supplier","label":"Dairy Supplier"},{"value":"dance club","label":"Dance Club"},{"value":"dance company","label":"Dance Company"},{"value":"dance conservatory","label":"Dance Conservatory"},{"value":"dance hall","label":"Dance Hall"},{"value":"dance pavillion","label":"Dance Pavillion"},{"value":"dance restaurant","label":"Dance Restaurant"},{"value":"dance school","label":"Dance School"},{"value":"dance store","label":"Dance Store"},{"value":"danish restaurant","label":"Danish Restaurant"},{"value":"dart bar","label":"Dart Bar"},{"value":"dating service","label":"Dating Service"},{"value":"day spa","label":"Day Spa"},{"value":"deaf church","label":"Deaf Church"},{"value":"deaf service","label":"Deaf Service"},{"value":"debt collecting","label":"Debt Collecting"},{"value":"decal supplier","label":"Decal Supplier"},{"value":"deck builder","label":"Deck Builder"},{"value":"delivery service","label":"Delivery Service"},{"value":"demolition contractor","label":"Demolition Contractor"},{"value":"dental clinic","label":"Dental Clinic"},{"value":"dental hygienist","label":"Dental Hygienist"},{"value":"dental lab","label":"Dental Lab"},{"value":"dental radiology","label":"Dental Radiology"},{"value":"dental school","label":"Dental School"},{"value":"department store","label":"Department Store"},{"value":"desalination plant","label":"Desalination Plant"},{"value":"design agency","label":"Design Agency"},{"value":"design engineer","label":"Design Engineer"},{"value":"design institute","label":"Design Institute"},{"value":"dessert buffet","label":"Dessert Buffet"},{"value":"dessert restaurant","label":"Dessert Restaurant"},{"value":"dessert shop","label":"Dessert Shop"},{"value":"detention center","label":"Detention Center"},{"value":"diabetes center","label":"Diabetes Center"},{"value":"diagnostic center","label":"Diagnostic Center"},{"value":"dialysis center","label":"Dialysis Center"},{"value":"diamond buyer","label":"Diamond Buyer"},{"value":"diamond dealer","label":"Diamond Dealer"},{"value":"diaper service","label":"Diaper Service"},{"value":"digital printer","label":"Digital Printer"},{"value":"dinner theater","label":"Dinner Theater"},{"value":"dirt supplier","label":"Dirt Supplier"},{"value":"discount store","label":"Discount Store"},{"value":"discount supermarket","label":"Discount Supermarket"},{"value":"distribution service","label":"Distribution Service"},{"value":"district attorney","label":"District Attorney"},{"value":"district council","label":"District Council"},{"value":"district justice","label":"District Justice"},{"value":"district office","label":"District Office"},{"value":"dive club","label":"Dive Club"},{"value":"dive shop","label":"Dive Shop"},{"value":"diving center","label":"Diving Center"},{"value":"diving service","label":"Diving Service"},{"value":"divorce attorney","label":"Divorce Attorney"},{"value":"divorce service","label":"Divorce Service"},{"value":"dock builder","label":"Dock Builder"},{"value":"dodge dealer","label":"Dodge Dealer"},{"value":"dog breeder","label":"Dog Breeder"},{"value":"dog cafe","label":"Dog Cafe"},{"value":"dog park","label":"Dog Park"},{"value":"dog trainer","label":"Dog Trainer"},{"value":"dog walker","label":"Dog Walker"},{"value":"dojo restaurant","label":"Dojo Restaurant"},{"value":"doll store","label":"Doll Store"},{"value":"dollar store","label":"Dollar Store"},{"value":"domestic airport","label":"Domestic Airport"},{"value":"dominican restaurant","label":"Dominican Restaurant"},{"value":"donations center","label":"Donations Center"},{"value":"donut shop","label":"Donut Shop"},{"value":"door manufacturer","label":"Door Manufacturer"},{"value":"door shop","label":"Door Shop"},{"value":"door supplier","label":"Door Supplier"},{"value":"door warehouse","label":"Door Warehouse"},{"value":"drafting service","label":"Drafting Service"},{"value":"drainage service","label":"Drainage Service"},{"value":"drama school","label":"Drama School"},{"value":"drama theater","label":"Drama Theater"},{"value":"drawing lessons","label":"Drawing Lessons"},{"value":"dress shop","label":"Dress Shop"},{"value":"drilling contractor","label":"Drilling Contractor"},{"value":"driveshaft shop","label":"Driveshaft Shop"},{"value":"driving school","label":"Driving School"},{"value":"drone shop","label":"Drone Shop"},{"value":"drum school","label":"Drum School"},{"value":"drum store","label":"Drum Store"},{"value":"dry cleaner","label":"Dry Cleaner"},{"value":"ducati dealer","label":"Ducati Dealer"},{"value":"dude ranch","label":"Dude Ranch"},{"value":"dumpling restaurant","label":"Dumpling Restaurant"},{"value":"durum restaurant","label":"Durum Restaurant"},{"value":"dutch restaurant","label":"Dutch Restaurant"},{"value":"dvd store","label":"Dvd Store"},{"value":"dye store","label":"Dye Store"},{"value":"dynamometer supplier","label":"Dynamometer Supplier"},{"value":"eclectic restaurant","label":"Eclectic Restaurant"},{"value":"ecological park","label":"Ecological Park"},{"value":"ecologists association","label":"Ecologists Association"},{"value":"economic consultant","label":"Economic Consultant"},{"value":"ecuadorian restaurant","label":"Ecuadorian Restaurant"},{"value":"education center","label":"Education Center"},{"value":"educational consultant","label":"Educational Consultant"},{"value":"educational institution","label":"Educational Institution"},{"value":"egg supplier","label":"Egg Supplier"},{"value":"egyptian restaurant","label":"Egyptian Restaurant"},{"value":"electrical engineer","label":"Electrical Engineer"},{"value":"electrical substation","label":"Electrical Substation"},{"value":"electrical wholesaler","label":"Electrical Wholesaler"},{"value":"electronic engineer","label":"Electronic Engineer"},{"value":"electronics company","label":"Electronics Company"},{"value":"electronics engineer","label":"Electronics Engineer"},{"value":"electronics exporter","label":"Electronics Exporter"},{"value":"electronics manufacturer","label":"Electronics Manufacturer"},{"value":"electronics store","label":"Electronics Store"},{"value":"electronics wholesaler","label":"Electronics Wholesaler"},{"value":"elementary school","label":"Elementary School"},{"value":"elevator manufacturer","label":"Elevator Manufacturer"},{"value":"elevator service","label":"Elevator Service"},{"value":"embossing service","label":"Embossing Service"},{"value":"embroidery service","label":"Embroidery Service"},{"value":"embroidery shop","label":"Embroidery Shop"},{"value":"emergency room","label":"Emergency Room"},{"value":"emergency training","label":"Emergency Training"},{"value":"employment agency","label":"Employment Agency"},{"value":"employment attorney","label":"Employment Attorney"},{"value":"employment center","label":"Employment Center"},{"value":"employment consultant","label":"Employment Consultant"},{"value":"energy supplier","label":"Energy Supplier"},{"value":"engineering consultant","label":"Engineering Consultant"},{"value":"engineering school","label":"Engineering School"},{"value":"english restaurant","label":"English Restaurant"},{"value":"entertainment agency","label":"Entertainment Agency"},{"value":"envelope supplier","label":"Envelope Supplier"},{"value":"environment office","label":"Environment Office"},{"value":"environmental consultant","label":"Environmental Consultant"},{"value":"environmental engineer","label":"Environmental Engineer"},{"value":"environmental organization","label":"Environmental Organization"},{"value":"episcopal church","label":"Episcopal Church"},{"value":"equestrian club","label":"Equestrian Club"},{"value":"equestrian facility","label":"Equestrian Facility"},{"value":"equestrian store","label":"Equestrian Store"},{"value":"equipment exporter","label":"Equipment Exporter"},{"value":"equipment importer","label":"Equipment Importer"},{"value":"equipment supplier","label":"Equipment Supplier"},{"value":"eritrean restaurant","label":"Eritrean Restaurant"},{"value":"erotic massage","label":"Erotic Massage"},{"value":"escrow service","label":"Escrow Service"},{"value":"espresso bar","label":"Espresso Bar"},{"value":"estate appraiser","label":"Estate Appraiser"},{"value":"estate liquidator","label":"Estate Liquidator"},{"value":"ethiopian restaurant","label":"Ethiopian Restaurant"},{"value":"ethnographic museum","label":"Ethnographic Museum"},{"value":"european restaurant","label":"European Restaurant"},{"value":"evangelical church","label":"Evangelical Church"},{"value":"evening school","label":"Evening School"},{"value":"event planner","label":"Event Planner"},{"value":"event venue","label":"Event Venue"},{"value":"excavating contractor","label":"Excavating Contractor"},{"value":"exhibition planner","label":"Exhibition Planner"},{"value":"extremadurian restaurant","label":"Extremadurian Restaurant"},{"value":"eyebrow bar","label":"Eyebrow Bar"},{"value":"eyelash salon","label":"Eyelash Salon"},{"value":"fabric store","label":"Fabric Store"},{"value":"fabric wholesaler","label":"Fabric Wholesaler"},{"value":"fabrication engineer","label":"Fabrication Engineer"},{"value":"facial spa","label":"Facial Spa"},{"value":"falafel restaurant","label":"Falafel Restaurant"},{"value":"family counselor","label":"Family Counselor"},{"value":"family restaurant","label":"Family Restaurant"},{"value":"farm bureau","label":"Farm Bureau"},{"value":"farm school","label":"Farm School"},{"value":"farm shop","label":"Farm Shop"},{"value":"farmers market","label":"Farmers Market"},{"value":"farrier service","label":"Farrier Service"},{"value":"fashion designer","label":"Fashion Designer"},{"value":"fastener supplier","label":"Fastener Supplier"},{"value":"fax service","label":"Fax Service"},{"value":"federal police","label":"Federal Police"},{"value":"feed manufacturer","label":"Feed Manufacturer"},{"value":"feed store","label":"Feed Store"},{"value":"fence contractor","label":"Fence Contractor"},{"value":"fencing salon","label":"Fencing Salon"},{"value":"fencing school","label":"Fencing School"},{"value":"ferrari dealer","label":"Ferrari Dealer"},{"value":"ferris wheel","label":"Ferris Wheel"},{"value":"ferry service","label":"Ferry Service"},{"value":"fertility clinic","label":"Fertility Clinic"},{"value":"fertility physician","label":"Fertility Physician"},{"value":"fertilizer supplier","label":"Fertilizer Supplier"},{"value":"festival hall","label":"Festival Hall"},{"value":"fiat dealer","label":"Fiat Dealer"},{"value":"fiberglass supplier","label":"Fiberglass Supplier"},{"value":"figurine shop","label":"Figurine Shop"},{"value":"filipino restaurant","label":"Filipino Restaurant"},{"value":"filtration plant","label":"Filtration Plant"},{"value":"finance broker","label":"Finance Broker"},{"value":"financial advisor","label":"Financial Advisor"},{"value":"financial audit","label":"Financial Audit"},{"value":"financial consultant","label":"Financial Consultant"},{"value":"financial institution","label":"Financial Institution"},{"value":"financial planner","label":"Financial Planner"},{"value":"fingerprinting service","label":"Fingerprinting Service"},{"value":"finnish restaurant","label":"Finnish Restaurant"},{"value":"fire station","label":"Fire Station"},{"value":"firearms academy","label":"Firearms Academy"},{"value":"fireplace manufacturer","label":"Fireplace Manufacturer"},{"value":"fireplace store","label":"Fireplace Store"},{"value":"firewood supplier","label":"Firewood Supplier"},{"value":"fireworks store","label":"Fireworks Store"},{"value":"fireworks supplier","label":"Fireworks Supplier"},{"value":"first aid","label":"First Aid"},{"value":"fish farm","label":"Fish Farm"},{"value":"fish processing","label":"Fish Processing"},{"value":"fish restaurant","label":"Fish Restaurant"},{"value":"fish spa","label":"Fish Spa"},{"value":"fish store","label":"Fish Store"},{"value":"fishing camp","label":"Fishing Camp"},{"value":"fishing charter","label":"Fishing Charter"},{"value":"fishing club","label":"Fishing Club"},{"value":"fishing pier","label":"Fishing Pier"},{"value":"fishing pond","label":"Fishing Pond"},{"value":"fishing store","label":"Fishing Store"},{"value":"fitness center","label":"Fitness Center"},{"value":"flag store","label":"Flag Store"},{"value":"flamenco school","label":"Flamenco School"},{"value":"flamenco theater","label":"Flamenco Theater"},{"value":"flea market","label":"Flea Market"},{"value":"flight school","label":"Flight School"},{"value":"floating market","label":"Floating Market"},{"value":"flooring contractor","label":"Flooring Contractor"},{"value":"flooring store","label":"Flooring Store"},{"value":"floridian restaurant","label":"Floridian Restaurant"},{"value":"flour mill","label":"Flour Mill"},{"value":"flower delivery","label":"Flower Delivery"},{"value":"flower designer","label":"Flower Designer"},{"value":"flower market","label":"Flower Market"},{"value":"fmcg manufacturer","label":"Fmcg Manufacturer"},{"value":"fondue restaurant","label":"Fondue Restaurant"},{"value":"food bank","label":"Food Bank"},{"value":"food broker","label":"Food Broker"},{"value":"food court","label":"Food Court"},{"value":"food manufacturer","label":"Food Manufacturer"},{"value":"food producer","label":"Food Producer"},{"value":"foot bath","label":"Foot Bath"},{"value":"foot care","label":"Foot Care"},{"value":"football club","label":"Football Club"},{"value":"football field","label":"Football Field"},{"value":"ford dealer","label":"Ford Dealer"},{"value":"foreclosure service","label":"Foreclosure Service"},{"value":"foreign consulate","label":"Foreign Consulate"},{"value":"forensic consultant","label":"Forensic Consultant"},{"value":"forestry service","label":"Forestry Service"},{"value":"forklift dealer","label":"Forklift Dealer"},{"value":"fountain contractor","label":"Fountain Contractor"},{"value":"foursquare church","label":"Foursquare Church"},{"value":"franconian restaurant","label":"Franconian Restaurant"},{"value":"fraternal organization","label":"Fraternal Organization"},{"value":"free clinic","label":"Free Clinic"},{"value":"freestyle wrestling","label":"Freestyle Wrestling"},{"value":"french restaurant","label":"French Restaurant"},{"value":"friends church","label":"Friends Church"},{"value":"fruit parlor","label":"Fruit Parlor"},{"value":"fruit wholesaler","label":"Fruit Wholesaler"},{"value":"fruits wholesaler","label":"Fruits Wholesaler"},{"value":"fuel supplier","label":"Fuel Supplier"},{"value":"fugu restaurant","label":"Fugu Restaurant"},{"value":"funeral director","label":"Funeral Director"},{"value":"funeral home","label":"Funeral Home"},{"value":"fur manufacturer","label":"Fur Manufacturer"},{"value":"fur service","label":"Fur Service"},{"value":"furnace store","label":"Furnace Store"},{"value":"furniture accessories","label":"Furniture Accessories"},{"value":"furniture maker","label":"Furniture Maker"},{"value":"furniture manufacturer","label":"Furniture Manufacturer"},{"value":"furniture store","label":"Furniture Store"},{"value":"furniture wholesaler","label":"Furniture Wholesaler"},{"value":"fusion restaurant","label":"Fusion Restaurant"},{"value":"futon store","label":"Futon Store"},{"value":"futsal field","label":"Futsal Field"},{"value":"galician restaurant","label":"Galician Restaurant"},{"value":"gambling house","label":"Gambling House"},{"value":"gambling instructor","label":"Gambling Instructor"},{"value":"game store","label":"Game Store"},{"value":"garage builder","label":"Garage Builder"},{"value":"garbage dump","label":"Garbage Dump"},{"value":"garden center","label":"Garden Center"},{"value":"garden machinery","label":"Garden Machinery"},{"value":"garment exporter","label":"Garment Exporter"},{"value":"gas company","label":"Gas Company"},{"value":"gas engineer","label":"Gas Engineer"},{"value":"gas shop","label":"Gas Shop"},{"value":"gas station","label":"Gas Station"},{"value":"gasket manufacturer","label":"Gasket Manufacturer"},{"value":"gastrointestinal surgeon","label":"Gastrointestinal Surgeon"},{"value":"gated community","label":"Gated Community"},{"value":"gay bar","label":"Gay Bar"},{"value":"gay sauna","label":"Gay Sauna"},{"value":"gazebo builder","label":"Gazebo Builder"},{"value":"general contractor","label":"General Contractor"},{"value":"general hospital","label":"General Hospital"},{"value":"general practitioner","label":"General Practitioner"},{"value":"general store","label":"General Store"},{"value":"generator shop","label":"Generator Shop"},{"value":"genesis dealer","label":"Genesis Dealer"},{"value":"geological service","label":"Geological Service"},{"value":"georgian restaurant","label":"Georgian Restaurant"},{"value":"geotechnical engineer","label":"Geotechnical Engineer"},{"value":"german restaurant","label":"German Restaurant"},{"value":"ghost town","label":"Ghost Town"},{"value":"gift shop","label":"Gift Shop"},{"value":"girl bar","label":"Girl Bar"},{"value":"glass blower","label":"Glass Blower"},{"value":"glass engraving","label":"Glass Engraving"},{"value":"glass industry","label":"Glass Industry"},{"value":"glass manufacturer","label":"Glass Manufacturer"},{"value":"glass merchant","label":"Glass Merchant"},{"value":"glass shop","label":"Glass Shop"},{"value":"glassware manufacturer","label":"Glassware Manufacturer"},{"value":"glassware store","label":"Glassware Store"},{"value":"glassware wholesaler","label":"Glassware Wholesaler"},{"value":"gmc dealer","label":"Gmc Dealer"},{"value":"goan restaurant","label":"Goan Restaurant"},{"value":"gold dealer","label":"Gold Dealer"},{"value":"goldfish store","label":"Goldfish Store"},{"value":"golf club","label":"Golf Club"},{"value":"golf course","label":"Golf Course"},{"value":"golf instructor","label":"Golf Instructor"},{"value":"golf shop","label":"Golf Shop"},{"value":"gospel church","label":"Gospel Church"},{"value":"government college","label":"Government College"},{"value":"government hospital","label":"Government Hospital"},{"value":"government office","label":"Government Office"},{"value":"government school","label":"Government School"},{"value":"gps supplier","label":"Gps Supplier"},{"value":"graduate school","label":"Graduate School"},{"value":"grain elevator","label":"Grain Elevator"},{"value":"grammar school","label":"Grammar School"},{"value":"granite supplier","label":"Granite Supplier"},{"value":"graphic designer","label":"Graphic Designer"},{"value":"gravel pit","label":"Gravel Pit"},{"value":"gravel plant","label":"Gravel Plant"},{"value":"greek restaurant","label":"Greek Restaurant"},{"value":"green grocers","label":"Green Grocers"},{"value":"greyhound stadium","label":"Greyhound Stadium"},{"value":"grill store","label":"Grill Store"},{"value":"grocery store","label":"Grocery Store"},{"value":"group home","label":"Group Home"},{"value":"grow shop","label":"Grow Shop"},{"value":"guardia civil","label":"Guardia Civil"},{"value":"guatemalan restaurant","label":"Guatemalan Restaurant"},{"value":"guest house","label":"Guest House"},{"value":"guitar instructor","label":"Guitar Instructor"},{"value":"guitar store","label":"Guitar Store"},{"value":"gujarati restaurant","label":"Gujarati Restaurant"},{"value":"gun club","label":"Gun Club"},{"value":"gun shop","label":"Gun Shop"},{"value":"gymnasium school","label":"Gymnasium School"},{"value":"gymnastics center","label":"Gymnastics Center"},{"value":"gymnastics club","label":"Gymnastics Club"},{"value":"gynecologist only","label":"Gynecologist Only"},{"value":"gyro restaurant","label":"Gyro Restaurant"},{"value":"hair salon","label":"Hair Salon"},{"value":"haitian restaurant","label":"Haitian Restaurant"},{"value":"hakka restaurant","label":"Hakka Restaurant"},{"value":"halal restaurant","label":"Halal Restaurant"},{"value":"haleem restaurant","label":"Haleem Restaurant"},{"value":"halfway house","label":"Halfway House"},{"value":"ham shop","label":"Ham Shop"},{"value":"hamburger restaurant","label":"Hamburger Restaurant"},{"value":"hand surgeon","label":"Hand Surgeon"},{"value":"handbags shop","label":"Handbags Shop"},{"value":"handball club","label":"Handball Club"},{"value":"handball court","label":"Handball Court"},{"value":"handicraft exporter","label":"Handicraft Exporter"},{"value":"handicraft fair","label":"Handicraft Fair"},{"value":"handicraft museum","label":"Handicraft Museum"},{"value":"handicraft school","label":"Handicraft School"},{"value":"handicrafts wholesaler","label":"Handicrafts Wholesaler"},{"value":"hardware store","label":"Hardware Store"},{"value":"hat shop","label":"Hat Shop"},{"value":"haunted house","label":"Haunted House"},{"value":"hawaiian restaurant","label":"Hawaiian Restaurant"},{"value":"hawker centre","label":"Hawker Centre"},{"value":"hawker stall","label":"Hawker Stall"},{"value":"hay supplier","label":"Hay Supplier"},{"value":"health consultant","label":"Health Consultant"},{"value":"health counselor","label":"Health Counselor"},{"value":"health resort","label":"Health Resort"},{"value":"health spa","label":"Health Spa"},{"value":"heart hospital","label":"Heart Hospital"},{"value":"heating contractor","label":"Heating Contractor"},{"value":"height works","label":"Height Works"},{"value":"helicopter charter","label":"Helicopter Charter"},{"value":"herb shop","label":"Herb Shop"},{"value":"heritage building","label":"Heritage Building"},{"value":"heritage museum","label":"Heritage Museum"},{"value":"heritage preservation","label":"Heritage Preservation"},{"value":"heritage railroad","label":"Heritage Railroad"},{"value":"high school","label":"High School"},{"value":"highway patrol","label":"Highway Patrol"},{"value":"hiking area","label":"Hiking Area"},{"value":"hiking guide","label":"Hiking Guide"},{"value":"hindu priest","label":"Hindu Priest"},{"value":"hindu temple","label":"Hindu Temple"},{"value":"hispanic church","label":"Hispanic Church"},{"value":"historical landmark","label":"Historical Landmark"},{"value":"historical society","label":"Historical Society"},{"value":"history museum","label":"History Museum"},{"value":"hoagie restaurant","label":"Hoagie Restaurant"},{"value":"hobby store","label":"Hobby Store"},{"value":"hockey club","label":"Hockey Club"},{"value":"hockey field","label":"Hockey Field"},{"value":"hockey rink","label":"Hockey Rink"},{"value":"holding company","label":"Holding Company"},{"value":"holiday home","label":"Holiday Home"},{"value":"home builder","label":"Home Builder"},{"value":"home hairdresser","label":"Home Hairdresser"},{"value":"home help","label":"Home Help"},{"value":"home inspector","label":"Home Inspector"},{"value":"homekill service","label":"Homekill Service"},{"value":"homeless service","label":"Homeless Service"},{"value":"homeless shelter","label":"Homeless Shelter"},{"value":"homeopathic pharmacy","label":"Homeopathic Pharmacy"},{"value":"homeowners association","label":"Homeowners Association"},{"value":"honda dealer","label":"Honda Dealer"},{"value":"honduran restaurant","label":"Honduran Restaurant"},{"value":"honey farm","label":"Honey Farm"},{"value":"hookah bar","label":"Hookah Bar"},{"value":"hookah store","label":"Hookah Store"},{"value":"horse breeder","label":"Horse Breeder"},{"value":"horse trainer","label":"Horse Trainer"},{"value":"horsebox specialist","label":"Horsebox Specialist"},{"value":"horseshoe smith","label":"Horseshoe Smith"},{"value":"horsestable studfarm","label":"Horsestable Studfarm"},{"value":"hose supplier","label":"Hose Supplier"},{"value":"hospital department","label":"Hospital Department"},{"value":"host club","label":"Host Club"},{"value":"house sitter","label":"House Sitter"},{"value":"housing association","label":"Housing Association"},{"value":"housing authority","label":"Housing Authority"},{"value":"housing complex","label":"Housing Complex"},{"value":"housing cooperative","label":"Housing Cooperative"},{"value":"housing development","label":"Housing Development"},{"value":"housing society","label":"Housing Society"},{"value":"hungarian restaurant","label":"Hungarian Restaurant"},{"value":"hunting area","label":"Hunting Area"},{"value":"hunting club","label":"Hunting Club"},{"value":"hunting preserve","label":"Hunting Preserve"},{"value":"hunting store","label":"Hunting Store"},{"value":"hvac contractor","label":"Hvac Contractor"},{"value":"hyderabadi restaurant","label":"Hyderabadi Restaurant"},{"value":"hydraulic engineer","label":"Hydraulic Engineer"},{"value":"hypnotherapy service","label":"Hypnotherapy Service"},{"value":"hyundai dealer","label":"Hyundai Dealer"},{"value":"ice supplier","label":"Ice Supplier"},{"value":"icelandic restaurant","label":"Icelandic Restaurant"},{"value":"icse school","label":"Icse School"},{"value":"idol manufacturer","label":"Idol Manufacturer"},{"value":"image consultant","label":"Image Consultant"},{"value":"imax theater","label":"Imax Theater"},{"value":"immigration attorney","label":"Immigration Attorney"},{"value":"impermeabilization service","label":"Impermeabilization Service"},{"value":"incense supplier","label":"Incense Supplier"},{"value":"incineration plant","label":"Incineration Plant"},{"value":"indian restaurant","label":"Indian Restaurant"},{"value":"indian takeaway","label":"Indian Takeaway"},{"value":"indonesian restaurant","label":"Indonesian Restaurant"},{"value":"indoor cycling","label":"Indoor Cycling"},{"value":"indoor playground","label":"Indoor Playground"},{"value":"indoor snowcenter","label":"Indoor Snowcenter"},{"value":"industrial consultant","label":"Industrial Consultant"},{"value":"industrial engineer","label":"Industrial Engineer"},{"value":"industrial supermarket","label":"Industrial Supermarket"},{"value":"infiniti dealer","label":"Infiniti Dealer"},{"value":"information services","label":"Information Services"},{"value":"insolvency service","label":"Insolvency Service"},{"value":"instrumentation engineer","label":"Instrumentation Engineer"},{"value":"insulation contractor","label":"Insulation Contractor"},{"value":"insulator supplier","label":"Insulator Supplier"},{"value":"insurance agency","label":"Insurance Agency"},{"value":"insurance attorney","label":"Insurance Attorney"},{"value":"insurance broker","label":"Insurance Broker"},{"value":"insurance company","label":"Insurance Company"},{"value":"insurance school","label":"Insurance School"},{"value":"interior decorator","label":"Interior Decorator"},{"value":"interior designer","label":"Interior Designer"},{"value":"interior door","label":"Interior Door"},{"value":"international airport","label":"International Airport"},{"value":"international school","label":"International School"},{"value":"internet cafe","label":"Internet Cafe"},{"value":"internet shop","label":"Internet Shop"},{"value":"investment bank","label":"Investment Bank"},{"value":"investment company","label":"Investment Company"},{"value":"investment service","label":"Investment Service"},{"value":"irish pub","label":"Irish Pub"},{"value":"irish restaurant","label":"Irish Restaurant"},{"value":"iron works","label":"Iron Works"},{"value":"israeli restaurant","label":"Israeli Restaurant"},{"value":"isuzu dealer","label":"Isuzu Dealer"},{"value":"italian restaurant","label":"Italian Restaurant"},{"value":"jaguar dealer","label":"Jaguar Dealer"},{"value":"jain temple","label":"Jain Temple"},{"value":"jamaican restaurant","label":"Jamaican Restaurant"},{"value":"janitorial service","label":"Janitorial Service"},{"value":"japanese delicatessen","label":"Japanese Delicatessen"},{"value":"japanese restaurant","label":"Japanese Restaurant"},{"value":"japanese steakhouse","label":"Japanese Steakhouse"},{"value":"javanese restaurant","label":"Javanese Restaurant"},{"value":"jazz club","label":"Jazz Club"},{"value":"jeep dealer","label":"Jeep Dealer"},{"value":"jewelry appraiser","label":"Jewelry Appraiser"},{"value":"jewelry buyer","label":"Jewelry Buyer"},{"value":"jewelry designer","label":"Jewelry Designer"},{"value":"jewelry engraver","label":"Jewelry Engraver"},{"value":"jewelry exporter","label":"Jewelry Exporter"},{"value":"jewelry manufacturer","label":"Jewelry Manufacturer"},{"value":"jewelry store","label":"Jewelry Store"},{"value":"jewish restaurant","label":"Jewish Restaurant"},{"value":"judaica store","label":"Judaica Store"},{"value":"judicial auction","label":"Judicial Auction"},{"value":"judicial scrivener","label":"Judicial Scrivener"},{"value":"judo club","label":"Judo Club"},{"value":"judo school","label":"Judo School"},{"value":"juice shop","label":"Juice Shop"},{"value":"jujitsu school","label":"Jujitsu School"},{"value":"junior college","label":"Junior College"},{"value":"junk dealer","label":"Junk Dealer"},{"value":"junk store","label":"Junk Store"},{"value":"justice department","label":"Justice Department"},{"value":"jute exporter","label":"Jute Exporter"},{"value":"jute mill","label":"Jute Mill"},{"value":"kabaddi club","label":"Kabaddi Club"},{"value":"kaiseki restaurant","label":"Kaiseki Restaurant"},{"value":"karaoke bar","label":"Karaoke Bar"},{"value":"karate club","label":"Karate Club"},{"value":"karate school","label":"Karate School"},{"value":"karma dealer","label":"Karma Dealer"},{"value":"karnataka restaurant","label":"Karnataka Restaurant"},{"value":"kashmiri restaurant","label":"Kashmiri Restaurant"},{"value":"kazakhstani restaurant","label":"Kazakhstani Restaurant"},{"value":"kebab shop","label":"Kebab Shop"},{"value":"kerala restaurant","label":"Kerala Restaurant"},{"value":"kerosene supplier","label":"Kerosene Supplier"},{"value":"kia dealer","label":"Kia Dealer"},{"value":"kickboxing school","label":"Kickboxing School"},{"value":"kimono store","label":"Kimono Store"},{"value":"kitchen remodeler","label":"Kitchen Remodeler"},{"value":"kite shop","label":"Kite Shop"},{"value":"knife manufacturing","label":"Knife Manufacturing"},{"value":"knife store","label":"Knife Store"},{"value":"knit shop","label":"Knit Shop"},{"value":"knitting instructor","label":"Knitting Instructor"},{"value":"knitwear manufacturer","label":"Knitwear Manufacturer"},{"value":"kofta restaurant","label":"Kofta Restaurant"},{"value":"konkani restaurant","label":"Konkani Restaurant"},{"value":"korean church","label":"Korean Church"},{"value":"korean restaurant","label":"Korean Restaurant"},{"value":"koshari restaurant","label":"Koshari Restaurant"},{"value":"kosher restaurant","label":"Kosher Restaurant"},{"value":"kushiyaki restaurant","label":"Kushiyaki Restaurant"},{"value":"labor union","label":"Labor Union"},{"value":"ladder supplier","label":"Ladder Supplier"},{"value":"lamborghini dealer","label":"Lamborghini Dealer"},{"value":"lamination service","label":"Lamination Service"},{"value":"lancia dealer","label":"Lancia Dealer"},{"value":"land allotment","label":"Land Allotment"},{"value":"land surveyor","label":"Land Surveyor"},{"value":"landscape architect","label":"Landscape Architect"},{"value":"landscape designer","label":"Landscape Designer"},{"value":"language school","label":"Language School"},{"value":"laotian restaurant","label":"Laotian Restaurant"},{"value":"lasik surgeon","label":"Lasik Surgeon"},{"value":"laundry service","label":"Laundry Service"},{"value":"law firm","label":"Law Firm"},{"value":"law library","label":"Law Library"},{"value":"law school","label":"Law School"},{"value":"lawyers association","label":"Lawyers Association"},{"value":"leagues club","label":"Leagues Club"},{"value":"learning center","label":"Learning Center"},{"value":"leasing service","label":"Leasing Service"},{"value":"leather exporter","label":"Leather Exporter"},{"value":"leather wholesaler","label":"Leather Wholesaler"},{"value":"lebanese restaurant","label":"Lebanese Restaurant"},{"value":"lechon restaurant","label":"Lechon Restaurant"},{"value":"legal services","label":"Legal Services"},{"value":"lesbian bar","label":"Lesbian Bar"},{"value":"lexus dealer","label":"Lexus Dealer"},{"value":"license bureau","label":"License Bureau"},{"value":"life coach","label":"Life Coach"},{"value":"lighting consultant","label":"Lighting Consultant"},{"value":"lighting contractor","label":"Lighting Contractor"},{"value":"lighting manufacturer","label":"Lighting Manufacturer"},{"value":"lighting store","label":"Lighting Store"},{"value":"lighting wholesaler","label":"Lighting Wholesaler"},{"value":"ligurian restaurant","label":"Ligurian Restaurant"},{"value":"limousine service","label":"Limousine Service"},{"value":"linens store","label":"Linens Store"},{"value":"lingerie manufacturer","label":"Lingerie Manufacturer"},{"value":"lingerie store","label":"Lingerie Store"},{"value":"lingerie wholesaler","label":"Lingerie Wholesaler"},{"value":"linoleum store","label":"Linoleum Store"},{"value":"liquor store","label":"Liquor Store"},{"value":"literacy program","label":"Literacy Program"},{"value":"lithuanian restaurant","label":"Lithuanian Restaurant"},{"value":"livery company","label":"Livery Company"},{"value":"livestock breeder","label":"Livestock Breeder"},{"value":"livestock dealer","label":"Livestock Dealer"},{"value":"livestock producer","label":"Livestock Producer"},{"value":"loan agency","label":"Loan Agency"},{"value":"lock store","label":"Lock Store"},{"value":"locks supplier","label":"Locks Supplier"},{"value":"log cabins","label":"Log Cabins"},{"value":"logging contractor","label":"Logging Contractor"},{"value":"logistics service","label":"Logistics Service"},{"value":"lombardian restaurant","label":"Lombardian Restaurant"},{"value":"loss adjuster","label":"Loss Adjuster"},{"value":"lottery retailer","label":"Lottery Retailer"},{"value":"lottery shop","label":"Lottery Shop"},{"value":"love hotel","label":"Love Hotel"},{"value":"lpg conversion","label":"Lpg Conversion"},{"value":"luggage store","label":"Luggage Store"},{"value":"luggage wholesaler","label":"Luggage Wholesaler"},{"value":"lumber store","label":"Lumber Store"},{"value":"lunch restaurant","label":"Lunch Restaurant"},{"value":"lutheran church","label":"Lutheran Church"},{"value":"lymph drainage","label":"Lymph Drainage"},{"value":"machine construction","label":"Machine Construction"},{"value":"machine maintenance","label":"Machine Maintenance"},{"value":"machine shop","label":"Machine Shop"},{"value":"machine workshop","label":"Machine Workshop"},{"value":"machining manufacturer","label":"Machining Manufacturer"},{"value":"macrobiotic restaurant","label":"Macrobiotic Restaurant"},{"value":"madrilian restaurant","label":"Madrilian Restaurant"},{"value":"magazine store","label":"Magazine Store"},{"value":"magic store","label":"Magic Store"},{"value":"mailbox supplier","label":"Mailbox Supplier"},{"value":"mailing service","label":"Mailing Service"},{"value":"majorcan restaurant","label":"Majorcan Restaurant"},{"value":"makeup artist","label":"Makeup Artist"},{"value":"malaysian restaurant","label":"Malaysian Restaurant"},{"value":"maltese restaurant","label":"Maltese Restaurant"},{"value":"mammography service","label":"Mammography Service"},{"value":"manado restaurant","label":"Manado Restaurant"},{"value":"management school","label":"Management School"},{"value":"mandarin restaurant","label":"Mandarin Restaurant"},{"value":"manor house","label":"Manor House"},{"value":"maori organization","label":"Maori Organization"},{"value":"map store","label":"Map Store"},{"value":"mapping service","label":"Mapping Service"},{"value":"marathi restaurant","label":"Marathi Restaurant"},{"value":"marble contractor","label":"Marble Contractor"},{"value":"marble supplier","label":"Marble Supplier"},{"value":"marche restaurant","label":"Marche Restaurant"},{"value":"marine engineer","label":"Marine Engineer"},{"value":"marine surveyor","label":"Marine Surveyor"},{"value":"maritime museum","label":"Maritime Museum"},{"value":"market researcher","label":"Market Researcher"},{"value":"marketing agency","label":"Marketing Agency"},{"value":"marketing consultant","label":"Marketing Consultant"},{"value":"markmens clubhouse","label":"Markmens Clubhouse"},{"value":"marquee hire","label":"Marquee Hire"},{"value":"marriage celebrant","label":"Marriage Celebrant"},{"value":"marriage counselor","label":"Marriage Counselor"},{"value":"maserati dealer","label":"Maserati Dealer"},{"value":"masonic building","label":"Masonic Building"},{"value":"masonry contractor","label":"Masonry Contractor"},{"value":"massage school","label":"Massage School"},{"value":"massage spa","label":"Massage Spa"},{"value":"massage therapist","label":"Massage Therapist"},{"value":"maternity hospital","label":"Maternity Hospital"},{"value":"maternity store","label":"Maternity Store"},{"value":"mathematics school","label":"Mathematics School"},{"value":"mattress store","label":"Mattress Store"},{"value":"mausoleum builder","label":"Mausoleum Builder"},{"value":"maybach dealer","label":"Maybach Dealer"},{"value":"mazda dealer","label":"Mazda Dealer"},{"value":"mclaren dealer","label":"Mclaren Dealer"},{"value":"meal delivery","label":"Meal Delivery"},{"value":"meal takeaway","label":"Meal Takeaway"},{"value":"meat packer","label":"Meat Packer"},{"value":"meat processor","label":"Meat Processor"},{"value":"meat products","label":"Meat Products"},{"value":"meat restaurant","label":"Meat Restaurant"},{"value":"meat wholesaler","label":"Meat Wholesaler"},{"value":"mechanical contractor","label":"Mechanical Contractor"},{"value":"mechanical engineer","label":"Mechanical Engineer"},{"value":"mechanical plant","label":"Mechanical Plant"},{"value":"media company","label":"Media Company"},{"value":"media consultant","label":"Media Consultant"},{"value":"media house","label":"Media House"},{"value":"mediation service","label":"Mediation Service"},{"value":"medical center","label":"Medical Center"},{"value":"medical clinic","label":"Medical Clinic"},{"value":"medical examiner","label":"Medical Examiner"},{"value":"medical group","label":"Medical Group"},{"value":"medical lab","label":"Medical Lab"},{"value":"medical lawyer","label":"Medical Lawyer"},{"value":"medical office","label":"Medical Office"},{"value":"medical school","label":"Medical School"},{"value":"medical spa","label":"Medical Spa"},{"value":"medicine exporter","label":"Medicine Exporter"},{"value":"meditation center","label":"Meditation Center"},{"value":"meditation instructor","label":"Meditation Instructor"},{"value":"mediterranean restaurant","label":"Mediterranean Restaurant"},{"value":"mehandi class","label":"Mehandi Class"},{"value":"mehndi designer","label":"Mehndi Designer"},{"value":"memorial estate","label":"Memorial Estate"},{"value":"memorial park","label":"Memorial Park"},{"value":"mennonite church","label":"Mennonite Church"},{"value":"mens tailor","label":"Mens Tailor"},{"value":"mercantile development","label":"Mercantile Development"},{"value":"messianic synagogue","label":"Messianic Synagogue"},{"value":"metal fabricator","label":"Metal Fabricator"},{"value":"metal finisher","label":"Metal Finisher"},{"value":"metal supplier","label":"Metal Supplier"},{"value":"metal workshop","label":"Metal Workshop"},{"value":"metallurgy company","label":"Metallurgy Company"},{"value":"metalware dealer","label":"Metalware Dealer"},{"value":"metalware producer","label":"Metalware Producer"},{"value":"methodist church","label":"Methodist Church"},{"value":"mexican restaurant","label":"Mexican Restaurant"},{"value":"mg dealer","label":"Mg Dealer"},{"value":"middle school","label":"Middle School"},{"value":"militar archive","label":"Militar Archive"},{"value":"militar residence","label":"Militar Residence"},{"value":"military barrack","label":"Military Barrack"},{"value":"military base","label":"Military Base"},{"value":"military board","label":"Military Board"},{"value":"military cemetery","label":"Military Cemetery"},{"value":"military hospital","label":"Military Hospital"},{"value":"military school","label":"Military School"},{"value":"military town","label":"Military Town"},{"value":"millwork shop","label":"Millwork Shop"},{"value":"mini dealer","label":"Mini Dealer"},{"value":"miniatures store","label":"Miniatures Store"},{"value":"mining company","label":"Mining Company"},{"value":"mining consultant","label":"Mining Consultant"},{"value":"mining engineer","label":"Mining Engineer"},{"value":"mining equipment","label":"Mining Equipment"},{"value":"mirror shop","label":"Mirror Shop"},{"value":"mitsubishi dealer","label":"Mitsubishi Dealer"},{"value":"mobile catering","label":"Mobile Catering"},{"value":"mobile disco","label":"Mobile Disco"},{"value":"mobile hairdresser","label":"Mobile Hairdresser"},{"value":"modeling agency","label":"Modeling Agency"},{"value":"modeling school","label":"Modeling School"},{"value":"mold maker","label":"Mold Maker"},{"value":"molding supplier","label":"Molding Supplier"},{"value":"momo restaurant","label":"Momo Restaurant"},{"value":"monja restaurant","label":"Monja Restaurant"},{"value":"monogramming service","label":"Monogramming Service"},{"value":"montessori school","label":"Montessori School"},{"value":"monument maker","label":"Monument Maker"},{"value":"moped dealer","label":"Moped Dealer"},{"value":"moravian church","label":"Moravian Church"},{"value":"moroccan restaurant","label":"Moroccan Restaurant"},{"value":"mortgage broker","label":"Mortgage Broker"},{"value":"mortgage lender","label":"Mortgage Lender"},{"value":"motorcycle dealer","label":"Motorcycle Dealer"},{"value":"motorcycle shop","label":"Motorcycle Shop"},{"value":"motoring club","label":"Motoring Club"},{"value":"motorsports store","label":"Motorsports Store"},{"value":"mountain hut","label":"Mountain Hut"},{"value":"mountaineering class","label":"Mountaineering Class"},{"value":"movie studio","label":"Movie Studio"},{"value":"movie theater","label":"Movie Theater"},{"value":"moving company","label":"Moving Company"},{"value":"mri center","label":"Mri Center"},{"value":"muffler shop","label":"Muffler Shop"},{"value":"mughlai restaurant","label":"Mughlai Restaurant"},{"value":"mulch supplier","label":"Mulch Supplier"},{"value":"municipal corporation","label":"Municipal Corporation"},{"value":"municipal guard","label":"Municipal Guard"},{"value":"murtabak restaurant","label":"Murtabak Restaurant"},{"value":"music college","label":"Music College"},{"value":"music conservatory","label":"Music Conservatory"},{"value":"music instructor","label":"Music Instructor"},{"value":"music producer","label":"Music Producer"},{"value":"music publisher","label":"Music Publisher"},{"value":"music school","label":"Music School"},{"value":"music store","label":"Music Store"},{"value":"musical club","label":"Musical Club"},{"value":"nail salon","label":"Nail Salon"},{"value":"nanotechnology engineer","label":"Nanotechnology Engineer"},{"value":"nasi restaurant","label":"Nasi Restaurant"},{"value":"national forest","label":"National Forest"},{"value":"national library","label":"National Library"},{"value":"national museum","label":"National Museum"},{"value":"national park","label":"National Park"},{"value":"national reserve","label":"National Reserve"},{"value":"nature preserve","label":"Nature Preserve"},{"value":"naturopathic practitioner","label":"Naturopathic Practitioner"},{"value":"naval base","label":"Naval Base"},{"value":"navarraise restaurant","label":"Navarraise Restaurant"},{"value":"neapolitan restaurant","label":"Neapolitan Restaurant"},{"value":"needlework shop","label":"Needlework Shop"},{"value":"neonatal physician","label":"Neonatal Physician"},{"value":"nepalese restaurant","label":"Nepalese Restaurant"},{"value":"netball club","label":"Netball Club"},{"value":"news service","label":"News Service"},{"value":"newspaper distribution","label":"Newspaper Distribution"},{"value":"newspaper publisher","label":"Newspaper Publisher"},{"value":"nicaraguan restaurant","label":"Nicaraguan Restaurant"},{"value":"night club","label":"Night Club"},{"value":"night market","label":"Night Market"},{"value":"nissan dealer","label":"Nissan Dealer"},{"value":"noodle shop","label":"Noodle Shop"},{"value":"norwegian restaurant","label":"Norwegian Restaurant"},{"value":"notaries association","label":"Notaries Association"},{"value":"notary public","label":"Notary Public"},{"value":"notions store","label":"Notions Store"},{"value":"novelties wholesaler","label":"Novelties Wholesaler"},{"value":"novelty store","label":"Novelty Store"},{"value":"nuclear engineer","label":"Nuclear Engineer"},{"value":"nudist club","label":"Nudist Club"},{"value":"nudist park","label":"Nudist Park"},{"value":"nurse practitioner","label":"Nurse Practitioner"},{"value":"nursery school","label":"Nursery School"},{"value":"nursing agency","label":"Nursing Agency"},{"value":"nursing association","label":"Nursing Association"},{"value":"nursing home","label":"Nursing Home"},{"value":"nursing school","label":"Nursing School"},{"value":"nut store","label":"Nut Store"},{"value":"nyonya restaurant","label":"Nyonya Restaurant"},{"value":"oaxacan restaurant","label":"Oaxacan Restaurant"},{"value":"obanzai cuisine","label":"Obanzai Cuisine"},{"value":"observation deck","label":"Observation Deck"},{"value":"occupational therapist","label":"Occupational Therapist"},{"value":"oden restaurant","label":"Oden Restaurant"},{"value":"odia restaurant","label":"Odia Restaurant"},{"value":"oil company","label":"Oil Company"},{"value":"oil refinery","label":"Oil Refinery"},{"value":"oil store","label":"Oil Store"},{"value":"oil wholesaler","label":"Oil Wholesaler"},{"value":"okonomiyaki restaurant","label":"Okonomiyaki Restaurant"},{"value":"oldsmobile dealer","label":"Oldsmobile Dealer"},{"value":"opel dealer","label":"Opel Dealer"},{"value":"open university","label":"Open University"},{"value":"opera company","label":"Opera Company"},{"value":"opera house","label":"Opera House"},{"value":"ophthalmology clinic","label":"Ophthalmology Clinic"},{"value":"optical wholesaler","label":"Optical Wholesaler"},{"value":"oral surgeon","label":"Oral Surgeon"},{"value":"orchid farm","label":"Orchid Farm"},{"value":"orchid grower","label":"Orchid Grower"},{"value":"organic farm","label":"Organic Farm"},{"value":"organic restaurant","label":"Organic Restaurant"},{"value":"organic store","label":"Organic Store"},{"value":"orphan asylum","label":"Orphan Asylum"},{"value":"orthodox church","label":"Orthodox Church"},{"value":"orthodox synagogue","label":"Orthodox Synagogue"},{"value":"orthopedic clinic","label":"Orthopedic Clinic"},{"value":"orthopedic surgeon","label":"Orthopedic Surgeon"},{"value":"otolaryngology clinic","label":"Otolaryngology Clinic"},{"value":"outdoor bath","label":"Outdoor Bath"},{"value":"outerwear store","label":"Outerwear Store"},{"value":"outlet mall","label":"Outlet Mall"},{"value":"outlet store","label":"Outlet Store"},{"value":"oyster supplier","label":"Oyster Supplier"},{"value":"paan shop","label":"Paan Shop"},{"value":"package locker","label":"Package Locker"},{"value":"packaging company","label":"Packaging Company"},{"value":"packaging machinery","label":"Packaging Machinery"},{"value":"padang restaurant","label":"Padang Restaurant"},{"value":"padel club","label":"Padel Club"},{"value":"padel court","label":"Padel Court"},{"value":"paint manufacturer","label":"Paint Manufacturer"},{"value":"paint store","label":"Paint Store"},{"value":"paintball center","label":"Paintball Center"},{"value":"paintball store","label":"Paintball Store"},{"value":"painting lessons","label":"Painting Lessons"},{"value":"painting studio","label":"Painting Studio"},{"value":"paintings store","label":"Paintings Store"},{"value":"paisa restaurant","label":"Paisa Restaurant"},{"value":"pakistani restaurant","label":"Pakistani Restaurant"},{"value":"palatine restaurant","label":"Palatine Restaurant"},{"value":"pallet supplier","label":"Pallet Supplier"},{"value":"pancake house","label":"Pancake House"},{"value":"panipuri shop","label":"Panipuri Shop"},{"value":"paper distributor","label":"Paper Distributor"},{"value":"paper exporter","label":"Paper Exporter"},{"value":"paper mill","label":"Paper Mill"},{"value":"paper store","label":"Paper Store"},{"value":"paraguayan restaurant","label":"Paraguayan Restaurant"},{"value":"parking garage","label":"Parking Garage"},{"value":"parking lot","label":"Parking Lot"},{"value":"parkour spot","label":"Parkour Spot"},{"value":"parochial school","label":"Parochial School"},{"value":"parsi restaurant","label":"Parsi Restaurant"},{"value":"parsi temple","label":"Parsi Temple"},{"value":"party planner","label":"Party Planner"},{"value":"party store","label":"Party Store"},{"value":"passport agent","label":"Passport Agent"},{"value":"passport office","label":"Passport Office"},{"value":"pasta shop","label":"Pasta Shop"},{"value":"pastry shop","label":"Pastry Shop"},{"value":"patent attorney","label":"Patent Attorney"},{"value":"patent office","label":"Patent Office"},{"value":"paving contractor","label":"Paving Contractor"},{"value":"pawn shop","label":"Pawn Shop"},{"value":"payroll service","label":"Payroll Service"},{"value":"pedestrian zone","label":"Pedestrian Zone"},{"value":"pediatric cardiologist","label":"Pediatric Cardiologist"},{"value":"pediatric clinic","label":"Pediatric Clinic"},{"value":"pediatric dentist","label":"Pediatric Dentist"},{"value":"pediatric dermatologist","label":"Pediatric Dermatologist"},{"value":"pediatric endocrinologist","label":"Pediatric Endocrinologist"},{"value":"pediatric gastroenterologist","label":"Pediatric Gastroenterologist"},{"value":"pediatric hematologist","label":"Pediatric Hematologist"},{"value":"pediatric nephrologist","label":"Pediatric Nephrologist"},{"value":"pediatric neurologist","label":"Pediatric Neurologist"},{"value":"pediatric oncologist","label":"Pediatric Oncologist"},{"value":"pediatric ophthalmologist","label":"Pediatric Ophthalmologist"},{"value":"pediatric pulmonologist","label":"Pediatric Pulmonologist"},{"value":"pediatric rheumatologist","label":"Pediatric Rheumatologist"},{"value":"pediatric surgeon","label":"Pediatric Surgeon"},{"value":"pediatric urologist","label":"Pediatric Urologist"},{"value":"pempek restaurant","label":"Pempek Restaurant"},{"value":"pen store","label":"Pen Store"},{"value":"pension office","label":"Pension Office"},{"value":"pentecostal church","label":"Pentecostal Church"},{"value":"perfume store","label":"Perfume Store"},{"value":"perinatal center","label":"Perinatal Center"},{"value":"persian restaurant","label":"Persian Restaurant"},{"value":"personal trainer","label":"Personal Trainer"},{"value":"peruvian restaurant","label":"Peruvian Restaurant"},{"value":"pet cemetery","label":"Pet Cemetery"},{"value":"pet groomer","label":"Pet Groomer"},{"value":"pet sitter","label":"Pet Sitter"},{"value":"pet store","label":"Pet Store"},{"value":"pet trainer","label":"Pet Trainer"},{"value":"petrochemical engineer","label":"Petrochemical Engineer"},{"value":"peugeot dealer","label":"Peugeot Dealer"},{"value":"pharmaceutical company","label":"Pharmaceutical Company"},{"value":"pharmaceutical lab","label":"Pharmaceutical Lab"},{"value":"philharmonic hall","label":"Philharmonic Hall"},{"value":"pho restaurant","label":"Pho Restaurant"},{"value":"photo agency","label":"Photo Agency"},{"value":"photo booth","label":"Photo Booth"},{"value":"photo lab","label":"Photo Lab"},{"value":"photo shop","label":"Photo Shop"},{"value":"photocopiers supplier","label":"Photocopiers Supplier"},{"value":"photography class","label":"Photography Class"},{"value":"photography school","label":"Photography School"},{"value":"photography service","label":"Photography Service"},{"value":"photography studio","label":"Photography Studio"},{"value":"physician assistant","label":"Physician Assistant"},{"value":"physiotherapy center","label":"Physiotherapy Center"},{"value":"piadina restaurant","label":"Piadina Restaurant"},{"value":"piano bar","label":"Piano Bar"},{"value":"piano instructor","label":"Piano Instructor"},{"value":"piano maker","label":"Piano Maker"},{"value":"piano store","label":"Piano Store"},{"value":"pickleball court","label":"Pickleball Court"},{"value":"picnic ground","label":"Picnic Ground"},{"value":"pie shop","label":"Pie Shop"},{"value":"piedmontese restaurant","label":"Piedmontese Restaurant"},{"value":"pig farm","label":"Pig Farm"},{"value":"pilaf restaurant","label":"Pilaf Restaurant"},{"value":"pilates studio","label":"Pilates Studio"},{"value":"pile driver","label":"Pile Driver"},{"value":"pilgrim hostel","label":"Pilgrim Hostel"},{"value":"pilgrimages place","label":"Pilgrimages Place"},{"value":"pinatas supplier","label":"Pinatas Supplier"},{"value":"pipe supplier","label":"Pipe Supplier"},{"value":"pizza restaurant","label":"Pizza Restaurant"},{"value":"plant nursery","label":"Plant Nursery"},{"value":"plaster contractor","label":"Plaster Contractor"},{"value":"plastic surgeon","label":"Plastic Surgeon"},{"value":"plastic wholesaler","label":"Plastic Wholesaler"},{"value":"plating service","label":"Plating Service"},{"value":"play school","label":"Play School"},{"value":"plywood supplier","label":"Plywood Supplier"},{"value":"poke bar","label":"Poke Bar"},{"value":"police academy","label":"Police Academy"},{"value":"polish restaurant","label":"Polish Restaurant"},{"value":"political party","label":"Political Party"},{"value":"polo club","label":"Polo Club"},{"value":"polygraph service","label":"Polygraph Service"},{"value":"polymer supplier","label":"Polymer Supplier"},{"value":"polynesian restaurant","label":"Polynesian Restaurant"},{"value":"polytechnic school","label":"Polytechnic School"},{"value":"pond contractor","label":"Pond Contractor"},{"value":"pontiac dealer","label":"Pontiac Dealer"},{"value":"pony club","label":"Pony Club"},{"value":"pool academy","label":"Pool Academy"},{"value":"pool hall","label":"Pool Hall"},{"value":"popcorn store","label":"Popcorn Store"},{"value":"porridge restaurant","label":"Porridge Restaurant"},{"value":"porsche dealer","label":"Porsche Dealer"},{"value":"port authority","label":"Port Authority"},{"value":"portrait studio","label":"Portrait Studio"},{"value":"portuguese restaurant","label":"Portuguese Restaurant"},{"value":"post office","label":"Post Office"},{"value":"poster store","label":"Poster Store"},{"value":"pottery classes","label":"Pottery Classes"},{"value":"pottery manufacturer","label":"Pottery Manufacturer"},{"value":"pottery store","label":"Pottery Store"},{"value":"poultry farm","label":"Poultry Farm"},{"value":"poultry store","label":"Poultry Store"},{"value":"power plant","label":"Power Plant"},{"value":"pozole restaurant","label":"Pozole Restaurant"},{"value":"prawn fishing","label":"Prawn Fishing"},{"value":"precision engineer","label":"Precision Engineer"},{"value":"preparatory school","label":"Preparatory School"},{"value":"presbyterian church","label":"Presbyterian Church"},{"value":"press advisory","label":"Press Advisory"},{"value":"pretzel store","label":"Pretzel Store"},{"value":"primary school","label":"Primary School"},{"value":"print shop","label":"Print Shop"},{"value":"private college","label":"Private College"},{"value":"private hospital","label":"Private Hospital"},{"value":"private investigator","label":"Private Investigator"},{"value":"private school","label":"Private School"},{"value":"private tutor","label":"Private Tutor"},{"value":"private university","label":"Private University"},{"value":"probation office","label":"Probation Office"},{"value":"process server","label":"Process Server"},{"value":"produce market","label":"Produce Market"},{"value":"produce wholesaler","label":"Produce Wholesaler"},{"value":"professional association","label":"Professional Association"},{"value":"professional organizer","label":"Professional Organizer"},{"value":"propane supplier","label":"Propane Supplier"},{"value":"propeller shop","label":"Propeller Shop"},{"value":"property administrator","label":"Property Administrator"},{"value":"property investment","label":"Property Investment"},{"value":"property maintenance","label":"Property Maintenance"},{"value":"property registry","label":"Property Registry"},{"value":"protected area","label":"Protected Area"},{"value":"protestant church","label":"Protestant Church"},{"value":"provence restaurant","label":"Provence Restaurant"},{"value":"provincial council","label":"Provincial Council"},{"value":"psychiatric hospital","label":"Psychiatric Hospital"},{"value":"psychomotor therapist","label":"Psychomotor Therapist"},{"value":"psychopedagogy clinic","label":"Psychopedagogy Clinic"},{"value":"public bath","label":"Public Bath"},{"value":"public bathroom","label":"Public Bathroom"},{"value":"public housing","label":"Public Housing"},{"value":"public library","label":"Public Library"},{"value":"public sauna","label":"Public Sauna"},{"value":"public school","label":"Public School"},{"value":"public university","label":"Public University"},{"value":"pueblan restaurant","label":"Pueblan Restaurant"},{"value":"pump supplier","label":"Pump Supplier"},{"value":"pumpkin patch","label":"Pumpkin Patch"},{"value":"punjabi restaurant","label":"Punjabi Restaurant"},{"value":"puppet theater","label":"Puppet Theater"},{"value":"pvc industry","label":"Pvc Industry"},{"value":"quaker church","label":"Quaker Church"},{"value":"quantity surveyor","label":"Quantity Surveyor"},{"value":"quebecois restaurant","label":"Quebecois Restaurant"},{"value":"quilt shop","label":"Quilt Shop"},{"value":"race course","label":"Race Course"},{"value":"raclette restaurant","label":"Raclette Restaurant"},{"value":"racquetball club","label":"Racquetball Club"},{"value":"radiator shop","label":"Radiator Shop"},{"value":"radio broadcaster","label":"Radio Broadcaster"},{"value":"rail museum","label":"Rail Museum"},{"value":"railing contractor","label":"Railing Contractor"},{"value":"railroad company","label":"Railroad Company"},{"value":"railroad contractor","label":"Railroad Contractor"},{"value":"railway services","label":"Railway Services"},{"value":"rajasthani restaurant","label":"Rajasthani Restaurant"},{"value":"ram dealer","label":"Ram Dealer"},{"value":"ramen restaurant","label":"Ramen Restaurant"},{"value":"reclamation centre","label":"Reclamation Centre"},{"value":"record company","label":"Record Company"},{"value":"record store","label":"Record Store"},{"value":"recording studio","label":"Recording Studio"},{"value":"recreation center","label":"Recreation Center"},{"value":"recycling center","label":"Recycling Center"},{"value":"reenactment site","label":"Reenactment Site"},{"value":"reform synagogue","label":"Reform Synagogue"},{"value":"reformed church","label":"Reformed Church"},{"value":"refrigerator store","label":"Refrigerator Store"},{"value":"refugee camp","label":"Refugee Camp"},{"value":"regional airport","label":"Regional Airport"},{"value":"regional council","label":"Regional Council"},{"value":"registration office","label":"Registration Office"},{"value":"registry office","label":"Registry Office"},{"value":"rehabilitation center","label":"Rehabilitation Center"},{"value":"rehearsa studio","label":"Rehearsa Studio"},{"value":"reiki therapist","label":"Reiki Therapist"},{"value":"religious destination","label":"Religious Destination"},{"value":"religious institution","label":"Religious Institution"},{"value":"religious lodging","label":"Religious Lodging"},{"value":"religious organization","label":"Religious Organization"},{"value":"religious school","label":"Religious School"},{"value":"renault dealer","label":"Renault Dealer"},{"value":"repair service","label":"Repair Service"},{"value":"reptile store","label":"Reptile Store"},{"value":"research engineer","label":"Research Engineer"},{"value":"research foundation","label":"Research Foundation"},{"value":"research institute","label":"Research Institute"},{"value":"residential college","label":"Residential College"},{"value":"residents association","label":"Residents Association"},{"value":"resort hotel","label":"Resort Hotel"},{"value":"rest stop","label":"Rest Stop"},{"value":"restaurant brasserie","label":"Restaurant Brasserie"},{"value":"resume service","label":"Resume Service"},{"value":"retirement community","label":"Retirement Community"},{"value":"retirement home","label":"Retirement Home"},{"value":"retreat center","label":"Retreat Center"},{"value":"rice mill","label":"Rice Mill"},{"value":"rice restaurant","label":"Rice Restaurant"},{"value":"rice shop","label":"Rice Shop"},{"value":"rice wholesaler","label":"Rice Wholesaler"},{"value":"river port","label":"River Port"},{"value":"road cycling","label":"Road Cycling"},{"value":"rock climbing","label":"Rock Climbing"},{"value":"rock shop","label":"Rock Shop"},{"value":"roller coaster","label":"Roller Coaster"},{"value":"roman restaurant","label":"Roman Restaurant"},{"value":"romanian restaurant","label":"Romanian Restaurant"},{"value":"roofing contractor","label":"Roofing Contractor"},{"value":"rowing area","label":"Rowing Area"},{"value":"rowing club","label":"Rowing Club"},{"value":"rsl club","label":"Rsl Club"},{"value":"rug store","label":"Rug Store"},{"value":"rugby club","label":"Rugby Club"},{"value":"rugby field","label":"Rugby Field"},{"value":"rugby store","label":"Rugby Store"},{"value":"running store","label":"Running Store"},{"value":"russian restaurant","label":"Russian Restaurant"},{"value":"rv dealer","label":"Rv Dealer"},{"value":"rv park","label":"Rv Park"},{"value":"saab dealer","label":"Saab Dealer"},{"value":"sailing club","label":"Sailing Club"},{"value":"sailing school","label":"Sailing School"},{"value":"sake brewery","label":"Sake Brewery"},{"value":"salad shop","label":"Salad Shop"},{"value":"salsa bar","label":"Salsa Bar"},{"value":"salsa classes","label":"Salsa Classes"},{"value":"salvadoran restaurant","label":"Salvadoran Restaurant"},{"value":"salvage dealer","label":"Salvage Dealer"},{"value":"salvage yard","label":"Salvage Yard"},{"value":"samba school","label":"Samba School"},{"value":"sambo school","label":"Sambo School"},{"value":"sand plant","label":"Sand Plant"},{"value":"sandblasting service","label":"Sandblasting Service"},{"value":"sandwich shop","label":"Sandwich Shop"},{"value":"sanitary inspection","label":"Sanitary Inspection"},{"value":"sanitation service","label":"Sanitation Service"},{"value":"sardinian restaurant","label":"Sardinian Restaurant"},{"value":"saree shop","label":"Saree Shop"},{"value":"satay restaurant","label":"Satay Restaurant"},{"value":"saturn dealer","label":"Saturn Dealer"},{"value":"sauna club","label":"Sauna Club"},{"value":"sauna store","label":"Sauna Store"},{"value":"savings bank","label":"Savings Bank"},{"value":"saw mill","label":"Saw Mill"},{"value":"scale supplier","label":"Scale Supplier"},{"value":"scandinavian restaurant","label":"Scandinavian Restaurant"},{"value":"scenic spot","label":"Scenic Spot"},{"value":"scenography company","label":"Scenography Company"},{"value":"school administrator","label":"School Administrator"},{"value":"school center","label":"School Center"},{"value":"school house","label":"School House"},{"value":"science academy","label":"Science Academy"},{"value":"science museum","label":"Science Museum"},{"value":"scottish restaurant","label":"Scottish Restaurant"},{"value":"scout hall","label":"Scout Hall"},{"value":"scout home","label":"Scout Home"},{"value":"scrapbooking store","label":"Scrapbooking Store"},{"value":"screen printer","label":"Screen Printer"},{"value":"screen store","label":"Screen Store"},{"value":"screw supplier","label":"Screw Supplier"},{"value":"scuba instructor","label":"Scuba Instructor"},{"value":"sculpture museum","label":"Sculpture Museum"},{"value":"seafood donburi","label":"Seafood Donburi"},{"value":"seafood farm","label":"Seafood Farm"},{"value":"seafood market","label":"Seafood Market"},{"value":"seafood restaurant","label":"Seafood Restaurant"},{"value":"seafood wholesaler","label":"Seafood Wholesaler"},{"value":"seal shop","label":"Seal Shop"},{"value":"seaplane base","label":"Seaplane Base"},{"value":"seat dealer","label":"Seat Dealer"},{"value":"seblak restaurant","label":"Seblak Restaurant"},{"value":"secondary school","label":"Secondary School"},{"value":"security service","label":"Security Service"},{"value":"seed supplier","label":"Seed Supplier"},{"value":"serbian restaurant","label":"Serbian Restaurant"},{"value":"serviced accommodation","label":"Serviced Accommodation"},{"value":"serviced apartment","label":"Serviced Apartment"},{"value":"sewing company","label":"Sewing Company"},{"value":"sewing shop","label":"Sewing Shop"},{"value":"seychelles restaurant","label":"Seychelles Restaurant"},{"value":"sfiha restaurant","label":"Sfiha Restaurant"},{"value":"shanghainese restaurant","label":"Shanghainese Restaurant"},{"value":"sharpening service","label":"Sharpening Service"},{"value":"shawarma restaurant","label":"Shawarma Restaurant"},{"value":"shed builder","label":"Shed Builder"},{"value":"sheep shearer","label":"Sheep Shearer"},{"value":"sheltered housing","label":"Sheltered Housing"},{"value":"shelving store","label":"Shelving Store"},{"value":"sheriffs department","label":"Sheriffs Department"},{"value":"shinkin bank","label":"Shinkin Bank"},{"value":"shinto shrine","label":"Shinto Shrine"},{"value":"shipping company","label":"Shipping Company"},{"value":"shipping service","label":"Shipping Service"},{"value":"shochu brewery","label":"Shochu Brewery"},{"value":"shoe factory","label":"Shoe Factory"},{"value":"shoe store","label":"Shoe Store"},{"value":"shoe wholesaler","label":"Shoe Wholesaler"},{"value":"shogi lesson","label":"Shogi Lesson"},{"value":"shooting range","label":"Shooting Range"},{"value":"shopping center","label":"Shopping Center"},{"value":"shredding service","label":"Shredding Service"},{"value":"shrimp farm","label":"Shrimp Farm"},{"value":"sichuan restaurant","label":"Sichuan Restaurant"},{"value":"sicilian restaurant","label":"Sicilian Restaurant"},{"value":"siding contractor","label":"Siding Contractor"},{"value":"sign shop","label":"Sign Shop"},{"value":"sikh temple","label":"Sikh Temple"},{"value":"silk store","label":"Silk Store"},{"value":"singaporean restaurant","label":"Singaporean Restaurant"},{"value":"singles organization","label":"Singles Organization"},{"value":"skate shop","label":"Skate Shop"},{"value":"skateboard park","label":"Skateboard Park"},{"value":"skateboard shop","label":"Skateboard Shop"},{"value":"skating instructor","label":"Skating Instructor"},{"value":"ski club","label":"Ski Club"},{"value":"ski resort","label":"Ski Resort"},{"value":"ski school","label":"Ski School"},{"value":"ski store","label":"Ski Store"},{"value":"skittle club","label":"Skittle Club"},{"value":"skoda dealer","label":"Skoda Dealer"},{"value":"skydiving center","label":"Skydiving Center"},{"value":"skylight contractor","label":"Skylight Contractor"},{"value":"sleep clinic","label":"Sleep Clinic"},{"value":"smart dealer","label":"Smart Dealer"},{"value":"smart shop","label":"Smart Shop"},{"value":"smoke shop","label":"Smoke Shop"},{"value":"snack bar","label":"Snack Bar"},{"value":"snowboard shop","label":"Snowboard Shop"},{"value":"snowmobile dealer","label":"Snowmobile Dealer"},{"value":"soccer club","label":"Soccer Club"},{"value":"soccer field","label":"Soccer Field"},{"value":"soccer practice","label":"Soccer Practice"},{"value":"soccer store","label":"Soccer Store"},{"value":"social club","label":"Social Club"},{"value":"social worker","label":"Social Worker"},{"value":"sod supplier","label":"Sod Supplier"},{"value":"sofa store","label":"Sofa Store"},{"value":"softball club","label":"Softball Club"},{"value":"softball field","label":"Softball Field"},{"value":"software company","label":"Software Company"},{"value":"sokol house","label":"Sokol House"},{"value":"soondae restaurant","label":"Soondae Restaurant"},{"value":"soto restaurant","label":"Soto Restaurant"},{"value":"soup kitchen","label":"Soup Kitchen"},{"value":"soup restaurant","label":"Soup Restaurant"},{"value":"soup shop","label":"Soup Shop"},{"value":"souvenir manufacturer","label":"Souvenir Manufacturer"},{"value":"souvenir store","label":"Souvenir Store"},{"value":"spa garden","label":"Spa Garden"},{"value":"spanish restaurant","label":"Spanish Restaurant"},{"value":"special educator","label":"Special Educator"},{"value":"specialized clinic","label":"Specialized Clinic"},{"value":"specialized hospital","label":"Specialized Hospital"},{"value":"speech pathologist","label":"Speech Pathologist"},{"value":"sperm bank","label":"Sperm Bank"},{"value":"spice store","label":"Spice Store"},{"value":"spices exporter","label":"Spices Exporter"},{"value":"spices wholesalers","label":"Spices Wholesalers"},{"value":"spiritist center","label":"Spiritist Center"},{"value":"sports bar","label":"Sports Bar"},{"value":"sports club","label":"Sports Club"},{"value":"sports complex","label":"Sports Complex"},{"value":"sports school","label":"Sports School"},{"value":"sportswear store","label":"Sportswear Store"},{"value":"sportwear manufacturer","label":"Sportwear Manufacturer"},{"value":"spring supplier","label":"Spring Supplier"},{"value":"squash club","label":"Squash Club"},{"value":"squash court","label":"Squash Court"},{"value":"stair contractor","label":"Stair Contractor"},{"value":"stamp shop","label":"Stamp Shop"},{"value":"stand bar","label":"Stand Bar"},{"value":"state archive","label":"State Archive"},{"value":"state park","label":"State Park"},{"value":"state parliament","label":"State Parliament"},{"value":"state police","label":"State Police"},{"value":"stationery manufacturer","label":"Stationery Manufacturer"},{"value":"stationery store","label":"Stationery Store"},{"value":"stationery wholesaler","label":"Stationery Wholesaler"},{"value":"std clinic","label":"Std Clinic"},{"value":"steak house","label":"Steak House"},{"value":"steamboat restaurant","label":"Steamboat Restaurant"},{"value":"steel distributor","label":"Steel Distributor"},{"value":"steel erector","label":"Steel Erector"},{"value":"steel fabricator","label":"Steel Fabricator"},{"value":"stereo store","label":"Stereo Store"},{"value":"sticker manufacturer","label":"Sticker Manufacturer"},{"value":"stitching class","label":"Stitching Class"},{"value":"stock broker","label":"Stock Broker"},{"value":"stone carving","label":"Stone Carving"},{"value":"stone cutter","label":"Stone Cutter"},{"value":"stone supplier","label":"Stone Supplier"},{"value":"storage facility","label":"Storage Facility"},{"value":"stove builder","label":"Stove Builder"},{"value":"structural engineer","label":"Structural Engineer"},{"value":"stucco contractor","label":"Stucco Contractor"},{"value":"student dormitory","label":"Student Dormitory"},{"value":"student union","label":"Student Union"},{"value":"studying center","label":"Studying Center"},{"value":"subaru dealer","label":"Subaru Dealer"},{"value":"sugar factory","label":"Sugar Factory"},{"value":"sugar shack","label":"Sugar Shack"},{"value":"sukiyaki restaurant","label":"Sukiyaki Restaurant"},{"value":"summer camp","label":"Summer Camp"},{"value":"sundae restaurant","label":"Sundae Restaurant"},{"value":"sundanese restaurant","label":"Sundanese Restaurant"},{"value":"sunglasses store","label":"Sunglasses Store"},{"value":"sunroom contractor","label":"Sunroom Contractor"},{"value":"superannuation consultant","label":"Superannuation Consultant"},{"value":"superfund site","label":"Superfund Site"},{"value":"support group","label":"Support Group"},{"value":"surf school","label":"Surf School"},{"value":"surf shop","label":"Surf Shop"},{"value":"surgical center","label":"Surgical Center"},{"value":"surgical oncologist","label":"Surgical Oncologist"},{"value":"surinamese restaurant","label":"Surinamese Restaurant"},{"value":"surplus store","label":"Surplus Store"},{"value":"sushi restaurant","label":"Sushi Restaurant"},{"value":"sushi takeaway","label":"Sushi Takeaway"},{"value":"suzuki dealer","label":"Suzuki Dealer"},{"value":"swabian restaurant","label":"Swabian Restaurant"},{"value":"swedish restaurant","label":"Swedish Restaurant"},{"value":"swim club","label":"Swim Club"},{"value":"swimming basin","label":"Swimming Basin"},{"value":"swimming competition","label":"Swimming Competition"},{"value":"swimming facility","label":"Swimming Facility"},{"value":"swimming instructor","label":"Swimming Instructor"},{"value":"swimming lake","label":"Swimming Lake"},{"value":"swimming pool","label":"Swimming Pool"},{"value":"swimming school","label":"Swimming School"},{"value":"swimwear store","label":"Swimwear Store"},{"value":"swiss restaurant","label":"Swiss Restaurant"},{"value":"syrian restaurant","label":"Syrian Restaurant"},{"value":"tabascan restaurant","label":"Tabascan Restaurant"},{"value":"tacaca restaurant","label":"Tacaca Restaurant"},{"value":"tack shop","label":"Tack Shop"},{"value":"taco restaurant","label":"Taco Restaurant"},{"value":"taekwondo school","label":"Taekwondo School"},{"value":"taiwanese restaurant","label":"Taiwanese Restaurant"},{"value":"takoyaki stand","label":"Takoyaki Stand"},{"value":"talent agency","label":"Talent Agency"},{"value":"tamale shop","label":"Tamale Shop"},{"value":"tanning studio","label":"Tanning Studio"},{"value":"taoist temple","label":"Taoist Temple"},{"value":"tapas bar","label":"Tapas Bar"},{"value":"tapas restaurant","label":"Tapas Restaurant"},{"value":"tatami store","label":"Tatami Store"},{"value":"tattoo artist","label":"Tattoo Artist"},{"value":"tattoo shop","label":"Tattoo Shop"},{"value":"tax assessor","label":"Tax Assessor"},{"value":"tax attorney","label":"Tax Attorney"},{"value":"tax consultant","label":"Tax Consultant"},{"value":"tax department","label":"Tax Department"},{"value":"tax preparation","label":"Tax Preparation"},{"value":"taxi service","label":"Taxi Service"},{"value":"taxi stand","label":"Taxi Stand"},{"value":"tb clinic","label":"Tb Clinic"},{"value":"tea exporter","label":"Tea Exporter"},{"value":"tea house","label":"Tea House"},{"value":"tea manufacturer","label":"Tea Manufacturer"},{"value":"tea store","label":"Tea Store"},{"value":"tea wholesaler","label":"Tea Wholesaler"},{"value":"teacher college","label":"Teacher College"},{"value":"teachers housing","label":"Teachers Housing"},{"value":"technical school","label":"Technical School"},{"value":"technical university","label":"Technical University"},{"value":"technology museum","label":"Technology Museum"},{"value":"technology park","label":"Technology Park"},{"value":"tegal restaurant","label":"Tegal Restaurant"},{"value":"telecommunication school","label":"Telecommunication School"},{"value":"telecommunications contractor","label":"Telecommunications Contractor"},{"value":"telecommunications engineer","label":"Telecommunications Engineer"},{"value":"telemarketing service","label":"Telemarketing Service"},{"value":"telephone company","label":"Telephone Company"},{"value":"telephone exchange","label":"Telephone Exchange"},{"value":"telescope store","label":"Telescope Store"},{"value":"television station","label":"Television Station"},{"value":"temaki restaurant","label":"Temaki Restaurant"},{"value":"temp agency","label":"Temp Agency"},{"value":"tenant ownership","label":"Tenant Ownership"},{"value":"tenants union","label":"Tenants Union"},{"value":"tennis club","label":"Tennis Club"},{"value":"tennis court","label":"Tennis Court"},{"value":"tennis instructor","label":"Tennis Instructor"},{"value":"tennis store","label":"Tennis Store"},{"value":"tesla showroom","label":"Tesla Showroom"},{"value":"textile engineer","label":"Textile Engineer"},{"value":"textile exporter","label":"Textile Exporter"},{"value":"textile mill","label":"Textile Mill"},{"value":"thai restaurant","label":"Thai Restaurant"},{"value":"theater company","label":"Theater Company"},{"value":"theater production","label":"Theater Production"},{"value":"theme park","label":"Theme Park"},{"value":"thermal baths","label":"Thermal Baths"},{"value":"thread supplier","label":"Thread Supplier"},{"value":"thrift store","label":"Thrift Store"},{"value":"thuringian restaurant","label":"Thuringian Restaurant"},{"value":"tibetan restaurant","label":"Tibetan Restaurant"},{"value":"tiffin center","label":"Tiffin Center"},{"value":"tiki bar","label":"Tiki Bar"},{"value":"tile contractor","label":"Tile Contractor"},{"value":"tile manufacturer","label":"Tile Manufacturer"},{"value":"tile store","label":"Tile Store"},{"value":"timeshare agency","label":"Timeshare Agency"},{"value":"tire manufacturer","label":"Tire Manufacturer"},{"value":"tire shop","label":"Tire Shop"},{"value":"title company","label":"Title Company"},{"value":"toast restaurant","label":"Toast Restaurant"},{"value":"tobacco exporter","label":"Tobacco Exporter"},{"value":"tobacco shop","label":"Tobacco Shop"},{"value":"tobacco supplier","label":"Tobacco Supplier"},{"value":"tofu restaurant","label":"Tofu Restaurant"},{"value":"tofu shop","label":"Tofu Shop"},{"value":"toiletries store","label":"Toiletries Store"},{"value":"toll station","label":"Toll Station"},{"value":"tongue restaurant","label":"Tongue Restaurant"},{"value":"tonkatsu restaurant","label":"Tonkatsu Restaurant"},{"value":"tool manufacturer","label":"Tool Manufacturer"},{"value":"tool store","label":"Tool Store"},{"value":"tool wholesaler","label":"Tool Wholesaler"},{"value":"topography company","label":"Topography Company"},{"value":"topsoil supplier","label":"Topsoil Supplier"},{"value":"tortilla shop","label":"Tortilla Shop"},{"value":"tour agency","label":"Tour Agency"},{"value":"tour operator","label":"Tour Operator"},{"value":"tourist attraction","label":"Tourist Attraction"},{"value":"towing service","label":"Towing Service"},{"value":"townhouse complex","label":"Townhouse Complex"},{"value":"toy library","label":"Toy Library"},{"value":"toy manufacturer","label":"Toy Manufacturer"},{"value":"toy museum","label":"Toy Museum"},{"value":"toy store","label":"Toy Store"},{"value":"toyota dealer","label":"Toyota Dealer"},{"value":"tractor dealer","label":"Tractor Dealer"},{"value":"trade school","label":"Trade School"},{"value":"traditional market","label":"Traditional Market"},{"value":"traditional restaurant","label":"Traditional Restaurant"},{"value":"traditional teahouse","label":"Traditional Teahouse"},{"value":"traffic officer","label":"Traffic Officer"},{"value":"trailer dealer","label":"Trailer Dealer"},{"value":"trailer manufacturer","label":"Trailer Manufacturer"},{"value":"train depot","label":"Train Depot"},{"value":"train yard","label":"Train Yard"},{"value":"training center","label":"Training Center"},{"value":"training school","label":"Training School"},{"value":"transcription service","label":"Transcription Service"},{"value":"transit depot","label":"Transit Depot"},{"value":"transmission shop","label":"Transmission Shop"},{"value":"transplant surgeon","label":"Transplant Surgeon"},{"value":"transportation service","label":"Transportation Service"},{"value":"travel agency","label":"Travel Agency"},{"value":"travel clinic","label":"Travel Clinic"},{"value":"travel lounge","label":"Travel Lounge"},{"value":"tree farm","label":"Tree Farm"},{"value":"tree service","label":"Tree Service"},{"value":"trial attorney","label":"Trial Attorney"},{"value":"tribal headquarters","label":"Tribal Headquarters"},{"value":"trophy shop","label":"Trophy Shop"},{"value":"truck dealer","label":"Truck Dealer"},{"value":"truck farmer","label":"Truck Farmer"},{"value":"truck stop","label":"Truck Stop"},{"value":"trucking company","label":"Trucking Company"},{"value":"trucking school","label":"Trucking School"},{"value":"truss manufacturer","label":"Truss Manufacturer"},{"value":"trust bank","label":"Trust Bank"},{"value":"tuning automobile","label":"Tuning Automobile"},{"value":"tunisian restaurant","label":"Tunisian Restaurant"},{"value":"turf supplier","label":"Turf Supplier"},{"value":"turkish restaurant","label":"Turkish Restaurant"},{"value":"turkmen restaurant","label":"Turkmen Restaurant"},{"value":"tuscan restaurant","label":"Tuscan Restaurant"},{"value":"tutoring service","label":"Tutoring Service"},{"value":"tuxedo shop","label":"Tuxedo Shop"},{"value":"typewriter supplier","label":"Typewriter Supplier"},{"value":"typing service","label":"Typing Service"},{"value":"ukrainian restaurant","label":"Ukrainian Restaurant"},{"value":"unagi restaurant","label":"Unagi Restaurant"},{"value":"underwear store","label":"Underwear Store"},{"value":"unemployment office","label":"Unemployment Office"},{"value":"uniform store","label":"Uniform Store"},{"value":"unisex hairdresser","label":"Unisex Hairdresser"},{"value":"unity church","label":"Unity Church"},{"value":"university department","label":"University Department"},{"value":"university hospital","label":"University Hospital"},{"value":"university library","label":"University Library"},{"value":"upholstery shop","label":"Upholstery Shop"},{"value":"urology clinic","label":"Urology Clinic"},{"value":"uruguayan restaurant","label":"Uruguayan Restaurant"},{"value":"utility contractor","label":"Utility Contractor"},{"value":"uzbek restaurant","label":"Uzbek Restaurant"},{"value":"vacation appartment","label":"Vacation Appartment"},{"value":"valencian restaurant","label":"Valencian Restaurant"},{"value":"vaporizer store","label":"Vaporizer Store"},{"value":"variety store","label":"Variety Store"},{"value":"vascular surgeon","label":"Vascular Surgeon"},{"value":"vastu consultant","label":"Vastu Consultant"},{"value":"vegan restaurant","label":"Vegan Restaurant"},{"value":"vegetable wholesaler","label":"Vegetable Wholesaler"},{"value":"vegetarian restaurant","label":"Vegetarian Restaurant"},{"value":"vehicle exporter","label":"Vehicle Exporter"},{"value":"vehicle inspection","label":"Vehicle Inspection"},{"value":"venetian restaurant","label":"Venetian Restaurant"},{"value":"venezuelan restaurant","label":"Venezuelan Restaurant"},{"value":"veterans center","label":"Veterans Center"},{"value":"veterans hospital","label":"Veterans Hospital"},{"value":"veterans organization","label":"Veterans Organization"},{"value":"veterinary pharmacy","label":"Veterinary Pharmacy"},{"value":"video arcade","label":"Video Arcade"},{"value":"video karaoke","label":"Video Karaoke"},{"value":"video store","label":"Video Store"},{"value":"vietnamese restaurant","label":"Vietnamese Restaurant"},{"value":"village hall","label":"Village Hall"},{"value":"vineyard church","label":"Vineyard Church"},{"value":"violin shop","label":"Violin Shop"},{"value":"visa consultant","label":"Visa Consultant"},{"value":"visitor center","label":"Visitor Center"},{"value":"vocal instructor","label":"Vocal Instructor"},{"value":"vocational college","label":"Vocational College"},{"value":"volkswagen dealer","label":"Volkswagen Dealer"},{"value":"volleyball club","label":"Volleyball Club"},{"value":"volleyball court","label":"Volleyball Court"},{"value":"volleyball instructor","label":"Volleyball Instructor"},{"value":"volunteer organization","label":"Volunteer Organization"},{"value":"volvo dealer","label":"Volvo Dealer"},{"value":"waldorf kindergarten","label":"Waldorf Kindergarten"},{"value":"waldorf school","label":"Waldorf School"},{"value":"wallpaper installer","label":"Wallpaper Installer"},{"value":"wallpaper store","label":"Wallpaper Store"},{"value":"war museum","label":"War Museum"},{"value":"warehouse club","label":"Warehouse Club"},{"value":"warehouse store","label":"Warehouse Store"},{"value":"watch manufacturer","label":"Watch Manufacturer"},{"value":"watch store","label":"Watch Store"},{"value":"water mill","label":"Water Mill"},{"value":"water park","label":"Water Park"},{"value":"water works","label":"Water Works"},{"value":"waterbed store","label":"Waterbed Store"},{"value":"waterproofing company","label":"Waterproofing Company"},{"value":"wax museum","label":"Wax Museum"},{"value":"wax supplier","label":"Wax Supplier"},{"value":"weaving mill","label":"Weaving Mill"},{"value":"website designer","label":"Website Designer"},{"value":"wedding bakery","label":"Wedding Bakery"},{"value":"wedding buffet","label":"Wedding Buffet"},{"value":"wedding chapel","label":"Wedding Chapel"},{"value":"wedding photographer","label":"Wedding Photographer"},{"value":"wedding planner","label":"Wedding Planner"},{"value":"wedding service","label":"Wedding Service"},{"value":"wedding store","label":"Wedding Store"},{"value":"wedding venue","label":"Wedding Venue"},{"value":"weigh station","label":"Weigh Station"},{"value":"weightlifting area","label":"Weightlifting Area"},{"value":"wellness center","label":"Wellness Center"},{"value":"wellness hotel","label":"Wellness Hotel"},{"value":"wellness program","label":"Wellness Program"},{"value":"welsh restaurant","label":"Welsh Restaurant"},{"value":"wesleyan church","label":"Wesleyan Church"},{"value":"western restaurant","label":"Western Restaurant"},{"value":"wheel store","label":"Wheel Store"},{"value":"wheelchair store","label":"Wheelchair Store"},{"value":"wholesale bakery","label":"Wholesale Bakery"},{"value":"wholesale drugstore","label":"Wholesale Drugstore"},{"value":"wholesale florist","label":"Wholesale Florist"},{"value":"wholesale grocer","label":"Wholesale Grocer"},{"value":"wholesale jeweler","label":"Wholesale Jeweler"},{"value":"wholesale market","label":"Wholesale Market"},{"value":"wicker store","label":"Wicker Store"},{"value":"wig shop","label":"Wig Shop"},{"value":"wildlife park","label":"Wildlife Park"},{"value":"wildlife refuge","label":"Wildlife Refuge"},{"value":"wind farm","label":"Wind Farm"},{"value":"window supplier","label":"Window Supplier"},{"value":"windsurfing store","label":"Windsurfing Store"},{"value":"wine bar","label":"Wine Bar"},{"value":"wine cellar","label":"Wine Cellar"},{"value":"wine club","label":"Wine Club"},{"value":"wine store","label":"Wine Store"},{"value":"wine wholesaler","label":"Wine Wholesaler"},{"value":"wok restaurant","label":"Wok Restaurant"},{"value":"womens college","label":"Womens College"},{"value":"womens organization","label":"Womens Organization"},{"value":"womens shelter","label":"Womens Shelter"},{"value":"wood supplier","label":"Wood Supplier"},{"value":"wool store","label":"Wool Store"},{"value":"workers club","label":"Workers Club"},{"value":"wrestling school","label":"Wrestling School"},{"value":"yacht broker","label":"Yacht Broker"},{"value":"yacht club","label":"Yacht Club"},{"value":"yakiniku restaurant","label":"Yakiniku Restaurant"},{"value":"yakisoba restaurant","label":"Yakisoba Restaurant"},{"value":"yakitori restaurant","label":"Yakitori Restaurant"},{"value":"yarn store","label":"Yarn Store"},{"value":"yemenite restaurant","label":"Yemenite Restaurant"},{"value":"yoga instructor","label":"Yoga Instructor"},{"value":"yoga studio","label":"Yoga Studio"},{"value":"youth care","label":"Youth Care"},{"value":"youth center","label":"Youth Center"},{"value":"youth club","label":"Youth Club"},{"value":"youth groups","label":"Youth Groups"},{"value":"youth hostel","label":"Youth Hostel"},{"value":"youth organization","label":"Youth Organization"},{"value":"yucatan restaurant","label":"Yucatan Restaurant"},{"value":"aboriginal art gallery","label":"Aboriginal Art Gallery"},{"value":"abundant life church","label":"Abundant Life Church"},{"value":"accounting software company","label":"Accounting Software Company"},{"value":"acrobatic diving pool","label":"Acrobatic Diving Pool"},{"value":"addiction treatment center","label":"Addiction Treatment Center"},{"value":"adult dvd store","label":"Adult Dvd Store"},{"value":"adult education school","label":"Adult Education School"},{"value":"adult entertainment club","label":"Adult Entertainment Club"},{"value":"adult entertainment store","label":"Adult Entertainment Store"},{"value":"adventure sports center","label":"Adventure Sports Center"},{"value":"aerated drinks supplier","label":"Aerated Drinks Supplier"},{"value":"aerial installation service","label":"Aerial Installation Service"},{"value":"aerial sports center","label":"Aerial Sports Center"},{"value":"aero dance class","label":"Aero Dance Class"},{"value":"african goods store","label":"African Goods Store"},{"value":"after school program","label":"After School Program"},{"value":"agricultural high school","label":"Agricultural High School"},{"value":"agricultural machinery manufacturer","label":"Agricultural Machinery Manufacturer"},{"value":"agricultural product wholesaler","label":"Agricultural Product Wholesaler"},{"value":"air compressor supplier","label":"Air Compressor Supplier"},{"value":"air conditioning contractor","label":"Air Conditioning Contractor"},{"value":"air conditioning store","label":"Air Conditioning Store"},{"value":"air filter supplier","label":"Air Filter Supplier"},{"value":"air force base","label":"Air Force Base"},{"value":"airbrushing supply store","label":"Airbrushing Supply Store"},{"value":"aircraft maintenance company","label":"Aircraft Maintenance Company"},{"value":"aircraft rental service","label":"Aircraft Rental Service"},{"value":"aircraft supply store","label":"Aircraft Supply Store"},{"value":"airline ticket agency","label":"Airline Ticket Agency"},{"value":"airport shuttle service","label":"Airport Shuttle Service"},{"value":"airsoft gun shop","label":"Airsoft Gun Shop"},{"value":"alcohol retail monopoly","label":"Alcohol Retail Monopoly"},{"value":"alcoholic beverage wholesaler","label":"Alcoholic Beverage Wholesaler"},{"value":"alcoholism treatment program","label":"Alcoholism Treatment Program"},{"value":"alfa romeo dealer","label":"Alfa Romeo Dealer"},{"value":"alternative fuel station","label":"Alternative Fuel Station"},{"value":"alternative medicine practitioner","label":"Alternative Medicine Practitioner"},{"value":"aluminum frames supplier","label":"Aluminum Frames Supplier"},{"value":"american grocery store","label":"American Grocery Store"},{"value":"amish furniture store","label":"Amish Furniture Store"},{"value":"amusement machine supplier","label":"Amusement Machine Supplier"},{"value":"amusement park ride","label":"Amusement Park Ride"},{"value":"amusement ride supplier","label":"Amusement Ride Supplier"},{"value":"an hui restaurant","label":"An Hui Restaurant"},{"value":"angler fish restaurant","label":"Angler Fish Restaurant"},{"value":"animal control service","label":"Animal Control Service"},{"value":"animal protection organization","label":"Animal Protection Organization"},{"value":"animal rescue service","label":"Animal Rescue Service"},{"value":"animal watering hole","label":"Animal Watering Hole"},{"value":"antique furniture store","label":"Antique Furniture Store"},{"value":"apartment rental agency","label":"Apartment Rental Agency"},{"value":"appliance parts supplier","label":"Appliance Parts Supplier"},{"value":"appliance rental service","label":"Appliance Rental Service"},{"value":"appliance repair service","label":"Appliance Repair Service"},{"value":"appliances customer service","label":"Appliances Customer Service"},{"value":"architectural salvage store","label":"Architectural Salvage Store"},{"value":"armed forces association","label":"Armed Forces Association"},{"value":"aromatherapy supply store","label":"Aromatherapy Supply Store"},{"value":"art restoration service","label":"Art Restoration Service"},{"value":"art supply store","label":"Art Supply Store"},{"value":"artificial plant supplier","label":"Artificial Plant Supplier"},{"value":"asbestos testing service","label":"Asbestos Testing Service"},{"value":"asian fusion restaurant","label":"Asian Fusion Restaurant"},{"value":"asian grocery store","label":"Asian Grocery Store"},{"value":"asphalt mixing plant","label":"Asphalt Mixing Plant"},{"value":"assisted living facility","label":"Assisted Living Facility"},{"value":"association or organization","label":"Association Or Organization"},{"value":"aston martin dealer","label":"Aston Martin Dealer"},{"value":"attorney referral service","label":"Attorney Referral Service"},{"value":"atv rental service","label":"Atv Rental Service"},{"value":"atv repair shop","label":"Atv Repair Shop"},{"value":"audio visual consultant","label":"Audio Visual Consultant"},{"value":"australian goods store","label":"Australian Goods Store"},{"value":"auto accessories wholesaler","label":"Auto Accessories Wholesaler"},{"value":"auto body shop","label":"Auto Body Shop"},{"value":"auto bodywork mechanic","label":"Auto Bodywork Mechanic"},{"value":"auto chemistry shop","label":"Auto Chemistry Shop"},{"value":"auto electrical service","label":"Auto Electrical Service"},{"value":"auto glass shop","label":"Auto Glass Shop"},{"value":"auto insurance agency","label":"Auto Insurance Agency"},{"value":"auto machine shop","label":"Auto Machine Shop"},{"value":"auto parts manufacturer","label":"Auto Parts Manufacturer"},{"value":"auto parts market","label":"Auto Parts Market"},{"value":"auto parts store","label":"Auto Parts Store"},{"value":"auto repair shop","label":"Auto Repair Shop"},{"value":"auto restoration service","label":"Auto Restoration Service"},{"value":"auto rickshaw stand","label":"Auto Rickshaw Stand"},{"value":"auto spring shop","label":"Auto Spring Shop"},{"value":"auto sunroof shop","label":"Auto Sunroof Shop"},{"value":"auto tag agency","label":"Auto Tag Agency"},{"value":"automobile storage facility","label":"Automobile Storage Facility"},{"value":"aviation training institute","label":"Aviation Training Institute"},{"value":"ayam penyet restaurant","label":"Ayam Penyet Restaurant"},{"value":"baby clothing store","label":"Baby Clothing Store"},{"value":"baby swimming school","label":"Baby Swimming School"},{"value":"bail bonds service","label":"Bail Bonds Service"},{"value":"baking supply store","label":"Baking Supply Store"},{"value":"ballroom dance instructor","label":"Ballroom Dance Instructor"},{"value":"bar and grill","label":"Bar And Grill"},{"value":"bar stool supplier","label":"Bar Stool Supplier"},{"value":"barber supply store","label":"Barber Supply Store"},{"value":"baseball goods store","label":"Baseball Goods Store"},{"value":"basketball court contractor","label":"Basketball Court Contractor"},{"value":"bathroom supply store","label":"Bathroom Supply Store"},{"value":"batik clothing store","label":"Batik Clothing Store"},{"value":"batting cage center","label":"Batting Cage Center"},{"value":"beach cleaning service","label":"Beach Cleaning Service"},{"value":"beach clothing store","label":"Beach Clothing Store"},{"value":"beach entertainment shop","label":"Beach Entertainment Shop"},{"value":"beach volleyball club","label":"Beach Volleyball Club"},{"value":"beach volleyball court","label":"Beach Volleyball Court"},{"value":"beauty product supplier","label":"Beauty Product Supplier"},{"value":"beauty products wholesaler","label":"Beauty Products Wholesaler"},{"value":"beauty supply store","label":"Beauty Supply Store"},{"value":"bed and breakfast","label":"Bed And Breakfast"},{"value":"bedroom furniture store","label":"Bedroom Furniture Store"},{"value":"bee relocation service","label":"Bee Relocation Service"},{"value":"bicycle rental service","label":"Bicycle Rental Service"},{"value":"bicycle repair shop","label":"Bicycle Repair Shop"},{"value":"bikram yoga studio","label":"Bikram Yoga Studio"},{"value":"billiards supply store","label":"Billiards Supply Store"},{"value":"bird control service","label":"Bird Control Service"},{"value":"bird watching area","label":"Bird Watching Area"},{"value":"birth certificate service","label":"Birth Certificate Service"},{"value":"birth control center","label":"Birth Control Center"},{"value":"blast cleaning service","label":"Blast Cleaning Service"},{"value":"blood donation center","label":"Blood Donation Center"},{"value":"blood testing service","label":"Blood Testing Service"},{"value":"bmw motorcycle dealer","label":"Bmw Motorcycle Dealer"},{"value":"board game club","label":"Board Game Club"},{"value":"board of education","label":"Board Of Education"},{"value":"boat accessories supplier","label":"Boat Accessories Supplier"},{"value":"boat cleaning service","label":"Boat Cleaning Service"},{"value":"boat cover supplier","label":"Boat Cover Supplier"},{"value":"boat rental service","label":"Boat Rental Service"},{"value":"boat repair shop","label":"Boat Repair Shop"},{"value":"boat storage facility","label":"Boat Storage Facility"},{"value":"boat tour agency","label":"Boat Tour Agency"},{"value":"boat trailer dealer","label":"Boat Trailer Dealer"},{"value":"bocce ball court","label":"Bocce Ball Court"},{"value":"body piercing shop","label":"Body Piercing Shop"},{"value":"body shaping class","label":"Body Shaping Class"},{"value":"bonsai plant supplier","label":"Bonsai Plant Supplier"},{"value":"boot repair shop","label":"Boot Repair Shop"},{"value":"border crossing station","label":"Border Crossing Station"},{"value":"bottled water supplier","label":"Bottled Water Supplier"},{"value":"bouncy castle hire","label":"Bouncy Castle Hire"},{"value":"bowling supply shop","label":"Bowling Supply Shop"},{"value":"box lunch supplier","label":"Box Lunch Supplier"},{"value":"boys high school","label":"Boys High School"},{"value":"bpo placement agency","label":"Bpo Placement Agency"},{"value":"brewing supply store","label":"Brewing Supply Store"},{"value":"bubble tea store","label":"Bubble Tea Store"},{"value":"buddhist supplies store","label":"Buddhist Supplies Store"},{"value":"building design company","label":"Building Design Company"},{"value":"building materials market","label":"Building Materials Market"},{"value":"building materials store","label":"Building Materials Store"},{"value":"building materials supplier","label":"Building Materials Supplier"},{"value":"building restoration service","label":"Building Restoration Service"},{"value":"bungee jumping center","label":"Bungee Jumping Center"},{"value":"burglar alarm store","label":"Burglar Alarm Store"},{"value":"bus ticket agency","label":"Bus Ticket Agency"},{"value":"bus tour agency","label":"Bus Tour Agency"},{"value":"business administration service","label":"Business Administration Service"},{"value":"business banking service","label":"Business Banking Service"},{"value":"business development service","label":"Business Development Service"},{"value":"business management consultant","label":"Business Management Consultant"},{"value":"business networking company","label":"Business Networking Company"},{"value":"butane gas supplier","label":"Butane Gas Supplier"},{"value":"butcher shop deli","label":"Butcher Shop Deli"},{"value":"cabin rental agency","label":"Cabin Rental Agency"},{"value":"calvary chapel church","label":"Calvary Chapel Church"},{"value":"camera repair shop","label":"Camera Repair Shop"},{"value":"camper shell supplier","label":"Camper Shell Supplier"},{"value":"cancer treatment center","label":"Cancer Treatment Center"},{"value":"cane furniture store","label":"Cane Furniture Store"},{"value":"cape verdean restaurant","label":"Cape Verdean Restaurant"},{"value":"car accessories store","label":"Car Accessories Store"},{"value":"car alarm supplier","label":"Car Alarm Supplier"},{"value":"car battery store","label":"Car Battery Store"},{"value":"car detailing service","label":"Car Detailing Service"},{"value":"car inspection station","label":"Car Inspection Station"},{"value":"car leasing service","label":"Car Leasing Service"},{"value":"car race track","label":"Car Race Track"},{"value":"car rental agency","label":"Car Rental Agency"},{"value":"car sharing location","label":"Car Sharing Location"},{"value":"car stereo store","label":"Car Stereo Store"},{"value":"career guidance service","label":"Career Guidance Service"},{"value":"carpet cleaning service","label":"Carpet Cleaning Service"},{"value":"carriage ride service","label":"Carriage Ride Service"},{"value":"casual sushi restaurant","label":"Casual Sushi Restaurant"},{"value":"cat boarding service","label":"Cat Boarding Service"},{"value":"cell phone store","label":"Cell Phone Store"},{"value":"central american restaurant","label":"Central American Restaurant"},{"value":"central european restaurant","label":"Central European Restaurant"},{"value":"central javanese restaurant","label":"Central Javanese Restaurant"},{"value":"certified public accountant","label":"Certified Public Accountant"},{"value":"chamber of agriculture","label":"Chamber Of Agriculture"},{"value":"chamber of commerce","label":"Chamber Of Commerce"},{"value":"chamber of handicrafts","label":"Chamber Of Handicrafts"},{"value":"champon noodle restaurant","label":"Champon Noodle Restaurant"},{"value":"check cashing service","label":"Check Cashing Service"},{"value":"chicken wings restaurant","label":"Chicken Wings Restaurant"},{"value":"child care agency","label":"Child Care Agency"},{"value":"children amusement center","label":"Children Amusement Center"},{"value":"childrens book store","label":"Childrens Book Store"},{"value":"childrens clothing store","label":"Childrens Clothing Store"},{"value":"childrens furniture store","label":"Childrens Furniture Store"},{"value":"childrens party buffet","label":"Childrens Party Buffet"},{"value":"childrens party service","label":"Childrens Party Service"},{"value":"chinese language instructor","label":"Chinese Language Instructor"},{"value":"chinese language school","label":"Chinese Language School"},{"value":"chinese medicine clinic","label":"Chinese Medicine Clinic"},{"value":"chinese medicine store","label":"Chinese Medicine Store"},{"value":"chinese noodle restaurant","label":"Chinese Noodle Restaurant"},{"value":"chinese tea house","label":"Chinese Tea House"},{"value":"christian book store","label":"Christian Book Store"},{"value":"christmas tree farm","label":"Christmas Tree Farm"},{"value":"church of christ","label":"Church Of Christ"},{"value":"church supply store","label":"Church Supply Store"},{"value":"cig kofte restaurant","label":"Cig Kofte Restaurant"},{"value":"cinema equipment supplier","label":"Cinema Equipment Supplier"},{"value":"citizen information bureau","label":"Citizen Information Bureau"},{"value":"citizens advice bureau","label":"Citizens Advice Bureau"},{"value":"city clerks office","label":"City Clerks Office"},{"value":"city district office","label":"City District Office"},{"value":"city employment department","label":"City Employment Department"},{"value":"city government office","label":"City Government Office"},{"value":"city pillar shine","label":"City Pillar Shine"},{"value":"city tax office","label":"City Tax Office"},{"value":"civil engineering company","label":"Civil Engineering Company"},{"value":"civil examinations academy","label":"Civil Examinations Academy"},{"value":"civil law attorney","label":"Civil Law Attorney"},{"value":"cleaning products supplier","label":"Cleaning Products Supplier"},{"value":"clock repair service","label":"Clock Repair Service"},{"value":"clock watch maker","label":"Clock Watch Maker"},{"value":"closed circuit television","label":"Closed Circuit Television"},{"value":"clothing alteration service","label":"Clothing Alteration Service"},{"value":"cng fittment center","label":"Cng Fittment Center"},{"value":"coast guard station","label":"Coast Guard Station"},{"value":"coffee machine supplier","label":"Coffee Machine Supplier"},{"value":"coffee vending machine","label":"Coffee Vending Machine"},{"value":"coin operated locker","label":"Coin Operated Locker"},{"value":"cold cut store","label":"Cold Cut Store"},{"value":"cold noodle restaurant","label":"Cold Noodle Restaurant"},{"value":"cold storage facility","label":"Cold Storage Facility"},{"value":"college of agriculture","label":"College Of Agriculture"},{"value":"comic book store","label":"Comic Book Store"},{"value":"commercial cleaning service","label":"Commercial Cleaning Service"},{"value":"commercial refrigerator supplier","label":"Commercial Refrigerator Supplier"},{"value":"commissioner for oaths","label":"Commissioner For Oaths"},{"value":"community health center","label":"Community Health Center"},{"value":"comprehensive secondary school","label":"Comprehensive Secondary School"},{"value":"computer accessories store","label":"Computer Accessories Store"},{"value":"computer desk store","label":"Computer Desk Store"},{"value":"computer hardware manufacturer","label":"Computer Hardware Manufacturer"},{"value":"computer networking center","label":"Computer Networking Center"},{"value":"computer repair service","label":"Computer Repair Service"},{"value":"computer security service","label":"Computer Security Service"},{"value":"computer software store","label":"Computer Software Store"},{"value":"computer training school","label":"Computer Training School"},{"value":"concrete product supplier","label":"Concrete Product Supplier"},{"value":"condominium rental agency","label":"Condominium Rental Agency"},{"value":"conservatory construction contractor","label":"Conservatory Construction Contractor"},{"value":"conservatory of music","label":"Conservatory Of Music"},{"value":"construction equipment supplier","label":"Construction Equipment Supplier"},{"value":"construction machine dealer","label":"Construction Machine Dealer"},{"value":"construction material wholesaler","label":"Construction Material Wholesaler"},{"value":"consumer advice center","label":"Consumer Advice Center"},{"value":"contact lenses supplier","label":"Contact Lenses Supplier"},{"value":"contemporary louisiana restaurant","label":"Contemporary Louisiana Restaurant"},{"value":"convention information bureau","label":"Convention Information Bureau"},{"value":"copier repair service","label":"Copier Repair Service"},{"value":"copying supply store","label":"Copying Supply Store"},{"value":"corporate entertainment service","label":"Corporate Entertainment Service"},{"value":"corporate gift supplier","label":"Corporate Gift Supplier"},{"value":"correctional services department","label":"Correctional Services Department"},{"value":"cosmetic products manufacturer","label":"Cosmetic Products Manufacturer"},{"value":"cost accounting service","label":"Cost Accounting Service"},{"value":"costa rican restaurant","label":"Costa Rican Restaurant"},{"value":"costume jewelry shop","label":"Costume Jewelry Shop"},{"value":"costume rental service","label":"Costume Rental Service"},{"value":"country food restaurant","label":"Country Food Restaurant"},{"value":"county government office","label":"County Government Office"},{"value":"court executive officer","label":"Court Executive Officer"},{"value":"crab dish restaurant","label":"Crab Dish Restaurant"},{"value":"crane rental agency","label":"Crane Rental Agency"},{"value":"credit counseling service","label":"Credit Counseling Service"},{"value":"credit reporting agency","label":"Credit Reporting Agency"},{"value":"crime victim service","label":"Crime Victim Service"},{"value":"criminal law attorney","label":"Criminal Law Attorney"},{"value":"crushed stone supplier","label":"Crushed Stone Supplier"},{"value":"cured ham bar","label":"Cured Ham Bar"},{"value":"cured ham store","label":"Cured Ham Store"},{"value":"cured ham warehouse","label":"Cured Ham Warehouse"},{"value":"currency exchange service","label":"Currency Exchange Service"},{"value":"custom home builder","label":"Custom Home Builder"},{"value":"custom label printer","label":"Custom Label Printer"},{"value":"cycle rickshaw stand","label":"Cycle Rickshaw Stand"},{"value":"dart supply store","label":"Dart Supply Store"},{"value":"data entry service","label":"Data Entry Service"},{"value":"data recovery service","label":"Data Recovery Service"},{"value":"database management company","label":"Database Management Company"},{"value":"day care center","label":"Day Care Center"},{"value":"debris removal service","label":"Debris Removal Service"},{"value":"debt collection agency","label":"Debt Collection Agency"},{"value":"delivery chinese restaurant","label":"Delivery Chinese Restaurant"},{"value":"denim wear store","label":"Denim Wear Store"},{"value":"dental implants periodontist","label":"Dental Implants Periodontist"},{"value":"dental implants provider","label":"Dental Implants Provider"},{"value":"dental insurance agency","label":"Dental Insurance Agency"},{"value":"dental supply store","label":"Dental Supply Store"},{"value":"denture care center","label":"Denture Care Center"},{"value":"department of education","label":"Department Of Education"},{"value":"department of finance","label":"Department Of Finance"},{"value":"department of housing","label":"Department Of Housing"},{"value":"department of transportation","label":"Department Of Transportation"},{"value":"desktop publishing service","label":"Desktop Publishing Service"},{"value":"diabetes equipment supplier","label":"Diabetes Equipment Supplier"},{"value":"diesel engine dealer","label":"Diesel Engine Dealer"},{"value":"diesel fuel supplier","label":"Diesel Fuel Supplier"},{"value":"digital printing service","label":"Digital Printing Service"},{"value":"dim sum restaurant","label":"Dim Sum Restaurant"},{"value":"direct mail advertising","label":"Direct Mail Advertising"},{"value":"disability equipment supplier","label":"Disability Equipment Supplier"},{"value":"disabled sports center","label":"Disabled Sports Center"},{"value":"disc golf course","label":"Disc Golf Course"},{"value":"display home center","label":"Display Home Center"},{"value":"display stand manufacturer","label":"Display Stand Manufacturer"},{"value":"disposable tableware supplier","label":"Disposable Tableware Supplier"},{"value":"distance learning center","label":"Distance Learning Center"},{"value":"district government office","label":"District Government Office"},{"value":"dj supply store","label":"Dj Supply Store"},{"value":"dogsled ride service","label":"Dogsled Ride Service"},{"value":"doll restoration service","label":"Doll Restoration Service"},{"value":"doner kebab restaurant","label":"Doner Kebab Restaurant"},{"value":"double glazing supplier","label":"Double Glazing Supplier"},{"value":"drafting equipment supplier","label":"Drafting Equipment Supplier"},{"value":"dried flower shop","label":"Dried Flower Shop"},{"value":"dried seafood store","label":"Dried Seafood Store"},{"value":"drilling equipment supplier","label":"Drilling Equipment Supplier"},{"value":"drinking water fountain","label":"Drinking Water Fountain"},{"value":"drivers license office","label":"Drivers License Office"},{"value":"driving test centre","label":"Driving Test Centre"},{"value":"drug testing service","label":"Drug Testing Service"},{"value":"dry fruit store","label":"Dry Fruit Store"},{"value":"dry ice supplier","label":"Dry Ice Supplier"},{"value":"dry wall contractor","label":"Dry Wall Contractor"},{"value":"ds automobiles dealer","label":"Ds Automobiles Dealer"},{"value":"dump truck dealer","label":"Dump Truck Dealer"},{"value":"dumpster rental service","label":"Dumpster Rental Service"},{"value":"duty free store","label":"Duty Free Store"},{"value":"e commerce agency","label":"E Commerce Agency"},{"value":"e commerce service","label":"E Commerce Service"},{"value":"ear piercing service","label":"Ear Piercing Service"},{"value":"earth works company","label":"Earth Works Company"},{"value":"east african restaurant","label":"East African Restaurant"},{"value":"east javanese restaurant","label":"East Javanese Restaurant"},{"value":"eastern european restaurant","label":"Eastern European Restaurant"},{"value":"eastern orthodox church","label":"Eastern Orthodox Church"},{"value":"economic development agency","label":"Economic Development Agency"},{"value":"educational supply store","label":"Educational Supply Store"},{"value":"educational testing service","label":"Educational Testing Service"},{"value":"eftpos equipment supplier","label":"Eftpos Equipment Supplier"},{"value":"elder law attorney","label":"Elder Law Attorney"},{"value":"electric bicycle store","label":"Electric Bicycle Store"},{"value":"electric motor store","label":"Electric Motor Store"},{"value":"electric motorcycle dealer","label":"Electric Motorcycle Dealer"},{"value":"electric utility company","label":"Electric Utility Company"},{"value":"electric utility manufacturer","label":"Electric Utility Manufacturer"},{"value":"electrical appliance wholesaler","label":"Electrical Appliance Wholesaler"},{"value":"electrical equipment supplier","label":"Electrical Equipment Supplier"},{"value":"electrical installation service","label":"Electrical Installation Service"},{"value":"electrical repair shop","label":"Electrical Repair Shop"},{"value":"electrical supply store","label":"Electrical Supply Store"},{"value":"electronic parts supplier","label":"Electronic Parts Supplier"},{"value":"electronics accessories wholesaler","label":"Electronics Accessories Wholesaler"},{"value":"electronics hire shop","label":"Electronics Hire Shop"},{"value":"electronics repair shop","label":"Electronics Repair Shop"},{"value":"electronics vending machine","label":"Electronics Vending Machine"},{"value":"emergency call station","label":"Emergency Call Station"},{"value":"emergency care physician","label":"Emergency Care Physician"},{"value":"emergency care service","label":"Emergency Care Service"},{"value":"emergency dental service","label":"Emergency Dental Service"},{"value":"emergency locksmith service","label":"Emergency Locksmith Service"},{"value":"emergency management ministry","label":"Emergency Management Ministry"},{"value":"emergency training school","label":"Emergency Training School"},{"value":"emergency veterinarian service","label":"Emergency Veterinarian Service"},{"value":"engine rebuilding service","label":"Engine Rebuilding Service"},{"value":"english language camp","label":"English Language Camp"},{"value":"english language instructor","label":"English Language Instructor"},{"value":"english language school","label":"English Language School"},{"value":"environmental health service","label":"Environmental Health Service"},{"value":"environmental protection organization","label":"Environmental Protection Organization"},{"value":"equipment rental agency","label":"Equipment Rental Agency"},{"value":"escape room center","label":"Escape Room Center"},{"value":"estate planning attorney","label":"Estate Planning Attorney"},{"value":"event management company","label":"Event Management Company"},{"value":"event technology service","label":"Event Technology Service"},{"value":"event ticket seller","label":"Event Ticket Seller"},{"value":"executive search firm","label":"Executive Search Firm"},{"value":"extended stay hotel","label":"Extended Stay Hotel"},{"value":"eye care center","label":"Eye Care Center"},{"value":"fabric product manufacturer","label":"Fabric Product Manufacturer"},{"value":"factory equipment supplier","label":"Factory Equipment Supplier"},{"value":"faculty of arts","label":"Faculty Of Arts"},{"value":"faculty of law","label":"Faculty Of Law"},{"value":"faculty of pharmacy","label":"Faculty Of Pharmacy"},{"value":"faculty of psychology","label":"Faculty Of Psychology"},{"value":"faculty of science","label":"Faculty Of Science"},{"value":"faculty of sports","label":"Faculty Of Sports"},{"value":"fair trade organization","label":"Fair Trade Organization"},{"value":"family law attorney","label":"Family Law Attorney"},{"value":"family planning center","label":"Family Planning Center"},{"value":"family planning counselor","label":"Family Planning Counselor"},{"value":"family practice physician","label":"Family Practice Physician"},{"value":"family service center","label":"Family Service Center"},{"value":"farm equipment supplier","label":"Farm Equipment Supplier"},{"value":"farm household tour","label":"Farm Household Tour"},{"value":"fashion accessories store","label":"Fashion Accessories Store"},{"value":"fashion design school","label":"Fashion Design School"},{"value":"fast food restaurant","label":"Fast Food Restaurant"},{"value":"federal credit union","label":"Federal Credit Union"},{"value":"federal government office","label":"Federal Government Office"},{"value":"federal reserve bank","label":"Federal Reserve Bank"},{"value":"felt boots store","label":"Felt Boots Store"},{"value":"fence supply store","label":"Fence Supply Store"},{"value":"feng shui consultant","label":"Feng Shui Consultant"},{"value":"feng shui shop","label":"Feng Shui Shop"},{"value":"fiberglass repair service","label":"Fiberglass Repair Service"},{"value":"filipino grocery store","label":"Filipino Grocery Store"},{"value":"film production company","label":"Film Production Company"},{"value":"fine dining restaurant","label":"Fine Dining Restaurant"},{"value":"finishing materials supplier","label":"Finishing Materials Supplier"},{"value":"fire alarm supplier","label":"Fire Alarm Supplier"},{"value":"fire fighters academy","label":"Fire Fighters Academy"},{"value":"fire protection consultant","label":"Fire Protection Consultant"},{"value":"fire protection service","label":"Fire Protection Service"},{"value":"fitness equipment store","label":"Fitness Equipment Store"},{"value":"fitness equipment wholesaler","label":"Fitness Equipment Wholesaler"},{"value":"fitted furniture supplier","label":"Fitted Furniture Supplier"},{"value":"fixed base operator","label":"Fixed Base Operator"},{"value":"flamenco dance store","label":"Flamenco Dance Store"},{"value":"floor refinishing service","label":"Floor Refinishing Service"},{"value":"fmcg goods wholesaler","label":"Fmcg Goods Wholesaler"},{"value":"foam rubber producer","label":"Foam Rubber Producer"},{"value":"foam rubber supplier","label":"Foam Rubber Supplier"},{"value":"folk high school","label":"Folk High School"},{"value":"food machinery supplier","label":"Food Machinery Supplier"},{"value":"food manufacturing supply","label":"Food Manufacturing Supply"},{"value":"food processing company","label":"Food Processing Company"},{"value":"food processing equipment","label":"Food Processing Equipment"},{"value":"food products supplier","label":"Food Products Supplier"},{"value":"food seasoning manufacturer","label":"Food Seasoning Manufacturer"},{"value":"foot massage parlor","label":"Foot Massage Parlor"},{"value":"foreign trade consultant","label":"Foreign Trade Consultant"},{"value":"foreman builders association","label":"Foreman Builders Association"},{"value":"forklift rental service","label":"Forklift Rental Service"},{"value":"formal clothing store","label":"Formal Clothing Store"},{"value":"fortune telling services","label":"Fortune Telling Services"},{"value":"foster care service","label":"Foster Care Service"},{"value":"free parking lot","label":"Free Parking Lot"},{"value":"freight forwarding service","label":"Freight Forwarding Service"},{"value":"french language school","label":"French Language School"},{"value":"french steakhouse restaurant","label":"French Steakhouse Restaurant"},{"value":"fresh food market","label":"Fresh Food Market"},{"value":"fried chicken takeaway","label":"Fried Chicken Takeaway"},{"value":"frozen dessert supplier","label":"Frozen Dessert Supplier"},{"value":"frozen food manufacturer","label":"Frozen Food Manufacturer"},{"value":"frozen food store","label":"Frozen Food Store"},{"value":"frozen yogurt shop","label":"Frozen Yogurt Shop"},{"value":"fu jian restaurant","label":"Fu Jian Restaurant"},{"value":"full gospel church","label":"Full Gospel Church"},{"value":"function room facility","label":"Function Room Facility"},{"value":"funeral celebrant service","label":"Funeral Celebrant Service"},{"value":"fur coat shop","label":"Fur Coat Shop"},{"value":"furnace parts supplier","label":"Furnace Parts Supplier"},{"value":"furnace repair service","label":"Furnace Repair Service"},{"value":"furnished apartment building","label":"Furnished Apartment Building"},{"value":"furniture accessories supplier","label":"Furniture Accessories Supplier"},{"value":"furniture rental service","label":"Furniture Rental Service"},{"value":"furniture repair shop","label":"Furniture Repair Shop"},{"value":"garage door supplier","label":"Garage Door Supplier"},{"value":"garbage collection service","label":"Garbage Collection Service"},{"value":"garbage dump service","label":"Garbage Dump Service"},{"value":"garden building retail","label":"Garden Building Retail"},{"value":"garden furniture store","label":"Garden Furniture Store"},{"value":"gas cylinders supplier","label":"Gas Cylinders Supplier"},{"value":"gas installation service","label":"Gas Installation Service"},{"value":"gas logs supplier","label":"Gas Logs Supplier"},{"value":"gay night club","label":"Gay Night Club"},{"value":"general education school","label":"General Education School"},{"value":"general practice attorney","label":"General Practice Attorney"},{"value":"general register office","label":"General Register Office"},{"value":"geological research company","label":"Geological Research Company"},{"value":"german language school","label":"German Language School"},{"value":"gift basket store","label":"Gift Basket Store"},{"value":"gift wrap store","label":"Gift Wrap Store"},{"value":"girls secondary school","label":"Girls Secondary School"},{"value":"glass block supplier","label":"Glass Block Supplier"},{"value":"glass cutting service","label":"Glass Cutting Service"},{"value":"glass etching service","label":"Glass Etching Service"},{"value":"glass repair service","label":"Glass Repair Service"},{"value":"glasses repair service","label":"Glasses Repair Service"},{"value":"gluten free restaurant","label":"Gluten Free Restaurant"},{"value":"go kart track","label":"Go Kart Track"},{"value":"gold mining company","label":"Gold Mining Company"},{"value":"golf cart dealer","label":"Golf Cart Dealer"},{"value":"golf course builder","label":"Golf Course Builder"},{"value":"golf driving range","label":"Golf Driving Range"},{"value":"gourmet grocery store","label":"Gourmet Grocery Store"},{"value":"government economic program","label":"Government Economic Program"},{"value":"government ration shop","label":"Government Ration Shop"},{"value":"graffiti removal service","label":"Graffiti Removal Service"},{"value":"greco roman wrestling","label":"Greco Roman Wrestling"},{"value":"greek orthodox church","label":"Greek Orthodox Church"},{"value":"green energy supplier","label":"Green Energy Supplier"},{"value":"greeting card shop","label":"Greeting Card Shop"},{"value":"grocery delivery service","label":"Grocery Delivery Service"},{"value":"gui zhou restaurant","label":"Gui Zhou Restaurant"},{"value":"guts barbecue restaurant","label":"Guts Barbecue Restaurant"},{"value":"gutter cleaning service","label":"Gutter Cleaning Service"},{"value":"gypsum product supplier","label":"Gypsum Product Supplier"},{"value":"hair extension technician","label":"Hair Extension Technician"},{"value":"hair extensions supplier","label":"Hair Extensions Supplier"},{"value":"hair removal service","label":"Hair Removal Service"},{"value":"hair replacement service","label":"Hair Replacement Service"},{"value":"hair transplantation clinic","label":"Hair Transplantation Clinic"},{"value":"handicapped transportation service","label":"Handicapped Transportation Service"},{"value":"hang gliding center","label":"Hang Gliding Center"},{"value":"hardware training institute","label":"Hardware Training Institute"},{"value":"harley davidson dealer","label":"Harley Davidson Dealer"},{"value":"haute french restaurant","label":"Haute French Restaurant"},{"value":"hawaiian goods store","label":"Hawaiian Goods Store"},{"value":"head start center","label":"Head Start Center"},{"value":"health food restaurant","label":"Health Food Restaurant"},{"value":"health food store","label":"Health Food Store"},{"value":"health insurance agency","label":"Health Insurance Agency"},{"value":"hearing aid store","label":"Hearing Aid Store"},{"value":"heating equipment supplier","label":"Heating Equipment Supplier"},{"value":"heating oil supplier","label":"Heating Oil Supplier"},{"value":"helicopter tour agency","label":"Helicopter Tour Agency"},{"value":"helium gas supplier","label":"Helium Gas Supplier"},{"value":"herbal medicine store","label":"Herbal Medicine Store"},{"value":"high ropes course","label":"High Ropes Course"},{"value":"higher secondary school","label":"Higher Secondary School"},{"value":"historical place museum","label":"Historical Place Museum"},{"value":"hiv testing center","label":"Hiv Testing Center"},{"value":"hockey supply store","label":"Hockey Supply Store"},{"value":"holiday apartment rental","label":"Holiday Apartment Rental"},{"value":"holistic medicine practitioner","label":"Holistic Medicine Practitioner"},{"value":"home automation company","label":"Home Automation Company"},{"value":"home cinema installation","label":"Home Cinema Installation"},{"value":"home goods store","label":"Home Goods Store"},{"value":"home improvement store","label":"Home Improvement Store"},{"value":"home insurance agency","label":"Home Insurance Agency"},{"value":"home theater store","label":"Home Theater Store"},{"value":"horse boarding stable","label":"Horse Boarding Stable"},{"value":"horse rental service","label":"Horse Rental Service"},{"value":"horse riding field","label":"Horse Riding Field"},{"value":"horse riding school","label":"Horse Riding School"},{"value":"horse trailer dealer","label":"Horse Trailer Dealer"},{"value":"horseback riding service","label":"Horseback Riding Service"},{"value":"hospitality high school","label":"Hospitality High School"},{"value":"hot bedstone spa","label":"Hot Bedstone Spa"},{"value":"hot dog restaurant","label":"Hot Dog Restaurant"},{"value":"hot dog stand","label":"Hot Dog Stand"},{"value":"hot pot restaurant","label":"Hot Pot Restaurant"},{"value":"hot tub store","label":"Hot Tub Store"},{"value":"hotel management school","label":"Hotel Management School"},{"value":"hotel supply store","label":"Hotel Supply Store"},{"value":"house cleaning service","label":"House Cleaning Service"},{"value":"house clearance service","label":"House Clearance Service"},{"value":"house sitter agency","label":"House Sitter Agency"},{"value":"houseboat rental service","label":"Houseboat Rental Service"},{"value":"household chemicals supplier","label":"Household Chemicals Supplier"},{"value":"household goods wholesaler","label":"Household Goods Wholesaler"},{"value":"housing utility company","label":"Housing Utility Company"},{"value":"hua gong shop","label":"Hua Gong Shop"},{"value":"hub cap supplier","label":"Hub Cap Supplier"},{"value":"human ressource consulting","label":"Human Ressource Consulting"},{"value":"hunan style restaurant","label":"Hunan Style Restaurant"},{"value":"hydraulic equipment supplier","label":"Hydraulic Equipment Supplier"},{"value":"hydraulic repair service","label":"Hydraulic Repair Service"},{"value":"hydroelectric power plant","label":"Hydroelectric Power Plant"},{"value":"hydroponics equipment supplier","label":"Hydroponics Equipment Supplier"},{"value":"hygiene articles wholesaler","label":"Hygiene Articles Wholesaler"},{"value":"hyperbaric medicine physician","label":"Hyperbaric Medicine Physician"},{"value":"ice cream shop","label":"Ice Cream Shop"},{"value":"ice hockey club","label":"Ice Hockey Club"},{"value":"ice skating club","label":"Ice Skating Club"},{"value":"ice skating instructor","label":"Ice Skating Instructor"},{"value":"ice skating rink","label":"Ice Skating Rink"},{"value":"ikan bakar restaurant","label":"Ikan Bakar Restaurant"},{"value":"immigration detention center","label":"Immigration Detention Center"},{"value":"import export company","label":"Import Export Company"},{"value":"income protection insurance","label":"Income Protection Insurance"},{"value":"indian grocery store","label":"Indian Grocery Store"},{"value":"indian motorcycle dealer","label":"Indian Motorcycle Dealer"},{"value":"indian muslim restaurant","label":"Indian Muslim Restaurant"},{"value":"indian sizzler restaurant","label":"Indian Sizzler Restaurant"},{"value":"indian sweets shop","label":"Indian Sweets Shop"},{"value":"indoor golf course","label":"Indoor Golf Course"},{"value":"indoor swimming pool","label":"Indoor Swimming Pool"},{"value":"industrial chemicals wholesaler","label":"Industrial Chemicals Wholesaler"},{"value":"industrial design company","label":"Industrial Design Company"},{"value":"industrial door supplier","label":"Industrial Door Supplier"},{"value":"industrial engineers association","label":"Industrial Engineers Association"},{"value":"industrial equipment supplier","label":"Industrial Equipment Supplier"},{"value":"industrial framework supplier","label":"Industrial Framework Supplier"},{"value":"industrial gas supplier","label":"Industrial Gas Supplier"},{"value":"infectious disease physician","label":"Infectious Disease Physician"},{"value":"insulation materials store","label":"Insulation Materials Store"},{"value":"intellectual property registry","label":"Intellectual Property Registry"},{"value":"interior architect office","label":"Interior Architect Office"},{"value":"interior construction contractor","label":"Interior Construction Contractor"},{"value":"interior fitting contractor","label":"Interior Fitting Contractor"},{"value":"interior plant service","label":"Interior Plant Service"},{"value":"internal medicine ward","label":"Internal Medicine Ward"},{"value":"international trade consultant","label":"International Trade Consultant"},{"value":"internet marketing service","label":"Internet Marketing Service"},{"value":"internet service provider","label":"Internet Service Provider"},{"value":"invitation printing service","label":"Invitation Printing Service"},{"value":"irish goods store","label":"Irish Goods Store"},{"value":"iron steel contractor","label":"Iron Steel Contractor"},{"value":"iron ware dealer","label":"Iron Ware Dealer"},{"value":"irrigation equipment supplier","label":"Irrigation Equipment Supplier"},{"value":"italian grocery store","label":"Italian Grocery Store"},{"value":"janitorial equipment supplier","label":"Janitorial Equipment Supplier"},{"value":"japanese authentic restaurant","label":"Japanese Authentic Restaurant"},{"value":"japanese confectionery shop","label":"Japanese Confectionery Shop"},{"value":"japanese curry restaurant","label":"Japanese Curry Restaurant"},{"value":"japanese grocery store","label":"Japanese Grocery Store"},{"value":"japanese izakaya restaurant","label":"Japanese Izakaya Restaurant"},{"value":"japanese language instructor","label":"Japanese Language Instructor"},{"value":"japanese regional restaurant","label":"Japanese Regional Restaurant"},{"value":"japanese sweets restaurant","label":"Japanese Sweets Restaurant"},{"value":"jehovahs witness church","label":"Jehovahs Witness Church"},{"value":"jewelry equipment supplier","label":"Jewelry Equipment Supplier"},{"value":"jewelry repair service","label":"Jewelry Repair Service"},{"value":"jiang su restaurant","label":"Jiang Su Restaurant"},{"value":"juvenile detention center","label":"Juvenile Detention Center"},{"value":"kalle pache restaurant","label":"Kalle Pache Restaurant"},{"value":"kawasaki motorcycle dealer","label":"Kawasaki Motorcycle Dealer"},{"value":"key duplication service","label":"Key Duplication Service"},{"value":"kitchen furniture store","label":"Kitchen Furniture Store"},{"value":"kitchen supply store","label":"Kitchen Supply Store"},{"value":"korean barbecue restaurant","label":"Korean Barbecue Restaurant"},{"value":"korean beef restaurant","label":"Korean Beef Restaurant"},{"value":"korean grocery store","label":"Korean Grocery Store"},{"value":"korean rib restaurant","label":"Korean Rib Restaurant"},{"value":"kosher grocery store","label":"Kosher Grocery Store"},{"value":"kung fu school","label":"Kung Fu School"},{"value":"kyoto cuisine restaurant","label":"Kyoto Cuisine Restaurant"},{"value":"labor relations attorney","label":"Labor Relations Attorney"},{"value":"laboratory equipment supplier","label":"Laboratory Equipment Supplier"},{"value":"laminating equipment supplier","label":"Laminating Equipment Supplier"},{"value":"lamp repair service","label":"Lamp Repair Service"},{"value":"lamp shade supplier","label":"Lamp Shade Supplier"},{"value":"land planning authority","label":"Land Planning Authority"},{"value":"land reform institute","label":"Land Reform Institute"},{"value":"land rover dealer","label":"Land Rover Dealer"},{"value":"land surveying office","label":"Land Surveying Office"},{"value":"landscape lighting designer","label":"Landscape Lighting Designer"},{"value":"landscaping supply store","label":"Landscaping Supply Store"},{"value":"laser cutting service","label":"Laser Cutting Service"},{"value":"laser equipment supplier","label":"Laser Equipment Supplier"},{"value":"laser tag center","label":"Laser Tag Center"},{"value":"latin american restaurant","label":"Latin American Restaurant"},{"value":"law book store","label":"Law Book Store"},{"value":"lawn bowls club","label":"Lawn Bowls Club"},{"value":"lawn care service","label":"Lawn Care Service"},{"value":"lawn mower store","label":"Lawn Mower Store"},{"value":"leather cleaning service","label":"Leather Cleaning Service"},{"value":"leather coats store","label":"Leather Coats Store"},{"value":"leather goods manufacturer","label":"Leather Goods Manufacturer"},{"value":"leather goods store","label":"Leather Goods Store"},{"value":"leather goods supplier","label":"Leather Goods Supplier"},{"value":"leather goods wholesaler","label":"Leather Goods Wholesaler"},{"value":"leather repair service","label":"Leather Repair Service"},{"value":"legal affairs bureau","label":"Legal Affairs Bureau"},{"value":"legal aid office","label":"Legal Aid Office"},{"value":"life insurance agency","label":"Life Insurance Agency"},{"value":"light bulb supplier","label":"Light Bulb Supplier"},{"value":"lincoln mercury dealer","label":"Lincoln Mercury Dealer"},{"value":"line marking service","label":"Line Marking Service"},{"value":"little league club","label":"Little League Club"},{"value":"little league field","label":"Little League Field"},{"value":"live music bar","label":"Live Music Bar"},{"value":"live music venue","label":"Live Music Venue"},{"value":"livestock auction house","label":"Livestock Auction House"},{"value":"local government office","label":"Local Government Office"},{"value":"local history museum","label":"Local History Museum"},{"value":"local medical services","label":"Local Medical Services"},{"value":"log home builder","label":"Log Home Builder"},{"value":"lost property office","label":"Lost Property Office"},{"value":"luggage repair service","label":"Luggage Repair Service"},{"value":"luggage storage facility","label":"Luggage Storage Facility"},{"value":"machine knife supplier","label":"Machine Knife Supplier"},{"value":"machine repair service","label":"Machine Repair Service"},{"value":"machinery parts manufacturer","label":"Machinery Parts Manufacturer"},{"value":"mah jong house","label":"Mah Jong House"},{"value":"mailbox rental service","label":"Mailbox Rental Service"},{"value":"mailing machine supplier","label":"Mailing Machine Supplier"},{"value":"main customs office","label":"Main Customs Office"},{"value":"manufactured home transporter","label":"Manufactured Home Transporter"},{"value":"marine supply store","label":"Marine Supply Store"},{"value":"marriage license bureau","label":"Marriage License Bureau"},{"value":"martial arts club","label":"Martial Arts Club"},{"value":"martial arts school","label":"Martial Arts School"},{"value":"masonry supply store","label":"Masonry Supply Store"},{"value":"massage supply store","label":"Massage Supply Store"},{"value":"match box manufacturer","label":"Match Box Manufacturer"},{"value":"measuring instruments supplier","label":"Measuring Instruments Supplier"},{"value":"medical billing service","label":"Medical Billing Service"},{"value":"medical book store","label":"Medical Book Store"},{"value":"medical certificate service","label":"Medical Certificate Service"},{"value":"medical equipment manufacturer","label":"Medical Equipment Manufacturer"},{"value":"medical equipment supplier","label":"Medical Equipment Supplier"},{"value":"medical supply store","label":"Medical Supply Store"},{"value":"medical technology manufacturer","label":"Medical Technology Manufacturer"},{"value":"medical transcription service","label":"Medical Transcription Service"},{"value":"meeting planning service","label":"Meeting Planning Service"},{"value":"mens clothing store","label":"Mens Clothing Store"},{"value":"mens health physician","label":"Mens Health Physician"},{"value":"mental health clinic","label":"Mental Health Clinic"},{"value":"mental health service","label":"Mental Health Service"},{"value":"mercedes benz dealer","label":"Mercedes Benz Dealer"},{"value":"metal construction company","label":"Metal Construction Company"},{"value":"metal industry suppliers","label":"Metal Industry Suppliers"},{"value":"metal machinery supplier","label":"Metal Machinery Supplier"},{"value":"metal polishing service","label":"Metal Polishing Service"},{"value":"metal processing company","label":"Metal Processing Company"},{"value":"metal stamping service","label":"Metal Stamping Service"},{"value":"metal working shop","label":"Metal Working Shop"},{"value":"metaphysical supply store","label":"Metaphysical Supply Store"},{"value":"metropolitan train company","label":"Metropolitan Train Company"},{"value":"mexican goods store","label":"Mexican Goods Store"},{"value":"mexican grocery store","label":"Mexican Grocery Store"},{"value":"mexican torta restaurant","label":"Mexican Torta Restaurant"},{"value":"middle eastern restaurant","label":"Middle Eastern Restaurant"},{"value":"military recruiting office","label":"Military Recruiting Office"},{"value":"milk delivery service","label":"Milk Delivery Service"},{"value":"mineral water company","label":"Mineral Water Company"},{"value":"mineral water wholesale","label":"Mineral Water Wholesale"},{"value":"miniature golf course","label":"Miniature Golf Course"},{"value":"minibus taxi service","label":"Minibus Taxi Service"},{"value":"ministry of education","label":"Ministry Of Education"},{"value":"miso cutlet restaurant","label":"Miso Cutlet Restaurant"},{"value":"missing persons organization","label":"Missing Persons Organization"},{"value":"mobile home dealer","label":"Mobile Home Dealer"},{"value":"mobile home park","label":"Mobile Home Park"},{"value":"mobile money agent","label":"Mobile Money Agent"},{"value":"mobile network operator","label":"Mobile Network Operator"},{"value":"mobility equipment supplier","label":"Mobility Equipment Supplier"},{"value":"model design company","label":"Model Design Company"},{"value":"model portfolio studio","label":"Model Portfolio Studio"},{"value":"model train store","label":"Model Train Store"},{"value":"modern art museum","label":"Modern Art Museum"},{"value":"modern british restaurant","label":"Modern British Restaurant"},{"value":"modern european restaurant","label":"Modern European Restaurant"},{"value":"modern french restaurant","label":"Modern French Restaurant"},{"value":"modern indian restaurant","label":"Modern Indian Restaurant"},{"value":"modular home builder","label":"Modular Home Builder"},{"value":"modular home dealer","label":"Modular Home Dealer"},{"value":"money order service","label":"Money Order Service"},{"value":"money transfer service","label":"Money Transfer Service"},{"value":"mongolian barbecue restaurant","label":"Mongolian Barbecue Restaurant"},{"value":"mordern izakaya restaurants","label":"Mordern Izakaya Restaurants"},{"value":"motor scooter dealer","label":"Motor Scooter Dealer"},{"value":"motor vehicle dealer","label":"Motor Vehicle Dealer"},{"value":"motorcycle driving school","label":"Motorcycle Driving School"},{"value":"motorcycle insurance agency","label":"Motorcycle Insurance Agency"},{"value":"motorcycle parts store","label":"Motorcycle Parts Store"},{"value":"motorcycle rental agency","label":"Motorcycle Rental Agency"},{"value":"motorcycle repair shop","label":"Motorcycle Repair Shop"},{"value":"mountain cable car","label":"Mountain Cable Car"},{"value":"movie rental kiosk","label":"Movie Rental Kiosk"},{"value":"movie rental store","label":"Movie Rental Store"},{"value":"moving supply store","label":"Moving Supply Store"},{"value":"municipal administration office","label":"Municipal Administration Office"},{"value":"municipal department communication","label":"Municipal Department Communication"},{"value":"municipal department finance","label":"Municipal Department Finance"},{"value":"municipal health department","label":"Municipal Health Department"},{"value":"municipal office education","label":"Municipal Office Education"},{"value":"municipal social development","label":"Municipal Social Development"},{"value":"museum of zoology","label":"Museum Of Zoology"},{"value":"music box store","label":"Music Box Store"},{"value":"musical instrument manufacturer","label":"Musical Instrument Manufacturer"},{"value":"musical instrument store","label":"Musical Instrument Store"},{"value":"musician and composer","label":"Musician And Composer"},{"value":"mutton barbecue restaurant","label":"Mutton Barbecue Restaurant"},{"value":"nasi goreng restaurant","label":"Nasi Goreng Restaurant"},{"value":"nasi uduk restaurant","label":"Nasi Uduk Restaurant"},{"value":"national health foundation","label":"National Health Foundation"},{"value":"native american restaurant","label":"Native American Restaurant"},{"value":"natural foods store","label":"Natural Foods Store"},{"value":"natural history museum","label":"Natural History Museum"},{"value":"natural stone exporter","label":"Natural Stone Exporter"},{"value":"natural stone supplier","label":"Natural Stone Supplier"},{"value":"natural stone wholesaler","label":"Natural Stone Wholesaler"},{"value":"neon sign shop","label":"Neon Sign Shop"},{"value":"new age church","label":"New Age Church"},{"value":"new england restaurant","label":"New England Restaurant"},{"value":"new zealand restaurant","label":"New Zealand Restaurant"},{"value":"newspaper advertising department","label":"Newspaper Advertising Department"},{"value":"non denominational church","label":"Non Denominational Church"},{"value":"non governmental organization","label":"Non Governmental Organization"},{"value":"non profit organization","label":"Non Profit Organization"},{"value":"non vegetarian restaurant","label":"Non Vegetarian Restaurant"},{"value":"north african restaurant","label":"North African Restaurant"},{"value":"north indian restaurant","label":"North Indian Restaurant"},{"value":"northern italian restaurant","label":"Northern Italian Restaurant"},{"value":"nuclear power company","label":"Nuclear Power Company"},{"value":"nuclear power plant","label":"Nuclear Power Plant"},{"value":"nuevo latino restaurant","label":"Nuevo Latino Restaurant"},{"value":"obstetrics gynecology clinic","label":"Obstetrics Gynecology Clinic"},{"value":"occupational health service","label":"Occupational Health Service"},{"value":"occupational medical physician","label":"Occupational Medical Physician"},{"value":"off roading area","label":"Off Roading Area"},{"value":"offal pot cooking","label":"Offal Pot Cooking"},{"value":"office accessories wholesaler","label":"Office Accessories Wholesaler"},{"value":"office equipment supplier","label":"Office Equipment Supplier"},{"value":"office furniture store","label":"Office Furniture Store"},{"value":"office refurbishment service","label":"Office Refurbishment Service"},{"value":"office supply store","label":"Office Supply Store"},{"value":"office supply wholesaler","label":"Office Supply Wholesaler"},{"value":"oil change service","label":"Oil Change Service"},{"value":"olive oil cooperative","label":"Olive Oil Cooperative"},{"value":"olive oil manufacturer","label":"Olive Oil Manufacturer"},{"value":"open air museum","label":"Open Air Museum"},{"value":"optical products manufacturer","label":"Optical Products Manufacturer"},{"value":"oral maxillofacial surgeon","label":"Oral Maxillofacial Surgeon"},{"value":"organic drug store","label":"Organic Drug Store"},{"value":"organic food store","label":"Organic Food Store"},{"value":"oriental goods store","label":"Oriental Goods Store"},{"value":"oriental medicine clinic","label":"Oriental Medicine Clinic"},{"value":"oriental medicine store","label":"Oriental Medicine Store"},{"value":"oriental rug store","label":"Oriental Rug Store"},{"value":"orthopedic shoe store","label":"Orthopedic Shoe Store"},{"value":"orthopedic supplies store","label":"Orthopedic Supplies Store"},{"value":"outboard motor store","label":"Outboard Motor Store"},{"value":"outdoor activity organizer","label":"Outdoor Activity Organizer"},{"value":"outdoor equestrian facility","label":"Outdoor Equestrian Facility"},{"value":"outdoor furniture store","label":"Outdoor Furniture Store"},{"value":"outdoor movie theatre","label":"Outdoor Movie Theatre"},{"value":"outdoor sports store","label":"Outdoor Sports Store"},{"value":"outdoor swimming pool","label":"Outdoor Swimming Pool"},{"value":"oxygen cocktail spot","label":"Oxygen Cocktail Spot"},{"value":"oxygen equipment supplier","label":"Oxygen Equipment Supplier"},{"value":"oyster bar restaurant","label":"Oyster Bar Restaurant"},{"value":"pacific rim restaurant","label":"Pacific Rim Restaurant"},{"value":"packaging supply store","label":"Packaging Supply Store"},{"value":"pain control clinic","label":"Pain Control Clinic"},{"value":"pain management physician","label":"Pain Management Physician"},{"value":"paint stripping company","label":"Paint Stripping Company"},{"value":"pan asian restaurant","label":"Pan Asian Restaurant"},{"value":"pan latin restaurant","label":"Pan Latin Restaurant"},{"value":"paper bag supplier","label":"Paper Bag Supplier"},{"value":"paralegal services provider","label":"Paralegal Services Provider"},{"value":"parasailing ride service","label":"Parasailing Ride Service"},{"value":"park and ride","label":"Park And Ride"},{"value":"part time daycare","label":"Part Time Daycare"},{"value":"passport photo processor","label":"Passport Photo Processor"},{"value":"paternity testing service","label":"Paternity Testing Service"},{"value":"patients support association","label":"Patients Support Association"},{"value":"patio enclosure supplier","label":"Patio Enclosure Supplier"},{"value":"paving materials supplier","label":"Paving Materials Supplier"},{"value":"pecel lele restaurant","label":"Pecel Lele Restaurant"},{"value":"pediatric orthopedic surgeon","label":"Pediatric Orthopedic Surgeon"},{"value":"pennsylvania dutch restaurant","label":"Pennsylvania Dutch Restaurant"},{"value":"performing arts group","label":"Performing Arts Group"},{"value":"performing arts theater","label":"Performing Arts Theater"},{"value":"personal chef service","label":"Personal Chef Service"},{"value":"personal injury lawyer","label":"Personal Injury Lawyer"},{"value":"personal watercraft dealer","label":"Personal Watercraft Dealer"},{"value":"pest control service","label":"Pest Control Service"},{"value":"pet adoption service","label":"Pet Adoption Service"},{"value":"pet boarding service","label":"Pet Boarding Service"},{"value":"pet funeral services","label":"Pet Funeral Services"},{"value":"pet moving service","label":"Pet Moving Service"},{"value":"pet supply store","label":"Pet Supply Store"},{"value":"petroleum products company","label":"Petroleum Products Company"},{"value":"pharmaceutical products wholesaler","label":"Pharmaceutical Products Wholesaler"},{"value":"phone repair service","label":"Phone Repair Service"},{"value":"photo restoration service","label":"Photo Restoration Service"},{"value":"physical examination center","label":"Physical Examination Center"},{"value":"physical fitness program","label":"Physical Fitness Program"},{"value":"physician referral service","label":"Physician Referral Service"},{"value":"physiotherapy equip supplier","label":"Physiotherapy Equip Supplier"},{"value":"piano moving service","label":"Piano Moving Service"},{"value":"piano repair service","label":"Piano Repair Service"},{"value":"piano tuning service","label":"Piano Tuning Service"},{"value":"picture frame shop","label":"Picture Frame Shop"},{"value":"pinball machine supplier","label":"Pinball Machine Supplier"},{"value":"pine furniture shop","label":"Pine Furniture Shop"},{"value":"pizza delivery service","label":"Pizza Delivery Service"},{"value":"place of worship","label":"Place Of Worship"},{"value":"plast window store","label":"Plast Window Store"},{"value":"plastic bag supplier","label":"Plastic Bag Supplier"},{"value":"plastic bags wholesaler","label":"Plastic Bags Wholesaler"},{"value":"plastic fabrication company","label":"Plastic Fabrication Company"},{"value":"plastic products supplier","label":"Plastic Products Supplier"},{"value":"plastic resin manufacturer","label":"Plastic Resin Manufacturer"},{"value":"plastic surgery clinic","label":"Plastic Surgery Clinic"},{"value":"playground equipment supplier","label":"Playground Equipment Supplier"},{"value":"plumbing supply store","label":"Plumbing Supply Store"},{"value":"pneumatic tools supplier","label":"Pneumatic Tools Supplier"},{"value":"po boys restaurant","label":"Po Boys Restaurant"},{"value":"police officers housing","label":"Police Officers Housing"},{"value":"police supply store","label":"Police Supply Store"},{"value":"pond fish supplier","label":"Pond Fish Supplier"},{"value":"pond supply store","label":"Pond Supply Store"},{"value":"pony ride service","label":"Pony Ride Service"},{"value":"pool billard club","label":"Pool Billard Club"},{"value":"pool cleaning service","label":"Pool Cleaning Service"},{"value":"port operating company","label":"Port Operating Company"},{"value":"portable building manufacturer","label":"Portable Building Manufacturer"},{"value":"portable toilet supplier","label":"Portable Toilet Supplier"},{"value":"powder coating service","label":"Powder Coating Service"},{"value":"power plant consultant","label":"Power Plant Consultant"},{"value":"powersports vehicle dealer","label":"Powersports Vehicle Dealer"},{"value":"pre gymnasium school","label":"Pre Gymnasium School"},{"value":"prefabricated house companies","label":"Prefabricated House Companies"},{"value":"prefecture government office","label":"Prefecture Government Office"},{"value":"pregnancy care center","label":"Pregnancy Care Center"},{"value":"pressure washing service","label":"Pressure Washing Service"},{"value":"printed music publisher","label":"Printed Music Publisher"},{"value":"printer repair service","label":"Printer Repair Service"},{"value":"printing equipment supplier","label":"Printing Equipment Supplier"},{"value":"private equity firm","label":"Private Equity Firm"},{"value":"private golf course","label":"Private Golf Course"},{"value":"private sector bank","label":"Private Sector Bank"},{"value":"promotional products supplier","label":"Promotional Products Supplier"},{"value":"property management company","label":"Property Management Company"},{"value":"protective clothing supplier","label":"Protective Clothing Supplier"},{"value":"psychoneurological specialized clinic","label":"Psychoneurological Specialized Clinic"},{"value":"psychosomatic medical practitioner","label":"Psychosomatic Medical Practitioner"},{"value":"public defenders office","label":"Public Defenders Office"},{"value":"public female bathroom","label":"Public Female Bathroom"},{"value":"public golf course","label":"Public Golf Course"},{"value":"public health department","label":"Public Health Department"},{"value":"public male bathroom","label":"Public Male Bathroom"},{"value":"public medical center","label":"Public Medical Center"},{"value":"public parking space","label":"Public Parking Space"},{"value":"public prosecutors office","label":"Public Prosecutors Office"},{"value":"public relations firm","label":"Public Relations Firm"},{"value":"public safety office","label":"Public Safety Office"},{"value":"public sector bank","label":"Public Sector Bank"},{"value":"public swimming pool","label":"Public Swimming Pool"},{"value":"public works department","label":"Public Works Department"},{"value":"puerto rican restaurant","label":"Puerto Rican Restaurant"},{"value":"pvc windows supplier","label":"Pvc Windows Supplier"},{"value":"race car dealer","label":"Race Car Dealer"},{"value":"radiator repair service","label":"Radiator Repair Service"},{"value":"raft trip outfitter","label":"Raft Trip Outfitter"},{"value":"railroad equipment supplier","label":"Railroad Equipment Supplier"},{"value":"railroad ties supplier","label":"Railroad Ties Supplier"},{"value":"rainwater tank supplier","label":"Rainwater Tank Supplier"},{"value":"rare book store","label":"Rare Book Store"},{"value":"raw food restaurant","label":"Raw Food Restaurant"},{"value":"real estate agency","label":"Real Estate Agency"},{"value":"real estate agents","label":"Real Estate Agents"},{"value":"real estate appraiser","label":"Real Estate Appraiser"},{"value":"real estate attorney","label":"Real Estate Attorney"},{"value":"real estate auctioneer","label":"Real Estate Auctioneer"},{"value":"real estate consultant","label":"Real Estate Consultant"},{"value":"real estate developer","label":"Real Estate Developer"},{"value":"real estate school","label":"Real Estate School"},{"value":"real estate surveyor","label":"Real Estate Surveyor"},{"value":"record storage facility","label":"Record Storage Facility"},{"value":"refrigerated transport service","label":"Refrigerated Transport Service"},{"value":"refrigerator repair service","label":"Refrigerator Repair Service"},{"value":"regional government office","label":"Regional Government Office"},{"value":"registered general nurse","label":"Registered General Nurse"},{"value":"religious book store","label":"Religious Book Store"},{"value":"religious goods store","label":"Religious Goods Store"},{"value":"renters insurance agency","label":"Renters Insurance Agency"},{"value":"reproductive health clinic","label":"Reproductive Health Clinic"},{"value":"resident registration office","label":"Resident Registration Office"},{"value":"restaurant supply store","label":"Restaurant Supply Store"},{"value":"retaining wall supplier","label":"Retaining Wall Supplier"},{"value":"rice cake shop","label":"Rice Cake Shop"},{"value":"rice cracker shop","label":"Rice Cracker Shop"},{"value":"road construction company","label":"Road Construction Company"},{"value":"road safety town","label":"Road Safety Town"},{"value":"rock climbing centre","label":"Rock Climbing Centre"},{"value":"rock climbing instructor","label":"Rock Climbing Instructor"},{"value":"rock music club","label":"Rock Music Club"},{"value":"roller skating club","label":"Roller Skating Club"},{"value":"roller skating rink","label":"Roller Skating Rink"},{"value":"rolls royce dealer","label":"Rolls Royce Dealer"},{"value":"roofing supply store","label":"Roofing Supply Store"},{"value":"roommate referral service","label":"Roommate Referral Service"},{"value":"rubber products supplier","label":"Rubber Products Supplier"},{"value":"rubber stamp store","label":"Rubber Stamp Store"},{"value":"rugby league club","label":"Rugby League Club"},{"value":"russian grocery store","label":"Russian Grocery Store"},{"value":"russian orthodox church","label":"Russian Orthodox Church"},{"value":"rustic furniture store","label":"Rustic Furniture Store"},{"value":"rv rental agency","label":"Rv Rental Agency"},{"value":"rv repair shop","label":"Rv Repair Shop"},{"value":"rv storage facility","label":"Rv Storage Facility"},{"value":"rv supply store","label":"Rv Supply Store"},{"value":"safety equipment supplier","label":"Safety Equipment Supplier"},{"value":"sailing event area","label":"Sailing Event Area"},{"value":"satellite communication service","label":"Satellite Communication Service"},{"value":"saw sharpening service","label":"Saw Sharpening Service"},{"value":"scaffolding rental service","label":"Scaffolding Rental Service"},{"value":"scale model club","label":"Scale Model Club"},{"value":"scale model shop","label":"Scale Model Shop"},{"value":"scale repair service","label":"Scale Repair Service"},{"value":"school bus service","label":"School Bus Service"},{"value":"school district office","label":"School District Office"},{"value":"school lunch center","label":"School Lunch Center"},{"value":"school supply store","label":"School Supply Store"},{"value":"scientific equipment supplier","label":"Scientific Equipment Supplier"},{"value":"scooter rental service","label":"Scooter Rental Service"},{"value":"scooter repair shop","label":"Scooter Repair Shop"},{"value":"scrap metal dealer","label":"Scrap Metal Dealer"},{"value":"screen printing shop","label":"Screen Printing Shop"},{"value":"screen repair service","label":"Screen Repair Service"},{"value":"scuba tour agency","label":"Scuba Tour Agency"},{"value":"seasonal goods store","label":"Seasonal Goods Store"},{"value":"second hand shop","label":"Second Hand Shop"},{"value":"secondary school three","label":"Secondary School Three"},{"value":"security guard service","label":"Security Guard Service"},{"value":"security system installer","label":"Security System Installer"},{"value":"security system supplier","label":"Security System Supplier"},{"value":"self defense school","label":"Self Defense School"},{"value":"self service restaurant","label":"Self Service Restaurant"},{"value":"self storage facility","label":"Self Storage Facility"},{"value":"semi conductor supplier","label":"Semi Conductor Supplier"},{"value":"senior citizen center","label":"Senior Citizen Center"},{"value":"senior high school","label":"Senior High School"},{"value":"septic system service","label":"Septic System Service"},{"value":"sewage disposal service","label":"Sewage Disposal Service"},{"value":"sewage treatment plant","label":"Sewage Treatment Plant"},{"value":"sewing machine store","label":"Sewing Machine Store"},{"value":"shabu shabu restaurant","label":"Shabu Shabu Restaurant"},{"value":"shan dong restaurant","label":"Shan Dong Restaurant"},{"value":"sheepskin coat store","label":"Sheepskin Coat Store"},{"value":"sheet metal contractor","label":"Sheet Metal Contractor"},{"value":"sheet music store","label":"Sheet Music Store"},{"value":"shipping equipment industry","label":"Shipping Equipment Industry"},{"value":"shoe repair shop","label":"Shoe Repair Shop"},{"value":"shoe shining service","label":"Shoe Shining Service"},{"value":"shooting event area","label":"Shooting Event Area"},{"value":"shower door shop","label":"Shower Door Shop"},{"value":"sightseeing tour agency","label":"Sightseeing Tour Agency"},{"value":"silk plant shop","label":"Silk Plant Shop"},{"value":"singing telegram service","label":"Singing Telegram Service"},{"value":"sixth form college","label":"Sixth Form College"},{"value":"skate sharpening service","label":"Skate Sharpening Service"},{"value":"skeet shooting range","label":"Skeet Shooting Range"},{"value":"skewer deep frying","label":"Skewer Deep Frying"},{"value":"ski rental service","label":"Ski Rental Service"},{"value":"ski repair service","label":"Ski Repair Service"},{"value":"skin care clinic","label":"Skin Care Clinic"},{"value":"smart car dealer","label":"Smart Car Dealer"},{"value":"smog inspection station","label":"Smog Inspection Station"},{"value":"snow removal service","label":"Snow Removal Service"},{"value":"snowboard rental service","label":"Snowboard Rental Service"},{"value":"snowmobile rental service","label":"Snowmobile Rental Service"},{"value":"soba noodle shop","label":"Soba Noodle Shop"},{"value":"social security attorney","label":"Social Security Attorney"},{"value":"social security office","label":"Social Security Office"},{"value":"social services organization","label":"Social Services Organization"},{"value":"social welfare center","label":"Social Welfare Center"},{"value":"societe de flocage","label":"Societe De Flocage"},{"value":"soft drinks shop","label":"Soft Drinks Shop"},{"value":"software training institute","label":"Software Training Institute"},{"value":"soil testing service","label":"Soil Testing Service"},{"value":"solar energy company","label":"Solar Energy Company"},{"value":"solar energy contractor","label":"Solar Energy Contractor"},{"value":"solid fuel company","label":"Solid Fuel Company"},{"value":"solid waste engineer","label":"Solid Waste Engineer"},{"value":"soto ayam restaurant","label":"Soto Ayam Restaurant"},{"value":"soul food restaurant","label":"Soul Food Restaurant"},{"value":"south african restaurant","label":"South African Restaurant"},{"value":"south american restaurant","label":"South American Restaurant"},{"value":"south asia restaurant","label":"South Asia Restaurant"},{"value":"south indian restaurant","label":"South Indian Restaurant"},{"value":"south sulawesi restaurant","label":"South Sulawesi Restaurant"},{"value":"southern italian restaurant","label":"Southern Italian Restaurant"},{"value":"southern us restaurant","label":"Southern Us Restaurant"},{"value":"southwest french restaurant","label":"Southwest French Restaurant"},{"value":"southwestern us restaurant","label":"Southwestern Us Restaurant"},{"value":"soy sauce maker","label":"Soy Sauce Maker"},{"value":"space of remembrance","label":"Space Of Remembrance"},{"value":"special education school","label":"Special Education School"},{"value":"sport tour agency","label":"Sport Tour Agency"},{"value":"sporting goods store","label":"Sporting Goods Store"},{"value":"sports accessories wholesaler","label":"Sports Accessories Wholesaler"},{"value":"sports card store","label":"Sports Card Store"},{"value":"sports massage therapist","label":"Sports Massage Therapist"},{"value":"sports medicine clinic","label":"Sports Medicine Clinic"},{"value":"sports medicine physician","label":"Sports Medicine Physician"},{"value":"sports memorabilia store","label":"Sports Memorabilia Store"},{"value":"sports nutrition store","label":"Sports Nutrition Store"},{"value":"sri lankan restaurant","label":"Sri Lankan Restaurant"},{"value":"stained glass studio","label":"Stained Glass Studio"},{"value":"stainless steel plant","label":"Stainless Steel Plant"},{"value":"stall installation service","label":"Stall Installation Service"},{"value":"stamp collectors club","label":"Stamp Collectors Club"},{"value":"staple food package","label":"Staple Food Package"},{"value":"state department communication","label":"State Department Communication"},{"value":"state department finance","label":"State Department Finance"},{"value":"state employment department","label":"State Employment Department"},{"value":"state government office","label":"State Government Office"},{"value":"state liquor store","label":"State Liquor Store"},{"value":"state owned farm","label":"State Owned Farm"},{"value":"std testing service","label":"Std Testing Service"},{"value":"steamed bun shop","label":"Steamed Bun Shop"},{"value":"steel construction company","label":"Steel Construction Company"},{"value":"steel drum supplier","label":"Steel Drum Supplier"},{"value":"steel framework contractor","label":"Steel Framework Contractor"},{"value":"steelwork design company","label":"Steelwork Design Company"},{"value":"stereo rental store","label":"Stereo Rental Store"},{"value":"stereo repair service","label":"Stereo Repair Service"},{"value":"stock exchange building","label":"Stock Exchange Building"},{"value":"store equipment supplier","label":"Store Equipment Supplier"},{"value":"stringed intrument maker","label":"Stringed Intrument Maker"},{"value":"student housing center","label":"Student Housing Center"},{"value":"students parents association","label":"Students Parents Association"},{"value":"students support association","label":"Students Support Association"},{"value":"suburban train line","label":"Suburban Train Line"},{"value":"summer toboggan run","label":"Summer Toboggan Run"},{"value":"super public bath","label":"Super Public Bath"},{"value":"surf lifesaving club","label":"Surf Lifesaving Club"},{"value":"surgical products wholesaler","label":"Surgical Products Wholesaler"},{"value":"surgical supply store","label":"Surgical Supply Store"},{"value":"suzuki motorcycle dealer","label":"Suzuki Motorcycle Dealer"},{"value":"swimming pool contractor","label":"Swimming Pool Contractor"},{"value":"t shirt company","label":"T Shirt Company"},{"value":"t shirt store","label":"T Shirt Store"},{"value":"table tennis club","label":"Table Tennis Club"},{"value":"table tennis facility","label":"Table Tennis Facility"},{"value":"tai chi school","label":"Tai Chi School"},{"value":"tata motors dealer","label":"Tata Motors Dealer"},{"value":"tattoo removal service","label":"Tattoo Removal Service"},{"value":"tax collectors office","label":"Tax Collectors Office"},{"value":"tax preparation service","label":"Tax Preparation Service"},{"value":"tea market place","label":"Tea Market Place"},{"value":"teeth whitening service","label":"Teeth Whitening Service"},{"value":"telecommunications service provider","label":"Telecommunications Service Provider"},{"value":"telephone answering service","label":"Telephone Answering Service"},{"value":"television repair service","label":"Television Repair Service"},{"value":"tempura bowl restaurants","label":"Tempura Bowl Restaurants"},{"value":"tempura dish restaurant","label":"Tempura Dish Restaurant"},{"value":"tent rental service","label":"Tent Rental Service"},{"value":"teppan grill restaurant","label":"Teppan Grill Restaurant"},{"value":"tex mex restaurant","label":"Tex Mex Restaurant"},{"value":"thai massage therapist","label":"Thai Massage Therapist"},{"value":"theater supply store","label":"Theater Supply Store"},{"value":"theatrical costume supplier","label":"Theatrical Costume Supplier"},{"value":"thermal energy company","label":"Thermal Energy Company"},{"value":"tile cleaning service","label":"Tile Cleaning Service"},{"value":"tire repair shop","label":"Tire Repair Shop"},{"value":"toner cartridge supplier","label":"Toner Cartridge Supplier"},{"value":"tool grinding service","label":"Tool Grinding Service"},{"value":"tool rental service","label":"Tool Rental Service"},{"value":"tool repair shop","label":"Tool Repair Shop"},{"value":"tourist information center","label":"Tourist Information Center"},{"value":"tower communication service","label":"Tower Communication Service"},{"value":"towing equipment provider","label":"Towing Equipment Provider"},{"value":"tractor repair shop","label":"Tractor Repair Shop"},{"value":"trading card store","label":"Trading Card Store"},{"value":"traditional costume club","label":"Traditional Costume Club"},{"value":"traditional kostume store","label":"Traditional Kostume Store"},{"value":"trailer rental service","label":"Trailer Rental Service"},{"value":"trailer repair shop","label":"Trailer Repair Shop"},{"value":"trailer supply store","label":"Trailer Supply Store"},{"value":"train repairing center","label":"Train Repairing Center"},{"value":"train ticket agency","label":"Train Ticket Agency"},{"value":"train ticket counter","label":"Train Ticket Counter"},{"value":"transportation escort service","label":"Transportation Escort Service"},{"value":"triumph motorcycle dealer","label":"Triumph Motorcycle Dealer"},{"value":"tropical fish store","label":"Tropical Fish Store"},{"value":"truck accessories store","label":"Truck Accessories Store"},{"value":"truck parts supplier","label":"Truck Parts Supplier"},{"value":"truck rental agency","label":"Truck Rental Agency"},{"value":"truck repair shop","label":"Truck Repair Shop"},{"value":"truck topper supplier","label":"Truck Topper Supplier"},{"value":"tsukigime parking lot","label":"Tsukigime Parking Lot"},{"value":"tune up supplier","label":"Tune Up Supplier"},{"value":"typewriter repair service","label":"Typewriter Repair Service"},{"value":"udon noodle shop","label":"Udon Noodle Shop"},{"value":"unfinished furniture store","label":"Unfinished Furniture Store"},{"value":"unitarian universalist church","label":"Unitarian Universalist Church"},{"value":"united methodist church","label":"United Methodist Church"},{"value":"upholstery cleaning service","label":"Upholstery Cleaning Service"},{"value":"urban planning department","label":"Urban Planning Department"},{"value":"urgent care center","label":"Urgent Care Center"},{"value":"used appliance store","label":"Used Appliance Store"},{"value":"used bicycle shop","label":"Used Bicycle Shop"},{"value":"used book store","label":"Used Book Store"},{"value":"used car dealer","label":"Used Car Dealer"},{"value":"used cd store","label":"Used Cd Store"},{"value":"used clothing store","label":"Used Clothing Store"},{"value":"used computer store","label":"Used Computer Store"},{"value":"used furniture store","label":"Used Furniture Store"},{"value":"used game store","label":"Used Game Store"},{"value":"used motorcycle dealer","label":"Used Motorcycle Dealer"},{"value":"used tire shop","label":"Used Tire Shop"},{"value":"used truck dealer","label":"Used Truck Dealer"},{"value":"utility trailer dealer","label":"Utility Trailer Dealer"},{"value":"uyghur cuisine restaurant","label":"Uyghur Cuisine Restaurant"},{"value":"vacuum cleaner store","label":"Vacuum Cleaner Store"},{"value":"valet parking service","label":"Valet Parking Service"},{"value":"van rental agency","label":"Van Rental Agency"},{"value":"vcr repair service","label":"Vcr Repair Service"},{"value":"vegetable wholesale market","label":"Vegetable Wholesale Market"},{"value":"vehicle shipping agent","label":"Vehicle Shipping Agent"},{"value":"vehicle wrapping service","label":"Vehicle Wrapping Service"},{"value":"vending machine supplier","label":"Vending Machine Supplier"},{"value":"venture capital company","label":"Venture Capital Company"},{"value":"veterans affairs department","label":"Veterans Affairs Department"},{"value":"video conferencing service","label":"Video Conferencing Service"},{"value":"video duplication service","label":"Video Duplication Service"},{"value":"video editing service","label":"Video Editing Service"},{"value":"video game store","label":"Video Game Store"},{"value":"video production service","label":"Video Production Service"},{"value":"vintage clothing store","label":"Vintage Clothing Store"},{"value":"vinyl sign shop","label":"Vinyl Sign Shop"},{"value":"virtual office rental","label":"Virtual Office Rental"},{"value":"vocational gymnasium school","label":"Vocational Gymnasium School"},{"value":"vocational school one","label":"Vocational School One"},{"value":"vocational secondary school","label":"Vocational Secondary School"},{"value":"vocational training school","label":"Vocational Training School"},{"value":"voter registration office","label":"Voter Registration Office"},{"value":"walk in clinic","label":"Walk In Clinic"},{"value":"waste management service","label":"Waste Management Service"},{"value":"waste transfer station","label":"Waste Transfer Station"},{"value":"watch repair service","label":"Watch Repair Service"},{"value":"water cooler supplier","label":"Water Cooler Supplier"},{"value":"water filter supplier","label":"Water Filter Supplier"},{"value":"water polo pool","label":"Water Polo Pool"},{"value":"water pump supplier","label":"Water Pump Supplier"},{"value":"water purification company","label":"Water Purification Company"},{"value":"water ski shop","label":"Water Ski Shop"},{"value":"water skiing club","label":"Water Skiing Club"},{"value":"water skiing instructor","label":"Water Skiing Instructor"},{"value":"water skiing service","label":"Water Skiing Service"},{"value":"water testing service","label":"Water Testing Service"},{"value":"water treatment plant","label":"Water Treatment Plant"},{"value":"water treatment supplier","label":"Water Treatment Supplier"},{"value":"water utility company","label":"Water Utility Company"},{"value":"waterbed repair service","label":"Waterbed Repair Service"},{"value":"weather forecast service","label":"Weather Forecast Service"},{"value":"web hosting service","label":"Web Hosting Service"},{"value":"wedding souvenir shop","label":"Wedding Souvenir Shop"},{"value":"weight loss service","label":"Weight Loss Service"},{"value":"welding gas supplier","label":"Welding Gas Supplier"},{"value":"welding supply store","label":"Welding Supply Store"},{"value":"well drilling contractor","label":"Well Drilling Contractor"},{"value":"west african restaurant","label":"West African Restaurant"},{"value":"western apparel store","label":"Western Apparel Store"},{"value":"wheel alignment service","label":"Wheel Alignment Service"},{"value":"wheelchair rental service","label":"Wheelchair Rental Service"},{"value":"wheelchair repair service","label":"Wheelchair Repair Service"},{"value":"wholesale food store","label":"Wholesale Food Store"},{"value":"wholesale plant nursery","label":"Wholesale Plant Nursery"},{"value":"wholesaler household appliances","label":"Wholesaler Household Appliances"},{"value":"wi fi spot","label":"Wi Fi Spot"},{"value":"wildlife rescue service","label":"Wildlife Rescue Service"},{"value":"willow basket manufacturer","label":"Willow Basket Manufacturer"},{"value":"wind turbine builder","label":"Wind Turbine Builder"},{"value":"window cleaning service","label":"Window Cleaning Service"},{"value":"window installation service","label":"Window Installation Service"},{"value":"window tinting service","label":"Window Tinting Service"},{"value":"window treatment store","label":"Window Treatment Store"},{"value":"wine storage facility","label":"Wine Storage Facility"},{"value":"winemaking supply store","label":"Winemaking Supply Store"},{"value":"wing chun school","label":"Wing Chun School"},{"value":"womens clothing store","label":"Womens Clothing Store"},{"value":"womens personal trainer","label":"Womens Personal Trainer"},{"value":"womens protection service","label":"Womens Protection Service"},{"value":"wood frame supplier","label":"Wood Frame Supplier"},{"value":"wood stove shop","label":"Wood Stove Shop"},{"value":"wood working class","label":"Wood Working Class"},{"value":"woodworking supply store","label":"Woodworking Supply Store"},{"value":"work clothes store","label":"Work Clothes Store"},{"value":"working womens hostel","label":"Working Womens Hostel"},{"value":"x ray lab","label":"X Ray Lab"},{"value":"yamaha motorcycle dealer","label":"Yamaha Motorcycle Dealer"},{"value":"yoga retreat center","label":"Yoga Retreat Center"},{"value":"youth clothing store","label":"Youth Clothing Store"},{"value":"zhe jiang restaurant","label":"Zhe Jiang Restaurant"},{"value":"adult day care center","label":"Adult Day Care Center"},{"value":"adult foster care service","label":"Adult Foster Care Service"},{"value":"air compressor repair service","label":"Air Compressor Repair Service"},{"value":"air conditioning repair service","label":"Air Conditioning Repair Service"},{"value":"air conditioning system supplier","label":"Air Conditioning System Supplier"},{"value":"air duct cleaning service","label":"Air Duct Cleaning Service"},{"value":"arborist and tree surgeon","label":"Arborist And Tree Surgeon"},{"value":"army and navy store","label":"Army And Navy Store"},{"value":"asian household goods store","label":"Asian Household Goods Store"},{"value":"assemblies of god church","label":"Assemblies Of God Church"},{"value":"audio visual equipment supplier","label":"Audio Visual Equipment Supplier"},{"value":"auto air conditioning service","label":"Auto Air Conditioning Service"},{"value":"auto body parts supplier","label":"Auto Body Parts Supplier"},{"value":"auto dent removal service","label":"Auto Dent Removal Service"},{"value":"auto glass repair service","label":"Auto Glass Repair Service"},{"value":"auto radiator repair service","label":"Auto Radiator Repair Service"},{"value":"auto tune up service","label":"Auto Tune Up Service"},{"value":"auto window tinting service","label":"Auto Window Tinting Service"},{"value":"bahai house of worship","label":"Bahai House Of Worship"},{"value":"balloon ride tour agency","label":"Balloon Ride Tour Agency"},{"value":"bar restaurant furniture store","label":"Bar Restaurant Furniture Store"},{"value":"beauty products vending machine","label":"Beauty Products Vending Machine"},{"value":"beef rice bowl restaurant","label":"Beef Rice Bowl Restaurant"},{"value":"building equipment hire service","label":"Building Equipment Hire Service"},{"value":"bus and coach company","label":"Bus And Coach Company"},{"value":"business to business service","label":"Business To Business Service"},{"value":"cake decorating equipment shop","label":"Cake Decorating Equipment Shop"},{"value":"canoe and kayak club","label":"Canoe And Kayak Club"},{"value":"canoe and kayak store","label":"Canoe And Kayak Store"},{"value":"car security system installer","label":"Car Security System Installer"},{"value":"cardiovascular and thoracic surgeon","label":"Cardiovascular And Thoracic Surgeon"},{"value":"carport and pergola builder","label":"Carport And Pergola Builder"},{"value":"cash and carry wholesaler","label":"Cash And Carry Wholesaler"},{"value":"casual japanese style restaurant","label":"Casual Japanese Style Restaurant"},{"value":"cell phone accessory store","label":"Cell Phone Accessory Store"},{"value":"cell phone charging station","label":"Cell Phone Charging Station"},{"value":"chess and card club","label":"Chess And Card Club"},{"value":"child health care centre","label":"Child Health Care Centre"},{"value":"church of the nazarene","label":"Church Of The Nazarene"},{"value":"city department of environment","label":"City Department Of Environment"},{"value":"city department of transportation","label":"City Department Of Transportation"},{"value":"classified ads newspaper publisher","label":"Classified Ads Newspaper Publisher"},{"value":"clothes and fabric manufacturer","label":"Clothes And Fabric Manufacturer"},{"value":"clothes and fabric wholesaler","label":"Clothes And Fabric Wholesaler"},{"value":"clothing wholesale market place","label":"Clothing Wholesale Market Place"},{"value":"commercial real estate agency","label":"Commercial Real Estate Agency"},{"value":"commercial real estate inspector","label":"Commercial Real Estate Inspector"},{"value":"computer support and services","label":"Computer Support And Services"},{"value":"concrete metal framework supplier","label":"Concrete Metal Framework Supplier"},{"value":"construction and maintenance office","label":"Construction And Maintenance Office"},{"value":"construction machine rental service","label":"Construction Machine Rental Service"},{"value":"cosmetics and parfumes supplier","label":"Cosmetics And Parfumes Supplier"},{"value":"curtain and upholstery cleaner","label":"Curtain And Upholstery Cleaner"},{"value":"curtain supplier and maker","label":"Curtain Supplier And Maker"},{"value":"custom confiscated goods store","label":"Custom Confiscated Goods Store"},{"value":"custom t shirt store","label":"Custom T Shirt Store"},{"value":"dairy farm equipment supplier","label":"Dairy Farm Equipment Supplier"},{"value":"dan dan noodle restaurant","label":"Dan Dan Noodle Restaurant"},{"value":"dealer of fiat professional","label":"Dealer Of Fiat Professional"},{"value":"diesel engine repair service","label":"Diesel Engine Repair Service"},{"value":"disciples of christ church","label":"Disciples Of Christ Church"},{"value":"do it yourself store","label":"Do It Yourself Store"},{"value":"dog day care center","label":"Dog Day Care Center"},{"value":"domestic abuse treatment center","label":"Domestic Abuse Treatment Center"},{"value":"drive in movie theater","label":"Drive In Movie Theater"},{"value":"driver vehicle licensing agency","label":"Driver Vehicle Licensing Agency"},{"value":"drivers license training school","label":"Drivers License Training School"},{"value":"dry wall supply store","label":"Dry Wall Supply Store"},{"value":"dryer vent cleaning service","label":"Dryer Vent Cleaning Service"},{"value":"eating disorder treatment center","label":"Eating Disorder Treatment Center"},{"value":"electric motor repair shop","label":"Electric Motor Repair Shop"},{"value":"electric motor scooter dealer","label":"Electric Motor Scooter Dealer"},{"value":"electric motor vehicle dealer","label":"Electric Motor Vehicle Dealer"},{"value":"electric vehicle charging station","label":"Electric Vehicle Charging Station"},{"value":"electrolysis hair removal service","label":"Electrolysis Hair Removal Service"},{"value":"energy equipment and solutions","label":"Energy Equipment And Solutions"},{"value":"evening dress rental service","label":"Evening Dress Rental Service"},{"value":"executive suite rental agency","label":"Executive Suite Rental Agency"},{"value":"exhibition and trade center","label":"Exhibition And Trade Center"},{"value":"family day care service","label":"Family Day Care Service"},{"value":"farm equipment repair service","label":"Farm Equipment Repair Service"},{"value":"fiber optic products supplier","label":"Fiber Optic Products Supplier"},{"value":"film and photograph library","label":"Film And Photograph Library"},{"value":"fire damage restoration service","label":"Fire Damage Restoration Service"},{"value":"fire protection system supplier","label":"Fire Protection System Supplier"},{"value":"fish and chips restaurant","label":"Fish And Chips Restaurant"},{"value":"fish and chips takeaway","label":"Fish And Chips Takeaway"},{"value":"food and beverage consultant","label":"Food And Beverage Consultant"},{"value":"food and beverage exporter","label":"Food And Beverage Exporter"},{"value":"foreign languages program school","label":"Foreign Languages Program School"},{"value":"fruit and vegetable processing","label":"Fruit And Vegetable Processing"},{"value":"fruit and vegetable store","label":"Fruit And Vegetable Store"},{"value":"fruit and vegetable wholesaler","label":"Fruit And Vegetable Wholesaler"},{"value":"full dress rental service","label":"Full Dress Rental Service"},{"value":"gay and lesbian organization","label":"Gay And Lesbian Organization"},{"value":"geography and history faculty","label":"Geography And History Faculty"},{"value":"glass and mirror shop","label":"Glass And Mirror Shop"},{"value":"ground self defense force","label":"Ground Self Defense Force"},{"value":"guardia di finanza police","label":"Guardia Di Finanza Police"},{"value":"haute couture fashion house","label":"Haute Couture Fashion House"},{"value":"health and beauty shop","label":"Health And Beauty Shop"},{"value":"hearing aid repair service","label":"Hearing Aid Repair Service"},{"value":"hearing assistance earphone store","label":"Hearing Assistance Earphone Store"},{"value":"hip hop dance class","label":"Hip Hop Dance Class"},{"value":"home health care service","label":"Home Health Care Service"},{"value":"home help service agency","label":"Home Help Service Agency"},{"value":"hong kong style cafe","label":"Hong Kong Style Cafe"},{"value":"hospital and equipment supplies","label":"Hospital And Equipment Supplies"},{"value":"hospitality and tourism school","label":"Hospitality And Tourism School"},{"value":"hot tub repair service","label":"Hot Tub Repair Service"},{"value":"hot water system supplier","label":"Hot Water System Supplier"},{"value":"hua niao market place","label":"Hua Niao Market Place"},{"value":"hunting and fishing store","label":"Hunting And Fishing Store"},{"value":"ice cream equipment supplier","label":"Ice Cream Equipment Supplier"},{"value":"income tax help association","label":"Income Tax Help Association"},{"value":"industrial real estate agency","label":"Industrial Real Estate Agency"},{"value":"japanese cheap sweets shop","label":"Japanese Cheap Sweets Shop"},{"value":"japanese high quality restaurant","label":"Japanese High Quality Restaurant"},{"value":"japanized western food restaurant","label":"Japanized Western Food Restaurant"},{"value":"karaoke equipment rental service","label":"Karaoke Equipment Rental Service"},{"value":"kilt shop and hire","label":"Kilt Shop And Hire"},{"value":"laser hair removal service","label":"Laser Hair Removal Service"},{"value":"lawn equipment rental service","label":"Lawn Equipment Rental Service"},{"value":"lawn irrigation equipment supplier","label":"Lawn Irrigation Equipment Supplier"},{"value":"lawn mower repair service","label":"Lawn Mower Repair Service"},{"value":"lawn sprinkler system contractor","label":"Lawn Sprinkler System Contractor"},{"value":"learner driver training area","label":"Learner Driver Training Area"},{"value":"license plate frames supplier","label":"License Plate Frames Supplier"},{"value":"low income housing program","label":"Low Income Housing Program"},{"value":"marine self defense force","label":"Marine Self Defense Force"},{"value":"martial arts supply store","label":"Martial Arts Supply Store"},{"value":"medical diagnostic imaging center","label":"Medical Diagnostic Imaging Center"},{"value":"metal detecting equipment supplier","label":"Metal Detecting Equipment Supplier"},{"value":"metal heat treating service","label":"Metal Heat Treating Service"},{"value":"microwave oven repair service","label":"Microwave Oven Repair Service"},{"value":"mid atlantic us restaurant","label":"Mid Atlantic Us Restaurant"},{"value":"mobile home rental agency","label":"Mobile Home Rental Agency"},{"value":"mobile home supply store","label":"Mobile Home Supply Store"},{"value":"mobile phone repair shop","label":"Mobile Phone Repair Shop"},{"value":"model car play area","label":"Model Car Play Area"},{"value":"motor scooter repair shop","label":"Motor Scooter Repair Shop"},{"value":"moving and storage service","label":"Moving And Storage Service"},{"value":"muay thai boxing gym","label":"Muay Thai Boxing Gym"},{"value":"museum of space history","label":"Museum Of Space History"},{"value":"music management and promotion","label":"Music Management And Promotion"},{"value":"musical instrument rental service","label":"Musical Instrument Rental Service"},{"value":"musical instrument repair shop","label":"Musical Instrument Repair Shop"},{"value":"native american goods store","label":"Native American Goods Store"},{"value":"natural rock climbing area","label":"Natural Rock Climbing Area"},{"value":"new us american restaurant","label":"New Us American Restaurant"},{"value":"non smoking holiday home","label":"Non Smoking Holiday Home"},{"value":"north eastern indian restaurant","label":"North Eastern Indian Restaurant"},{"value":"occupational safety and health","label":"Occupational Safety And Health"},{"value":"off road race track","label":"Off Road Race Track"},{"value":"off track betting shop","label":"Off Track Betting Shop"},{"value":"office equipment rental service","label":"Office Equipment Rental Service"},{"value":"office equipment repair service","label":"Office Equipment Repair Service"},{"value":"office of vital records","label":"Office Of Vital Records"},{"value":"office space rental agency","label":"Office Space Rental Agency"},{"value":"oil field equipment supplier","label":"Oil Field Equipment Supplier"},{"value":"olive oil bottling company","label":"Olive Oil Bottling Company"},{"value":"optical instrument repair service","label":"Optical Instrument Repair Service"},{"value":"orthotics and prosthetics service","label":"Orthotics And Prosthetics Service"},{"value":"paper shredding machine supplier","label":"Paper Shredding Machine Supplier"},{"value":"parking lot for bicycles","label":"Parking Lot For Bicycles"},{"value":"parking lot for motorcycle","label":"Parking Lot For Motorcycle"},{"value":"party equipment rental service","label":"Party Equipment Rental Service"},{"value":"pay by weight restaurant","label":"Pay By Weight Restaurant"},{"value":"permanent make up clinic","label":"Permanent Make Up Clinic"},{"value":"plant and machinery hire","label":"Plant And Machinery Hire"},{"value":"plastic injection molding service","label":"Plastic Injection Molding Service"},{"value":"plus size clothing store","label":"Plus Size Clothing Store"},{"value":"power plant equipment supplier","label":"Power Plant Equipment Supplier"},{"value":"printer ink refill store","label":"Printer Ink Refill Store"},{"value":"printing equipment and supplies","label":"Printing Equipment And Supplies"},{"value":"producteur de foie gras","label":"Producteur De Foie Gras"},{"value":"professional and hobby associations","label":"Professional And Hobby Associations"},{"value":"public wheelchair accessible bathroom","label":"Public Wheelchair Accessible Bathroom"},{"value":"qing fang market place","label":"Qing Fang Market Place"},{"value":"racing car parts store","label":"Racing Car Parts Store"},{"value":"ready mix concrete supplier","label":"Ready Mix Concrete Supplier"},{"value":"real estate rental agency","label":"Real Estate Rental Agency"},{"value":"recycling drop off location","label":"Recycling Drop Off Location"},{"value":"research and product development","label":"Research And Product Development"},{"value":"retail space rental agency","label":"Retail Space Rental Agency"},{"value":"rolled metal products supplier","label":"Rolled Metal Products Supplier"},{"value":"safe and vault shop","label":"Safe And Vault Shop"},{"value":"sand and gravel supplier","label":"Sand And Gravel Supplier"},{"value":"school for the deaf","label":"School For The Deaf"},{"value":"screen printing supply store","label":"Screen Printing Supply Store"},{"value":"self service car wash","label":"Self Service Car Wash"},{"value":"self service health station","label":"Self Service Health Station"},{"value":"senior citizens care service","label":"Senior Citizens Care Service"},{"value":"seventh day adventist church","label":"Seventh Day Adventist Church"},{"value":"sewing machine repair service","label":"Sewing Machine Repair Service"},{"value":"shared use commercial kitchen","label":"Shared Use Commercial Kitchen"},{"value":"shipbuilding and repair company","label":"Shipbuilding And Repair Company"},{"value":"shipping and mailing service","label":"Shipping And Mailing Service"},{"value":"shop supermarket furniture store","label":"Shop Supermarket Furniture Store"},{"value":"single sex secondary school","label":"Single Sex Secondary School"},{"value":"small appliance repair service","label":"Small Appliance Repair Service"},{"value":"small claims assistance service","label":"Small Claims Assistance Service"},{"value":"small engine repair service","label":"Small Engine Repair Service"},{"value":"solar energy equipment supplier","label":"Solar Energy Equipment Supplier"},{"value":"solar photovoltaic power plant","label":"Solar Photovoltaic Power Plant"},{"value":"south east asian restaurant","label":"South East Asian Restaurant"},{"value":"spa and health club","label":"Spa And Health Club"},{"value":"sports equipment rental service","label":"Sports Equipment Rental Service"},{"value":"stage lighting equipment supplier","label":"Stage Lighting Equipment Supplier"},{"value":"state department of environment","label":"State Department Of Environment"},{"value":"state department of tourism","label":"State Department Of Tourism"},{"value":"state department of transportation","label":"State Department Of Transportation"},{"value":"state department science technology","label":"State Department Science Technology"},{"value":"state department social defense","label":"State Department Social Defense"},{"value":"state dept of culture","label":"State Dept Of Culture"},{"value":"state dept of sports","label":"State Dept Of Sports"},{"value":"state office of education","label":"State Office Of Education"},{"value":"study at home school","label":"Study At Home School"},{"value":"swimming pool repair service","label":"Swimming Pool Repair Service"},{"value":"swimming pool supply store","label":"Swimming Pool Supply Store"},{"value":"table tennis supply store","label":"Table Tennis Supply Store"},{"value":"tattoo and piercing shop","label":"Tattoo And Piercing Shop"},{"value":"threads and yarns wholesaler","label":"Threads And Yarns Wholesaler"},{"value":"three d printing service","label":"Three D Printing Service"},{"value":"toll road rest stop","label":"Toll Road Rest Stop"},{"value":"tool and die shop","label":"Tool And Die Shop"},{"value":"toy and game manufacturer","label":"Toy And Game Manufacturer"},{"value":"trade fair construction company","label":"Trade Fair Construction Company"},{"value":"united church of canada","label":"United Church Of Canada"},{"value":"united church of christ","label":"United Church Of Christ"},{"value":"us pacific northwest restaurant","label":"Us Pacific Northwest Restaurant"},{"value":"used auto parts store","label":"Used Auto Parts Store"},{"value":"used musical instrument store","label":"Used Musical Instrument Store"},{"value":"used office furniture store","label":"Used Office Furniture Store"},{"value":"used store fixture supplier","label":"Used Store Fixture Supplier"},{"value":"vacation home rental agency","label":"Vacation Home Rental Agency"},{"value":"vacuum cleaner repair shop","label":"Vacuum Cleaner Repair Shop"},{"value":"vacuum cleaning system supplier","label":"Vacuum Cleaning System Supplier"},{"value":"vegetarian cafe and deli","label":"Vegetarian Cafe And Deli"},{"value":"video camera repair service","label":"Video Camera Repair Service"},{"value":"video equipment repair service","label":"Video Equipment Repair Service"},{"value":"video game rental kiosk","label":"Video Game Rental Kiosk"},{"value":"video game rental service","label":"Video Game Rental Service"},{"value":"video game rental store","label":"Video Game Rental Store"},{"value":"visa and passport office","label":"Visa And Passport Office"},{"value":"vitamin and supplements store","label":"Vitamin And Supplements Store"},{"value":"washer and dryer store","label":"Washer And Dryer Store"},{"value":"water jet cutting service","label":"Water Jet Cutting Service"},{"value":"water tank cleaning service","label":"Water Tank Cleaning Service"},{"value":"water works equipment supplier","label":"Water Works Equipment Supplier"},{"value":"bottle and can redemption center","label":"Bottle And Can Redemption Center"},{"value":"canoe and kayak rental service","label":"Canoe And Kayak Rental Service"},{"value":"oil and gas exploration service","label":"Oil And Gas Exploration Service"}] \ No newline at end of file diff --git a/backend/country.py b/backend/country.py deleted file mode 100644 index ede88e3da..000000000 --- a/backend/country.py +++ /dev/null @@ -1,3 +0,0 @@ -country_code_to_cities = {"AF":["aibak","andkhoy","art khwajah","asadabad","asmar","baghlan","balkh","bamyan","baraki barak","bazar-e yakawlang","bazarak","charikar","eslam qaleh","farah","fayzabad","gardez","gereshk","ghazni","ghormach","herat","jabal os saraj","jalalabad","kabul","kandahar","karukh","khanabad","khash","khost","khulm","kunduz","kushk","lashkar gah","markaz-e woluswali-ye achin","maymana","mazar-e sharif","mehtar lam","nahrin","paghman","pul-e khumri","qarawul","qarqin","rustaq","sang-e charak","sar-e pul","shahrak","shibirghan","shindand","taloqan","zaranj"],"AX":["mariehamn"],"AL":["berat","burrel","durres","elbasan","fier","fier-cifci","gjirokaster","kavaje","korce","kruje","kukes","lac","lezhe","lushnje","patos","patos fshat","pogradec","sarande","shkoder","tirana","vlore"],"DZ":["abou el hassan","adrar","aflou","ain abid","ain arnat","ain beida","ain benian","ain bessem","ain defla","ain deheb","ain el bell","ain el berd","ain el bya","ain el hadjel","ain el hammam","ain el melh","ain el turk","ain fakroun","ain kercha","ain merane","ain oussera","ain sefra","ain smara","ain taya","ain temouchent","ain touta","akbou","algiers","amizour","ammi moussa","annaba","aoulef","arbatache","arhribs","arris","azazga","azzaba","bab ezzouar","babor - ville","baraki","barbacha","barika","batna","bechar","bejaia","ben mehidi","beni amrane","beni douala","beni mered","beni mester","beni saf","bensekrane","berrahal","berriane","berrouaghia","besbes","bir el ater","bir el djir","birine","birkhadem","biskra","blida","boghni","bordj bou arreridj","bordj el kiffan","bordj ghdir","bordj zemoura","bou arfa","bou hanifia el hamamat","bou ismail","bou tlelis","boudjima","boudouaou","boufarik","bougaa","bougara","bouinan","bouira","boukadir","boumahra ahmed","boumerdas","brezina","chabet el ameur","charef","chebli","chelghoum el aid","chemini","cheraga","cheria","chetouane","chiffa","chlef","chorfa","constantine","dar chioukh","dar el beida","debila","dellys","didouche mourad","district of taher","djamaa","djelfa","djidiouia","douera","draa ben khedda","draa el mizan","drean","ech chettia","el abadia","el abiodh sidi cheikh","el achir","el affroun","el amria","el aouinet","el attaf","el bayadh","el eulma","el hadjar","el hadjira","el hed","el idrissia","el kala","el khroub","el kseur","el malah","el meghaier","el meniaa","el oued","el tarf","es senia","feraoun","freha","frenda","ghardaia","guelma","hadjout","hamma bouziane","hammam bou hadjar","hammamet","hassi messaoud","heliopolis","hennaya","ighram","in salah","jijel","kerkera","khemis el khechna","khemis miliana","khenchela","kolea","ksar chellala","ksar el boukhari","l'arbaa nait irathen","laghouat","lakhdaria","larbaa","lardjem","m'sila","makouda","mansoura","mansourah","mascara","mazouna","medea","meftah","megarine","mehdia daira de meghila","mekla","melouza","merouana","mers el kebir","meskiana","messaad","metlili chaamba","mila","mostaganem","mouzaia","naciria","nedroma","oran","ouargla","oued el abtal","oued el alleug","oued fodda","oued rhiou","oued sly","ouled mimoun","oum el bouaghi","ras el aioun","ras el oued","reggane","reghaia","reguiba","relizane","remchi","robbah","rouached","rouiba","rouissat","saida","salah bey","saoula","sebdou","seddouk","sedrata","setif","sfizef","sidi abdelli","sidi aissa","sidi akkacha","sidi amrane","sidi bel abbes","sidi ech chahmi","sidi khaled","sidi merouane","sidi moussa","sidi okba","sig","skikda","sougueur","souk ahras","souma","sour el ghozlane","tadmait","taibet","tamalous","tamanrasset","tazoult-lambese","tebesbest","tebessa","telerghma","thenia","theniet el had","tiaret","timimoun","timizart","tindouf","tipaza","tirmitine","tissemsilt","tizi gheniff","tizi ouzou","tizi rached","tizi-n-tleta","tlemcen","tolga","touggourt","zemoura","zeralda","zeribet el oued"],"AS":["pago pago"],"AD":["andorra la vella","les escaldes"],"AO":["benguela","caala","cabinda","camacupa","catabola","catumbela","caxito","cuito","huambo","lobito","longonjo","luanda","luau","lubango","lucapa","luena","malanje","mbanza kongo","menongue","mocamedes","n'dalatando","n'zeto","saurimo","soio","sumbe","uige"],"AI":["the valley"],"AG":["saint john's"],"AR":["adrogue","aguilares","albardon","alderetes","allen","alta gracia","anatuya","aristobulo del valle","arroyito","arroyo seco","avellaneda","azul","bahia blanca","balcarce","balvanera","barracas","barranqueras","belgrano","bell ville","bella vista","berazategui","boedo","buenos aires","caleta olivia","campana","canada de gomez","capitan bermudez","carcarana","casilda","castelli","catamarca","catriel","caucete","centenario","chacabuco","chajari","charata","chilecito","chimbas","chivilcoy","cinco saltos","cipolletti","colegiales","comodoro rivadavia","concepcion del uruguay","concordia","cordoba","coronda","coronel suarez","corrientes","cosquin","crespo","cruz del eje","curuzu cuatia","cutral-co","dean funes","diamante","dolores","don torcuato","el bolson","el soberbio","embalse","embarcacion","esperanza","esquel","esquina","famailla","federal","firmat","fontana","formosa","galvez","garupa","general jose de san martin","general mosconi","general pacheco","general pico","general pinedo","general roca","general villegas","gobernador galvez","gobernador virasora","goya","granadero baigorria","gualeguay","gualeguaychu","hurlingham","ingeniero pablo nogues","jardin america","jesus maria","joaquin v. gonzalez","jose c. paz","junin","la calera","la falda","la paz","la plata","la rioja","laboulaye","las brenas","libertador general san martin","lincoln","los polvorines","lujan","machagai","mar del plata","marcos juarez","mendoza","mercedes","merlo","monte caseros","montecarlo","monteros","moron","morteros","muniz","necochea","neuquen","nueve de julio","obera","olavarria","palpala","parana","paso de los libres","perez","pergamino","pilar","pirane","plottier","pocito","pontevedra","posadas","presidencia roque saenz pena","puerto eldorado","puerto esperanza","puerto iguazu","puerto madryn","puerto rico","punta alta","quilmes","quitilipi","rafaela","rawson","reconquista","resistencia","retiro","rio ceballos","rio cuarto","rio gallegos","rio grande","rio segundo","rio tercero","rosario","rufino","saladas","salta","san antonio oeste","san carlos de bariloche","san francisco","san isidro","san javier","san jorge","san jose de jachal","san juan","san justo","san lorenzo","san luis","san luis del palmar","san martin","san martin de los andes","san miguel","san miguel de tucuman","san nicolas de los arroyos","san pedro","san pedro de jujuy","san rafael","san ramon de la nueva oran","san salvador de jujuy","san vicente","santa elena","santa fe","santa lucia","santa maria","santa rosa","santiago del estero","santo tome","santos lugares","sunchales","tafi viejo","tandil","tartagal","termas de rio hondo","tigre","tortuguitas","trelew","tres arroyos","tres isletas","unquillo","ushuaia","veinticinco de mayo","venado tuerto","vera","victoria","viedma","villa allende","villa angela","villa carlos paz","villa constitucion","villa de mayo","villa dolores","villa gesell","villa lugano","villa maria","villa mercedes","villa nueva","villa ocampo","villa ortuzar","villa paula de sarmiento","villa regina","villa santa rita","villaguay","wanda","yerba buena","zapala","zarate"],"AM":["abovyan","ararat","armavir","artashat","ashtarak","ch'arents'avan","gavar","goris","gyumri","hats'avan","hrazdan","kapan","masis","sevan","spitak","stepanavan","vagharshapat","vanadzor","yerevan"],"AW":["oranjestad","san nicolas","tanki leendert"],"AU":["adelaide","adelaide city centre","adelaide hills","albany","albany creek","alexandra hills","alice springs","altona meadows","armidale","ascot vale","ashfield","auburn","australind","bairnsdale","baldivis","ballajura","ballarat","balwyn north","bankstown","banora point","bathurst","baulkham hills","bendigo","bentleigh","bentleigh east","berwick","bexley","blacktown","boronia","bracken ridge","brighton","brighton east","brisbane","broken hill","brunswick","buderim","bunbury","bundaberg","bundoora","burnie","burwood","busselton","byford","caboolture","cabramatta","cairns","calamvale","camberwell","campsie","canberra","canning vale","capalaba","carindale","carlingford","carlton","carnegie","caroline springs","carrum downs","castle hill","casula","caulfield north","cessnock","chatswood","cheltenham","cherrybrook","clayton","coburg","coffs harbour","coogee","coorparoo","corio","craigieburn","cranbourne","cranbourne east","cranbourne north","cranbourne west","cranebrook","cronulla","croydon","dandenong","dandenong north","darwin","deception bay","dee why","deer park","dianella","docklands","doncaster","doncaster east","doreen","dubbo","duncraig","earlwood","eastwood","eight mile plains","ellenbrook","eltham","elwood","endeavour hills","engadine","epping","essendon","fairfield","ferntree gully","footscray","forest lake","frankston","frankston east","frankston south","gawler","geelong","geraldton","gladstone","glen iris","glen waverley","glenferrie","glenmore park","glenroy","glenwood","gold coast","gosnells","goulburn","granville","greenacre","greensborough","greenvale","greystanes","griffith","hampton park","hawthorn","hawthorn south","helensvale","hervey bay","highton","hillside","hobart","hoppers crossing","hornsby","hurstville","kallangur","keilor east","kellyville","kensington","kew","keysborough","kingsford","kirwan","kogarah","kwinana","labrador","lakemba","lalor","landsdale","langwarrin","lara","launceston","lidcombe","lilydale","liverpool","logan city","mackay","maitland","malvern east","mandurah","manly","maroochydore","maroubra","marrickville","maryborough","mascot","melbourne","melbourne city centre","mernda","merrylands","mildura","mill park","miranda","mitcham","moonee ponds","mooroolbark","morayfield","morley","mornington","morphett vale","mosman","mount druitt","mount eliza","mount gambier","mount isa","mount martha","mount waverley","mulgrave","narangba","narre warren","narre warren south","nerang","newcastle","noble park","north lakes","north melbourne","northcote","officer","orange","pacific pines","pakenham","palm beach","palmerston","parafield gardens","paralowie","parramatta","pascoe vale","perth","point cook","port macquarie","port melbourne","preston","prestons","punchbowl","quakers hill","randwick","redbank plains","reservoir","richmond","ringwood","robina","rochedale south","rockdale","rockhampton","rockingham","rowville","roxburgh park","ryde","saint albans","saint ives","saint kilda","scarborough","seaford","seven hills","shepparton","south morang","south yarra","southbank","southport","springfield lakes","springvale","st albans","st clair","strathfield","sunbury","sunnybank hills","sunshine west","surfers paradise","surry hills","sydney","sydney central business district","tamworth","taree","tarneit","taylors hill","taylors lakes","templestowe","the gap","thomastown","thornbury","thornlie","toowoomba","townsville","traralgon","truganina","umina beach","upper coomera","wahroonga","wangaratta","wantirna south","warragul","warrnambool","warwick","werribee","west pennant hills","westmead","wheelers hill","willetton","wodonga","wollert","wollongong","wollongong city centre","wyndham vale","yagoona","yarraville"],"AT":["amstetten","andritz","baden","bregenz","donaustadt","dornbirn","eggenberg","favoriten","feldkirch","floridsdorf","geidorf","graz","gries","hernals","hietzing","hohenems","hotting","innere stadt","innsbruck","jakomini","klagenfurt am worthersee","klosterneuburg","lend","linz","lustenau","meidling","modling","ottakring","perchtoldsdorf","pradl","saalfelden am steinernen meer","salzburg","sankt leonhard","sankt martin","sankt peter","sankt polten","simmering","steyr","stockerau","strassgang","telfs","vienna","villach","weinzierl bei krems","wels","wetzelsdorf","wiener neustadt","wilten"],"AZ":["@hm@db@yli","agdam","agdas","agdzhabedy","aghsu","amirdzhan","astara","bakixanov","baku","barda","beylagan","bilajari","biny selo","buzovna","divichibazar","fizuli","ganja","goycay","goygol","haci zeynalabdin","haciqabul","hovsan","imishli","ismayilli","jalilabad","khirdalan","kyurdarmir","lankaran","lerik","lokbatan","mardakan","mastaga","mingelchaur","nakhchivan","neftcala","pushkino","qaracuxur","qazax","quba","qusar","saatli","sabirabad","sabuncu","salyan","shamakhi","shamkhor","sheki","sirvan","sumqayit","susa","terter","tovuz","ujar","xacmaz","xankandi","yeni suraxani","yevlakh","zabrat","zaqatala"],"BS":["freeport","lucaya","nassau"],"BH":["al muharraq","ar rifa","dar kulayb","jidd hafs","madinat 'isa","madinat hamad","manama","sitrah"],"BD":["azimpur","badarganj","bagerhat","bajitpur","bandarban","baniachang","barishal","bera","bhairab bazar","bhandaria","bhatpara abhaynagar","bheramara","bhola","bibir hat","bogra","burhanuddin","char bhadrasan","chattogram","chhagalnaiya","chhatak","chilmari","comilla","cox's bazar","dhaka","dinajpur","dohar","faridpur","feni","gafargaon","gaurnadi","habiganj","hajiganj","ishurdi","jamalpur","jessore","jhingergacha","joymontop","joypur hat","kalia","kaliganj","kesabpur","khagrachhari","khulna","kishorganj","kushtia","laksham","lakshmipur","lalmohan","lalmonirhat","madaripur","manikchari","mathba","maulavi bazar","mehendiganj","mirzapur","morrelgonj","muktagacha","mymensingh","nabinagar","nagarpur","nageswari","nalchiti","narail","narayanganj","narsingdi","natore","nawabganj","netrakona","pabna","palang","paltan","panchagarh","paotana hat","par naogaon","parbatipur","patiya","phultala","pirgaaj","pirojpur","puthia","raipur","rajshahi","ramganj","rangpur","raojan","saidpur","sakhipur","sandwip","sarankhola","sarishabari","satkania","satkhira","shahzadpur","sherpur","shibganj","sirajganj","sonargaon","sylhet","tangail","teknaf","thakurgaon","tungi","tungipara","uttar char fasson"],"BB":["bridgetown"],"BY":["asipovichy","babruysk","baranovichi","barysaw","brest","byaroza","bykhaw","dobrush","dzyarzhynsk","hlybokaye","homyel","horad zhodzina","horki","hrodna","ivatsevichy","kalinkavichy","kalodzishchy","kobryn","krychaw","lida","luninyets","lyepyel","mahilyow","maladziecna","mar''ina horka","mazyr","minsk","mosty","navapolatsk","novogrudok","orsha","pastavy","pinsk","polatsk","pruzhany","rahachow","rechytsa","salihorsk","shchuchyn","slonim","slutsk","smaliavicy","smarhon","stowbtsy","svyetlahorsk","vilyeyka","vitebsk","volkovysk","zhlobin"],"BE":["aalst","aalter","aarschot","andenne","anderlecht","ans","antwerpen","arlon","asse","assebroek","ath","auderghem","balen","beerse","beersel","berchem","berchem-sainte-agathe","beringen","bevere","beveren","bilzen","binche","blankenberge","blauwput","boom","borgerhout","bornem","boussu","braine-l'alleud","braine-le-comte","brasschaat","brugge","brussels","charleroi","chasse royale","chatelet","chatelineau","chaudfontaine","colfontaine","courcelles","deinze","denderleeuw","dendermonde","destelbergen","deurne","diepenbeek","diest","diksmuide","dilbeek","dour","duffel","edegem","eeklo","ekeren","etterbeek","eupen","evere","evergem","flemalle-haute","fleron","fleurus","forest","frameries","ganshoren","geel","gembloux","genk","gent","gentbrugge","geraardsbergen","gilly","grimbergen","grivegnee","haaltert","halle","hamme","harelbeke","hasselt","heist-op-den-berg","helchteren","herent","herentals","herstal","herve","herzele","heusden","heusy","heverlee","hoboken","hoogstraten","houthalen","huy","ieper","ixelles","izegem","jambes","jette","jumet","kalmthout","kapellen","kasterlee","kessel-lo","knokke-heist","koekelberg","koersel","koksijde","kontich","kortenberg","kortrijk","la louviere","lanaken","lebbeke","lede","lessines","leuven","liege","lier","lille","lochristi","lokeren","lommel","louvain-la-neuve","maaseik","maasmechelen","maldegem","manage","marche-en-famenne","marchienne-au-pont","marcinelle","mariakerke","mechelen","mechelen-aan-de-maas","meise","menen","merelbeke","merksem","middelkerke","mol","molenbeek-saint-jean","mons","montignies-sur-sambre","morlanwelz-mariemont","mortsel","mouscron","namur","neerpelt","nijlen","ninove","nivelles","oostkamp","ostend","oudenaarde","oupeye","overijse","peer","peruwelz","pont-a-celles","poperinge","putte","puurs","quaregnon","ranst","riemst","rixensart","roeselare","ronse","rotselaar","saint-ghislain","saint-gilles","saint-josse-ten-noode","saint-nicolas","schaerbeek","schilde","schoten","seraing","sint-amandsberg","sint-andries","sint-genesius-rode","sint-gillis-waas","sint-katelijne-waver","sint-kruis","sint-niklaas","sint-pieters-leeuw","sint-truiden","soignies","soumagne","stabroek","stekene","temse","tervuren","tessenderlo","tielt","tienen","tongeren","torhout","tournai","tubize","turnhout","uccle","verviers","vilvoorde","vise","walcourt","waregem","waterloo","watermael-boitsfort","wavre","wervik","westerlo","wetteren","wevelgem","willebroek","wilrijk","woluwe-saint-lambert","wondelgem","zaventem","zedelgem","zele","zemst","zolder","zonhoven","zottegem","zwevegem","zwijndrecht"],"BZ":["belize city","belmopan","orange walk","san ignacio","san pedro"],"BJ":["abomey","abomey-calavi","allada","aplahoue","banikoara","bassila","bembereke","bohicon","come","cotonou","cove","dassa-zoume","djougou","dogbo","kandi","ketou","lokossa","malanville","natitingou","nikki","ouidah","parakou","pobe","porto-novo","sakete","savalou","save","tanguieta","tchaourou"],"BM":["hamilton"],"BT":["phuntsholing","punakha","thimphu","tsirang"],"BO":["achocalla","ascencion de guarayos","bermejo","camiri","caranavi","cobija","cochabamba","colcapirhua","cotoca","el torno","guayaramerin","huanuni","la paz","laja","llallagua","mizque","montero","oruro","potosi","punata","quillacollo","riberalta","sacaba","san borja","san ignacio de velasco","santa cruz de la sierra","sipe sipe","sucre","tarija","tiquipaya","trinidad","tupiza","viacha","villa yapacani","villamontes","villazon","vinto","warnes","yacuiba"],"BQ":["kralendijk"],"BA":["banja luka","bihac","bijeljina","bosanska krupa","brcko","bugojno","cazin","doboj","gorazde","gracanica","gradacac","konjic","lukavac","mostar","prijedor","sarajevo","travnik","trebinje","tuzla","velika kladusa","visoko","zenica"],"BW":["francistown","gaborone","janeng","kanye","letlhakane","lobatse","mahalapye","maun","mochudi","mogoditshane","molepolole","mosopa","palapye","ramotswa","selebi-phikwe","serowe","thamaga","tonota"],"BR":["abaete","abaetetuba","abreu e lima","acarau","acopiara","acu","adamantina","afogados da ingazeira","agua preta","aguai","aguas belas","aguas de lindoia","aguas vermelhas","agudos","aimores","alagoa grande","alagoinhas","alegre","alegrete","alem paraiba","alenquer","alfenas","almeirim","almenara","almirante tamandare","altamira","altos","alvares machado","alvorada","amaraji","amargosa","americana","americo brasiliense","amparo","ananindeua","anapolis","anastacio","andradas","andradina","angra dos reis","anicuns","antonina","aparecida","aparecida de goiania","aparecida do taboado","apiai","apodi","apucarana","aquidauana","aquiraz","aracaju","aracati","aracatuba","araci","aracoiaba da serra","aracruz","aracuai","aragarcas","araguaina","araguari","arapiraca","arapongas","ararangua","araraquara","araras","arari","araripina","araruama","araucaria","araxa","arcos","arcoverde","areia branca","aripuana","ariquemes","armacao de buzios","arraial do cabo","arroio do meio","arroio grande","artur nogueira","aruja","assis","astorga","atalaia","atibaia","augusto correa","avare","bacabal","bage","baixo guandu","balneario camboriu","balsas","bambui","bandeirantes","barao de cocais","barbacena","barbalha","barcarena","bariri","barra","barra bonita","barra de sao francisco","barra do bugres","barra do corda","barra do garcas","barra do pirai","barra dos coqueiros","barra mansa","barra velha","barras","barreiras","barreirinhas","barreiro do jaiba","barreiros","barretos","barrinha","barroso","barueri","bastos","batatais","baturite","bauru","bayeux","bebedouro","beberibe","bela vista","belem","belford roxo","belo horizonte","belo jardim","belo oriente","benevides","bento goncalves","bertioga","betim","bezerros","biguacu","birigui","biritiba mirim","blumenau","boa esperanca","boa viagem","boa vista","bocaiuva","boituva","bom conselho","bom despacho","bom jesus da lapa","bom jesus do itabapoana","botucatu","braco do norte","braganca","braganca paulista","brasilia","brejo da madre de deus","brejo santo","breves","brodosqui","brotas","brumadinho","brumado","brusque","buerarema","buique","buri","buriti bravo","buritis","buritizeiro","butia","cabedelo","cabo","cabo frio","cabreuva","cabrobo","cacador","cacapava","cacapava do sul","cachoeira","cachoeira do sul","cachoeiras de macacu","cachoeirinha","cachoeiro de itapemirim","cacoal","caete","caetite","caico","caieiras","cajamar","cajati","cajazeiras","cajueiro","cajuru","caldas novas","camacari","camanducaia","camaqua","cambara","cambe","cambebba","cambui","cameta","camocim","campina grande","campina grande do sul","campinas","campo alegre","campo belo","campo formoso","campo grande","campo largo","campo maior","campo mourao","campo verde","campos belos","campos do jordao","campos dos goytacazes","campos gerais","campos novos","campos sales","canavieiras","candelaria","candido mota","canela","canguaretama","cangucu","caninde","canoas","canoinhas","capanema","capao bonito","capao da canoa","capela","capelinha","capim grosso","capinzal","capitao poco","capivari","caraguatatuba","carandai","carangola","carapicuiba","caratinga","carauari","carazinho","carlos barbosa","carmo do cajuru","carmo do paranaiba","carolina","carpina","caruaru","casa branca","cascavel","casimiro de abreu","cassilandia","castanhal","castelo","castro","cataguases","catalao","catanduva","catende","catole do rocha","catu","caucaia","caxambu","caxias","caxias do sul","ceara mirim","celso ramos","ceres","cerquilho","cha grande","chapadinha","chapeco","charqueadas","cianorte","cicero dantas","claudio","coaraci","coari","codo","coelho neto","colatina","colinas","colombo","colorado","conceicao da barra","conceicao da feira","conceicao das alagoas","conceicao do araguaia","conceicao do coite","conceicao do jacuipe","conchal","concordia","condado","conde","congonhas","conselheiro lafaiete","contagem","cordeiro","cordeiropolis","corinto","cornelio procopio","coroata","coromandel","coronel fabriciano","coronel vivida","corumba","coruripe","cosmopolis","cotia","coxim","crateus","crato","cravinhos","criciuma","cristalina","cruz alta","cruz das almas","cruzeiro","cruzeiro do oeste","cruzeiro do sul","cubatao","cuiaba","cupira","curitiba","curitibanos","currais novos","cururupu","curvelo","custodia","delmiro gouveia","demerval lobao","descalvado","diadema","diamantina","diamantino","divinopolis","dois corregos","dois vizinhos","dom pedrito","dom pedro","dourados","duque de caxias","eirunepe","eloi mendes","embu","embu guacu","encantado","encruzilhada do sul","entre rios","erechim","escada","esmeraldas","esperanca","esperantina","espinosa","espirito santo do pinhal","esplanada","estancia","estancia velha","esteio","estreito","estrela","euclides da cunha","eunapolis","eusebio","extremoz","farroupilha","feira de santana","fernandopolis","ferraz de vasconcelos","flores da cunha","floresta","floriano","florianopolis","fonte boa","formiga","formosa","forquilhinha","fortaleza","foz do iguacu","franca","francisco beltrao","francisco morato","franco da rocha","frederico westphalen","freguesia do ribeirao da ilha","frutal","gameleira","gandu","garanhuns","garca","garibaldi","gaspar","gloria do goita","goiana","goianesia","goiania","goianira","goias","goiatuba","governador valadares","grajau","granja","gravata","gravatai","guacui","guaiba","guaira","guaiuba","guajara mirim","guanambi","guanhaes","guapimirim","guapore","guara","guarabira","guaraciaba do norte","guaramirim","guaranesia","guarapari","guarapuava","guararapes","guararema","guaratingueta","guaratuba","guariba","guaruja","guarulhos","guaxupe","gurupi","herval","horizonte","hortolandia","humaita","iacu","ibaiti","ibate","ibia","ibicarai","ibipora","ibirama","ibirataia","ibirite","ibitinga","ibiuna","ibotirama","icara","ico","igaracu do tiete","igarapava","igarape","igarape acu","igarape miri","igarassu","igrejinha","iguape","iguatu","ijui","ilha solteira","ilhabela","ilheus","imbituba","imbituva","imperatriz","indaial","indaiatuba","inhumas","ipaba","ipameri","ipatinga","ipero","ipiau","ipira","ipojuca","ipora","ipu","ipubi","ipueiras","iracemapolis","irati","irece","itabaiana","itabaianinha","itaberaba","itaberai","itabira","itabirito","itaborai","itabuna","itacoatiara","itaguai","itai","itaitinga","itaituba","itajai","itajuba","itajuipe","itamaraju","itamarandiba","itambe","itanhaem","itaocara","itapaci","itapage","itaparica","itapecerica","itapecerica da serra","itapecuru mirim","itapema","itapemirim","itaperucu","itaperuna","itapetinga","itapetininga","itapeva","itapevi","itapipoca","itapira","itapissuma","itapolis","itaporanga","itapuranga","itaquaquecetuba","itaqui","itarare","itatiba","itatinga","itauna","itororo","itu","itubera","ituiutaba","itumbiara","itupeva","itupiranga","iturama","ituverava","ivoti","jaboatao","jaboatao dos guararapes","jaboticabal","jacarei","jacarezinho","jaciara","jacobina","jacutinga","jaguaquara","jaguarao","jaguarari","jaguariaiva","jaguaribe","jaguariuna","jaguaruana","jales","janauba","jandaia do sul","jandira","januaria","japeri","jaragua","jaragua do sul","jardim","jardim paulista","jardinopolis","jarinu","jaru","jatai","jatoba","jau","jequie","jequitinhonha","jeremoabo","ji parana","joacaba","joao camara","joao monlevade","joao pessoa","joao pinheiro","joinville","jose bonifacio","jose de freitas","juatuba","juazeiro do norte","juiz de fora","julio de castilhos","jundiai","ladario","lagarto","lages","lago da pedra","lagoa da prata","lagoa do itaenga","lagoa santa","lagoa vermelha","laguna","lajeado","lajedo","lajinha","lapa","laranjal paulista","laranjeiras","laranjeiras do sul","lauro de freitas","lavras","lavras da mangabeira","leme","lencois paulista","leopoldina","limeira","limoeiro","limoeiro do norte","linhares","lins","livramento do brumado","loanda","londrina","lorena","louveira","lucas","luziania","macae","macaiba","macapa","macatuba","macau","maceio","machado","mafra","mairinque","mairipora","mamanguape","manacapuru","manaus","mandaguari","mangaratiba","manhuacu","manhumirim","maraba","maracaju","maracanau","maracas","maragogi","maragogipe","marataizes","marau","marechal candido rondon","marechal deodoro","mari","marialva","mariana","marica","marilia","maringa","martinopolis","mascote","mata de sao joao","matao","mateus leme","matozinhos","matriz de camaragibe","maua","maues","medeiros neto","medianeira","mendes","miguel pereira","miguelopolis","minacu","mineiros","miracatu","miracema","miracema do tocantins","mirandopolis","mocajuba","mococa","mogi das cruzes","mogi guacu","mogi mirim","moju","mombaca","mongagua","monte alegre","monte alto","monte aprazivel","monte azul paulista","monte carmelo","monte mor","monte santo de minas","monteiro","montenegro","montes claros","morada nova","moreno","morrinhos","morro agudo","morro do chapeu","mossoro","mucuri","muriae","murici","muritiba","muzambinho","nanuque","natal","navegantes","navirai","nazare","nazare da mata","nepomuceno","neropolis","nilopolis","niquelandia","niteroi","nossa senhora da gloria","nossa senhora do socorro","nova cruz","nova era","nova friburgo","nova granada","nova iguacu","nova lima","nova odessa","nova olimpia","nova petropolis","nova prata","nova russas","nova venecia","nova vicosa","nova xavantina","novo hamburgo","novo horizonte","obidos","oeiras","olimpia","olinda","oliveira","oriximina","orlandia","orleans","oros","osasco","osorio","osvaldo cruz","ouricuri","ourilandia do norte","ourinhos","ouro branco","ouro preto","ouro preto do oeste","pacajus","pacatuba","padre bernardo","paicandu","palhoca","palmares","palmas","palmeira","palmeira das missoes","palmital","palotina","panambi","para de minas","paracambi","paracatu","paracuru","paragominas","paraguacu","paraguacu paulista","paraiba do sul","paraipaba","paranagua","paranaiba","paranapanema","paranavai","paraty","parauapebas","parelhas","parintins","parnaiba","parnamirim","parobe","passo fundo","passos","pato branco","patos","patos de minas","patrocinio","paty do alferes","paulinia","paulista","paulo afonso","pederneiras","pedra azul","pedra branca","pedreira","pedro ii","pedro leopoldo","pelotas","penalva","penapolis","penedo","penha","pentecoste","perdoes","pereira barreto","peruibe","pesqueira","petrolina","petropolis","picos","piedade","pilar","pilar do sul","pimenta bueno","pindamonhangaba","pindare mirim","pindobacu","pinhais","pinhao","pinheiral","pinheiro","piracaia","piracanjuba","piracicaba","piracuruca","pirai","pirai do sul","piraju","pirajui","pirapora","pirapozinho","piraquara","pirassununga","pires do rio","piripiri","piritiba","pitanga","pitangueiras","pitangui","piui","piuma","planaltina","poa","pocoes","pocone","pocos de caldas","pombal","pombos","pomerode","pompeia","pompeu","ponta grossa","ponta pora","pontal","ponte nova","pontes e lacerda","porangatu","portao","portel","porto alegre","porto calvo","porto feliz","porto ferreira","porto seguro","porto uniao","porto velho","posse","posto da mata","posto fiscal rolim de moura","pouso alegre","prado","praia grande","prata","presidente dutra","presidente epitacio","presidente prudente","presidente venceslau","promissao","propria","prudentopolis","quarai","quatro barras","queimados","quirinopolis","quixada","quixeramobim","rancharia","recife","redencao","regente feijo","registro","resende","resplendor","riachao do jacuipe","ribeira do pombal","ribeirao","ribeirao da ilha","ribeirao das neves","ribeirao pires","ribeirao preto","rio bonito","rio branco","rio branco do sul","rio brilhante","rio claro","rio das ostras","rio das pedras","rio de janeiro","rio do sul","rio formoso","rio grande","rio grande da serra","rio largo","rio negrinho","rio negro","rio pardo","rio preto da eva","rio real","rio verde","rio verde de mato grosso","rolandia","rolante","rondonopolis","rosario do sul","rubiataba","russas","ruy barbosa","sacramento","salgueiro","salinas","salinopolis","salto","salto de pirapora","salvador","santa barbara d'oeste","santa cecilia","santa cruz","santa cruz cabralia","santa cruz das palmeiras","santa cruz do capibaribe","santa cruz do rio pardo","santa cruz do sul","santa fe do sul","santa gertrudes","santa helena","santa helena de goias","santa ines","santa isabel","santa luzia","santa maria","santa maria da vitoria","santa quiteria","santa quiteria do maranhao","santa rita","santa rita do passa quatro","santa rita do sapucai","santa rosa","santa rosa de viterbo","santa vitoria do palmar","santaluz","santana","santana de parnaiba","santana do ipanema","santana do livramento","santana do paraiso","santarem","santiago","santo amaro","santo amaro da imperatriz","santo anastacio","santo andre","santo angelo","santo antonio da platina","santo antonio de jesus","santo antonio de padua","santo antonio de posse","santo antonio do amparo","santo antonio do monte","santo estevao","santos","santos dumont","sao bento","sao bento do sul","sao bernardo do campo","sao borja","sao caetano do sul","sao carlos","sao cristovao","sao domingos do maranhao","sao felix do xingu","sao fidelis","sao francisco","sao francisco do conde","sao francisco do sul","sao gabriel","sao gabriel da cachoeira","sao goncalo do amarante","sao goncalo do sapucai","sao gotardo","sao jeronimo","sao joao da barra","sao joao da boa vista","sao joao de meriti","sao joao del rei","sao joao dos inhamuns","sao joao dos patos","sao joao nepomuceno","sao joaquim","sao joaquim da barra","sao jose","sao jose de mipibu","sao jose de ribamar","sao jose do egito","sao jose do rio pardo","sao jose do rio preto","sao jose dos campos","sao jose dos pinhais","sao leopoldo","sao lourenco","sao lourenco da mata","sao lourenco do sul","sao luis","sao luis de montes belos","sao luis do quitunde","sao luiz gonzaga","sao manuel","sao marcos","sao mateus","sao mateus do maranhao","sao mateus do sul","sao miguel do araguaia","sao miguel do guama","sao miguel do iguacu","sao miguel dos campos","sao paulo","sao pedro","sao pedro da aldeia","sao raimundo nonato","sao roque","sao sebastiao","sao sebastiao do cai","sao sebastiao do paraiso","sao sebastiao do passe","sao sepe","sao vicente","sapiranga","sapucaia","saquarema","sarandi","sarzedo","satuba","saubara","schroeder","seabra","sena madureira","senador canedo","senador guiomard","senador pompeu","senhor do bonfim","seropedica","serra","serra negra","serra talhada","serrana","serrinha","sertania","sertaozinho","sete lagoas","sidrolandia","silva jardim","simao dias","simoes filho","sinop","sirinhaem","sobradinho","sobral","socorro","solanea","soledade","sorocaba","soure","sousa","sumare","surubim","suzano","tabatinga","tabira","taboao da serra","taiobeiras","tamandare","tambau","tanabi","tangua","tapes","tapiramuta","taquara","taquari","taquaritinga","taquarituba","tarauaca","tatui","taubate","tefe","telemaco borba","teodoro sampaio","teofilo otoni","teresina","teresopolis","teutonia","tiangua","tiete","tijucas","timbauba","timbiras","timbo","timon","timoteo","tobias barreto","toledo","tome acu","toritama","torres","trairi","tramandai","tremembe","tres coracoes","tres coroas","tres de maio","tres lagoas","tres passos","tres pontas","tres rios","trindade","tubarao","tucano","tucuma","tucurui","tuntum","tupa","tupaciguara","tupancireta","uba","ubaitaba","ubata","ubatuba","uberaba","uberlandia","umuarama","una","unai","uniao","uniao da vitoria","uniao dos palmares","uruacu","urucuca","uruguaiana","vacaria","valenca","valenca do piaui","valinhos","valparaiso","vargem grande","vargem grande do sul","varginha","varjota","varzea alegre","varzea da palma","varzea grande","varzea paulista","vassouras","vazante","venancio aires","vera cruz","veranopolis","vespasiano","viamao","viana","vicosa","vicosa do ceara","videira","vigia","vila velha","vilhena","vinhedo","viradouro","visconde do rio branco","viseu","vitoria","vitoria da conquista","vitoria de santo antao","vitoria do mearim","volta redonda","votorantim","votuporanga","wenceslau braz","xanxere","xinguara","xique xique"],"VG":["road town"],"BN":["bandar seri begawan","kuala belait","seria","tutong"],"BG":["asenovgrad","asparuhovo","aytos","berkovitsa","blagoevgrad","botevgrad","burgas","chirpan","dimitrovgrad","dobrich","dupnitsa","gabrovo","gorna oryahovitsa","gotse delchev","harmanli","haskovo","kardzhali","karlovo","karnobat","kazanlak","kyustendil","lom","lovech","montana","nova zagora","panagyurishte","parvomay","pazardzhik","pernik","peshtera","petrich","pleven","plovdiv","popovo","rakovski","razgrad","ruse","samokov","sandanski","sevlievo","shumen","silistra","sliven","smolyan","sofia","stara zagora","svilengrad","svishtov","targovishte","troyan","varna","veliko turnovo","velingrad","vidin","vratsa","yambol"],"BF":["banfora","batie","bobo-dioulasso","bogande","boromo","boulsa","bousse","dano","dedougou","diapaga","diebougou","djibo","dori","fada n'gourma","gaoua","garango","gayeri","gourcy","hounde","kaya","kokologo","kombissiri","kongoussi","koudougou","koupela","leo","manga","nouna","ouagadougou","ouahigouya","po","reo","salanso","sapouy","tenkodogo","titao","toma","tougan","yako","ziniare","zorgo"],"BI":["bujumbura","bururi","gitega","kayanza","makamba","muramvya","muyinga","ngozi","rutana","ruyigi"],"CV":["cova figueira","mindelo","praia","santa maria"],"KH":["banlung","battambang","kampong cham","kampong chhnang","kampong speu","kampong thom","kampot","koh kong","kratie","lumphat","pailin","paoy paet","phnom penh","phumi veal sre","prey veng","pursat","samraong","siem reap","sihanoukville","sisophon","smach mean chey","stung treng","suong","svay rieng","ta khmau","takeo","tbeng meanchey"],"CM":["akonolinga","bafang","bafia","bafoussam","bali","bamenda","bamusso","bangangte","banyo","batouri","belabo","bertoua","bogo","buea","dizangue","douala","dschang","ebolowa","edea","eseka","fontem","foumban","foumbot","fundong","garoua","garoua boulai","guider","kaele","kousseri","kribi","kumba","kumbo","lagdo","limbe","lolodorf","loum","mamfe","manjo","maroua","mbalmayo","mbandjok","mbanga","mbouda","meiganga","melong","mokolo","mora","mutengene","muyuka","nanga eboko","ngaoundere","nkongsamba","nkoteng","obala","penja","sangmelima","tchollire","tibati","tiko","tonga","wum","yagoua","yaounde"],"CA":["abbotsford","agincourt north","agincourt south-malvern west","airdrie","ajax","alliston","alma","amos","ancaster","annex","aurora","baie-comeau","banbury-don mills","barrie","bathurst manor","bay street corridor","bayview village","beaconsfield","bedford park-nortown","belleville","beloeil","bendale","birchcliffe-cliffside","black creek","blainville","boisbriand","boucherville","bracebridge","brampton","brandon","brant","brantford","brockville","brookhaven-amesbury","brossard","buckingham","burlington","burnaby","caledon","calgary","cambridge","campbell river","camrose","candiac","chambly","charlottetown","chateauguay","chatham","chilliwack","church-yonge corridor","clairlea-birchmount","clanton park","clarence-rockland","cliffcrest","cobourg","cochrane","cole harbour","collingwood","colwood","conception bay south","coquitlam","corner brook","cornwall","cote-saint-luc","courtenay","cranbrook","danforth east york","dartmouth","delta","deux-montagnes","dieppe","dollard-des ormeaux","don valley village","dorset park","dorval","dovercourt-wallace emerson-junction","downsview-roding-cfb","drummondville","duncan","east end-danforth","east gwillimbury","edenbridge-humber valley","edmonton","edmundston","eglinton east","englemount-lawrence","eringate-centennial-west deane","esquimalt","fallingbrook","fergus","flemingdon park","fort erie","fort mcmurray","fort st. john","fredericton","gatineau","glace bay","glenfield-jane heights","granby","grande prairie","greater napanee","greater sudbury","grimsby","guelph","halifax","hamilton","henry farm","high park north","high park-swansea","hillcrest village","humbermede","huntsville","islington-city centre west","joliette","jonquiere","kamloops","kanata","kelowna","kennedy park","kenora","kensington-chinatown","keswick","kingston","kingsview village-the westway","kirkland","kitchener","l'amoreaux","l'ancienne-lorette","l'assomption","la haute-saint-charles","la prairie","ladner","langford","langley","lansing-westgate","laval","lawrence park south","leamington","leaside-bennington","leduc","les coteaux","lethbridge","levis","lindsay","little portugal","lloydminster","london","longueuil","lower sackville","lutes mountain","magog","malvern","maple ridge","markham","mascouche","medicine hat","midland","milliken","milton","mimico","mirabel","miramichi","mission","mississauga","moncton","mont-royal","mont-saint-hilaire","montreal","moose jaw","morningside","moss park","mount olive-silverstone-jamestown","mount pearl","mount pleasant east","mount pleasant west","nanaimo","nepean","new glasgow","new westminster","newmarket","newtonbrook east","newtonbrook west","niagara","niagara falls","niagara-on-the-lake","norfolk county","north battleford","north bay","north cowichan","north st.james town","north vancouver","notre-dame-de-grace","o'connor-parkview","oak bay","oakville","oakwood village","okanagan","orangeville","orillia","oshawa","ottawa","owen sound","parkwoods-donalda","penticton","petawawa","peterborough","pickering","pitt meadows","pleasant view","pointe-claire","port alberni","port colborne","port coquitlam","port moody","prince albert","prince edward","prince george","quebec","quinte west","red deer","regina","repentigny","richmond","richmond hill","rimouski","riviere-du-loup","rock forest","rockcliffe-smythe","rosedale-moore park","rouge","rouyn-noranda","saguenay","saint john","saint-augustin-de-desmaures","saint-basile-le-grand","saint-bruno-de-montarville","saint-constant","saint-eustache","saint-georges","saint-hyacinthe","saint-jean-sur-richelieu","saint-jerome","saint-laurent","saint-lazare","saint-leonard","saint-lin-laurentides","sainte-catherine","sainte-julie","sainte-therese","salaberry-de-valleyfield","sarnia","saskatoon","sault ste. marie","scarborough village","sept-iles","shawinigan","sherbrooke","sherwood park","sorel-tracy","south parkdale","south riverdale","spruce grove","squamish","st. albert","st. catharines","st. john's","st. thomas","st.andrew-windfields","steeles","steinbach","stonegate-queensway","stratford","surrey","swift current","sydney","tam o'shanter-sullivan","taylor-massey","tecumseh","terrace","terrebonne","the beaches","thetford-mines","thorncliffe park","thorold","thunder bay","timmins","toronto","trinity-bellwoods","trois-rivieres","tsawwassen","uxbridge","val-d'or","valley east","vancouver","vanier","varennes","vaudreuil-dorion","vaughan","vernon","victoria","victoria village","victoriaville","walnut grove","wasaga beach","waterfront communities-the island","waterloo","welland","west end","west hill","west humber-clairville","west kelowna","west vancouver","westminster-branson","westmount","weston","wexford/maryvale","white rock","whitehorse","willowdale","willowdale east","willowdale west","willowridge-martingrove-richview","windsor","winnipeg","woburn","woodstock","yellowknife","york university heights","yorkton"],"KY":["george town","west bay"],"CF":["bambari","bangassou","bangui","batangafo","berberati","bimbo","boda","bossangoa","bouar","bozoum","bria","carnot","damara","ippy","kaga bandoro","mbaiki","mobaye","nola","paoua","sibut"],"TD":["abeche","am-timan","ati","benoy","bitkine","bongor","doba","dourbali","fada","kelo","koumra","kyabe","lai","mao","massaguet","massakory","mboursou lere","mongo","moundou","moussoro","n'djamena","oum hadjer","pala","sarh"],"CL":["alto hospicio","ancud","angol","antofagasta","arauco","arica","buin","cabrero","calama","canete","cartagena","castro","caupolican","cauquenes","cavancha","chicureo","chiguayante","chillan","chimbarongo","collipulli","concepcion","constitucion","copiapo","coquimbo","coronel","coyhaique","curanilahue","curico","diego de almagro","el monte","gomez carreno","graneros","hacienda la calera","illapel","iquique","la ligua","la pintana","la serena","la tirana","la union","laja","lampa","las animas","lautaro","lebu","limache","linares","llaillay","lo prado","loncoche","los andes","los angeles","lota","machali","melipilla","molina","mulchen","nacimiento","nueva imperial","osorno","ovalle","paine","panguipulli","parral","penaflor","penco","playa brava","pozo almonte","pucon","puente alto","puerto aysen","puerto montt","puerto natales","puerto varas","punta arenas","quellon","quillota","quilpue","rancagua","rengo","rio bueno","san antonio","san bernardo","san carlos","san felipe","san javier","san vicente","san vicente de tagua tagua","santa cruz","santiago","talagante","talca","talcahuano","temuco","tocopilla","tome","valdivia","vallenar","valparaiso","victoria","villa alemana","villarrica","vina del mar"],"CN":["acheng","ahu","akesalayi","aksu","alamaiti","altay","anbu","anda","anfu","anguo","anhua","anjiang","anju","ankang","anlan","anliu","anlong","anlu","anning","anping","anqing","anqiu","anshan","anshun","antu","anwen","anxiang","anyang","anyuan","aoxi","apengjiang","aral","arele","arewusitang","arix","awati","awuliya","azhatebage","babu","bachuan","bage'awati","bageqi","bai'anba","baicheng","baichihe","baidi","baiguan","baihe","baihecun","baihua","baijia","baijiantan","baijiawan","bailin","baima","baimajing","baiquan","baise","baisha","baishan","baisheng","baishikante","baishishan","baitao","baitu","baituo","baixi","baiyang","baiyin","baizi","bake","baliwan","balu","banan","banqiao","baoding","baohe","baoji","baojia","baolong","baoluan","baoqing","baoshan","baotou","baoxing","baoying","bashan","basuo","batang","bayan","bayan hot","bayan nur","bayandai","bayiji","baytokay","bei'an","beibei","beichengqu","beidaihehaibin","beidao","beihai","beijing","beiliu","beimeng","beipiao","beisu","beiwangli","bengbu","benxi","biantang","bianzhuang","bibo","bijie","bikou","bin xian","binhe","binzhou","bishan","biyang","bojia","bole","boli","bonan","boshan","botou","bowangshan","bozhou","buhe","burqin","buzhake","buzhuang","caidian","caijia","caijiagang","cangzhou","caohe","caohui","caojie","caoqiao","caotang","chahe","chaigou","chaihe","changba","changcheng","changchun","changdao","changde","changdian","changji","changle","changleng","changli","changling","changlong","changning","changping","changqing","changsha","changshouhu","changshu","changtan","changtu","changxin","changyi","changyuan","changzhi","changzhou","chaohu","chaotian","chaoyang","chaozhou","chefushan","chengde","chengdu","chenggu","chenghai","chenghua","chengjiang","chengjiao","chengtangcun","chengxi","chengxian chengguanzhen","chengxiang","chengyang","chengzhong","chengzihe","chenjiaba","chenlou","chenshi","chentuan","chenzhou","chifeng","chizhou","chongkan","chonglong","chongqing","chongxing","chongzuo","chuzhou","cixi","ciyun","cizhu","conglin","cuijiaji","cuiyun","da'an","dachang","dachang shandao","dacheng","dadamtu","dade","dafengdong","daguan","dahuangshan","daizhuang","dajin","dalai","dalain hob","dali","dali old town","dalian","daliang","dalianwan","dalu","damiao","damoujia","dandong","dangjiang","danjiangkou","danshui","danzi","daocheng","daokou","daotian","dapeng","daqing","dasha","dashahe","dashan","dasheng","dashi","dashiqiao","dashitou","dashu","dashun","datong","datun","dawan","dawukou","daxie","daxing","daxu","dayang","daye","dazeshan","dazhong","dazhou","dazhuang","degan","dehui","dengbu","dengzhou","deqen","deqing","deyang","dezhou","dianbu","dianga","dianshui","dianzi","diaoyucheng","didao","dingcheng","dingjia","dingshi","dingtao","dingxi","dingzhou","dongcheng","dongchuan","dongcun","dongdu","dongfeng","dongguan","donghai","donghe","donghui","dongjia","dongjiang","dongkan","dongling","dongning","dongsheng","dongta","dongtai","dongwenquan","dongxi","dongxia","dongxing","dongyang","dongying","dorbod","ducheng","dunbage","dunhao","dunhou","dunhua","dunhuang","duoba","duobao","dure","dushan","dushanzi","dushi","duyun","duzhou","e'zhou","ehen hudag","elixku","eman","emin","encheng","enshi","erdaojiang","erenhot","erlang","erong","ersheng","ezhou","fangcheng chengguanzhen","fangchenggang","fangcun","fangshan","fanlou","fazhanhe","feicheng","fendou","fengcheng","fenggang","fenggao","fenghua","fenghuang","fengjia","fengkou","fengle","fengling","fengping","fengrun","fengyi","fenhe","fenshui","fenyi","foshan","fu'an","fubang","fuding","fudong","fuhuan","fuji","fujia","fujin","fuling","fulu","fuqing","fushun","futian","fuxin","fuxing","fuyang","fuyu","fuyuan","fuyun","fuzhou","gangjia","gangshang","gangtou","gangu chengguanzhen","gannan","ganning","ganshui","gantang","ganzhou","gao'an","gaofeng","gaogou","gaogu","gaojia","gaoliang","gaoliu","gaolou","gaomi","gaoping","gaoqiao","gaoyou","gaozhou","gaozuo","gecheng","gejiu","gelan","genhe","gongchangling","gongguan","gongmen","gongping","gongqingcheng","gongtan","gongyi","gongzhuling","guanba","guandu","guang'an","guangcun","guangpu","guangshui","guangshun","guangyuan","guangzhou","guanhu","guankou","guanshan","guanyin","guanzhuang","guchang","gucheng","gucheng chengguanzhen","gudong","guigang","guilin","guiping","guiren","guixi","guiyang","guiyang, guizhou","gulebage","guli","gulin","gulou","gulu","gunan","guochuan","guocun","guofu","guojia","guozhen","gupi","gushu","gusong","gutao","guxi","guxian","guye","guyuan","hadapu zhen","haicheng","haidong zhen","haikou","hailar","hailin","hailun","haimen","haining","haitang","haitou","haiyang","haizhou","hami","han'airike","hancheng","hanchuan","handan","hanfeng","hangu","hangzhou","hanjia","hanting","hanwang","hanyin chengguanzhen","hanyuan","hanzhong","haojiaqiao","haomen","harbin","heba","hebao","hebi","hebian","hechi","hechuan","hecun","hede","hedong","hefei","hegang","hegeng","hegou","heguan","hehua","heihe","heishan","heishui","hejiang","hekou","helin","helong","hengbei","hengshan","hengshui","hengyang","hepingjie","hepo","hepu","heqian","heqiao","heqing","heshan","hetoudian","hexing","heyan","heyuan","heze","hezhou","hezuo","hohhot","hong'an","hongbao","honggang","hongguang qidui","honghe","honghu","hongjiang","honglu","hongqiao","hongzhou","hotan","houba","houqiao","houshan","houzhen","hoxtolgay","huacheng","huadian","huai'an","huaibei","huaicheng","huaidian","huaihua","huainan","huaiyang","huaiyuan chengguanzhen","hualin","hualong","huanan","huangdi","huanggang","huanghua","huangji","huanglou","huangmei","huangnihe","huangpi","huangshan","huangshi","huangzhou","huankou","huanren","huashan","huayin","huazhou","hucheng","hudiyuzi","hufeng","huguo","huicheng","huilong","huimin","huinan","huiqu","huixian chengguanzhen","huixing","huizhou","hulan","hulan ergi","humen","hunchun","huocheng","huolu","huoqiu chengguanzhen","huoshilafu","hushitai","hutang","huwei","huzhai","huzhou","jalai nur","jelilyuzi","ji'an","jiachuan","jiagao","jiagedaqi","jiahanbage","jiamusi","jian'ou","jianchang","jiang'an","jiangbei","jiangjia","jiangkou","jiangluo","jiangmen","jiangnan","jiangping","jiangshan","jianguang","jiangxi","jiangyan","jiangyin","jiangyou","jiangzhuang","jianlong","jianshan","jianshui","jiaogong","jiaohe","jiaojiang","jiaoshi","jiaozhou","jiaozuo","jiaping","jiashan","jiasi","jiawang","jiawang zhen","jiaxing","jiayi","jiayue","jiayuguan","jiazi","jidong","jiehu","jielong","jieshi","jieshou","jietou","jiexiu","jieyang","jifeng","jijiang","jilin","jimo","jinan","jinchang","jincheng","jinding","jing'an","jingdezhen","jinggou","jingguan","jinghong","jingling","jingmen","jingui","jingzhi","jingzhou","jinhua","jining","jinji","jinjiang","jinlong","jinniu","jinsha","jinshan","jinshi","jinxiang","jinzhong","jinzhongzi","jinzhou","jishu","jishui","jitai","jiuchao","jiuchi","jiudian","jiuhe","jiujiang","jiulongshan","jiupu","jiuquan","jiushan","jiutai","jiuxian","jixi","jixian","jiyuan","jizhou","judian","juegang","juexi","jukui","junlian","jutou","juye","ka'ersai","kaifeng","kaihua","kaili","kaitang","kaitong","kaiyuan","kangding","kangle","kanjia","kaqun","karamay","kashgar","kax","kokyar","kongtan","korla","kuanchuan","kuandian","kuangshi","kuiya","kunming","kunshan","kunyang","kuoshi'airike","kuoyiqi","kuqa","labuleng","laibin","laisu","laitan","laiwu","laixi","laiyang","laizhou","langao chengguanzhen","langfang","langgar","langru","langtoucun","langxiang","langzhong","lanshan","lanxi","lanyang","lanzhou","laohekou","laojunmiao","layka","lecheng","leiyang","lengshuijiang","lengshuitan","leshan","lhasa","liancheng","lianghu","liangji","liangping","liangshui","liangxiang","liangzhai","lianhe","lianhu","lianhua","lianjiang","lianshan","lianyuan","lianyungang","lianzhou","liaocheng","liaolan","liaoyang","liaoyuan","liaozhong","licha","licheng","lichuan","lichuan zhen","lidu","ligang","ligezhuang","liguo","lihe","liji","lijia","lijiang","lijun","lincang","linfen","linfeng","lingao","lingcheng","lingdong","linghai","linghe","lingwu","lingyuan","linhe","linjiacun","linjiang","linkou","linping","linqiong","linqu","linshi","linshui","lintan chengguanzhen","lintong","linxi","linxia chengguanzhen","linyi","liping","lirang","lishi","lishu","lishui","liufeng","liuhe","liuji","liuku","liulin","liupanshui","liuping","liuquan","liushan","liutuan","liuxin","liuyin","liuzhi","liuzhou","lixi","lixian","lixin","lizhi","long'e","longchang","longcheng","longchi","longfeng","longgang","longgu","longhe","longhua","longjiang","longjing","longju","longkong","longlin","longling county","longmen","longnan","longqiao","longquan","longsha","longshan","longshe","longsheng","longshi","longshui","longtan","longxi","longxing","longyan","loudi","loushanguan","lu'an","luancheng","lubu","lucheng","lueyang chengguanzhen","lufeng","luhe","lulou","luobei","luocheng","luohe","luohuang","luojiang","luolong","luomen","luoping","luoqi","luorong","luotang","luotian","luoyang","luoyu","lushan","lushar","lushun","luzhou","ma'anshan","maba","mabai","macheng","maguan","majie","mali","malianzhuang","malingshan","maliu","maliuzui","mangbang","manglai","mangshi","manzhouli","maocun","maoming","mapo","mawang","mawu","maying","mazhan","meihekou","meijiang","meishan","meizhou","mengcheng chengguanzhen","menghuan","menglang","mengmao","mengyin","mentougou","mianyang","mianzhu, deyang, sichuan","miaojie","miaoyu","miaozi","micheng","mihe","mingcun","mingda","minggang","mingguang","mingshan","mingshui","minning","mishan","mixia","miyang","mu'er","mudanjiang","mudong","mudu","mugala","muhe","mujia","mujiayingzi","muling","mutang","nada","nagqu","naliang","nanbin","nanchang","nanchong","nanchuan","nancun","nandajie","nanding","nandu","nanfeng","nangong","nanhu","nanjian","nanjin","nanjing","nanling","nanlong","nanma","nanmen","nanning","nanpeng","nanpiao","nanping","nanshu","nantai","nantong","nantuo","nanxi","nanya","nanyang","nanzhang chengguanzhen","nanzhou","naxi","nehe","neijiang","nenjiang","nianbo","nianzhuang","nianzishan","nima","ningbo","ningde","ningdong","ninghai","ningyang","nongzhang","nuofu","nuozhadu","onyar","ordos","oroqen zizhiqi","oymak","oytograk","paikeqi","pailou","paipu","pan'an","panghai","panjim","panlong","panshan","panshi","panzhihua","paosha","peicheng","pengcheng","pianjiao","picheng","pingdingshan","pingdu","pingjin","pingkai","pingli","pingliang","pingnan","pingshan","pingtan","pingwu county","pingxiang","pingyi","pingyin","pingzhuang","pizhou","poyang","pu'an","pucheng","puchi","puchuan","puji","pulandian","pulu","puning","puqi","puqiakeqi","pushun","putian","puyang","puyang chengguanzhen","puzi","qamdo","qapqal","qaraqash","qarek","qianhu","qianjiang","qianliu","qiantang","qianzhou","qiaoguan","qiaotou","qiemo","qilian","qina","qincheng","qing'an","qingdao","qingfeng","qingfu","qinggang","qinglian","qinglong","qingnian","qingping","qingquan","qingshanquan","qingshizui","qingshuping","qingxi","qingxichang","qingyang","qingyuan","qingzhou","qinhuangdao","qinnan","qinzhou","qionghai","qionghu","qiongshan","qipan","qiqihar","qishan","qitaihe","qitang","qiuji","quankou","quanzhou","qufu","qujing","qushi","quzhou","renhe","renqiu","rensha","renxian","renyi","renzhao","rikaze","rizhao","rizhuang","rongjiang","ronglong","rongxi","rugao","rui'an","ruidian","runing","salaqi","samuyuzi","sanchazi","sanchuan","sandaohezi","sandaoling lutiankuang wuqi nongchang","sandu","sangzhe","sanhe","sanhui","sanjiang","sanjiao","sankeshu","sanmenxia","sanmiao","sanming","sanqu","sansheng","sanshui","santangpu","sanxi","sanya","sanzhuang","saybag","shache","shagang","shahe","shahecheng","shaji","shancheng","shandan","shangchong","shanghai","shanghe","shanghuang","shangkou","shangluo","shangmei","shangpa","shangqiu","shangrao","shangri-la","shangsi","shangyu","shangyun","shangzhi","shanhaiguan","shanhecun","shanji","shankou","shanting","shantou","shanwang","shanwei","shaodian","shaoguan","shaowu","shaoxing","shaoyang","shaoyu","shaoyun","shaozhuang","shaping","shawan","shenglilu","shenjiamen","shenyang","shenzhen","shetan","shibao","shibuzi","shichuan","shidui","shigang","shigu","shiguai","shihao","shihezi","shihui","shiji","shijiao","shijiazhuang","shikang","shili","shilin","shilong","shilongba","shima","shimen","shiqi","shiqiao","shiqiaozi","shiquan","shitan","shitanjing","shituo","shiwan","shixing","shiyan","shizhai","shizhi","shizilu","shizuishan","shouguang","shouxian","shuangcheng","shuangfeng","shuangfengqiao","shuangfu","shuanggou","shuanghe","shuanghekou","shuanghuai","shuangjiang","shuangliao","shuanglong","shuanglonghu","shuanglu","shuangshi","shuangtang","shuangyang","shuangyashan","shuijiang","shuikou","shuitu","shuizhai","shulan","shunhe","shunyi","shunzhou","shuren","sihu","simao","simen","siping","sishui","sitou","siwei","siyeke","songbai","songcheng","songjiang","songjianghe","songling","songlou","songyang","songyuan","suhe","suicheng","suifenhe","suihua","suiling","suining","suixi","suizhou","sujiatun","sunlou","suozhen","suqian","suyangshan","suzhou","tacheng","tage'erqi","tahe","tai'an","taibai","taicang","taifu","taihe","tailai","taiping","taishan","taitou","taixing","taiyuan","taizhou","tanchang chengguanzhen","tanfang","tangba","tange","tangfang","tanggu","tangjiazhuang","tangping","tangshan","tangwu","tangxiang","tangzhai","tangzhang","tanjia","tantou","taolin","taoluo","taonan","taoyuan","taozhuang","tashan","tawakule","taxkowruk","tengyue","tianchang","tiancheng","tianfu","tianjia","tianjin","tianliu","tianpeng","tianshui","tianzhuang","tiaoshi","tiefu","tieli","tieling","tieqiao","tieshan","tongchuan","tongchuanshi","tonggu","tonghua","tongjiaxi","tongjing","tongle","tongliao","tongling","tongren","tongshan","tongxi","tongzhou","tuanbao","tuantian","tuchang","tumen","tumxuk","tuohula","tuomuwusitang","turpan","tushan","tuwaite","tuxiang","ulanhot","urumqi","wacheng neighborhood","wafangdian","waina","wangfen","wanggou","wanghong","wangji","wangjia","wangkui","wangpu","wangqing","wangu","wangwu","wangyao","wangyin","wangyuan","wanmu","wanning","wanqiao zhen","wansheng","wanshui","wanshun","wanxian","wanzhou","wayao","wayaobu","weidian","weifang","weihai","weiji","weimiao","weinan","weining","weituo","weiwu'eryuqiwen","weixinghu","wenchang","wenfeng","wenheng","wenjiang","wenling","wenquan","wenshan city","wenshang","wenxian chengguanzhen","wenxing","wenzhou","wofo","wu'erqi","wuchang","wucheng","wuchuan","wuda","wudalike","wudong","wuduan","wugang","wuhai","wuhan","wuhe","wuhu","wujia","wujian","wujing","wuling","wulingyuan","wulong","wuma","wuqiao","wushan","wusu","wutan","wutongshu","wuwei","wuxi","wuxue","wuyang","wuying","wuyishan","wuzhen","wuzhishan","wuzhou","xambabazar","xi'an","xiaba","xiagezhuang","xialu","xiamen","xianfeng","xiangcheng","xiangcheng chengguanzhen","xiangjiaba","xianglong","xiangshui","xiangtan","xiangxiang","xiangyang","xiangzhou","xianju","xianlong","xianning","xiannu","xianshuigu","xiantao","xianyang","xiaochangshan","xiaochuan","xiaodu","xiaogan","xiaogang","xiaojia","xiaolingwei","xiaomian","xiaoshan","xiaoshi","xiaoweizhai","xiasi","xiaying","xiazhen","xiazhuang","xichang","xichuan","xiejiawan","xiema","xifeng","xigang","xigaoshan","xihe","xihu","xilin hot","ximeicun","xincheng","xindi","xindian","xingcheng","xingdaohu","xingfeng","xingguo","xinghua","xinglong","xinglongshan","xinglou","xingning","xingren","xingtai","xingyi","xinhe","xinhua","xining","xinji","xinle","xinmiao","xinmin","xinqing","xinsheng","xinshi","xintai","xintian","xinxiang","xinxing","xinyang","xinyi","xinyingpan","xinyu","xinyuan","xinzhai","xinzhi","xinzhou","xiongjia","xiongzhou","xiping","xishan","xituo","xiugu","xiulin","xiuyan","xiuying","xixiang","xiyu","xuanhua","xuantan","xuanzhou","xuchang","xucheng","xujiang","xunchang","xunsi","xunyang","xuyong","xuzhou","xuzhuang","ya'an","yajiang","yakeshi","yan'an","yancheng","yangcheng","yangchun","yangcun","yanggu","yanghe","yangjiang","yangliuqing","yangquan","yangshuo","yangtun","yanguan","yangzhou","yanji","yanjia","yanjing","yanliang","yanta","yantai","yantongshan","yanwo","yanzhou","yanzibu","yaoji","yaowan","yashan","yatou","yawa","yaxing","yebaishou","yebao","yengitam","yeyuan","yezhou","yibin","yichang","yicheng","yichun","yidu","yigai'erqi","yigou","yihe","yilan","yili","yima","yinchuan","ying'awati","yingchuan","yingjiang","yingkou","yingli","yingpan","yingqiu","yingshang chengguanzhen","yingtan","yinma","yinping","yinqiao zhen","yintai","yinzhu","yishan","yishikuli","yishui","yisilamu'awati","yitang","yiwu","yixing","yiyang","yizhou","yizhuang","yong'an","yongbei","yongcheng","yongchuan","yongfeng","yongjia","yongjian","yongle","yongning","yongping","yongqing","yongxi","yongxin","yongxing","yongzhou","youchou","youhao","yousuo","youting","youxi","yuanping","yuanshang","yuanyang","yucheng","yuci","yudong","yuexi","yueyang","yufengshan","yujia","yulin","yulinshi","yulong","yuncheng","yunfu","yunji","yunjin","yunlong","yunmen","yunmeng chengguanzhen","yunnanyi","yunshan","yuntai","yunyang","yuqunweng","yushan","yushu","yutan","yuxi","yuxia","yuyao","zaoyang","zaozhuang","zengfu","zepu","zhabei","zhakou","zhalantun","zhancheng","zhangfeng","zhangji","zhangjiachuan","zhangjiagang","zhangjiajie","zhangjiakou","zhangye","zhangzhai","zhangzhou","zhangzhuang","zhanhe","zhanjiang","zhaobaoshan","zhaodong","zhaodun","zhaogezhuang","zhaojia","zhaoqing","zhaotong","zhaoxing","zhaoyuan","zhaozhou","zhaozhuang","zhawa","zhefang","zhelou","zhen'an","zhendong","zhengding","zhengji","zhengxing","zhengzhou","zhenjiang","zhenlai","zhenping chengguanzhen","zhenxi","zhenzhou","zheshan","zhicheng","zhifeng","zhigou","zhijiang","zhiping","zhong'ao","zhongba","zhongchao","zhongduo","zhonggulou","zhonghe","zhongling","zhongshan","zhongshu","zhongxiang","zhongxin","zhongxing","zhongzhai","zhoubai","zhoucheng","zhoucun","zhoujia","zhoujiaba","zhoukou","zhouqu chengguanzhen","zhoushan","zhouxi","zhouzhuang","zhu cheng city","zhuanghe","zhuangyuan","zhuantang","zhucheng","zhuhai","zhuji","zhujiajiao","zhumadian","zhuoshui","zhushan","zhutang","zhutuo","zhuxi","zhuyang","zhuyi","zhuyuan","zhuzhai","zhuzhou","zibihu","zibo","zigong","zishui","zitong","ziyang","ziyang chengguanzhen","zizhuang","zoucheng","zouma","zouzhuang","zuitai","zunyi"],"CX":["flying fish cove"],"CC":["west island"],"CO":["abejorral","acacias","aguachica","aguadas","aguazul","agustin codazzi","albania","anaime","andalucia","andes","anserma","apartado","aracataca","arauca","ariguani","arjona","armenia","astrea","ayapel","balboa","baranoa","barbosa","barrancabermeja","barrancas","barranquilla","becerril","belalcazar","belen de umbria","bello","betulia","bogota","bucaramanga","buenaventura","buesaco","caicedonia","cajica","calarca","caldas","cali","campo de la cruz","campoalegre","candelaria","carepa","carmen de viboral","cartagena","cartago","caucasia","cerete","chaparral","chia","chigorodo","chimichagua","chinchina","chinu","chiquinquira","chiriguana","chivolo","cienaga","cienaga de oro","cimitarra","circasia","ciudad bolivar","concordia","copacabana","corinto","corozal","cotorra","cucuta","cumaribo","curumani","dabeiba","darien","dosquebradas","duitama","el bagre","el banco","el carmen de bolivar","el carmen de chucuri","el cerrito","el charco","el copey","el doncello","el reten","el zulia","envigado","espinal","facatativa","flandes","florencia","florida","floridablanca","fonseca","fredonia","fresno","frontino","fundacion","funza","fusagasuga","galapa","garzon","gigante","girardot city","giron","granada","guacari","guadalajara de buga","guadalupe","guaduas","guamal","guamo","honda","ibague","ipiales","isnos","itagui","ituango","jamundi","juan de acosta","la ceja","la dorada","la estrella","la jagua de ibirico","la mesa","la plata","la tebaida","la union","la virginia","lerida","leticia","libano","lorica","los patios","luruaco","madrid","magangue","mahates","maicao","malaga","malambo","manati","manizales","manzanares","maria la baja","marinilla","marsella","medellin","melgar","miranda","mitu","mocoa","momil","mompos","moniquira","montelibano","montenegro","monteria","morales","mosquera","natagaima","nechi","neira","neiva","nueva granada","ocana","orito","pacho","padua","pailitas","palmar de varela","palmira","pamplona","pasto","patia","payande","pereira","piedecuesta","piendamo","pinillos","pitalito","pivijay","pizarro","planadas","planeta rica","plato","polonuevo","ponedera","popayan","pradera","puebloviejo","puerto asis","puerto berrio","puerto boyaca","puerto carreno","puerto colombia","puerto leguizamo","puerto lopez","puerto rico","puerto salgar","puerto santander","puerto tejada","puerto triunfo","puerto wilches","pupiales","purificacion","quibdo","quimbaya","quinchia","repelon","restrepo","retiro","rioblanco","riohacha","rionegro","riosucio","rivera","roldanillo","rovira","sabana de torres","sabanagrande","sabanalarga","sabaneta","sahagun","salamina","salgar","samaniego","sampues","san andres","san antero","san benito abad","san carlos","san diego","san estanislao","san gil","san jacinto","san jose del guaviare","san juan de uraba","san juan del cesar","san juan nepomuceno","san lorenzo","san luis de since","san marcos","san martin","san onofre","san pablo","san pedro de uraba","san sebastian de mariquita","san vicente","santa fe de antioquia","santa lucia","santa marta","santa rosa","santa rosa de cabal","santa rosa de osos","santander de quilichao","santiago de tolu","santo tomas","santuario","segovia","sevilla","sibate","silvania","simiti","sincelejo","sitionuevo","soacha","socorro","sogamoso","soledad","sonson","suarez","sucre","supia","tado","tame","tarqui","tauramena","tierralta","timbiqui","tiquisio","tolu viejo","tulua","tumaco","tunja","tuquerres","turbaco","turbo","urrao","valledupar","velez","villa de san diego de ubate","villa del rosario","villa rica","villamaria","villanueva","villavicencio","villeta","yarumal","yondo","yopal","yumbo","zaragoza","zarzal","zipaquira"],"KM":["moroni","moutsamoudou"],"CK":["avarua"],"CR":["alajuela","aserri","calle blancos","canas","cartago","chacarita","colima","curridabat","esparza","guadalupe","guapiles","heredia","ipis","liberia","limon","mercedes norte","nicoya","paraiso","patarra","puntarenas","purral","quesada","san diego","san felipe","san francisco","san isidro","san jose","san juan","san juan de dios","san miguel","san pablo","san pedro","san rafael","san rafael abajo","san rafael arriba","san vicente","san vicente de moravia","siquirres","tejar","turrialba"],"HR":["bjelovar","cakovec","centar","dakovo","dubrovnik","karlovac","koprivnica","osijek","pozega","pula","rijeka","samobor","sesvete","sibenik","sisak","slavonski brod","solin","split","varazdin","velika gorica","vinkovci","vukovar","zadar","zagreb","zapresic"],"CU":["abreus","aguada de pasajeros","alamar","alquizar","amancio","arroyo naranjo","artemisa","bahia honda","banes","baracoa","baragua","bartolome maso","bauta","bayamo","bejucal","boyeros","cabaiguan","cacocum","caibarien","calimete","camaguey","camajuani","campechuela","cardenas","cauto cristo","centro habana","cerro","chambas","ciego de avila","cienfuegos","cifuentes","ciro redondo","ciudad camilo cienfuegos","colombia","colon","condado","consolacion del sur","contramaestre","corralillo","cruces","cueto","cumanayagua","diez de octubre","encrucijada","esmeralda","florencia","florida","fomento","gibara","guaimaro","guanabacoa","guanajay","guane","guantanamo","guines","guira de melena","guisa","havana","holguin","jaguey grande","jaruco","jatibonico","jesus menendez","jiguani","jimaguayu","jobabo","jovellanos","la habana vieja","la salud","la sierpe","lajas","las tunas","limonar","los palacios","madruga","maisi","manicaragua","manzanillo","mariel","matanzas","media luna","minas","minas de matahambre","moa","moron","niquero","nueva gerona","nuevitas","palma soriano","palmira","pedro betancourt","perico","pinar del rio","placetas","primero de enero","puerto padre","ranchuelo","regla","remedios","rio cauto","rio guayabal de yateras","rodas","sagua de tanamo","sagua la grande","san antonio de los banos","san cristobal","san german","san jose de las lajas","san luis","san miguel del padron","sancti spiritus","santa clara","santa cruz del norte","santa cruz del sur","santiago de cuba","santiago de las vegas","santo domingo","sibanicu","trinidad","union de reyes","varadero","venezuela","vertientes","vinales","yaguajay","yara"],"CW":["willemstad"],"CY":["famagusta","kyrenia","larnaca","limassol","morfou","nicosia","paphos","protaras","strovolos"],"CZ":["benesov","beroun","bilina","blansko","bohumin","brandys nad labem-stara boleslav","branik","breclav","brno","bruntal","cerny most","ceska lipa","ceska trebova","ceske budejovice","cesky tesin","cheb","chomutov","chrudim","decin","dvur kralove nad labem","frydek-mistek","havirov","havlickuv brod","hodonin","hradec kralove","hranice","jablonec nad nisou","jicin","jihlava","jindrichuv hradec","jirkov","kadan","karlovy vary","karvina","kladno","klasterec nad ohri","klatovy","kolin","koprivnice","kralupy nad vltavou","krnov","kromeriz","kutna hora","letnany","liben","liberec","litomerice","litvinov","louny","melnik","mlada boleslav","modrany","most","nachod","neratovice","novy jicin","olomouc","opava","orlova","ostrava","ostrov","otrokovice","pardubice","pelhrimov","pilsen","pisek","prague","prerov","pribram","prosek","prostejov","rakovnik","roznov pod radhostem","slany","sokolov","stary bohumin","strakonice","sumperk","svitavy","tabor","teplice","trebic","trinec","trutnov","uherske hradiste","uhersky brod","usti nad labem","usti nad orlici","valasske mezirici","varnsdorf","vsetin","vyskov","zatec","zdar nad sazavou","zlin","znojmo"],"CD":["aketi","bandundu","basoko","beni","boende","bolobo","boma","bondo","bukama","bukavu","bulungu","bumba","bunia","businga","buta","butembo","demba","gandajika","gbadolite","gemena","goma","ilebo","inongo","isiro","kabalo","kabare","kabinda","kalemie","kambove","kamina","kampene","kananga","kasangulu","kasongo","kasongo-lunda","kikwit","kindu","kinshasa","kipushi","kisangani","kolwezi","kongolo","libenge","likasi","lisala","lodja","lubao","lubumbashi","luebo","lusambo","mangai","masina","matadi","mbandaka","mbanza-ngungu","mbuji-mayi","moanda","mushie","mweka","mwene-ditu","nioki","sake","tshela","tshikapa","uvira","wamba","watsa","yangambi"],"DK":["aabenraa","aalborg","albertslund","allerod","arhus","ballerup","birkerod","brondbyvester","charlottenlund","copenhagen","esbjerg","farum","fredericia","frederiksberg","frederikshavn","frederikssund","glostrup","greve","haderslev","hedensted","helsingor","herning","hillerod","hjorring","holbaek","holstebro","horsens","horsholm","hvidovre","ishoj","kalundborg","koge","kolding","lillerod","middelfart","naestved","norresundby","nyborg","nykobing falster","odense","randers","ringsted","rodovre","roskilde","silkeborg","skive","slagelse","solrod strand","sonderborg","stenlose","svendborg","taastrup","tonder","valby","vallensbaek","vanlose","vejle","viborg","vordingborg"],"DJ":["ali sabieh","djibouti","obock","tadjourah"],"DM":["roseau"],"DO":["azua","bajos de haina","bani","bayaguana","bella vista","boca chica","bonao","ciudad nueva","concepcion de la vega","constanza","cotui","dajabon","esperanza","hato mayor del rey","jarabacoa","la romana","las matas de farfan","mao","moca","monte llano","monte plata","nagua","neiba","puerto plata","punta cana","quisqueya","rio grande","sabana grande de boya","sabaneta","salcedo","salvaleon de higuey","san cristobal","san fernando de monte cristi","san francisco de macoris","san jose de ocoa","san juan de la maguana","san pedro de macoris","santa cruz de barahona","santa cruz de el seibo","santiago de los caballeros","santo domingo","santo domingo este","santo domingo oeste","tamboril","villa altagracia","villa bisono","villa consuelo","villa francisca"],"EC":["ambato","atuntaqui","azogues","babahoyo","bahia de caraquez","balzar","boca suno","calceta","cariamanga","catamayo","cayambe","chone","cuenca","daule","el triunfo","eloy alfaro","esmeraldas","gualaceo","guaranda","guayaquil","huaquillas","ibarra","jipijapa","la libertad","la mana","la troncal","latacunga","loja","macas","machachi","machala","manta","milagro","montalvo","montecristi","naranjal","naranjito","nueva loja","otavalo","pasaje","pedro carbo","pelileo","pinas","playas","portoviejo","puerto francisco de orellana","pujili","puyo","quevedo","quito","riobamba","rosa zarate","salinas","samborondon","san lorenzo de esmeraldas","santa elena","santa rosa","santo domingo de los colorados","sucre","tena","tulcan","velasco ibarra","ventanas","vinces","yaguachi nuevo","zamora"],"EG":["abnub","abu al matamir","abu kabir","abu qurqas","abu tij","ad dilinjat","ain sukhna","aja","akhmim","al 'ashir min ramadan","al 'ayyat","al badari","al bajur","al balyana","al bawiti","al fashn","al fayyum","al hamul","al hawamidiyah","al ibrahimiyah","al jammaliyah","al khankah","al kharjah","al khusus","al mahallah al kubra","al mansurah","al manzalah","al matariyah","al minshah","al minya","al qanatir al khayriyah","al qanayat","al qurayn","al qusayr","al qusiyah","al wasitah","al-'ubur","alexandria","arish","as saff","as sinbillawayn","ash shuhada","ashmun","aswan","asyut","at tall al kabir","awsim","az zarqa","banha","bani mazar","bani suwayf","basyun","bilbays","bilqas","bush","cairo","damanhur","damietta","dayr mawas","dayrut","dikirnis","dishna","disuq","diyarb najm","faqus","faraskur","farshut","fuwwah","girga","giza","halwan","hawsh 'isa","hihya","hurghada","ibshaway","idfu","idku","ismailia","isna","itsa","izbat al burj","juhaynah","kafr ad dawwar","kafr ash shaykh","kafr az zayyat","kafr saqr","kawm hamadah","kawm umbu","kirdasah","luxor","madinat an nasr","madinat sittah uktubar","maghaghah","mallawi","manfalut","mashtul as suq","matay","mersa matruh","minyat an nasr","mit ghamr","munuf","naja' hammadi","new cairo","port said","qalyub","qina","qus","qutur","quwaysina","ras gharib","rosetta","safaga","samalut","samannud","shibin al kawm","shibin al qanatir","shirbin","shubra al khaymah","sidi barani","sidi salim","sinnuris","sohag","suez","sumusta as sultani","tahta","tala","talkha","tamiyah","tanta","tima","tukh","zagazig","zefta"],"SV":["acajutla","aguilares","ahuachapan","antiguo cuscatlan","apopa","ayutuxtepeque","chalatenango","chalchuapa","cojutepeque","cuscatancingo","delgado","ilopango","izalco","la libertad","la union","mejicanos","metapan","puerto el triunfo","quezaltepeque","san francisco","san marcos","san martin","san miguel","san rafael oriente","san salvador","san vicente","santa ana","santa tecla","santiago de maria","sensuntepeque","sonsonate","sonzacate","soyapango","usulutan","zacatecoluca"],"GQ":["bata","ebebiyin","malabo"],"ER":["asmara","assab","barentu","keren","massawa","mendefera"],"EE":["kohtla-jarve","maardu","narva","nomme","parnu","tallinn","tartu","viljandi"],"SZ":["lobamba","manzini","mbabane"],"ET":["abomsa","addis ababa","adet","adigrat","adis zemen","agaro","arba minch","areka","asaita","asasa","asbe teferi","asosa","axum","bahir dar","bako","bati","bedele","bedesa","bichena","bishoftu","boditi","bonga","bure","butajira","debark","debre birhan","debre mark'os","debre tabor","dembi dolo","dese","digih habar es","dila","dire dawa","dodola","dubti","el bahay","fadhigaradle","felege neway","fiche","finote selam","gambela","gebre guracha","gelemso","genet","gimbi","ginir","goba","golwayn","gondar","hagere hiywet","hagere maryam","harar","hawassa","hosa'ina","inda silase","jijiga","jimma","jinka","k'olito","kahandhale","kemise","kibre mengist","kombolcha","korem","lasoano","maych'ew","mek'ele","mendi","metahara","metu","mojo","nazret","neefkuceliye","nejo","qorof","raqo","robit","sebeta","shakiso","shambu","shashemene","sodo","tepi","waal","waliso","wenji","werota","yabelo","yamarugley","yirga 'alem","ziway"],"FK":["stanley"],"FO":["torshavn"],"FJ":["labasa","lautoka","nadi","nasinu","sigatoka","suva"],"FI":["anjala","espoo","forssa","hameenlinna","hamina","haukipudas","heinola","helsinki","hollola","hyvinge","iisalmi","imatra","jakobstad","jamsa","janakkala","jarvenpaa","joensuu","jyvaskyla","kaarela","kaarina","kajaani","kallio","kangasala","karhula","kemi","kerava","kirkkonummi","klaukkala","kokkola","korsholm","kotka","kouvola","kuopio","kuusamo","lahti","lappeenranta","laukaa","lauttasaari","lempaala","lieto","lohja","loimaa","lovisa","mantsala","mellunkyla","mikkeli","munkkiniemi","nokia","nurmijarvi","oulu","pirkkala","pori","porvoo","raahe","raisio","rauma","riihimaki","rovaniemi","salo","savonlinna","seinajoki","sibbo","siilinjarvi","tampere","tornio","turku","tuusula","uusikaupunki","vaasa","valkeakoski","vantaa","varkaus","vastaboland","vihti","vuosaari","ylojarvi"],"FR":["abbeville","acheres","agde","agen","aix-en-provence","aix-les-bains","ajaccio","albertville","albi","alencon","ales","alfortville","allauch","amiens","angers","anglet","angouleme","annecy","annecy-le-vieux","annemasse","annonay","antibes","antony","arcueil","argentan","argenteuil","arles","armentieres","arras","asnieres-sur-seine","athis-mons","aubagne","aubervilliers","auch","audincourt","aulnay-sous-bois","aurillac","autun","auxerre","avignon","avion","avon","bagneux","bagnolet","bagnols-sur-ceze","balma","bar-le-duc","bastia","bayeux","bayonne","beaune","beauvais","begles","belfort","berck","berck-plage","bergerac","besancon","bethune","beziers","bezons","biarritz","bischheim","blagnac","blanquefort","blois","bobigny","bois-colombes","boissy-saint-leger","bondy","bonneuil-sur-marne","bordeaux","bouguenais","boulogne-billancourt","boulogne-sur-mer","bourg-en-bresse","bourg-la-reine","bourg-les-valence","bourges","bourgoin-jallieu","bressuire","brest","bretigny-sur-orge","brie-comte-robert","brignoles","brive-la-gaillarde","bron","bruay-la-buissiere","brunoy","bry-sur-marne","cachan","caen","cagnes-sur-mer","cahors","calais","caluire-et-cuire","cambrai","cannes","canteleu","carcassonne","carpentras","carquefou","carrieres-sous-poissy","carvin","castelnau-le-lez","castres","cavaillon","cenon","cergy","cergy-pontoise","cesson-sevigne","cestas","challans","chalon-sur-saone","chalons-en-champagne","chamalieres","chambery","champigny-sur-marne","champs-sur-marne","charenton-le-pont","charleville-mezieres","chartres","chateau-thierry","chateaudun","chateauroux","chatellerault","chatenay-malabry","chatillon","chatou","chaumont","chaville","chelles","chennevieres-sur-marne","chenove","cherbourg-octeville","chevilly-larue","chilly-mazarin","choisy-le-roi","cholet","clamart","clermont-ferrand","clichy","clichy-sous-bois","cluses","cognac","colmar","colombes","colomiers","combs-la-ville","compiegne","concarneau","conflans-sainte-honorine","corbeil-essonnes","cormeilles-en-parisis","coudekerque-branche","coueron","coulommiers","courbevoie","cournon-d'auvergne","cran-gevrier","creil","crepy-en-valois","creteil","croix","cugnaux","dammarie-les-lys","dax","decines-charpieu","denain","deuil-la-barre","dieppe","digne-les-bains","dijon","dole","domont","douai","douarnenez","draguignan","drancy","draveil","dreux","dunkerque","eaubonne","echirolles","ecully","elancourt","elbeuf","epernay","epinal","epinay-sur-seine","equeurdreville-hainneville","eragny","ermont","etampes","evreux","evry","eysines","faches-thumesnil","fecamp","firminy","flers","fleury-les-aubrais","floirac","fontaine","fontainebleau","fontenay-aux-roses","fontenay-le-comte","fontenay-sous-bois","forbach","fos-sur-mer","fougeres","franconville","frejus","fresnes","frontignan","gagny","gap","garches","gardanne","garges-les-gonesse","gennevilliers","gentilly","gien","gif-sur-yvette","givors","gonesse","goussainville","gradignan","grande-synthe","grasse","grenoble","grigny","guerande","gueret","gujan-mestras","guyancourt","haguenau","halluin","haubourdin","hautmont","hayange","hazebrouck","hem","henin-beaumont","herblay","herouville-saint-clair","houilles","hyeres","illkirch-graffenstaden","illzach","issoire","issy-les-moulineaux","istres","ivry-sur-seine","joinville-le-pont","joue-les-tours","jouy-le-moutier","l'hay-les-roses","l'isle-sur-la-sorgue","la baule-escoublac","la blancarde","la celle-saint-cloud","la chapelle-sur-erdre","la ciotat","la courneuve","la crau","la defense","la fleche","la garde","la garenne-colombes","la madeleine","la pomme","la roche-sur-yon","la rochelle","la seyne-sur-mer","la teste-de-buch","la valette-du-var","lagny-sur-marne","lambersart","landerneau","lanester","lannion","laon","lattes","laval","laxou","le blanc-mesnil","le bouscat","le camas","le cannet","le chesnay","le creusot","le grand-quevilly","le havre","le kremlin-bicetre","le mans","le mee-sur-seine","le pecq","le perreux-sur-marne","le petit-quevilly","le plessis-robinson","le plessis-trevise","le pontet","le pre-saint-gervais","le puy-en-velay","le vesinet","lens","les clayes-sous-bois","les herbiers","les lilas","les mureaux","les olives","les pavillons-sous-bois","les pennes-mirabeau","les sables-d'olonne","les ulis","levallois-perret","libourne","lievin","lille","limay","limeil-brevannes","limoges","lingolsheim","lisieux","livry-gargan","lognes","lomme","longjumeau","lons-le-saunier","loos","lorient","lormont","lourdes","louviers","luce","lunel","luneville","lyon","lyon 01","lyon 02","lyon 03","lyon 04","lyon 05","lyon 06","lyon 07","lyon 08","lyon 09","macon","maisons-alfort","maisons-laffitte","malakoff","mandelieu-la-napoule","manosque","mantes-la-jolie","mantes-la-ville","marcq-en-baroeul","marignane","marly-le-roi","marmande","marseille","marseille 01","marseille 02","marseille 03","marseille 04","marseille 05","marseille 06","marseille 07","marseille 08","marseille 09","marseille 10","marseille 11","marseille 12","marseille 13","marseille 14","marseille 15","marseille 16","martigues","massy","maubeuge","mauguio","maurepas","mayenne","mazargues","meaux","melun","menton","merignac","metz","meudon","meylan","meyzieu","millau","miramas","mitry-mory","moissy-cramayel","mons-en-baroeul","mont-de-marsan","mont-saint-aignan","montargis","montauban","montbeliard","montbrison","montceau-les-mines","montelimar","montereau-fault-yonne","montesson","montfermeil","montgeron","montigny-le-bretonneux","montigny-les-cormeilles","montigny-les-metz","montivilliers","montlucon","montmorency","montpellier","montreuil","montrouge","morlaix","morsang-sur-orge","mougins","moulins","mulhouse","muret","nancy","nanterre","nantes","narbonne","neuilly-plaisance","neuilly-sur-marne","neuilly-sur-seine","nevers","nice","nimes","niort","nogent-sur-marne","nogent-sur-oise","noisiel","noisy-le-grand","noisy-le-sec","noyon","octeville","olivet","orange","orleans","orly","orsay","orvault","osny","oullins","outreau","oyonnax","ozoir-la-ferriere","palaiseau","pamiers","pantin","paris","pau","perigueux","perpignan","pertuis","pessac","pierrefitte-sur-seine","plaisance-du-touch","plaisir","ploemeur","poissy","poitiers","pont-a-mousson","pontarlier","pontault-combault","pontivy","pontoise","port-de-bouc","puteaux","quimper","rambouillet","reims","rennes","reze","rillieux-la-pape","riom","ris-orangis","roanne","rochefort","rodez","roissy-en-brie","romainville","romans-sur-isere","romorantin-lanthenay","ronchin","rosny-sous-bois","roubaix","rouen","royan","rueil-malmaison","saint-amand-les-eaux","saint-avertin","saint-avold","saint-barthelemy","saint-brieuc","saint-chamond","saint-cloud","saint-cyr-l'ecole","saint-cyr-sur-loire","saint-denis","saint-die-des-vosges","saint-dizier","saint-egreve","saint-etienne","saint-etienne-du-rouvray","saint-fons","saint-genis-laval","saint-germain-en-laye","saint-gratien","saint-herblain","saint-jean-de-braye","saint-jean-de-la-ruelle","saint-laurent-du-var","saint-leu","saint-leu-la-foret","saint-lo","saint-louis","saint-loup","saint-malo","saint-mande","saint-martin-d'heres","saint-maur-des-fosses","saint-maximin-la-sainte-baume","saint-medard-en-jalles","saint-michel-sur-orge","saint-nazaire","saint-omer","saint-ouen","saint-ouen-l'aumone","saint-pierre-des-corps","saint-pol-sur-mer","saint-priest","saint-quentin","saint-quentin-en-yvelines","saint-raphael","saint-sebastien-sur-loire","sainte-foy-les-lyon","sainte-genevieve-des-bois","sainte-marguerite","saintes","sallanches","salon-de-provence","sanary-sur-mer","sannois","saran","sarcelles","sarreguemines","sartrouville","saumur","savigny-le-temple","savigny-sur-orge","sceaux","schiltigheim","sedan","selestat","senlis","sens","sete","sevran","sevres","seynod","sin-le-noble","six-fours-les-plages","soissons","soisy-sous-montmorency","sorgues","sotteville-les-rouen","stains","strasbourg","sucy-en-brie","suresnes","talence","tarbes","tassin-la-demi-lune","taverny","tergnier","thiais","thionville","thonon-les-bains","torcy","toul","toulon","toulouse","tourcoing","tourlaville","tournefeuille","tours","trappes","tremblay-en-france","troyes","tulle","valence","valenciennes","vallauris","vandoeuvre-les-nancy","vannes","vanves","vaulx-en-velin","vaureal","velizy-villacoublay","vence","vendome","venissieux","verdun","verneuil-sur-seine","vernon","verrieres-le-buisson","versailles","vertou","vesoul","vichy","vienne","vierzon","vigneux-sur-seine","villefontaine","villefranche-sur-saone","villejuif","villemomble","villenave-d'ornon","villeneuve-d'ascq","villeneuve-la-garenne","villeneuve-le-roi","villeneuve-saint-georges","villeneuve-sur-lot","villeparisis","villepinte","villers-les-nancy","villeurbanne","villiers-le-bel","villiers-sur-marne","vincennes","viroflay","viry-chatillon","vitre","vitrolles","vitry-le-francois","vitry-sur-seine","voiron","wasquehal","wattrelos","wittenheim","yerres","yutz"],"GF":["cayenne","kourou","matoury","remire-montjoly","saint-laurent-du-maroni"],"PF":["faaa","papeete","punaauia"],"TF":["port-aux-francais"],"GA":["franceville","koulamoutou","lambarene","libreville","moanda","mouila","oyem","port-gentil","tchibanga"],"GM":["bakau","banjul","brikama","farafenni","lamin","serekunda","sukuta"],"GE":["akhaltsikhe","batumi","gori","khashuri","kobuleti","kutaisi","marneuli","och'amch'ire","p'ot'i","rustavi","samtredia","senak'i","sokhumi","stantsiya novyy afon","tbilisi","telavi","tqvarch'eli","ts'khinvali","ts'q'alt'ubo","zest'aponi","zugdidi"],"DE":["aachen","aalen","achern","achim","adlershof","ahaus","ahlen","ahrensburg","aichach","albstadt","alfeld","alfter","alsdorf","alsfeld","alsterdorf","alt-hohenschonhausen","altdorf bei nurnberg","altena","altenburg","altglienicke","altona","altona-altstadt","altona-nord","altstadt","altstadt nord","altstadt sud","alzenau in unterfranken","alzey","amberg","andernach","angermunde","annaberg-buchholz","ansbach","aplerbeck","apolda","arnsberg","arnstadt","aschaffenburg","ascheberg","aschersleben","attendorn","aue","auerbach","augsburg","aurich","aussere neustadt","babenhausen","backnang","bad aibling","bad arolsen","bad bentheim","bad berleburg","bad driburg","bad durkheim","bad essen","bad harzburg","bad hersfeld","bad homburg vor der hohe","bad honnef","bad kissingen","bad kreuznach","bad laasphe","bad langensalza","bad lippspringe","bad mergentheim","bad munder am deister","bad munstereifel","bad nauheim","bad neuenahr-ahrweiler","bad neustadt an der saale","bad oeynhausen","bad oldesloe","bad pyrmont","bad rappenau","bad reichenhall","bad sackingen","bad salzuflen","bad salzungen","bad saulgau","bad schwartau","bad segeberg","bad soden am taunus","bad tolz","bad vilbel","bad waldsee","bad wildungen","bad zwischenahn","baden-baden","baesweiler","baiersbronn","balingen","bamberg","barmbek-nord","barmbek-sud","bassum","baumschulenweg","baunatal","bautzen","bayreuth","beckingen","beckum","bedburg","bendorf","bensheim","bergedorf","bergheim","bergisch gladbach","bergkamen","bergneustadt","berlin","berlin kopenick","berlin treptow","bernau bei berlin","bernburg","beverungen","bexbach","biberach an der riss","biebrich","bielefeld","biesdorf","bietigheim-bissingen","bilderstockchen","billstedt","bingen am rhein","bitterfeld-wolfen","blankenburg","blasewitz","blieskastel","blomberg","bobingen","boblingen","bocholt","bochum","bochum-hordel","bockum","bogenhausen","bonen","bonn","boppard","borken","borna","bornheim","bottrop","brackenheim","brake (unterweser)","brakel","bramsche","brandenburg an der havel","braunschweig","bremen","bremerhaven","bremervorde","bretten","brilon","britz","bruchkobel","bruchsal","bruckmuhl","bruggen","bruhl","buchen in odenwald","buchholz in der nordheide","buckeburg","buckow","budingen","buhl","bunde","buren","burg bei magdeburg","burg unter-falkenstein","burgdorf","burghausen","burglesum","burscheid","burstadt","butzbach","buxtehude","calw","castrop-rauxel","celle","cham","charlottenburg","charlottenburg-nord","chemnitz","clausthal-zellerfeld","cloppenburg","coburg","coesfeld","coswig","cottbus","crailsheim","crimmitschau","cuxhaven","dachau","dahlem","damme","darmstadt","datteln","deggendorf","delbruck","delitzsch","delmenhorst","dessau","detmold","deutz","dieburg","diepholz","dietzenbach","dillenburg","dillingen","dillingen an der donau","dingolfing","dinslaken","ditzingen","dobeln","donaueschingen","donauworth","dormagen","dorsten","dortmund","dotzheim","dreieich","drensteinfurt","dresden","duderstadt","duisburg","dulmen","dulsberg","duren","dusseldorf","dusseldorf-pempelfort","eberbach","ebersbach an der fils","eberswalde","eckernforde","edewecht","eggenstein-leopoldshafen","ehingen","eidelstedt","eilbek","eilenburg","eimsbuttel","einbeck","eisenach","eisenhuttenstadt","eisleben lutherstadt","eislingen","eissendorf","eitorf","ellwangen","elmshorn","elsdorf","eltville","emden","emmendingen","emmerich","emsdetten","engelskirchen","enger","ennepetal","ennigerloh","eppelborn","eppendorf","eppingen","erding","erftstadt","erfurt","erkelenz","erkrath","erlangen","erwitte","eschborn","eschwege","eschweiler","espelkamp","essen","esslingen","ettlingen","euskirchen","eutin","eving","falkenhagener feld","falkensee","farmsen-berne","fellbach","fennpfuhl","filderstadt","finsterwalde","fischeln","flensburg","florsheim","forchheim","forst","frankenberg","frankenthal","frankfurt (oder)","frankfurt am main","franzosisch buchholz","frechen","freiberg","freiberg am neckar","freiburg","freilassing","freising","freital","freudenberg","freudenstadt","friedberg","friedenau","friedrichsdorf","friedrichsfelde","friedrichshafen","friedrichshagen","friedrichshain","friesoythe","frohnau","frondenberg","fulda","furstenfeldbruck","furstenwalde","furth","fussen","gaggenau","gallus","ganderkesee","garbsen","garching","garmisch-partenkirchen","gartenstadt","gauting","geesthacht","geilenkirchen","geislingen an der steige","geldern","gelnhausen","gelsenkirchen","georgsmarienhutte","gera","geretsried","gerlingen","germering","germersheim","gersthofen","gescher","geseke","gesundbrunnen","gevelsberg","giengen an der brenz","giessen","gifhorn","gilching","ginsheim-gustavsburg","gladbeck","glauchau","glinde","goch","gohlis","goppingen","gorbitz","gorlitz","goslar","gotha","gottingen","grefrath","greifswald","greiz","greven","grevenbroich","griesheim","grimma","grobenzell","gronau","gropiusstadt","gross-gerau","gross-umstadt","grossenhain","grossostheim","grosszschocher","guben","gummersbach","gunzburg","gunzenhausen","gustrow","gutersloh","haan","haar","hagen","haiger","hakenfelde","halberstadt","haldensleben i","halle","halle (saale)","halle neustadt","halstenbek","haltern am see","halver","hamburg","hamburg-mitte","hamburg-nord","hameln","hamm","hamminkeln","hanau am main","hannover","hannoversch munden","harburg","haren","harsewinkel","harvestehude","haselbachtal","haselhorst","hassloch","hattersheim","hattingen","hausbruch","hechingen","heide","heidelberg","heidenau","heidenheim an der brenz","heilbad heiligenstadt","heilbronn","heiligenhaus","heiligensee","heinsberg","hellersdorf","helmstedt","hemer","hemmingen","hennef (sieg)","hennigsdorf","heppenheim an der bergstrasse","herborn","herdecke","herford","hermsdorf","herne","herrenberg","herten","herzogenaurach","herzogenrath","hessisch oldendorf","hettstedt","heusenstamm","heusweiler","hiddenhausen","hilchenbach","hilden","hildesheim","hille","hochfeld","hochheim am main","hockenheim","hof","hofgeismar","hofheim am taunus","hoheluft-ost","hohen neuendorf","hohenstein-ernstthal","holzkirchen","holzminden","holzwickede","homburg","horb am neckar","horn","horstel","hovelhof","hoxter","hoyerswerda","huckelhoven","huckeswagen","hude","humboldtkolonie","hummelsbuttel","hunfeld","hurth","husum","ibbenburen","idar-oberstein","idstein","illertissen","illingen","ilmenau","ingelheim am rhein","ingolstadt","iserlohn","isernhagen farster bauerschaft","itzehoe","jena","johannisthal","juchen","julich","kaarst","kaiserslautern","kalk","kaltenkirchen","kamen","kamenz","kamp-lintfort","karben","karlsfeld","karlshorst","karlsruhe","karlstadt","karow","kassel","kaufbeuren","kaulsdorf","kehl","kelheim","kelkheim","kempen","kempten (allgau)","kerpen","kevelaer","kiel","kierspe","kirchhain","kirchheim unter teck","kirchlengern","kitzingen","kladow","kleinmachnow","kleinzschocher","kleve","klingenstein","klotzsche","koblenz","kolbermoor","koln","konigs wusterhausen","konigsbrunn","konigslutter am elm","konigstein im taunus","konigswinter","konstanz","konz","kopenick","korbach","korntal","kornwestheim","korschenbroich","kothen","krefeld","kreuzau","kreuzberg","kreuztal","kronach","kronberg","kronberg tal","kropeliner-tor-vorstadt","kulmbach","kunzell","kunzelsau","kurten","laatzen","lage","lahnstein","lahr","lampertheim","landau in der pfalz","landsberg am lech","landshut","langen","langenfeld","langenhagen","langenhorn","lankwitz","lauchhammer","lauda-konigshofen","lauf an der pegnitz","laupheim","lebach","leer","lehrte","leichlingen","leimen","leinfelden-echterdingen","leipzig","lemgo","lengerich","lennestadt","leonberg","leopoldshohe","leuben","leutkirch","leverkusen","lichtenberg","lichtenfels","lichtenrade","lichterfelde","lilienthal","limbach-oberfrohna","limburg an der lahn","lindau","lindlar","lingen","lippstadt","lobau","lobtau","lohmar","lohne","lohr am main","lorrach","loschwitz","losheim","loxstedt","lubbecke","lubeck","lubnjow","luckenwalde","ludenscheid","ludinghausen","ludwigsburg","ludwigsfelde","ludwigshafen am rhein","luneburg","lunen","lurup","magdeburg","mahlsdorf","maintal","mainz","mannheim","marbach am neckar","marburg an der lahn","marienberg","mariendorf","marienfelde","marienthal","markisches viertel","markkleeberg","marktoberdorf","marktredwitz","marl","marsberg","marzahn","mayen","mechernich","meckenheim","meerane","meerbusch","meiderich","meinerzhagen","meiningen","meissen","melle","memmingen","menden","meppen","merseburg","merzig","meschede","mettmann","metzingen","michelstadt","minden","mitte","mittweida","moabit","moers","molln","monchengladbach","monheim am rhein","moosburg","morfelden-walldorf","mosbach","mossingen","much","muhlacker","muhldorf","muhlhausen","muhlheim am main","mulheim","mullheim","munich","munster","nagold","nauen","naumburg","neckarsulm","netphen","nettetal","neu wulmstorf","neu-anspach","neu-hohenschonhausen","neu-isenburg","neu-ulm","neubrandenburg","neubruck","neuburg an der donau","neue neustadt","neuehrenfeld","neuenhagen","neufahrn bei freising","neugraben-fischbek","neukolln","neumarkt in der oberpfalz","neumunster","neunkirchen","neuruppin","neuss","neustadt","neustadt am rubenberge","neustadt bei coburg","neustadt in holstein","neustadt/nord","neustadt/sud","neustrelitz","neuwied","nidda","nidderau","nieder-ingelheim","niederkassel","niederkruchten","niederrad","niederschonhausen","nienburg","niendorf","nippes","norden","nordenham","norderstedt","nordhausen","nordhorn","nordlingen","northeim","nottuln","numbrecht","nurnberg","nurtingen","ober-ramstadt","oberasbach","oberhausen","oberkirch","oberschoneweide","obertshausen","oberursel","ochtrup","odenthal","oelde","oer-erkenschwick","oerlinghausen","offenbach","offenburg","ohringen","olching","oldenburg","olpe","olsberg","opladen","oranienburg","oschatz","oschersleben","osdorf","osnabruck","osterholz-scharmbeck","ostfildern","othmarschen","ottensen","ottobrunn bei munchen","ottweiler","overath","oyten","paderborn","pankow","papenburg","parchim","pasing","passau","peine","penzberg","petershagen","petershausen-west","pfaffenhofen an der ilm","pforzheim","pfullingen","pfungstadt","pinneberg","pirmasens","pirna","plauen","plettenberg","poppenbuttel","porta westfalica","porz am rhein","potsdam","preetz","prenzlau","prenzlauer berg","puchheim","pulheim","puttlingen","quedlinburg","quickborn","radeberg","radebeul","radevormwald","radolfzell","rahden","rahlstedt","rastatt","rastede","ratekau","rathenow","ratingen","ravensburg","recklinghausen","rees","regensburg","reichenbach/vogtland","reinbek","reinheim","reinickendorf","remagen","remscheid","remseck am neckar","rendsburg","renningen","reutlingen","rheda-wiedenbruck","rhede","rheinbach","rheinberg","rheine","rheinfelden","rheinhausen","rheinstetten","ribnitz-damgarten","riedstadt","riegelsberg","riesa","rietberg","rinteln","rissen","rodenkirchen","rodgau","ronnenberg","rosenheim","rosrath","rostock","rotenburg","roth","rotherbaum","rottenburg","rottweil","rudolstadt","rudow","rummelsburg","russelsheim","saalfeld","saarbrucken","saarlouis","sachsenheim","salzgitter","salzkotten","salzwedel","sangerhausen","sankt augustin","sankt ingbert","sankt wendel","sarstedt","sasel","schifferstadt","schiffweiler","schkeuditz","schleswig","schluchtern","schmalkalden","schmallenberg","schmargendorf","schmelz","schneeberg","schnelsen","schneverdingen","schonebeck","schoneberg","schopfheim","schorndorf","schortens","schramberg","schrobenhausen","schwabach","schwabisch gmund","schwabisch hall","schwalbach","schwalmstadt","schwalmtal","schwandorf in bayern","schwanewede","schwarzenberg","schwedt (oder)","schweinfurt","schwelm","schwerin","schwerte","schwetzingen","seeheim-jugenheim","seelze","seesen","seevetal","sehnde","selb","seligenstadt","selm","senden","senftenberg","siegburg","siegen","sigmaringen","simmerath","sindelfingen","singen","sinsheim","sinzig","soest","solingen","soltau","sommerda","sondershausen","sonneberg","sonthofen","spandau","spenge","speyer","springe","sprockhovel","st. pauli","staaken","stade","stadtallendorf","stadthagen","stadtlohn","starnberg","stassfurt","steglitz","steilshoop","steinfurt","steinhagen","stellingen","stendal","stockach","stockelsdorf","stolberg","straelen","stralsund","straubing","strausberg","stuhr","stuttgart","stuttgart feuerbach","stuttgart muhlhausen","stuttgart-ost","suhl","sulzbach","sulzbach-rosenberg","sundern","syke","taufkirchen","taunusstein","tegel","telgte","teltow","tempelhof","templin","tettnang","tonisvorst","torgau","traunreut","traunstein","trier","troisdorf","trossingen","tubingen","tuttlingen","ubach-palenberg","uberlingen","uelzen","uerdingen","uetersen","ulm","unna","unterhaching","unterkrozingen","unterschleissheim","uslar","vaihingen an der enz","varel","vaterstetten","vechelde","vechta","vegesack","velbert","vellmar","verden","verl","versmold","viernheim","viersen","villingen-schwenningen","vilshofen","vlotho","voerde","volklingen","volksdorf","vreden","wachtberg","wadern","wadgassen","waghausel","waiblingen","waldbrol","waldkirch","waldkraiburg","waldshut-tiengen","wallenhorst","walsrode","waltrop","wandlitz","wandsbek","wangen","warburg","wardenburg","waren","warendorf","warstein","wassenberg","wedding","wedel","weener","wegberg","weiden","weil am rhein","weil der stadt","weilerswist","weilheim","weimar","weingarten","weinheim","weinstadt-endersbach","weissenburg in bayern","weissenfels","weissensee","weisswasser","weiterstadt","wendelstein","wenden","wendlingen am neckar","werdau","werder","werdohl","werl","wermelskirchen","werne","wernigerode","wersten","wertheim","wesel","wesseling","westend","westerstede","wetter","wetzlar","wiehl","wiesbaden","wiesloch","wildeshausen","wilhelmsburg","wilhelmshaven","wilhelmstadt","willich","wilmersdorf","wilnsdorf","winnenden","winsen","winterhude","wipperfurth","wismar","witten","wittenau","wittenberg","wittenberge","wittlich","wittmund","wittstock","witzenhausen","wolfen","wolfenbuttel","wolfratshausen","wolfsburg","worms","worth am rhein","wulfrath","wunstorf","wuppertal","wurselen","wurzburg","wurzen","xanten","zehlendorf","zeitz","zerbst","zirndorf","zittau","zossen","zulpich","zweibrucken","zwickau"],"GH":["aburi","accra","aflao","agogo","akim oda","akwatia","anloga","apam","asamankese","atsiaman","axim","bawku","bechem","begoro","berekum","bibiani","bolgatanga","cape coast","dome","duayaw-nkwanta","dunkwa","ejura","elmina","foso","gbawe","ho","hohoe","japekrom","kasoa","keta","kintampo","koforidua","konongo","kpandu","kumasi","mampong","medina estates","navrongo","nsawam","nungua","obuase","prestea","salaga","saltpond","savelugu","sekondi-takoradi","shama junction","suhum","sunyani","swedru","tafo","takoradi","tamale","tarkwa","techiman","tema","teshi old town","wa","wankyi","winneba","yendi"],"GI":["gibraltar"],"GR":["acharnes","agia paraskevi","agia varvara","agioi anargyroi","agios dimitrios","agios ioannis rentis","agrinio","aigaleo","aigio","alexandroupoli","alimos","amaliada","ano liosia","argos","argyroupoli","arta","artemida","aspropyrgos","athens","chaidari","chalkida","chania","chios","cholargos","corfu","dhafni","drama","edessa","elefsina","eleftherio - kordelio","elliniko","evosmos","florina","galatsi","gerakas","giannitsa","glyfada","ilion","ilioupoli","ioannina","irakleio","irakleion","kaisariani","kalamaria","kalamata","kallithea","kamateron","karditsa","katerini","kavala","keratsini","khalandrion","kifisia","kilkis","komotini","korinthos","koropi","korydallos","kos","kozani","lamia","larisa","livadeia","marousi","megara","melissia","menemeni","metamorfosi","moskhaton","mytilene","naousa","nea erythraia","nea filadelfeia","nea ionia","nea makri","nea smyrni","neapoli","nikaia","oraiokastro","orestiada","palaio faliro","panorama","patra","pefki","peraia","perama","peristeri","petroupolis","piraeus","polichni","preveza","ptolemaida","pylaia","pyrgos","rethymno","rodos","salamina","serres","sparta","stavroupoli","sykies","thessaloniki","thivai","trikala","tripoli","vari","veroia","volos","voula","vrilissia","vyronas","xanthi","zografos"],"GL":["nuuk"],"GD":["saint george's"],"GP":["baie-mahault","basse-terre","capesterre-belle-eau","le gosier","le moule","les abymes","petit-bourg","pointe-a-pitre","sainte-anne","sainte-rose"],"GU":["dededo village","guam government house","hagatna","mangilao village","tamuning","tamuning-tumon-harmon village","yigo village"],"GT":["alotenango","amatitlan","antigua guatemala","asuncion mita","barberena","cabrican","cantel","chicacao","chichicastenango","chimaltenango","chinautla","chiquimula","chisec","ciudad vieja","coatepeque","coban","colomba","comalapa","comitancillo","cuilapa","el asintal","el estor","el palmar","el tejar","escuintla","esquipulas","flores","fraijanes","gualan","guastatoya","guatemala city","guazacapan","huehuetenango","jacaltenango","jalapa","jalpatagua","jocotenango","jutiapa","la esperanza","la gomera","livingston","malacatan","masagua","mazatenango","mixco","momostenango","morales","nahuala","nebaj","nuevo san carlos","ostuncalco","palencia","palin","panzos","patulul","patzicia","patzun","petapa","poptun","puerto barrios","puerto san jose","quetzaltenango","rabinal","retalhuleu","salama","salcaja","san andres itzapa","san andres xecul","san benito","san cristobal verapaz","san felipe","san francisco el alto","san francisco zapotitlan","san jose pinula","san juan sacatepequez","san lucas sacatepequez","san luis jilotepeque","san marcos","san pablo jocopilas","san pedro ayampuc","san pedro carcha","san pedro sacatepequez","san sebastian","sanarate","santa barbara","santa catarina pinula","santa cruz del quiche","santa lucia cotzumalguapa","santa maria de jesus","santiago atitlan","santiago sacatepequez","solola","soloma","sumpango","tecpan guatemala","tiquisate","totonicapan","villa canales","villa nueva","yepocapa","zacapa","zaragoza"],"GG":["saint peter port"],"GN":["boke","camayenne","conakry","coyah","fria","gueckedou","kankan","kindia","kintinian","kissidougou","labe","macenta","mamou","nzerekore","pita","siguiri","telimele","tomba kanssa","tougue"],"GW":["bafata","bissau"],"GY":["georgetown","linden","new amsterdam"],"HT":["cap-haitien","carrefour","croix-des-bouquets","delmas 73","desarmes","fond parisien","gonaives","grangwav","gressier","hinche","jacmel","jeremie","kenscoff","lenbe","leogane","les cayes","miragoane","petionville","port-au-prince","port-de-paix","saint-marc","saint-raphael","thomazeau","ti port-de-paix","tigwav","verrettes"],"HN":["choloma","ciudad choluteca","cofradia","comayagua","danli","el paraiso","el progreso","juticalpa","la ceiba","la lima","la paz","olanchito","potrerillos","puerto cortez","san lorenzo","san pedro sula","santa barbara","santa rosa de copan","siguatepeque","tegucigalpa","tela","tocoa","villanueva","yoro"],"HK":["aberdeen","fanling","hong kong","kowloon","kwai chung","ma on shan","ping shan","pok fu lam","sai kung","sha tin","tai po","tin shui wai","tseung kwan o","tsing yi town","tsuen wan","tuen mun","tung chung","victoria","yuen long kau hui"],"HU":["abony","ajka","angyalfold","baja","balassagyarmat","balmazujvaros","bekes","bekescsaba","budaors","budapest","budapest i. kerulet","budapest ii. kerulet","budapest iii. kerulet","budapest iv. kerulet","budapest vi. kerulet","budapest viii. kerulet","budapest xi. kerulet","budapest xii. kerulet","budapest xiii. kerulet","budapest xix. kerulet","budapest xv. kerulet","budapest xvi. kerulet","budapest xvii. kerulet","budapest xviii. kerulet","budapest xx. kerulet","budapest xxi. kerulet","budapest xxii. kerulet","budapest xxiii. kerulet","cegled","csongrad","dabas","debrecen","dombovar","dunaharaszti","dunakeszi","dunaujvaros","eger","erd","erzsebetvaros","esztergom","fot","god","godollo","gyal","gyomaendrod","gyongyos","gyor","gyula","hajduboszormeny","hajdunanas","hajduszoboszlo","hatvan","hodmezovasarhely","jaszbereny","jozsefvaros","kalocsa","kaposvar","karcag","kazincbarcika","kecskemet","keszthely","kiskoros","kiskunfelegyhaza","kiskunhalas","kispest","kisvarda","kobanya","komarom","komlo","mako","mateszalka","mezokovesd","mezotur","miskolc","mohacs","monor","mosonmagyarovar","nagykanizsa","nagykoros","nyiregyhaza","oroshaza","oroszlany","ozd","paks","papa","paradsasvar","pecs","puspokladany","salgotarjan","sarvar","satoraljaujhely","siofok","sopron","szarvas","szazhalombatta","szeged","szekesfehervar","szekszard","szentendre","szigetszentmiklos","szolnok","szombathely","tapolca","tata","tatabanya","tiszaujvaros","torokszentmiklos","vac","varpalota","vecses","veresegyhaz","veszprem","zalaegerszeg","zuglo"],"IS":["akureyri","hafnarfjordur","keflavik","kopavogur","reykjanesbaer","reykjavik"],"IN":["abhayapuri","abohar","abrama","abu","abu road","achalpur","achhnera","adampur","addanki","adilabad","adirampattinam","adoni","adra","adur","afzalgarh","afzalpur","agar","agartala","agra","ahmadnagar","ahmadpur","ahmedabad","ahraura","airoli","aistala","aizawl","ajmer","ajnala","ajodhya","ajra","akalkot","akaltara","akbarpur","akividu","akkarampalle","aklera","akola","akot","aland","alandi","alandur","alangad","alangayam","alangulam","alappuzha","alibag","aliganj","aligarh","alipur","alipur duar","almora","alnavar","along","alot","aluva","alwar","alwaye","amalapuram","amalner","amaravati","amarnath","amarpatan","amarpur","ambad","ambah","ambajogai","ambala","ambasamudram","ambattur","ambikapur","ambur","amet","amla","amlagora","amli","amod","amravati","amreli","amritsar","amroha","amroli","amta","amudalavalasa","anakapalle","anamalais","anand","anandpur","anantapur","anantnag","andippatti","andol","anekal","angamali","angul","anjad","anjangaon","anjar","ankleshwar","annigeri","annur","anshing","anta","anthiyur","anupgarh","anuppur","anupshahr","aonla","arakkonam","arambagh","arang","arangaon","arantangi","araria","arcot","ariyalur","arkalgud","arni","aron","aroor","arrah","arsikere","arukutti","arumuganeri","aruppukkottai","arvi","asandh","asansol","ashoknagar","ashoknagar kalyangarh","ashta","asifabad","asika","asind","atarra","athagarh","athni","atmakur","atrauli","attili","attingal","attur","aurad","auraiya","aurangabad","ausa","avadi","avanigadda","avinashi","ayakudi","azamgarh","azhiyur","babai","baberu","babina","babra","babrala","bachhraon","bada barabil","badagara","badami","baddi","badlapur","badnawar","baduria","badvel","bagaha","bagalkot","bagar","bagasra","bagdogra","bagepalli","bagha purana","baghpat","bagula","bah","bahadurganj","bahadurgarh","baharampur","baheri","bahjoi","bahraigh","bahula","baidyabati","baihar","bail-hongal","bairagnia","bakhtiyarpur","balachor","balaghat","balangir","balapur","balarampur","balasore","bali","ballalpur","balod","baloda bazar","balotra","balrampur","balugaon","balurghat","bamor kalan","banapur","banat","banda","bandikui","bandipura","banga","banganapalle","bangaon","bangarapet","bangarmau","banka","banki","bankra","bankura","banmankhi","bannur","bansbaria","bansdih","bansi","banswada","banswara","bantva","bantval","banur","bapatla","bar bigha","bara uchana","barakpur","baramati","baramula","baran","baranagar","barasat","barauli","baraut","barbil","barddhaman","bardoli","bareilly","bargarh","bargi","barh","barhiya","bari","bari sadri","barjala","barka kana","barki saria","barmer","barnala","barpali","barpeta","barpeta road","barsi","baruipur","baruni","barwala","barwani","basavakalyan","basavana bagevadi","basi","basmat","basni","basoda","basti","basudebpur","baswa","batala","bathinda","baud","bawana","bayana","bazpur","beawar","bedi","begamganj","begun","begusarai","behat","behror","bela","belagavi","beldanga","bellampalli","bellary","belonia","belsand","belur","bemetara","bengaluru","beohari","berasia","beri khas","betamcherla","bettiah","betul","bewar","beypore","bhabhua","bhachau","bhadasar","bhadaur","bhadohi","bhadra","bhadrachalam","bhadrakh","bhadravati","bhadreswar","bhagalpur","bhainsdehi","bhaisa","bhalki","bhandara","bhander","bhanjanagar","bhanpura","bhanpuri","bhanvad","bharatpur","bharthana","bharuch","bharwari","bhasawar","bhatapara","bhatkal","bhatpara","bhattiprolu","bhavani","bhavnagar","bhawani mandi","bhawanigarh","bhawanipatna","bhawanipur","bhayandar","bhayavadar","bhikangaon","bhikhi","bhilai","bhilwara","bhimavaram","bhimunipatnam","bhind","bhindar","bhinga","bhinmal","bhitarwar","bhiwadi","bhiwandi","bhiwani","bhogpur","bhongaon","bhongir","bhopal","bhor","bhuban","bhubaneshwar","bhudgaon","bhuj","bhum","bhusaval","biaora","bidar","bidhuna","bihar sharif","bihariganj","bijapur","bijawar","bijbehara","bijnor","bikaner","bikramganj","bilara","bilari","bilasipara","bilaspur","bilgi","bilgram","bilhaur","bilimora","bilsanda","bilsi","bilthra","bindki","binka","birmitrapur","birpara","birpur","birur","bisalpur","bisauli","bishnupur","bissau","biswan","bobbili","bodhan","bodinayakkanur","boisar","bokajan","bokaro","bolpur","bongaigaon","borivli","borsad","botad","brahmapur","brajarajnagar","budaun","buddh gaya","budge budge","budhana","budhlada","bulandshahr","buldana","bundi","bundu","burhanpur","burhar","burla","buxar","byadgi","byndoor","calangute","canning","chaibasa","chakan","chakapara","chakia","chaklasi","chakradharpur","chaksu","chalala","chalisgaon","challakere","challapalle","chamba","champa","chamrajnagar","chanasma","chanda","chandannagar","chandauli","chanderi","chandigarh","chandor","chandpur","chandrakona","chanduasi","chandur","chandur bazar","changanacheri","channagiri","channapatna","channarayapatna","chapar","chapra","charkhari","charkhi dadri","charthawal","chas","chatra","chatrapur","chemmumiahpet","chengalpattu","chengam","chengannur","chennai","chennimalai","cherpulassery","cherthala","chetput","chettipalaiyam","chetwayi","cheyyar","chhabra","chhala","chhapar","chhaprauli","chharra","chhata","chhatapur","chhatarpur","chhibramau","chhindwara","chhota udepur","chhoti sadri","chicholi","chidambaram","chidawa","chik ballapur","chikhli","chikmagalur","chiknayakanhalli","chikodi","chilakalurupet","chillupar","chincholi","chinna salem","chinnachowk","chinnamanur","chintamani","chiplun","chipurupalle","chirala","chirmiri","chitapur","chitradurga","chittaranjan","chittaurgarh","chittur","chodavaram","chopda","chotila","chunar","churachandpur","churu","clement town","closepet","cochin","coimbatore","colachel","colgong","colonelganj","contai","coondapoor","cuddalore","cumbum","cuncolim","curchorem","cuttack","dabhoi","daboh","dabra","dabwali","dadri","dahanu","dahegam","dakor","dalkola","dalsingh sarai","daltonganj","dam dam","daman","damnagar","damoh","dandeli","darbhanga","darjiling","darsi","darwha","daryapur","dasna","dasnapur","dasuya","dataganj","datia","dattapur","daudnagar","daund","dausa","davangere","dehra dun","dehri","delhi","denkanikota","deoband","deogarh","deoghar","deolali","deoli","deoranian","deori khas","deoria","depalpur","deshnoke","deulgaon raja","devakottai","devanhalli","devarkonda","devgadh bariya","devgarh","dewas","dhaka","dhamnod","dhampur","dhamtari","dhanaula","dhanaura","dhanbad","dhandhuka","dhanera","dhar","dharampur","dharamsala","dharangaon","dharapuram","dharashiv","dhari","dhariwal","dharmabad","dharmadam","dharmanagar","dharmapuri","dharmavaram","dharuhera","dharur","dhaulpur","dhaurahra","dhekiajuli","dhenkanal","dhing","dholka","dhone","dhoraji","dhrangadhra","dhrol","dhuburi","dhulagari","dhulia","dhulian","dhupgari","dhuri","diamond harbour","dibai","dibrugarh","dicholi","didwana","dig","digboi","dighwara","diglur","digras","dimapur","dinanagar","dinapore","dindigul","dindori","dinhata","diphu","disa","diu","doda","doddaballapura","dohad","dombivli","dondaicha","dongargarh","doraha","dornakal","dubrajpur","dugda","duliajan","dum duma","dumjor","dumka","dumra","dumraon","dungarpur","durg","durgapur","dwarka","egra","elamanchili","ellenabad","ellore","elur","emmiganur","erandol","erattupetta","erode","erraguntla","etawa","etawah","faizpur","falakata","farakka","faridabad","faridkot","faridpur","farrukhabad","farrukhnagar","fatehabad","fatehganj west","fatehgarh churian","fatehpur","fatehpur sikri","fatwa","fazilka","ferokh","ferozepore","firozabad","firozpur jhirka","forbesganj","fort gloster","french rocks","fyzabad","gadag","gadag-betageri","gadarwara","gaddi annaram","gadhada","gadhinglaj","gadwal","gajendragarh","gajraula","gajuwaka","gandarbal","gandevi","gandhidham","gandhinagar","gangakher","ganganagar","gangapur","gangarampur","gangawati","gangoh","gangolli","gangtok","ganj dundwara","gannavaram","garhakota","garhmuktesar","garhshankar","garhwa","gariadhar","garui","gauribidanur","gauripur","gaya","gevrai","gharaunda","ghatal","ghatampur","ghatanji","ghatkesar","ghatsila","ghaziabad","ghazipur","ghosi","ghoti budrukh","ghugus","giddalur","giddarbaha","gingee","giridih","goalpara","gobardanga","gobichettipalayam","gobindpur","godda","godhra","gohadi","gohana","gokak","gokarna","gokavaram","gola gokarannath","golaghat","gomoh","gonda city","gondal","gondia","gopalganj","gorakhpur","gorantla","gosaba","govardhan","goyerkata","greater noida","gubbi","gudalur","gudivada","gudiyatham","gudur","guduvancheri","gulabpura","gulaothi","guledagudda","gumia","gumla","gummidipundi","guna","gundlupet","gunnaur","guntakal junction","guntur","gunupur","gurgaon","gurmatkal","gursahaiganj","gursarai","guru har sahai","guruvayur","guskhara","guwahati","gwalior","gyanpur","habra","hadagalli","hadgaon","haflong","hailakandi","hajipur","hajo","haldaur","haldia","haldwani","halisahar","haliyal","halol","halvad","hamirpur","handia","hangal","hansi","hanumangarh","haora","hapur","harda khas","hardoi","haridwar","harihar","harij","harpalpur","harpanahalli","harsud","harur","hasanpur","hasimara","hassan","hastinapur","hathras","hatta","haveri","hazaribagh","hilsa","himatnagar","hindaun","hindoria","hindupur","hinganghat","hingoli","hinjilikatu","hirakud","hirekerur","hiriyur","hisar","hisua","hodal","hojai","holalkere","hole narsipur","homnabad","honavar","honnali","hosdurga","hoshiarpur","hoskote","hospet","hosur","howli","hubli","hugli","hukeri","hungund","hunsur","husainabad","hyderabad","ichalkaranji","ichchapuram","idappadi","igatpuri","ilkal","imphal","indapur","indergarh","indi","indore","indri","ingraj bazar","injambakkam","iringal","irinjalakuda","irugur","islamnagar","islampur","itanagar","itarsi","itimadpur","jabalpur","jagadhri","jagalur","jagatsinghapur","jagdalpur","jagdishpur","jagdispur","jaggayyapeta","jagraon","jagtial","jahanabad","jahangirabad","jahazpur","jaigaon","jainagar","jaipur","jais","jaisalmer","jaisingpur","jaitaran","jaito","jajpur","jalalabad","jalali","jalalpore","jalalpur","jalandhar","jalarpet","jalaun","jalesar","jaleshwar","jalgaon","jalgaon jamod","jalna","jalor","jalpaiguri","jamadoba","jamai","jamalpur","jambusar","jamkhandi","jammalamadugu","jammu","jamnagar","jamshedpur","jamtara","jamui","jamuria","jandiala","jangaon","jangipur","janjgir","jansath","jaora","jarwal","jasdan","jashpurnagar","jasidih","jaspur","jaswantnagar","jatani","jatara","jaunpur","jawad","jayamkondacholapuram","jaynagar majilpur","jetpur","jevargi","jewar","jeypore","jha-jha","jhabua","jhajjar","jhalawar","jhalida","jhalrapatan","jhalu","jhanjharpur","jhansi","jhargram","jharia","jharsuguda","jhinjhak","jhinjhana","jhumri telaiya","jhunjhunun","jhusi","jind","jintur","jodhpur","jodiya bandar","jogbani","jora","jorhat","jugsalai","junagadh","junagarh","junnar","kabrai","kachhwa","kadakkavoor","kadapa","kadayanallur","kadi","kadiri","kadod","kadur","kagal","kaikalur","kailaras","kailashahar","kaimganj","kaimori","kairana","kaithal","kakching","kakdwip","kakinada","kakori","kakrala","kalaburagi","kalakkadu","kalamassery","kalamb","kalamnuri","kalanaur","kalanwali","kalavad","kalavoor","kalghatgi","kalimpong","kaliyaganj","kalka","kallakkurichchi","kallakurichi","kallidaikurichi","kalmeshwar","kalna","kalol","kalpatta","kalpi","kalugumalai","kalyan","kalyandurg","kalyani","kamakhyanagar","kamalganj","kaman","kamareddi","kamarhati","kampli","kamthi","kanayannur","kanchipuram","kanchrapara","kandhla","kandi","kandla","kandukur","kangayam","kanigiri","kankanhalli","kankauli","kanke","kanker","kannad","kannangad","kannauj","kanniyakumari","kannod","kannur","kanpur","kant","kantabanji","kanth","kanuru","kapadvanj","kapren","kapurthala","karad","karaikal","karaikkudi","karamadai","karamsad","karanja","karanpur","karauli","kareli","karera","karhal","karimganj","karimnagar","karjat","karkala","karmala","karnal","karol bagh","karsiyang","kartarpur","karur","karwar","kasaragod","kasba","kasganj","kashipur","kasrawad","katangi","katghora","kathor","kathua","katihar","katol","katoya","katpadi","katras","kattanam","kattivakkam","kavali","kawardha","kayalpattinam","kayankulam","keelakarai","kekri","kemri","kenda","kendraparha","kerur","keshod","keshorai patan","kesinga","khachrod","khada","khadki","khagaria","khagaul","khair","khairabad","khairagarh","khajuraho group of monuments","khalilabad","khamaria","khambhaliya","khambhat","khamgaon","khammam","khanapur","khandela","khandwa","khanna","khapa","kharagpur","kharakvasla","kharar","khardah","khargone","kharkhauda","kharsia","kharupatia","khatauli","khategaon","khatima","khatra","kheda","khedbrahma","khekra","kheralu","kheri","khetia","khetri","khilchipur","khirkiyan","khopoli","khowai","khuldabad","khunti","khurai","khurda","khurja","khutar","kichha","kil bhuvanagiri","kinwat","kirandul","kiraoli","kiratpur","kishanganj","kishangarh","kishtwar","kithor","kizhake chalakudi","koath","koch bihar","kodaikanal","kodar","kodarma","kodinar","kodoli","kodungallur","koelwar","kohima","kokrajhar","kolar","kolaras","kolasib","kolhapur","kolkata","kollam","kollegal","konarka","konch","kondagaon","kondapalle","konnagar","konnur","koothanallur","kopaganj","kopargaon","koppal","koraput","koratla","korba","koregaon","korwai","kosamba","kosi","kosigi","kota","kotagiri","kotamangalam","kotaparh","kotdwara","kotkapura","kotma","kotputli","kottagudem","kottayam","kotturu","kovilpatti","kovur","kovvur","koynanagar","kozhikode","krishnagiri","krishnanagar","krishnarajpet","kuchaiburi","kuchaman","kuchera","kudachi","kudligi","kuju","kukatpalli","kukshi","kulgam","kulittalai","kulpahar","kulti","kulu","kumarapalayam","kumbakonam","kumbalam","kumbhraj","kumhari","kumher","kumta","kunda","kundarkhi","kundgol","kundla","kunigal","kunnamangalam","kunnamkulam","kuppam","kurandvad","kurduvadi","kurinjippadi","kurnool","kushtagi","kutiatodu","kutiyana","kuttampuzha","kuzhithurai","kyathampalle","lachhmangarh sikar","ladnun","ladwa","lahar","laharpur","lakheri","lakhimpur","lakhnadon","lakhyabad","laksar","lakshmeshwar","lal bahadur nagar","lalganj","lalgola","lalgudi","lalitpur","lalpur","lalsot","lar","latehar","lathi","latur","laungowal","lawar khas","leh","leteri","limbdi","lingsugur","lohardaga","lonar","lonavla","loni","losal","luckeesarai","lucknow","ludhiana","lumding railway colony","lunavada","lunglei","macherla","machhiwara","machhlishahr","machilipatnam","madambakkam","madanapalle","maddur","madgaon","madhipura","madhubani","madhugiri","madhupur","madhyamgram","madikeri","madipakkam","madukkarai","madukkur","madurai","madurantakam","magadi","maghar","mahad","mahalingpur","maham","maharaganj","maharajgani","mahasamund","mahbubabad","mahbubnagar","mahe","mahemdavad","mahendragarh","maheshtala","maheshwar","mahgawan","mahiari","mahishadal","mahmudabad","mahoba","maholi","mahudha","mahwah","maihar","mainaguri","mainpuri","mairwa","majalgaon","makrana","maksi","makum","malakanagiri","malappuram","malaut","malavalli","malegaon","maler kotla","malihabad","malkajgiri","malkapur","mallasamudram","malpe","malpura","malur","malvan","manali","manamadurai","manapparai","manasa","manavadar","manawar","mancheral","mandal","mandalgarh","mandamarri","mandapam","mandapeta","mandawar","mandi","mandideep","mandla","mandsaur","mandvi","mandya","maner","mangalagiri","mangaldai","mangalore","manglaur","mangrol","mangrul pir","maniar","manihari","manipal","manjeri","manjhanpur","mankachar","manmad","mannarakkat","mannargudi","manoharpur","mansa","manthani","manuguru","manvi","manwat","mapuca","marahra","marakkanam","marayur","margherita","marhaura","mariahu","mariani","markapur","masaurhi buzurg","matabhanga","mathura","mattanur","mau","mau aimma","maudaha","mauganj","maur","mavelikara","mavoor","mawana","mayang imphal","mayiladuthurai","medak","medinipur","meerut","mehkar","mehndawal","melur","memari","mendarda","merta","mettupalayam","mettur","mhasvad","mihona","milak","minjur","miranpur","miranpur katra","mirganj","mirialguda","mirzapur","misrikh","modasa","moga","mohali","moirang","mokameh","mokokchung","mon","monghyr","monoharpur","moradabad","moram","morar","morbi","morena","morigaon","morinda","mormugao","morsi","morwa","mothihari","mubarakpur","mudbidri","muddebihal","mudgal","mudhol","mudkhed","mughal sarai","muhammadabad","mukerian","mukher","muktsar","mul","mulbagal","mulgund","mulki","multai","mulugu","muluppilagadu","mumbai","mundargi","mundgod","mundra","mundwa","mungaoli","mungeli","munnar","muradnagar","murbad","murliganj","murshidabad","murtajapur","murudeshwara","murwara","mushabani","musiri","mussoorie","muttupet","muvattupula","muvattupuzha","muzaffarnagar","muzaffarpur","mysore","nabha","nabinagar","nadapuram","nadbai","nadiad","naduvannur","nagamangala","nagar","nagar karnul","nagari","nagaur","nagda","nagercoil","nagina","nagod","nagpur","nahan","naharlagun","nahorkatiya","naihati","naini tal","nainpur","nainwa","najafgarh","najibabad","nakodar","naksalbari","nakur","naldurg","nalgonda","nalhati","namagiripettai","namakkal","nambiyur","namrup","nanauta","nanded","nandgaon","nandigama","nandikotkur","nandura buzurg","nandurbar","nandyal","nangal","nangloi jat","nanjangud","nanpara","napasar","naraina","naraini","narasannapeta","narasapur","narasaraopet","narauli","naraura","naravarikuppam","narayangarh","narayanpet","naregal","narela","nargund","narmadapuram","narnaul","narnaund","narsimhapur","narsinghgarh","narsipatnam","narwana","narwar","nashik","nasirabad","naspur","nasriganj","nasrullahganj","nathdwara","nattam","naugachhia","nautanwa","navadwip","navalgund","navi mumbai","navsari","nawa","nawabganj","nawada","nawalgarh","nawanshahr","nayagarh","nayudupet","nedumangad","neelankarai","neem ka thana","negapatam","nelamangala","nellikkuppam","nellore","nepanagar","neral","new delhi","neyveli","neyyattinkara","nichlaul","nidadavole","nihtaur","nilakottai","nilanga","nileshwar","nilgiri","nilokheri","nimaj","nimaparha","nimbahera","nipani","nirmal","nirmali","niwai","nizamabad","noamundi","nohar","noida","nokha","nongstoin","north guwahati","north lakhimpur","nowrangapur","nurpur","nuzvid","obra","okha","ongole","ooty","orai","ottappalam","ozar","pachora","pachperwa","padam","padampur","padmanabhapuram","padra","padrauna","pahasu","paithan","pakala","pakur","palakkad","palakkodu","palakollu","palani","palanpur","palasa","palera","palghar","pali","palia kalan","palitana","palkonda","palladam","pallappatti","pallavaram","pallikondai","pallippatti","palmaner","paloncha","palwal","palwancha","panagar","panaji","panchkula","panchla","pandharpur","pandhurna","pandua","panihati","panipat","panna","panruti","panvel","paonta sahib","papanasam","pappinissheri","paradip garh","paramagudi","paramathi velur","parasia","paravur tekkumbhagam","parbhani","pardi","parichhatgarh","pariyapuram","parlakimidi","parli vaijnath","parola","partur","parvatipuram","parvatsar","pasan","pasighat","patamundai","patan","patancheru","pataudi","pathalgaon","pathanamthitta","pathankot","pathardi","pathardih","patharia","pathri","patiala","patna","patnagarh","patti","pattukkottai","patur","pauri","pavugada","pawayan","pawni","payyannur","pedana","peddapalli","peddapuram","pehowa","pen","pennadam","pennagaram","penugonda","penukonda","perambalur","peranampattu","peravurani","periyakulam","periyanayakkanpalaiyam","perumbavoor","perumpavur","perundurai","perungudi","petlad","phagwara","phalauda","phalodi","phaltan","phaphund","phek","phillaur","phirangipuram","phulbani","phulera","phulpur","phusro","pihani","pilani","pilibangan","pilibhit","pilkhua","pimpri","pinahat","pindwara","pinjaur","pipar","pipili","pipraich","pipri","piravam","piriyapatna","piro","pithampur","pithapuram","pithoragarh","podaturpet","pokaran","polasara","polavaram","pollachi","polur","ponda","ponmana","ponnani","ponneri","ponnur","ponnuru","poonamalle","porbandar","porsa","port blair","porur","powai","pratapgarh","prayagraj","proddatur","puducherry","pudukkottai","pujali","pukhrayan","pulgaon","pulivendla","puliyangudi","pulwama","punahana","punalur","punasa","punch","pundri","pune","punganuru","punjai puliyampatti","pupri","puranpur","puri","purna","purnia","puruliya","purwa","pusad","pushkar","puttur","qadian","quthbullapur","rabkavi","radhanpur","raebareli","rafiganj","raghogarh","raghunathpur","rahatgarh","rahimatpur","rahuri","raichur","raiganj","raigarh","raikot","raipur","raisen","raisinghnagar","raj-nandgaon","rajahmundry","rajakhera","rajaldesar","rajaori","rajapalaiyam","rajgarh","rajgir","rajgurunagar","rajkot","rajmahal","rajpipla","rajpur","rajpur sonarpur","rajpura","rajsamand","rajula","rajura","ramachandrapuram","ramagundam","ramanathapuram","ramanayyapeta","ramapuram","rameswaram","ramganj mandi","ramgarh","ramgundam","ramjibanpur","ramnagar","rampachodavaram","rampur","rampur hat","rampura","ramtek","ranaghat","ranavav","ranchi","rangapara","rangia","rania","ranibennur","raniganj","ranikhet","ranipet","ranipur","rapar","rasipuram","rasra","ratangarh","ratanpur","rath","ratia","ratlam","ratnagiri","raurkela","raver","rawatbhata","rawatsar","raxaul","raya","rayachoti","rayadrug","raybag","razam","razampeta","rehli","remuna","renigunta","renukut","reoti","repalle","revelganj","rewa","rewari","richha","ringas","rishikesh","rishra","risod","robertsganj","robertsonpet","roha","rohini","rohtak","ron","roorkee","ropar","rudarpur","rura","rusera","sabalgarh","sadabad","sadalgi","sadashivpet","sadri","safidon","safipur","sagar","sagauli","saharanpur","saharsa","sahaspur","sahaswan","sahawar","sahibganj","saidpur","saiha","saint thomas mount","sainthia","sakleshpur","sakti","salaya","salem","salumbar","salur","samalkha","samalkot","samastipur","samba","sambalpur","sambhaji nagar","sambhal","sambhar","samdari","samrala","samthar","sanand","sanaur","sanawad","sanchor","sancoale","sandi","sandila","sandur","sangamner","sangareddi","sangaria","sangli","sangod","sangola","sangrur","sankeshwar","sankrail","saoner","sarai akil","sarai mir","saraipali","sarangpur","sarauli","sardarshahr","sardhana","sardulgarh","sarkhej","sarwar","sasvad","satana","satara","sathupalli","sathyamangalam","satna","sattenapalle","sattur","saugor","saundatti","sausar","savantvadi","savanur","savarkundla","savda","sawai madhopur","sayla","secunderabad","sehore","selu","sendhwa","seohara","seondha","seoni","seoni malwa","seram","serchhip","serilingampalle","shahabad","shahada","shahbazpur","shahdol","shahganj","shahi","shahjanpur","shahpur","shahpura","shahuwadi","shajapur","shamgarh","shamli","shamsabad","shantipur","shegaon","sheikhpura","sheoganj","sheohar","sheopur","sherghati","sherkot","shertallai","shiggaon","shikarpur","shikohabad","shillong","shimla","shimoga","shiraguppi","shirdi","shirhatti","shirpur","shishgarh","shivaji nagar","shivpuri","sholinghur","shoranur","shorapur","shrigonda","shrirampur","shrirangapattana","shujalpur","shyamnagar","sibsagar","siddhapur","siddipet","sidhauli","sidhi","sidlaghatta","sihor","sihora","sijua","sikandarabad","sikandarpur","sikandra rao","sikar","sikka","silao","silapathar","silchar","siliguri","sillod","silvassa","simdega","sindgi","sindhnur","singanallur","singapur","singarayakonda","singrauli","singur","sinnar","sira","sirhind","sirkazhi","sirohi","sironj","sirsa","sirsaganj","sirsi","sirsilla","siruguppa","sirumugai","sirur","sisauli","siswa bazar","sitamarhi","sitapur","sitarganj","siuri","sivaganga","sivagiri","sivakasi","siwan","siwana","sohagpur","sohna","sojat","sojitra","solan","solapur","someshwar","sompeta","sonamukhi","sonari","sonepur","songadh","sonipat","sopur","sorada","soro","soron","soygaon","soyibug","sri dungargarh","sri madhopur","srikakulam","srinagar","srinivaspur","sriperumbudur","sriramnagar","srirampur","srisailain","srivaikuntam","srivardhan","srivilliputhur","suar","sujangarh","suket","sultanpur","sulur","suluru","sulya","sunam","sundargarh","sundarnagar","sunel","supaul","surajgarh","surandai","surat","suratgarh","surendranagar","surianwan","suriapet","tadepalle","tadepallegudem","tadpatri","tajpur","takhatgarh","takhatpur","taki","talaja","talcher","talegaon dabhade","taleigao","talikota","talipparamba","taloda","talwandi bhai","talwara","tambaram","tamluk","tanakpur","tanda","tandur","tanuku","taoru","tarakeswar","taramangalam","tarana","taranagar","tarikere","tarn taran","tasgaon","teghra","tehri","tekari","tekkalakote","tekkali","telhara","tellicherry","teni","teonthar","terdal","tezpur","thakurdwara","thakurganj","than","thana bhawan","thane","thanesar","thanjavur","tharad","tharangambadi","thasra","thenkasi","thiruthani","thiruvananthapuram","thiruvarur","thoothukudi","thoubal","thrissur","tijara","tikamgarh","tilhar","tindivanam","tinnanur","tinsukia","tiptur","tirthahalli","tiruchchendur","tiruchengode","tiruchirappalli","tirukkoyilur","tirumala","tirunelveli","tirupati","tirupparangunram","tiruppur","tiruppuvanam","tirur","tiruttangal","tiruvalla","tiruvallur","tiruvannamalai","tiruvottiyur","tisaiyanvilai","titagarh","titlagarh","todabhim","todaraisingh","tohana","tondi","tonk","tuensang","tufanganj","tuljapur","tulsipur","tumkur","tumsar","tundla","tuni","tura","turaiyur","udaipur","udaipura","udalguri","udangudi","udgir","udhampur","udumalaippettai","udupi","ujhani","ujjain","ulhasnagar","ullal","umarga","umaria","umarkhed","umarkot","umred","umreth","un","una","unhel","unjha","unnao","upleta","uppal kalan","uran","uravakonda","usehat","usilampatti","utraula","uttamapalaiyam","uttarkashi","uttiramerur","v.s.k.valasai (dindigul-dist.)","vada","vadakku valliyur","vadakku viravanallur","vadamadurai","vadigenhalli","vadippatti","vadlapudi","vadnagar","vadodara","vaijapur","vaikam","valabhipur","vallabh vidyanagar","valparai","valsad","vandavasi","vaniyambadi","vapi","varanasi","varangaon","varkala","vasa","vasco da gama","vasind","vasudevanallur","vattalkundu","vayalar","vedaraniyam","vejalpur","vellore","velur","vemalwada","venkatagiri","vepagunta","veraval","vetapalem","vettaikkaranpudur","vettur","vidisha","vijapur","vijayawada","vikarabad","villupuram","vinukonda","virajpet","virar","virudunagar","visakhapatnam","visavadar","visnagar","vite","vizianagaram","vriddhachalam","vrindavan","vuyyuru","vyara","wadi","wai","walajapet","wani","wankaner","wanparti","warangal","waraseoni","wardha","waris aliganj","warora","warud","washim","wazirganj","wellington","wer","wokha","yadgir","yamunanagar","yanam","yanamalakuduru","yaval","yavatmal","yelahanka","yellandu","yellapur","yeola","zahirabad","zaidpur","zamania","zira","zunheboto"],"ID":["abepura","adiwerna","agats","amahai","ambarawa","ambon","amlapura","amlapura city","amuntai","arjawinangun","astanajapura","atambua","babat","baekrajan","baki","balai pungut","balapulang","balikpapan","balung","bambanglipuro","banda aceh","bandar","bandar lampung","bandung","bangil","bangkalan","banjar","banjaran","banjarmasin","bantul","banyumas","banyuwangi","barabai","batam","batang","batu","baturaden","baturaja","baubau","bedugul","bekasi","belawan","bengkulu","berastagi","besuki","bima","binjai","bintuni","bireun","bitung","blangpidie","blitar","blora","bogor","bojonegoro","bondowoso","bontang","boyolali","boyolangu","buaran","buduran","bukittinggi","bulakamba","candi prambanan","caringin","ceper","cepu","ciamis","ciampea","cianjur","cibinong","cicurug","cikampek","cikarang","cikupa","cilacap","cileungsir","cileunyi","cimahi","ciputat","ciranjang-hilir","cirebon","citeureup","colomadu","comal","curug","curup","dampit","delanggu","deli tua","demak","denpasar","depok","diwek","dompu","driyorejo","dukuhturi","dumai","ende","fakfak","galesong","gambiran satu","gampengrejo","gamping lor","gatak","gebog","gedangan","genteng","godean","gombong","gongdanglegi kulon","gorontalo","gresik","grogol","gunungsitoli","indramayu","jakarta","jambi city","jaten","jatibarang","jatiroto","jatiwangi","jayapura","jekulo","jember","jepara","jogonalan","jombang","juwana","kabanjahe","kalianget","kamal","karangampel","karanganom","karangsembung","kartasura","kasihan","katobu","kawalu","kebomas","kebonarun","kediri","kedungwaru","kedungwuni","kefamenanu","kencong","kendari","kepanjen","kertosono","ketanggungan","kisaran","klangenan","klaten","klungkung","kotabumi","kraksaan","kresek","krian","kroya","kuala tungkal","kualakapuas","kudus","kuningan","kupang","kuta","kutoarjo","labuan","labuan bajo","labuhan deli","lahat","lamongan","langsa","lasem","lawang","lebaksiu","lembang","lhokseumawe","loa janan","lubuklinggau","lumajang","luwuk","madiun","magelang","majalengka","majenang","majene","makassar","malang","malinau","manado","manggar","manismata","manokwari","margahayukencana","margasari","maros","martapura","masamba","masohi","mataram","maumere","medan","melati","mendaha","merauke","mertoyudan","metro","meulaboh","mlonggo","mojoagung","mojokerto","mranggen","muara bungo","muara teweh","muncar","muntilan","muntok","nabire","negara","nganjuk","ngawi","ngemplak","ngoro","ngunut","paciran","padalarang","padang","padangsidempuan","pagar alam","pakisaji","palangkaraya","palembang","palimanan","palopo","palu","pamanukan","pamekasan","pameungpeuk","pamulang","panarukan","pandaan","pandak","pandeglang","pangkalan brandan","pangkalanbuun","pangkalpinang","panji","pare","parepare","pariaman","parung","pasarkemis","paseh","pasuruan","pati","payakumbuh","pecangaan","pekalongan","pekan bahapal","pekanbaru","pelabuhanratu","pemalang","pemangkat","pematangsiantar","perbaungan","percut","plumbon","polewali","ponorogo","pontianak","poso","prabumulih","praya","prigen","probolinggo","pundong","purbalingga","purwakarta","purwodadi","purwokerto","raha","rajapolah","randudongkal","rangkasbitung","ransiki","rantauprapat","rantepao","rembangan","rengasdengklok","reuleuet","ruteng","sabang","salatiga","samarinda","sampang","sampit","sanana","sawangan","selogiri","selong","semarang","sengkang","sepatan","serang","seririt","serpong","sewon","sibolga","sidareja","sidoarjo","sigli","sijunjung","simpang","singaparna","singaraja","singkawang","singkil","singojuruh","singosari","sinjai","situbondo","slawi","sleman","soe","sofifi","sokaraja","soko","solok","soreang","sorong","south tangerang","sragen","srandakan","srono","stabat","sukabumi","sumbawa besar","sumber","sumberpucung","sumedang","sumedang utara","sumenep","sungai penuh","sungai raya","sungailiat","sunggal","surabaya","surakarta","tabanan","taliwang","tambolaka","tangerang","tanggulangin","tanjung","tanjung balai","tanjung pandan","tanjung pinang","tanjung selor","tanjungagung","tanjungbalai","tanjungtiram","tarakan","tarub","tasikmalaya","tayu","tebingtinggi","tegal","teluk dalam","teluk nibung","teluknaga","teminabuan","terbanggi besar","ternate","tobelo","tomohon","tondano","tongging","trenggalek","trucuk","tual","tuban","tulangan utara","tulungagung","ubud","ungaran","waingapu","waisai","wanaraja","wangon","watampone","wedi","welahan","weleri","weru","wiradesa","wongsorejo","wonopringgo","wonosari","wonosobo","yogyakarta"],"IR":["abadan","abadeh","abdanan","abhar","abrisham","abyek","aghajari","ahar","ahvaz","ajab shir","akbarabad","aleshtar","aligudarz","alvand","amol","arak","ardabil","ardakan","ardestan","asadabad","astaneh-ye ashrafiyeh","astara","azadshahr","azna","babol","babolsar","bafq","bahar","bam","bandar abbas","bandar-e anzali","bandar-e genaveh","bandar-e lengeh","baneh","bardaskan","bardsir","behbahan","behshahr","bijar","birjand","bojnurd","bonab","borazjan","borujen","borujerd","boshruyeh","bukan","bushehr","chabahar","chalus","chenaran","damavand","damghan","darab","darreh shahr","dehdasht","dehloran","delijan","dogonbadan","dorcheh piaz","dowlatabad","eqbaliyeh","esfarayen","falavarjan","farrokh shahr","farsan","fasa","fereydun kenar","firuzabad","fuman","gerash","golpayegan","gonabad","gonbad-e kavus","gorgan","hajjiabad","hamadan","harsin","hashtpar","hashtrud","ilam","iranshahr","isfahan","istgah-e rah ahan-e garmsar","javanrud","juybar","kahriz","kalaleh","kamyaran","kangavar","karaj","kashmar","kazerun","kelishad va sudarjan","kerman","kermanshah","khalkhal","khash","khomeyn","khomeyni shahr","khorramabad","khorramdarreh","khorramshahr","khowy","khvansar","kish","kuhdasht","langarud","mahabad","mahdishahr","mahriz","malard","malayer","manjil","marand","marivan","marvdasht","mashhad","masjed soleyman","meybod","miandoab","minab","mohr","nahavand","najafabad","naqadeh","nazarabad","neka","neyriz","neyshabur","nikshahr","nowshahr","nurabad","omidiyeh","orumiyeh","oshnaviyeh","padegan-e manjil","parsabad","pasargad","pasragad branch","paveh","piranshahr","pishva","qa'en","qahderijan","qarah zia' od din","qarchak","qasr-e qand","qazvin","qeshm","qom","qorveh","quchan","rafsanjan","ramhormoz","ramshir","rasht","ravar","rehnan","robat karim","rudsar","sabzevar","salmas","sanandaj","saqqez","sarakhs","sari","sarpol-e zahab","saveh","semirom","semnan","shadegan","shahin dezh","shahr-e babak","shahr-e kord","shahre jadide andisheh","shahriar","shahrud","shiraz","shirvan","shush","shushtar","sirjan","sonqor","susangerd","tabas","tabriz","taft","takab","takestan","taybad","tehran","tonekabon","torbat-e heydariyeh","torbat-e jam","varamin","yasuj","yazd","zabol","zahedan","zanjan","zarand"],"IQ":["abu ghurayb","ad diwaniyah","ad dujayl","afak","al 'amarah","al 'aziziyah","al basrah al qadimah","al fallujah","al faw","al harithah","al hayy","al hillah","al hindiyah","al kut","al mawsil al jadidah","al miqdadiyah","al mishkhab","al musayyib","al-hamdaniya","ali al gharbi","an nu'maniyah","anah","anat al qadimah","aqrah","ar rumaythah","ar rutbah","as samawah","as sulaymaniyah","as suwayrah","ash shamiyah","ash shatrah","az zubayr","baghdad","balad","baqubah","basrah","batifa","bayji","baynjiwayn","dihok","erbil","hadithah","hajiawa","halabja","hit","imam qasim","jamjamal","karbala","khalis","kifri","kirkuk","koysinceq","kufa","mandali","mosul","nahiyat al fuhud","nahiyat ash shinafiyah","nahiyat ghammas","nahiyat saddat al hindiyah","najaf","nasiriyah","ramadi","ruwandiz","samarra","sinah","sinjar","soran","tallkayf","tikrit","tuz khurmatu","umm qasr","zaxo"],"IE":["an muileann gcearr","athlone","balbriggan","ballincollig","blanchardstown","bray","carlow","carrigaline","celbridge","cluain meala","cork","donaghmede","douglas","drogheda","droichead nua","dublin","dun laoghaire","dundalk","ennis","finglas","galway","greystones","kilkenny","leixlip","letterkenny","limerick","lucan","malahide","naas","navan","rathfarnham","sandyford","sligo","south dublin","swords","tallaght","tralee","waterford","wexford"],"IM":["douglas"],"IL":["acre","afula","ar'ara","ar'ara banegev","arad","ariel","ashdod","ashkelon","baqa el gharbiya","bat yam","be'er ya'aqov","beersheba","bet she'an","bet shemesh","binyamina","binyamina-giv'at ada","bnei brak","daliyat al karmel","dimona","eilat","el'ad","er reina","et taiyiba","et tira","gan yavne","ganei tikva","gedera","giv'at shmuel","givatayim","hadera","haifa","herzliya","hod hasharon","holon","hura","jaffa","jerusalem","judeida makr","kadima zoran","kafr kanna","kafr manda","kafr qari","kafr qasim","karmi'el","kfar saba","kfar yona","kiryat gat","kiryat ono","kuseifa","lod","maalot tarshiha","maghar","majd el kurum","mevasseret tsiyyon","migdal ha'emeq","modi'in makkabbim re'ut","modiin ilit","nahariyya","nazareth","nazerat 'illit","nesher","ness ziona","netanya","netivot","ofaqim","or akiva","or yehuda","petah tiqva","qalansuwa","qiryat ata","qiryat bialik","qiryat mal'akhi","qiryat motsqin","qiryat shmona","qiryat tiv'on","qiryat yam","ra'anana","rahat","ramat gan","ramat hasharon","ramla","rehovot","rishon letsiyyon","rosh ha'ayin","safed","sakhnin","sderot","shefar'am","shoham","tamra","tel aviv","tel sheva","tiberias","tirat karmel","umm el fahm","west jerusalem","yafa","yavne","yehud","yehud-monosson","yirka","yoqne'am 'illit","zikhron ya'aqov"],"IT":["abano terme","abbiategrasso","acerra","aci castello","aci catena","acilia-castel fusano-ostia antica","acireale","acquaviva delle fonti","acqui terme","adelfia","adrano","afragola","agrigento","agropoli","alba","albano laziale","albenga","albignasego","alcamo","alessandria","alghero","alpignano","altamura","ancona","andria","angri","anzio","aosta","aprilia","arcella","arcore","ardea","arenella","arese","arezzo","ariccia","arpino","arzano","arzignano","ascoli piceno","assemini","asti","augusta","avellino","aversa","avezzano","avola","avvocata","bacoli","bagheria","bagnoli","barcellona pozzo di gotto","bareggio","bari","barletta","barra","bassano del grappa","bastia umbra","battipaglia","bellaria-igea marina","belluno","belpasso","benevento","bergamo","biancavilla","biella","bisceglie","bishopric of perugia","bitonto","bollate","bologna","bolzano","borgomanero","boscoreale","bovisio-masciago","bra","brescia","bressanone","bresso","brindisi","bronte","brugherio","brusciano","bussolengo","busto arsizio","cagliari","caivano","caltagirone","caltanissetta","camaiore","campi bisenzio","campobasso","canicatti","canosa di puglia","cantu","capannori","capua","carate brianza","carbonia","cardito","carini","carmagnola","caronno pertusella","carpi centro","carrara","carugate","casa santa","casal bertone","casal de' pazzi","casal di principe","casal palocco","casale monferrato","casalecchio di reno","casalnuovo di napoli","casamassima","casarano","casavatore","cascina","caserta","casoria","cassano d'adda","cassano magnago","cassino","castel maggiore","castel volturno","castelfranco emilia","castelfranco veneto","castellammare di stabia","castelvetrano","castiglione delle stiviere","castrovillari","catania","catanzaro","cattolica","cava de tirreni","cecina","ceglie messapica","cento","cercola","cerignola","cernusco sul naviglio","cerveteri","cervia","cesano boscone","cesano maderno","cesena","cesenatico","chiaia","chiaiano","chiari","chiavari","chieri","chieti","chioggia","chivasso","ciampino","cinisello balsamo","cirie","cisterna di latina","citta di castello","civitanova marche","civitavecchia","colle di val d'elsa","colleferro","collegno","cologno monzese","comiso","como","conegliano","conversano","copertino","corato","cordenons","corigliano scalo","cormano","cornaredo","correggio","corsico","cosenza","crema","cremona","crotone","cuneo","cusano","dalmine","desenzano del garda","desio","domodossola","eboli","empoli","enna","erba","ercolano","este","fabriano","faenza","falconara marittima","fano","fasano","favara","fermo","ferrara","fidenza","fiorano","fiumicino","florence","floridia","foggia","foligno","follonica","fondi","forio","forli","formia","formigine","fornacelle","fossano","francavilla al mare","francavilla fontana","frascati","frattamaggiore","frattaminore","frosinone","fuorigrotta","gaeta","galatina","gallarate","galliate","gallipoli","garbagnate milanese","gela","genoa","genzano di roma","ghedi","giardinetti-tor vergata","giarre","ginosa","gioia del colle","gioia tauro","giovinazzo","giugliano in campania","giulianova","giussano","gorgonzola","gorizia","gragnano","gravina di catania","gravina in puglia","grosseto","grottaferrata","grottaglie","grugliasco","grumo nevano","guidonia","guidonia montecelio","iglesias","imola","imperia","ischia","ischia porto","isernia","ivrea","jesi","l'aquila","la spezia","ladispoli","lainate","lamezia terme","lancenigo-villorba","lanciano","latina","lecce","lecco","legnago","legnano","lentini","licata","lido","lido di ostia","limbiate","lissone","livorno","lodi","lucca","lucera","lugo","lumezzane","macerata","maddaloni","magenta","malnate","manduria","manfredonia","mantova","marano di napoli","marcianise","mariano comense","marigliano","marina di ardea-tor san lorenzo","marina di carrara","marina di massa","marino","marsala","martina franca","mascalucia","massa","massafra","massarosa","matera","mazara del vallo","meda","melegnano","melito di napoli","melzo","mentana","merano","mesagne","messina","mestre","miano","milan","milazzo","minturno","mira taglio","mirandola","mirano","misilmeri","misterbianco","modena","modica","modugno","mogliano veneto","mola di bari","molfetta","moncalieri","mondovi","mondragone","monfalcone","monopoli","monreale","monselice","monserrato","monte rosello","montebelluna","montecalvario","montecatini-terme","montecchio maggiore-alte ceccato","montemurlo","monterotondo","monterusciello","montesilvano marina","montevarchi","montichiari","monza","muggio","mugnano di napoli","naples","nardo","nerviano","nettuno","nicastro","nichelino","niscemi","nocera inferiore","nocera superiore","noci","noicattaro","nola","noto","nova milanese","novara","novate milanese","novi ligure","nuoro","oderzo","olbia","orbassano","oristano","orta di atella","orta nova","osimo","ostuni","ottaviano","pachino","paderno dugnano","padova","pagani","palagiano","palagonia","palazzolo sull'oglio","palermo","pallanza-intra-suna","palma di montechiaro","palmi","palo del colle","paolo vi","parabiago","parma","partinico","paterno","pavia","pendino","perugia","pesaro","pescara","piacenza","pianura","piazza armerina","pietrasanta","pinerolo","pioltello","piombino","piossasco","pisa","piscinola","pistoia","poggibonsi","poggiomarino","poggioreale","pomezia","pomigliano d'arco","pompei","pontedera","ponticelli","pordenone","portici","porto empedocle","porto san giorgio","porto sant'elpidio","porto torres","portogruaro","posillipo","potenza","pozzallo","pozzuoli","prato","putignano","qualiano","quarto","quartu sant'elena","quattromiglia","ragusa","rapallo","ravenna","reggio calabria","reggio nell'emilia","rho","ribera","riccione","rieti","rimini","riva del garda","rivoli","rocca di papa","romano banco","romano di lombardia","rome","roseto degli abruzzi","rosignano solvay-castiglioncello","rosolini","rossano stazione","rovereto","rovigo","rozzano","rutigliano","ruvo di puglia","sacile","salerno","salsomaggiore terme","saluzzo","sambiase","san benedetto del tronto","san bonifacio","san carlo all'arena","san cataldo","san dona di piave","san donato milanese","san felice a cancello","san ferdinando","san giorgio a cremano","san giovanni a teduccio","san giovanni in fiore","san giovanni in persiceto","san giovanni la punta","san giovanni lupatoto","san giovanni rotondo","san giovanni valdarno","san giuliano milanese","san giuseppe vesuviano","san lazzaro","san lorenzo","san mauro torinese","san miniato","san miniato basso","san nicola la strada","san paolo","san pietro a patierno","san remo","san salvo","san sebastiano","san severo","san vito dei normanni","sannicandro garganico","sant'anastasia","sant'antimo","sant'antonio abate","santa maria capua vetere","santeramo in colle","sarno","saronno","sarzana","sassari","sassuolo","sava","savigliano","savona","scafati","scampia","scandiano","scandicci","schio","sciacca","scicli","scordia","secondigliano","segrate","selargius","senago","senigallia","seregno","seriate","sesto fiorentino","sesto san giovanni","sestri levante","sestu","settimo torinese","seveso","sezze","siderno","siena","sinnai","siracusa","soccavo","somma vesuviana","sondrio","sora","spinea-orgnano","spoleto","stella","sulmona","suzzara","taranto","teramo","terlizzi","termini imerese","termoli","terni","terracina","terzigno","thiene","tivoli","tolentino","tor lupara","torre annunziata","torre del greco","torremaggiore","tortona","torvaianica","tradate","trani","trapani","trecate","trento","trentola-ducenta","treviglio","treviso","trezzano sul naviglio","trieste","triggiano","turin","udine","valdagno","valenza","valenzano","varese","vasto","velletri","venaria reale","venice","ventimiglia","verbania","vercelli","verona","viadana","viareggio","vibo valentia","vicaria","vicenza","vigevano","vignola","villabate","villafranca di verona","villanova","villaricca","vimercate","vimodrone","viterbo","vittoria","vittorio veneto","voghera","volla","vomero","zola predosa"],"CI":["abengourou","abidjan","abobo","aboisso","adiake","adzope","affery","agboville","agnibilekrou","ahouanou","akoupe","anyama","arrah","bangolo","beoumi","biankouma","bingerville","bondoukou","bongouanou","bonoua","bouafle","bouake","bouna","boundiali","dabou","daloa","danane","daoukro","dimbokro","divo","doropo","duekoue","ferkessedougou","gagnoa","grand-bassam","guiberoua","guiglo","issia","katiola","korhogo","lakota","man","mankono","marcory","odienne","oume","sakassou","san-pedro","sassandra","seguela","sinfra","tabou","tanda","tengrela","tiassale","touba","toumodi","vavoua","yamoussoukro","zuenoula"],"JM":["half way tree","kingston","linstead","mandeville","may pen","montego bay","new kingston","old harbour","portmore","savanna-la-mar","spanish town"],"JP":["abashiri","abiko","agano","ageoshimo","aioi","akashi","aki","akita","akune","amagasaki","amagi","amakusa","ami","anamizu","anan","anjo","annaka","aomori","arai","arao","arashiyama","arida","arita","asahi","asahikawa","asaka","ashibetsu","ashikaga","ashiya","aso","atami","atsugi","ayabe","beppu","bibai","bungo-takada-shi","buzen","chatan","chiba","chichibu","chigasaki","chikuma","chikusei","chikushino-shi","chino","chiryu","chita","chitose","chofu","chuo","daigo","daito","date","dazaifu","ebetsu","edosaki","ena","enzan","fuchu","fuchucho","fuefuki","fuji","fujieda","fujikawaguchiko","fujinomiya","fujioka","fujisawa","fujishiro","fujiyoshida","fukagawa","fukayacho","fukiage-fujimi","fukuchiyama","fukuecho","fukui-shi","fukumitsu","fukuoka","fukura","fukuroi","fukushima","fukuyama","funaishikawa","funehikimachi-funehiki","furukawa","fussa","futtsu","gamagori","gero","gifu-shi","ginowan","gobo","godo","gojo","gose","gosen","goshogawara","gotenba","gotsucho","gujo","gushikawa","gyoda","habikino","hachimantai","hachinohe","hachioji","hadano","hagi","haibara-akanedai","hakodate","hakui","hamada","hamakita","hamamatsu","hamanoichi","hamura","hanamaki","hanawa","handa","hannan","hanno","hanyu","hasaki","hashima","hashimoto","hasuda","hatogaya-honcho","hatsukaichi","hayama","hekinan","hidaka","higashi-osaka","higashikagawa","higashimatsushima","higashimurayama","higashine","hiji","hikari","hikone","himeji","himi","himimachi","hino","hirado","hirakata","hirakawa","hirara","hiratacho","hiratsuka","hirosaki","hiroshima","hisai-motomachi","hita","hitachi","hitachi-naka","hitachi-ota","hitoyoshi","hobaramachi","hofu","hojo","hokuto","honcho","hondomachi-hondo","honjo","honmachi","horyuji","hotaka","hyuga","ibara","ibaraki","ibusuki","ichihara","ichinomiya","ichinoseki","iga","iida","iiyama","iizuka","ijuin","ikeda","ikedacho","ikoma","imaichi","imaricho-ko","ina","inashiki","inazawa","innoshima","ino","inuyama","inzai","iruma","isahaya","isawa","ise","isehara","isesaki","ishigaki","ishige","ishii","ishikari","ishikawa","ishiki","ishinomaki","ishioka","itako","itami","ito","itoigawa","itoman","itsukaichi","iwade","iwai","iwaki","iwakuni","iwakura","iwamizawa","iwanuma","iwase","iwata","iwatsuki","iyo","izu","izumi","izumiotsu","izumisano","izumo","izunokuni","joetsu","kadogawa","kadoma","kaga","kagoshima","kai","kainan","kaizu","kaizuka","kajiki","kakamigahara","kakegawa","kakogawacho-honmachi","kakuda","kamaishi","kamakura","kameda-honcho","kameoka","kameyama","kamifukuoka","kamigori","kamigyo-ku","kamiichi","kamiiso","kamimaruko","kaminokawa","kaminoyama","kamirenjaku","kamo","kamogatacho-kamogata","kamogawa","kamojimacho-jogejima","kan'onjicho","kanaya","kanazawa","kanda","kanegasaki","kanekomachi","kani","kanie","kanmaki","kannabecho-yahiro","kanoya","kanuma","kanzakimachi-kanzaki","karasuyama","karatsu","kariya","kasai","kasama","kasamatsucho","kasaoka","kaseda-shirakame","kashihara","kashihara-shi","kashima","kashima-shi","kashiwa","kashiwazaki","kasugai","kasukabe","kato","katori-shi","katsuragi","katsuren-haebaru","katsuta","katsuura","katsuyama","kawage","kawagoe","kawaguchi","kawaminami","kawanishi","kawanoecho","kawasaki","kazo","kikuchi","kikugawa","kimitsu","kinokawa","kirishima","kiryu","kisai","kisarazu","kishiwada","kita-akita","kitagata","kitahama","kitahiroshima","kitaibaraki","kitakami","kitakata","kitakyushu","kitami","kitanagoya","kitsuki","kobayashi","kobe","kochi","kodamacho-kodamaminami","kofu","koga","kogota","koka","kokubu-matsuki","kokubunji","komaki","komatsu","komatsushimacho","komono","komoro","konan","konosu","koriyama","kosai","koshi","koshigaya","koshu","kozakai-cho","kudamatsu","kuji","kukichuo","kumagaya","kumamoto","kumano","kurashiki","kurayoshi","kure","kurihara","kurihashi","kurobe-shi","kuroda","kuroishi","kuroiso","kurume","kusatsu","kushikino","kushima","kushimoto","kushiro","kuwana","kyoto","machida","maebaru-chuo","maebashi","maibara","maizuru","makabe","maki","makubetsu","makurazaki","marugame","maruoka","masaki-cho","mashiko","masuda","matsubara","matsubase","matsubushi","matsudo","matsue","matsumoto","matsushima","matsuto","matsuura","matsuyama","menuma","mibu","midori","mifune","mihara","miharu","miki","mikuni","minakuchicho-matoba","minamata","minami-alps","minami-soma","minamiawaji","minamirinkan","minamishibetsucho","minamiuonuma","minato","mino","minokamo","misawa","mishima","mitake","mito","mitoyo","mitsukaido","mitsuke","miura","miyako","miyakojima","miyakonojo","miyata","miyazaki","miyazu","miyoshi","miyota","mizuho","mizunami","mizusawa","mobara","mombetsu","mooka","mori","moriguchi","morioka","moriya","moriyama","morohongo","motomachi","motomiya","muikamachi","muko","murakami","muramatsu","muroran","muroto-misakicho","musashino","mutsu","nabari","nagahama","nagai","nagano","nagaoka","nagareyama","nagasaki","nagasu","nagato","nago","nagoya","naha","naka","nakama","nakamura","nakano","nakanojomachi","nakashibetsu","nakatsu","nakatsugawa","namerikawa","namie","namioka","nanao","nanto","nanto-shi","nara-shi","narita","naruto","narutocho-mitsuishi","nasushiobara","nayoro","naze","nemuro","neyagawa","nichinan","nihommatsu","niigata","niihama","niimi","niitsu-honcho","nikko","ninomiya","nirasaki","nishi-tokyo-shi","nishifukuma","nishinomiya-hama","nishinoomote","nishio","nishishinminato","nishiwaki","nisshin","nobeoka","noda","nogata","nonoichi","noshiro","numata","numazu","nyuzen","oami","oarai","obama","obanazawa","obihiro","obita","obu","odacho-oda","odate","odawara","ofunato","ogaki","ogawa","ogori-shimogo","ohara","oi","oiso","oita","ojiya","okawa","okawara","okaya","okayama","okazaki","okegawa","okinawa","okuchi-shinohara","okunoya","omachi","omagari","omamacho-omama","ome","omigawa","omihachiman","omiya","omura","omuta","ono","ono-hara","onoda","onojo","onomichi","osaka","osaki","ota","otake","otaru","otawara","otofuke","otsu","otsuki","owase","oyama","ozu","rifu","ritto","rumoi","ryotsu-minato","ryugasaki","ryuo","sabae","sado","saga","sagae","sagara","saijo","saiki","saitama","saito","sakado","sakai","sakai-nakajima","sakaidecho","sakaiminato","sakaki","sakata","saku","sakura","sakurai","sandacho","sanjo","sano","sapporo","sasaguri","sasayama","sasebo","satsumasendai","satte","sawara","sayama","semboku","sendai","setakamachi-takayanagi","seto","shibata","shibetsu","shibukawa","shibushi","shido","shiki","shima","shimabara","shimada","shimo-furano","shimoda","shimodate","shimokizukuri","shimonoseki","shimotoda","shimotsuke","shin'ichi","shingu","shinjo","shinshiro","shiogama","shiojiri","shiozawa","shirahama","shirahamacho-usazakiminami","shirakawa","shiraoi","shiraoka","shiroi","shiroishi","shirone","shiso","shisui","shizukuishi","shizunai-furukawacho","shizuoka","shobara","shobu","shonai","sobue","soja","soka","soma","sosa","sue","sueyoshicho-ninokata","sugito","suibara","suita","sukagawa","sukumo","sumoto","sunagawa","susaki","susono","suwa","suzaka","suzuka","tachiarai","tadotsu","tagawa","tahara","tainai","tajimi","takahagi","takahama","takahashi","takahata","takaishi","takamatsu","takanabe","takanosu","takaoka","takarazuka","takasaki","takashima","takatsuki","takayama","takedamachi","takefu","takehara","takeo","taketoyo","takikawa","takizawa","tama","tamamura","tamana","tamano","tanabe","tanashicho","tanba","tanuma","tanushimarumachi-toyoki","tarui","tarumizu","tatebayashi","tateyama","tatsuno","tatsunocho-tominaga","tawaramoto","tendo","tenno","tenri","toba","tobetsu","tochigi","tochio-honcho","togane","togitsu","tokamachi","toki","tokoname","tokorozawa","tokushima","tokuyama","tokyo","tomakomai","tome","tomigusuku","tomioka","tomiya","tomobe","tonami","tondabayashicho","tono","toride","tosu","tottori","towada","toyama","toyohama","toyohashi","toyokawa","toyonaka","toyooka","toyoshina","toyota","tsu","tsubame","tsubata","tsukawaki","tsukuba","tsukumiura","tsuma","tsuruga","tsurugi-asahimachi","tsuruoka","tsurusaki","tsushima","tsuyama","ube","ueda","uekimachi-mono","ueno-ebisumachi","uenohara","uji","ujiie","uki","umi","uonuma","uozu","urayasu","ureshinomachi-shimojuku","ushibukamachi","ushiku","usuki","utazu","uto","utsunomiya","uwajima","wakayama","wakimachi","wakkanai","wako","wakuya","watari","yabu","yabuki","yachimata","yaita","yaizu","yamada","yamaga","yamagata","yamaguchi","yamato","yamazakicho-nakabirose","yamoto","yanagawa","yanagawamachi-saiwaicho","yanai","yao","yashio","yashiro","yasu","yasugicho","yatsuomachi-higashikumisaka","yawata","yawatahama","yoichi","yokaichiba","yokkaichi","yokohama","yokosuka","yokote","yomitan","yonabaru","yonago","yonezawa","yono","yorii","yoshida-kasugacho","yoshii","yoshikawa","yotsukaido","youkaichi","yugawara","yuki","yukuhashi","yurihonjo","yuzawa","zama","zushi"],"JE":["saint helier"],"JO":["ajlun","al jubayhah","amman","anjarah","aqaba","ar ramtha","as salt","at tafilah","aydun","hayy al quwaysimah","irbid","izra","jarash","judita","karak city","kurayyimah","ma'an","madaba","mafraq","qir moav","rukban","russeifa","safi","sahab","umm as summaq","wadi as sir","zarqa"],"KZ":["abay","akkol","aksu","aktobe","almaty","altay","aqsay","aral","arkalyk","arys","astana","atbasar","atyrau","ayagoz","baikonur","balqash","balykshi","burunday","ekibastuz","embi","esik","kalbatau","kandyagash","karagandy","karatau","kentau","khromtau","kokshetau","konayev","kostanay","kyzylorda","lenger","lisakovsk","makinsk","merke","novokazalinsk","oral","otegen batyra","pavlodar","petropavl","qulsary","ridder","rudnyy","sarqant","saryaghash","sarykemer","semey","shakhtinsk","shalkar","shalqar","shardara","shchuchinsk","shemonaikha","shevchenko","shiyeli","shu","shymkent","soran","stepnogorsk","taldykorgan","talghar","taraz","tasbuget","tekeli","temirtau","turar ryskulov","turkestan","ushtobe","ust-kamenogorsk","zaysan","zhanaozen","zhangaqorghan","zhangatas","zharkent","zhezqazghan","zhitikara","zhosaly"],"KE":["athi river","bungoma","busia","eldoret","embu","garissa","homa bay","isiolo","iten","kabarnet","kajiado","kakamega","kapenguria","karuri","kericho","kerugoya","kiambu","kikuyu","kilifi","kisii","kisumu","kitale","kitui","lamu","limuru","lodwar","lugulu","machakos","makueni boma","malindi","mandera","maralal","marsabit","mbale","meru","migori","molo","mombasa","moyale","muhoroni","mumias","nairobi","naivasha","nakuru","nanyuki","narok","nyahururu","nyeri","ogembo","ol kalou","pumwani","rongai","ruiru","siaya","thika","voi","wajir","webuye"],"KI":["tarawa"],"XK":["decan","dragash","ferizaj","gjakove","gjilan","glogovac","istok","kosovo polje","leposaviq","llazice","mitrovice","orahovac","pec","podujeva","pristina","prizren","shtime","suva reka","vitina","vushtrri","zvecan"],"KW":["ad dasmah","al ahmadi","al fahahil","al farwaniyah","al fintas","al jahra","al mahbulah","al manqaf","ar rabiyah","ar riqqah","ar rumaythiyah","as salimiyah","bayan","hawalli","janub as surrah","kuwait city","sabah as salim","salwa"],"KG":["ala-buka","balykchy","batken","bazar-korgon","belovodskoye","bishkek","iradan","ivanovka","jalal-abad","kant","kara suu","kara-balta","kara-kulja","karakol","kochkor-ata","kyzyl-kyya","kyzyl-suu","lebedinovka","massy","naryn","nookat","osh","razzakov","suluktu","suzak","talas","tash-kumyr","tokmok","toktogul","uzgen"],"LA":["ban houakhoua","luang prabang","muang phonsavan","muang xay","pakse","pakxan","savannakhet","thakhek","vang vieng","vientiane","xam nua"],"LV":["cesis","darzciems","daugavpils","jekabpils","jelgava","jurmala","liepaja","ogre","rezekne","riga","salaspils","tukums","valmiera","ventspils"],"LB":["baalbek","bcharre","beirut","en naqoura","ghazieh","habbouch","jbail","jounieh","nabatiye et tahta","ra's bayrut","sidon","tripoli","tyre","zahle"],"LS":["butha-buthe","leribe","mafeteng","maputsoe","maseru","mohale's hoek","qacha's nek","quthing","thaba-tseka"],"LR":["bensonville","buchanan","gbarnga","greenville","harper","kakata","monrovia","new yekepa","voinjama","zwedru"],"LY":["ajdabiya","al abyar","al ajaylat","al bayda","al jadid","al jawf","al jumayl","al khums","al marj","al qubbah","at taj","az zawiyah","az zuwaytinah","bani walid","benghazi","brak","darnah","gharyan","ghat","hun","masallatah","misratah","mizdah","murzuq","nalut","qaryat suluq","sabha","sabratah","sirte","surman","tajura","tarhuna","tobruk","tripoli","tukrah","ubari","waddan","yafran","zaltan","zawiya","zintan","zliten","zuwarah"],"LI":["vaduz"],"LT":["aleksotas","alytus","antakalnis","dainava (kaunas)","eiguliai","fabijoniskes","gargzdai","jonava","justiniskes","karoliniskes","kaunas","kedainiai","klaipeda","kretinga","lazdynai","marijampole","mazeikiai","naujamiestis","naujininkai","naujoji vilnia","palanga","panevezys","pasilaiciai","pilaite","plunge","radviliskis","seskine","siauliai","silainiai","taurage","telsiai","ukmerge","utena","vilkpede","vilnius","visaginas"],"LU":["dudelange","esch-sur-alzette","luxembourg"],"MO":["macau"],"MG":["alarobia","ambalavao","ambanja","ambarakaraka","ambato boeny","ambatofinandrahana","ambatolampy","ambatondrazaka","ambilobe","amboanjo","amboasary","ambohitrolomahitsy","ambositra","ambovombe","ampahana","ampanihy","amparafaravola","ampasimanolotra","andapa","andilamena","anjozorobe","ankazoabo","ankazobe","ankazondandy","antalaha","antananarivo","antanifotsy","antsirabe","antsiranana","antsohihy","antsohimbondrona","arivonimamo","bealanana","belo sur tsiribihina","beloha","beroroha","betafo","betioky","fandriana","farafangana","faratsiho","fenoarivo atsinanana","fenoarivo be","fianarantsoa","hell-ville","ifanadiana","ihosy","ikalamavony","ikongo","maevatanana","mahajanga","mahanoro","maintirano","manakara","mananara","mananjary","manjakandriana","maroantsetra","marolambo","marovoay","miandrarivo","miandrivazo","moramanga","morondava","nosy varika","sadabe","sahavato","sakaraha","sambava","sitampiky","soanierana ivongo","soanindrariny","soavinandriana","toamasina","tolanaro","toliara","tsaratanana","tsiombe","tsiroanomandidy","vangaindrano","vavatenina","vohibinany","vohipaho","vondrozo"],"MW":["balaka","blantyre","dedza","karonga","kasungu","lilongwe","liwonde","mangochi","mchinji","mulanje","mzimba","mzuzu","nkhotakota","nsanje","rumphi","salima","zomba"],"MY":["alor gajah","alor setar","ampang","bagan serai","bahau","bakri","bandar labuan","banting","batang berjuntai","batu arang","batu berendam","batu feringgi","batu gajah","batu pahat","beaufort","bedong","bentong town","bidur","bintulu","bukit mertajam","bukit rambai","butterworth","cukai","donggongon","george town","gua musang","gurun","ipoh","jenjarum","jerantut","jitra","johor bahru","kampar","kampong baharu balakong","kampong dungun","kampong kadok","kampong masjid tanah","kampong pangkal kalong","kampung ayer keroh","kampung ayer molek","kampung baharu nilai","kampung baru subang","kampung bukit baharu","kampung pasir gudang baru","kampung simpang renggam","kampung sungai ara","kampung tanjung karang","kangar","kapit","keningau","kepala batas","kertih","kinarut","klang","klebang besar","kluang","kota bharu","kota kinabalu","kota tinggi","kuah","kuala kangsar","kuala kedah","kuala lipis","kuala lumpur","kuala pilah","kuala selangor","kuala terengganu","kuang","kuantan","kuching","kudat","kulai","kulim","labis","labuan","ladang seri kundang","lahad datu","lawas","limbang","lumut","malacca","marang","marudi","mentekab","mersing","miri","muar","mukah","nibong tebal","paka","pantai remis","papar","parit buntar","parit raja","pasir mas","pekan","pekan nenas","pelabuhan klang","perai","peringat","permatang kuching","petaling jaya","pontian kechil","port dickson","putatan","putra heights","putrajaya","ranau","raub","rawang","sabak bernam","sandakan","sarikei","segamat","semenyih","semporna","sepang","seremban","serendah","shah alam","sibu","simanggang","simpang empat","skudai","subang jaya","sungai besar","sungai petani","sungai udang","taiping","taman senai","tampin","tanah merah","tangkak","tanjung sepat","tanjung tokong","tapah road","tasek glugor","tawau","teluk intan","temerluh","ulu tiram","yong peng"],"MV":["male"],"ML":["bafoulabe","bamako","banamba","bougouni","djenne","gao","kangaba","kati","kayes","ke-macina","kolokani","koulikoro","koutiala","markala","mopti","sagalo","san","segou","sikasso","timbuktu","yorosso"],"MT":["birkirkara","mosta","qormi","san pawl il-bahar","sliema","valletta","zabbar"],"MH":["majuro","rmi capitol"],"MQ":["ducos","fort-de-france","la trinite","le francois","le lamentin","le robert","saint-joseph","sainte-marie"],"MR":["aleg","atar","bogue","dar naim","kaedi","kiffa","nema","nouadhibou","nouakchott","rosso","selibaby","tekane","tevragh zeina","zouerate"],"MU":["bambous","beau bassin-rose hill","bel air riviere seche","centre de flacq","curepipe","goodlands","le hochet","mahebourg","port louis","quatre bornes","saint pierre","triolet","vacoas"],"YT":["dzaoudzi","koungou","mamoudzou"],"MX":["abasolo","acajete","acambaro","acaponeta","acapulco de juarez","acatlan de osorio","acatzingo","acayucan","actopan","agua dulce","agua prieta","aguascalientes","ahualulco de mercado","ajalpan","alamo","alborada jaltenco","aldama","allende","altamira","altepexi","alto lucero","altotonga","alvarado","alvaro obregon","ameca","amecameca","amozoc de mota","ampliacion san mateo","anahuac","apan","apaseo el alto","apaseo el grande","apatzingan","apizaco","arandas","arcelia","ario de rosales","arriaga","atlacomulco de fabela","atlixco","atotonilco el alto","atoyac de alvarez","autlan de navarro","axochiapan","ayutla de los libres","azcapotzalco","banderilla","benito juarez","berriozabal","buenavista","cabo san lucas","cacahoatan","cadereyta","cadereyta jimenez","calpulalpan","calvillo","camargo","campeche","cananea","cancun","capulhuac de mirafuentes","cardenas","carlos a. carrillo","casa blanca","castanos","catemaco","celaya","centro familiar la soledad","cerro azul","chalco","champoton","chapala","chetumal","chiapa de corzo","chichen-itza","chicoloapan","chiconcuac","chignahuapan","chihuahua","chilapa de alvarez","chilpancingo","cholula","cienega de flores","cihuatlan","cintalapa de figueroa","ciudad acuna","ciudad altamirano","ciudad apodaca","ciudad benito juarez","ciudad constitucion","ciudad de allende","ciudad de armeria","ciudad de huajuapan de leon","ciudad de huitzuco","ciudad de villa de alvarez","ciudad del carmen","ciudad delicias","ciudad fernandez","ciudad general escobedo","ciudad guadalupe victoria","ciudad guzman","ciudad hidalgo","ciudad juarez","ciudad lazaro cardenas","ciudad lerdo","ciudad lopez mateos","ciudad madero","ciudad mante","ciudad melchor muzquiz","ciudad mendoza","ciudad miguel aleman","ciudad nezahualcoyotl","ciudad obregon","ciudad rio bravo","ciudad sabinas hidalgo","ciudad sahagun","ciudad serdan","ciudad valles","ciudad victoria","coacalco","coatepec","coatzacoalcos","coatzintla","colima","colonia del sol","colonia del valle","colonia lindavista","colonia nativitas","comalapa","comalcalco","comitan","comonfort","compostela","contla","cordoba","cortazar","cosamaloapan","coscomatepec de bravo","cosoleacaque","coyoacan","coyotepec","coyula","cozumel","crucecita","cuauhtemoc","cuautepec de hinojosa","cuautitlan","cuautitlan izcalli","cuautla","cuautlancingo","cuernavaca","culiacan","cunduacan","delegacion cuajimalpa de morelos","dolores hidalgo","don antonio","ebano","ecatepec de morelos","el grullo","el pueblito","el quince","el rosario","el salto","emiliano zapata","empalme","encarnacion de diaz","ensenada","escarcega","escuinapa","esperanza","felipe carrillo puerto","fortin de las flores","fraccionamiento ciudad olmeca","fraccionamiento real palmas","francisco i. madero","fresnillo","frontera","fuentes del valle","garcia","gomez palacio","guacamayas","guadalajara","guadalupe","guadalupe victoria","guamuchil","guanajuato","guasave","gustavo adolfo madero","hacienda santa fe","hermosillo","heroica caborca","heroica ciudad de tlaxiaco","heroica guaymas","heroica matamoros","heroica zitacuaro","hidalgo","huamantla","huatabampo","huatusco","huauchinango","huejotzingo","huejutla de reyes","huetamo de nunez","huilango","huimanguillo","huixquilucan","huixtla","hunucma","iguala de la independencia","irapuato","isla","ixmiquilpan","ixtaczoquitlan","ixtapa","ixtapa-zihuatanejo","ixtapaluca","ixtapan de la sal","ixtepec","ixtlan del rio","izamal","iztacalco","iztapalapa","izucar de matamoros","jacona de plancarte","jalostotitlan","jalpa de mendez","jaltipan de morelos","jamay","jaral del progreso","jardines de la silla (jardines)","jerez de garcia salinas","jesus del monte","jesus maria","jiquilpan de juarez","jiutepec","jocotepec","jojutla","jose cardel","jose mariano jimenez","juan aldama","juan jose rios","juchitan de zaragoza","juchitepec","juventino rosas","kanasin","la barca","la cruz","la ermita","la isla","la magdalena tlaltelulco","la orilla","la paz","la piedad","la providencia siglo xxi","lagos de moreno","las choapas","las delicias","las margaritas","las pintas de arriba","las pintitas","las rosas","lazaro cardenas","leon de los aldama","lerdo de tejada","lerma de villada","leyva solano","libres","licenciado benito juarez","linares","loma bonita","lomas del sur","loreto","los mochis","los reyes acaquilpan","los reyes de juarez","los reyes de salgado","macuspana","madera","magdalena","magdalena atlicpac","magdalena contreras","magdalena de kino","manuel ojinaga","manzanillo","mapastepec","maravatio de ocampo","marfil","martinez de la torre","matamoros","matehuala","matias romero","mazatlan","medina","melchor ocampo","meoqui","merida","metepec","mexicali","mexico city","mezcales","miahuatlan de porfirio diaz","miguel aleman (la doce)","miguel hidalgo","milpa alta","minatitlan","miramar","misantla","mitras poniente","mixquiahuala de juarez","monclova","montemorelos","monterrey","morelia","moroleon","motozintla","motul","moyotzingo","nanchital de lazaro cardenas del rio","naranjos","naucalpan de juarez","nava","navojoa","navolato","nicolas r casillas","nicolas romero","nochistlan de mejia","nogales","nueva italia de ruiz","nueva rosita","nuevo casas grandes","nuevo laredo","nuevo mexico","oaxaca","ocosingo","ocotlan","ocotlan de morelos","ocoyoacac","ocozocoautla de espinosa","ojinaga","ojo de agua","ometepec","orizaba","oxkutzkab","ozumba de alzate","pabellon de arteaga","pachuca de soto","palau","palenque","palmarito tochapan","panuco","papalotla","papantla de olarte","paracho de verduzco","paraiso","parque industrial ciudad mitras","parral","parras de la fuente","patzcuaro","penjamo","periban de ramos","perote","petatlan","peto","piedras negras","pijijiapan","pinotepa nacional","playa del carmen","playas del rosario","polanco","porticos de san antonio","poza rica de hidalgo","progreso","progreso de alvaro obregon","puebla","pueblo nuevo","puente de ixtla","puerto escondido","puerto penasco","puerto vallarta","purisima de bustos","puruandiro","ramos arizpe","rancho la gloria","reforma","reyes acozac","reynosa","rincon de romos","rio blanco","rio de teapa","rio grande","rioverde","rodolfo sanchez taboada","romita","rosarito","sabinas","sahuayo de morelos","salamanca","salina cruz","salinas de hidalgo","saltillo","salvatierra","san andres cholula","san andres cuexcontitlan","san andres tuxtla","san antonio acahualco","san antonio de la cal","san antonio tecomitl","san bernardino tlaxcalancingo","san buenaventura","san cristobal de las casas","san felipe","san fernando","san francisco acuautla","san francisco cuaxusco","san francisco de los romo","san francisco del rincon","san francisco tlalcilalcalpan","san isidro","san jeronimo","san jeronimo cuatro vientos","san jorge pueblo nuevo","san jose de los olvera","san jose del cabo","san jose del castillo","san jose del valle","san jose guadalupe otzacatipan","san jose iturbide","san juan de los lagos","san juan del rio","san juan ixtayopan","san juan zitlaltepec","san lorenzo acopilco","san luis de la paz","san luis potosi","san luis rio colorado","san martin azcatepec","san martin cuautlalpan","san martin texmelucan de labastida","san mateo atenco","san mateo huitzilzingo","san mateo otzacatipan","san miguel ajusco","san miguel coatlinchan","san miguel de allende","san miguel el alto","san miguel topilejo","san nicolas de los garza","san pablo autopan","san pablo de las salinas","san pablo oztotepec","san pedro","san pedro garza garcia","san pedro totoltepec","san rafael","san rafael tlanalapan","san salvador atenco","san salvador el seco","san salvador tizatlalli","san sebastian el grande","sanctorum","santa ana chiautempan","santa ana xalmimilulco","santa anita","santa catarina","santa cruz xoxocotlan","santa isabel","santa maria ajoloapan","santa maria atzompa","santa maria chimalhuacan","santa maria totoltepec","santa rosa jauregui","santa rosa treinta","santa teresa","santiago","santiago de queretaro","santiago ixcuintla","santiago momoxpan","santiago papasquiaro","santiago teyahualco","santiago tlacotepec","santiago tulantepec","santiago tuxtla","santo domingo tehuantepec","sayula","silao","soledad de graciano sanchez","sombrerete","suchiapa","tacambaro de codallos","tala","tamazula de gordiano","tamazunchale","tampico","tamuin","tangancicuaro de arista","tantoyuca","tapachula","taxco de alarcon","teapa","tecamac","tecamac de felipe villanueva","tecamachalco","tecate","tecax","tecoman","tecpan de galeana","tehuacan","tejupilco de hidalgo","teloloapan","temixco","tenango de arista","tenosique","teocaltiche","teolocholco","teoloyucan","teopisca","teotihuacan de arista","tepalcatepec","tepatitlan de morelos","tepatlaxco de hidalgo","tepeaca","tepeapulco","tepeji del rio de ocampo","tepexpan","tepic","tepotzotlan","tequila","tequisquiapan","tequixquiac","terrazas del valle","tesistan","tetla","texcoco de mora","teziutlan","tezoyuca","ticul","tierra blanca","tijuana","tixtla de guerrero","tizayuca","tizimin","tlahuac","tlajomulco de zuniga","tlalnepantla","tlalpan","tlaltenango de sanchez roman","tlapa de comonfort","tlapacoyan","tlaquepaque","tlaquiltenango","tlaxcala","toluca","tonala","torreon","tres de mayo","tres valles","tula de allende","tulancingo","tulantongo","tultepec","tultitlan de mariano escobedo","tulum","tuxpam de rodriguez cano","tuxpan","tuxtepec","tuxtla","tuzantla","uman","uriangato","uruapan","valente diaz","valladolid","valle de bravo","valle de santiago","valle hermoso","venceremos","venustiano carranza","veracruz","vicente guerrero","victor rosales","victoria de durango","villa de costa rica","villa del prado 2da seccion","villa hidalgo","villa independencia","villa juarez","villa vicente guerrero","villaflores","villagran","villahermosa","xalapa de enriquez","xalatlaco","xalisco","xico","xicotepec de juarez","xochimilco","xochitepec","xonacatlan","xoxocotla","yajalon","yautepec","yecapixtla","yurecuaro","yuriria","zacapu","zacatecas","zacatelco","zacatepec","zacatlan","zacoalco","zacualtipan","zamora","zapopan","zapotiltic","zapotlanejo","zinacantepec","zinacatepec","zinapecuaro","zumpango","zumpango del rio"],"FM":["palikir - national government center"],"MD":["balti","bender","bilicenii vechi","cahul","causeni","ceadir-lunga","chisinau","codru","comrat","drochia","dubasari","edinet","floresti","hincesti","orhei","ribnita","slobozia","soroca","straseni","tiraspol","ungheni"],"MC":["monaco","monte-carlo"],"MN":["altai","arvayheer","baruun-urt","bayanhongor","bulgan","dalandzadgad","darhan","dzuunharaa","dzuunmod","erdenet","hovd","khovd","moron","olgii","saynshand","suhbaatar","tsetserleg","ulaangom","ulan bator","uliastay","undurkhaan","zuunmod"],"ME":["bar","bijelo polje","budva","cetinje","herceg novi","niksic","pljevlja","podgorica"],"MS":["brades","plymouth"],"MA":["agadir","ahfir","ain beni mathar","al aaroui","al fqih ben calah","al hoceima","arfoud","asilah","azemmour","azrou","beni mellal","berkane","berrechid","bni bouayach","bouarfa","boujniba","bouznika","casablanca","chefchaouen","dakhla","el aioun","el hajeb","el jadid","errachidia","essaouira","fes","fes al bali","fnidek","guelmim","guercif","ifrane","imzouren","jerada","kasba tadla","kenitra","khemisset","khenifra","khouribga","ksar el kebir","larache","marrakesh","martil","mechraa bel ksiri","meknes","midelt","mohammedia","nador","ouarzazat","oued zem","ouezzane","oujda-angad","oulad teima","oulmes","rabat","recani","safi","sale","sale al jadida","sefrou","settat","setti fatma","sidi bennour","sidi ifni","sidi qacem","sidi slimane","sidi yahia el gharb","skhirate","smara","souq larb'a al gharb","tahla","tan-tan","tangier","taounate","taourirt","taroudant","taza","temara","tetouan","tiflet","tinghir","tirhanimine","tiznit","youssoufia","zagora","zaio"],"MZ":["antonio enes","beira","chibuto","chimoio","chinde","chokwe","cuamba","dondo","inhambane","lichinga","macia","mandimba","maputo","matola","maxixe","mocimboa","montepuez","mozambique","mutuali","nacala","nampula","pemba","quelimane","ressano garcia","tete","xai-xai"],"MM":["bago","bhamo","bogale","chauk","dawei","hakha","hinthada","hpa-an","kanbe","kawthoung","kayan","keng tung","kyaikkami","kyaiklat","kyaikto","kyain seikgyi township","kyaukse","lashio","letpandan","loikaw","magway","mandalay","martaban","maubin","mawlaik","mawlamyine","mawlamyinegyunn","meiktila","minbu","mogok","monywa","mudon","myanaung","myawadi","myaydo","myeik","myingyan","myitkyina","nay pyi taw","nyaungdon","nyaunglebin","pakokku","pathein","paungde","pyapon","pyay","pyin oo lwin","pyinmana","pyu","sagaing","shwebo","sittwe","syriam","tachilek","taungdwingyi","taunggyi","taungoo","thanatpin","tharyarwady","thaton","thayetmyo","thongwa","twante","wakema","yamethin","yangon","yenangyaung"],"NA":["gobabis","grootfontein","katima mulilo","katutura","keetmanshoop","luderitz","okahandja","oshakati","otjiwarongo","rehoboth","rundu","swakopmund","walvis bay","windhoek"],"NR":["yaren"],"NP":["baglung","banepa","bhadrapur","bharatpur","biratnagar","birendranagar","birganj","butwal","dadeldhura","dailekh","darchula","dhangadhi","dhankuta","dharan","dhulikhel","dipayal","gaur","gulariya","hetauda","ilam","inaruwa","itahari","jaleshwar","janakpur","kathmandu","khadbari","kirtipur","lahan","madhyapur thimi","mahendranagar","malangawa","nepalgunj","panauti","patan","pokhara","rajbiraj","siddharthanagar","siraha","tansen","tikapur","triyuga","tulsipur","walin"],"NL":["aalsmeer","aalten","alblasserdam","alkmaar","almelo","almere stad","alphen aan den rijn","amersfoort","amstelveen","amsterdam","amsterdam-zuidoost","apeldoorn","arnhem","assen","assendelft","baarn","barendrecht","barneveld","benthuizen","bergeijk","bergen","bergen op zoom","bergschenhoek","berkel en rodenrijs","best","beuningen","beverwijk","bodegraven","borne","borssele","boskoop","boxtel","breda","brummen","brunssum","bussum","capelle aan den ijssel","castricum","cranendonck","culemborg","dalfsen","de meern","delft","delfzijl","den helder","deventer","diemen","doetinchem","dongen","dordrecht","drachten","driebergen-rijsenburg","dronten","duiven","ede","eersel","eibergen","eindhoven","elburg","elst","emmeloord","emmen","enkhuizen","enschede","epe","geertruidenberg","geldermalsen","geldrop","geleen","gemert","gennep","goes","goirle","gorinchem","gouda","groesbeek","groningen","groot ijsselmonde","haaksbergen","haarlem","hardenberg","harderwijk","harenkarspel","harlingen","heemskerk","heemstede","heerenveen","heerhugowaard","heerlen","heiloo","hellevoetsluis","helmond","hendrik-ido-ambacht","hengelo","hillegom","hilversum","hoensbroek","hoge vucht","hoofddorp","hoogeveen","hoogezand","hoogvliet","hoorn","huizen","ijmuiden","ijsselstein","kampen","katwijk aan zee","kerkrade","korrewegwijk","krimpen aan den ijssel","leek","leerdam","leeuwarden","leiden","leiderdorp","lelystad","leusden","lichtenvoorde","lindenholt","lisse","loon op zand","losser","maarssen","maassluis","maastricht","medemblik","meppel","merenwijk","middelburg","middelharnis","mijdrecht","naaldwijk","naarden","nieuwegein","nijkerk","nijmegen","noordwijk-binnen","nuenen","nunspeet","oegstgeest","oisterwijk","oldenzaal","ommoord","oosterhout","oss","oud-beijerland","papendrecht","pijnacker","purmerend","putten","raalte","rhenen","rhoon","ridderkerk","rijen","rijswijk","roermond","roosendaal","rotterdam","s-gravenzande","s-hertogenbosch","sassenheim","scheveningen","schiebroek","schiedam","schijndel","sint-oedenrode","sittard","sliedrecht","sneek","soest","spijkenisse","stadskanaal","staphorst","steenbergen","steenwijk","tegelen","terneuzen","the hague","tiel","tilburg","tongelre","tubbergen","uden","uithoorn","urk","utrecht","valkenswaard","veendam","veenendaal","veghel","velp","velsen-zuid","venlo","venray","vianen","vlaardingen","vlissingen","volendam","voorburg","voorschoten","vught","waalwijk","waddinxveen","wageningen","wassenaar","weert","weesp","wierden","wijchen","wijk bij duurstede","winschoten","winterswijk","wisch","woerden","ypenburg","zaandam","zaanstad","zaltbommel","zandvoort","zeewolde","zeist","zevenaar","zoetermeer","zutphen","zwijndrecht","zwolle"],"NC":["dumbea","mont-dore","noumea"],"NZ":["ashburton","auckland","avondale","blenheim","blockhouse bay","cambridge","christchurch","dunedin","epsom","gisborne","hamilton","hastings","invercargill","karori","levin","linton military camp","lower hutt","mangere","mangere east","manukau city","manurewa","massey","massey east","masterton","napier","nelson","new lynn","new plymouth","north shore","otahuhu","otara","palmerston north","papakura","papatoetoe","paraparaumu","porirua","pukekohe east","rangiora","remuera","richmond","rolleston","rotorua","stoke","takanini","taupo","tauranga","te aro","te atatu south","timaru","upper hutt","wainuiomata","wellington","whakatane","whanganui","whangarei"],"NI":["bluefields","boaco","camoapa","chichigalpa","chinandega","ciudad sandino","corinto","diriamba","el crucero","el viejo","esteli","granada","jalapa","jinotega","jinotepe","juigalpa","la paz centro","leon","managua","masatepe","masaya","matagalpa","nagarote","nandaime","nueva guinea","ocotal","puerto cabezas","rama","rio blanco","rivas","san marcos","san rafael del sur","siuna","somotillo","somoto","tipitapa"],"NE":["agadez","alaghsas","ayorou","birni n konni","dakoro","diffa","dogondoutchi","dosso","gaya","illela","madaoua","magaria","maradi","matamey","mayahi","mirriah","nguigmi","niamey","tahoua","tanout","tera","tessaoua","tibiri","tillaberi","zinder"],"NG":["aba","abakaliki","abeokuta","abuja","ado-ekiti","ado-odo","afikpo","agbor","agulu","ajaokuta","aku","akure","akwanga","amaigbo","anchau","apomu","aramoko-ekiti","argungu","asaba","atani","auchi","awgu","awka","azare","babana","badagry","bama","baro","bauchi","beli","bende","benin city","bida","biliri","birnin kebbi","birnin kudu","biu","bode saadu","bonny","buguma","bukuru","burutu","calabar","chakwama","damaturu","damboa","darazo","daura","deba","degema hulk","dikwa","doma","dukku","dutse","dutsen wai","ebute ikorodu","effium","efon-alaaye","egbe","eha amufu","ejigbo","eket","ekpoma","elele","emure-ekiti","enugu","enugu-ezike","enugu-ukwu","epe","esuk oron","ezza-ohu","fiditi","funtua","gamboru","ganye","garko","gashua","gaya","gbongan","geidam","gembu","gombe","gombi","gumel","gummi","gusau","gwadabawa","gwaram","gwarzo","gwoza","hadejia","ibadan","ibeto","ibi","idah","idanre","ifo","igbara-odo","igbeti","igbo-ora","igbo-ukwu","igboho","igbor","igede-ekiti","ihiala","ijebu-igbo","ijebu-jesa","ijebu-ode","ijero-ekiti","ikeja","ikere-ekiti","ikire","ikirun","ikom","ikot ekpene","ila orangun","ilaro","ilesa","illela","ilobu","ilorin","inisa","iperu","ipoti","isanlu-itedoijowa","ise-ekiti","isieke","itu","iwo","jalingo","jebba","jega","jimeta","jos","kabba","kachia","kaduna","kafanchan","kagoro","kaiama","kamba","kano","kari","katsina","katsina-ala","kaura namoda","keffi","kisi","kiyawa","kontagora","kuje","kukawa","kumagunnam","kumo","kwale","lafia","lafiagi","lagos","lalupon","lapai","lekki","lere","lokoja","magumeri","maiduguri","makoko","makurdi","malumfashi","marte","minna","modakeke","mokwa","monguno","moriki","mubi","nafada","nasarawa","nguru","nkpor","nkwerre","nnewi","nsukka","numan","obonoma","obudu","ode","offa","ogaminana","ogoja","oguta","ogwashi-uku","ohafia-ifigh","oke ila","oke mesi","okene","okigwe","okrika","okuta","olupona","ondo","onitsha","orita-eruwa","osogbo","otan ayegbaju","otukpa","owerri","owo","oyan","oyo","ozubulu","pankshin","patigi","pindiga","port harcourt","potiskum","rano","rijau","saki","sapele","shagamu","soba","sofo-birnin-gwari","sokoto","suleja","takum","talata mafara","tambuwal","tegina","ubiaja","uga","ugep","ughelli","umuahia","uromi","uyo","wamba","warri","wudil","wukari","yenagoa","yola","zaria","zungeru","zuru"],"NU":["alofi"],"NF":["kingston"],"MP":["saipan"],"KP":["anak","anbyon-up","anju","aoji","ayang-ni","chaeryong-up","changyon","chongjin","chongju","chunghwa","haeju","hamhung","hoeryong","hoeyang","hongwon","hukkyo-ri","hungnam","hwangju-up","hyesan","hyesan-dong","iwon-up","kaesong","kangdong-up","kanggye","kapsan-up","kilju","kosan","kowon-up","kujang-up","kusong","kyongsong","manp'o","musan-up","namp'o","namyang","ongjin","onsong","p'yongsong","pyongyang","rajin","ranam","sakchu-up","samho-rodongjagu","sariwon","sil-li","sinanju","sinmak","sinuiju","sonbong","songnim-ni","sunan","sunch'on","sungho 1-tong","t'ongch'on-up","uiju","wonsan","yonan-up","yonggwang-up","yuktae-dong"],"MK":["bitola","bogovinje","brvenica","butel","cair","centar zupa","debar","delcevo","gevgelija","gjorce petro","gostivar","ilinden","kamenjane","kavadarci","kicevo","kisela voda","kochani","kriva palanka","kumanovo","lipkovo","negotino","ohrid","prilep","radovis","resen","saraj","shtip","skopje","struga","strumica","studenicani","suto orizare","tearce","tetovo","veles","vinica","zelino"],"NO":["alesund","alta","arendal","asker","bergen","bodo","drammen","fredrikstad","gjovik","grimstad","halden","hamar","harstad","haugesund","horten","kongsberg","kongsvinger","kristiansand","kristiansund","larvik","levanger","lillehammer","lillestrom","mo i rana","molde","moss","nesttun","oslo","porsgrunn","sandefjord","sandnes","sarpsborg","skien","stavanger","steinkjer","tonsberg","tromso","trondheim","ytrebygda"],"OM":["adam","al buraymi","al khaburah","as suwayq","badiyah","bahla","barka","bawshar","bidbid","ibra","ibri","izki","khasab","liwa","muscat","nizwa","oman smart future city","rustaq","saham","salalah","seeb","shinas","sohar","sufalat sama'il","sur","yanqul"],"PK":["abbottabad","ahmadpur east","ahmadpur sial","akora","alipur","aman garh","arifwala","attock city","baddomalhi","badin","bahawalnagar","bahawalpur","bannu","basirpur","bat khela","battagram","bela","bhakkar","bhalwal","bhan","bhawana","bhera","bhimber","bhit shah","bhopalwala","burewala","chak azam sahu","chak five hundred seventy-five","chak jhumra","chak one hundred twenty nine left","chak thirty-one -eleven left","chakwal","chaman","charsadda","chawinda","chenab nagar","chhor","chichawatni","chiniot","chishtian","choa saidan shah","chuhar jamali","chuhar kana","chunian","dadhar","dadu","dajal","darya khan","daska kalan","daud khel","daur","dera bugti","dera ghazi khan","dera ismail khan","dhanot","dhoro naro","digri","dijkot","dinga","dipalpur","dullewala","dunga bunga","dunyapur","eminabad","faisalabad","faqirwali","faruka","fatehpur","fazilpur","fort abbas","gambat","garh maharaja","gharo","ghauspur","ghotki","gojra","goth radhan","gujar khan","gujranwala","gujrat","gwadar","hadali","hafizabad","hala","hangu","haripur","harnoli","harunabad","hasilpur","haveli lakha","havelian","hazro city","hingorja","hujra shah muqim","hyderabad","islamabad","jacobabad","jahanian shah","jalalpur jattan","jalalpur pirwala","jampur","jand","jaranwala","jatoi shimali","jauharabad","jhang sadr","jhawarian","jhelum","jhol","jiwani","johi","kabirwala","kahna nau","kahror pakka","kahuta","kalabagh","kalat","kaleke mandi","kallar kahar","kalur kot","kamalia","kamar mushani","kambar","kamoke","kamra","kandhkot","kandiaro","kanganpur","karachi","karor","kashmor","kasur","khairpur","khairpur mir's","khairpur nathan shah","khairpur tamewah","khalabat","khangah dogran","khangarh","khanpur","khanpur mahar","kharan","kharian","khewra","khurrianwala","khushab","khuzdar","kohat","kot addu","kot diji","kot ghulam muhammad","kot malik barkhurdar","kot mumin","kot radha kishan","kot samaba","kotli","kotli loharan","kotri","kulachi","kundian","kunjah","kunri","lachi","ladhewala waraich","lahore","lakki","lala musa","lalian","larkana","layyah","lodhran","loralai","mach","mailsi","malakwal","malakwal city","malir cantonment","mamu kanjan","mananwala","mandi bahauddin","mangla","mansehra","mardan","mastung","matiari","matli","mehar","mehrabpur","mian channun","mianke mor","mianwali","minchianabad","mingora","mirpur khas","mirpur mathelo","mitha tiwana","mithi","moro","multan","muridke","murree","mustafabad","muzaffarabad","muzaffargarh","nankana sahib","narang mandi","narowal","nasirabad","naudero","naukot","naushahra virkan","naushahro firoz","nawabshah","new badah","new mirpur","nowshera cantonment","nushki","okara","pabbi","pad idan","paharpur","pakpattan","pano aqil","pasni","pasrur","pattoki","peshawar","phalia","pind dadan khan","pindi bhattian","pindi gheb","pir jo goth","pir mahal","pishin","qadirpur ran","quetta","rahim yar khan","raiwind","raja jang","rajanpur","ranipur","ratodero","rawalakot","rawalpindi","renala khurd","risalpur cantonment","rohri","saddiqabad","sahiwal","sakrand","sambrial","sanghar","sangla hill","sarai alamgir","sarai naurang","sarai sidhu","sargodha","sehwan","setharja old","shabqadar","shahdad kot","shahdadpur","shahkot","shahpur chakar","shahr sultan","shakargarh","sharqpur sharif","shekhupura","shikarpur","shorkot","shujaabad","sialkot","sibi","sillanwali","sinjhoro","sita road","sodhri","sook kalan","sukheke mandi","sukkur","surkhpur","swabi","talagang","talamba","talhar","tandlianwala","tando adam","tando allahyar","tando jam","tando muhammad khan","tangi","tank","taunsa","thal","tharu shah","thatta","thul","toba tek singh","topi","tordher","turbat","ubauro","umarkot","upper dir","usta muhammad","uthal","utmanzai","vihari","warah","wazirabad","yazman","zafarwal","zahir pir","zaida","zhob"],"PW":["ngerulmud"],"PS":["abasan al kabirah","al 'ayzariyah","al birah","al burayj","al qararah","al yamun","an nusayrat","ar ram wa dahiyat al barid","as samu","atarut","az zahiriyah","az zuwaydah","balatah","bani na'im","bani suhayla","battir","bayt hanun","bayt jala","bayt lahya","bethlehem","dayr al balah","dura","east jerusalem","gaza","halhul","hebron","idhna","jabalya","janin","jericho","khan yunis","ma'ale adummim","nablus","old city","qabatiyah","qalqilyah","rafah","ramallah","sa'ir","surif city","tubas","tulkarm","yatta"],"PA":["alcalde diaz","ancon","arraijan","cativa","changuinola","chilibre","colon","curundu","david","el chorrillo","juan diaz","la cabima","la chorrera","la concepcion","las cumbres","nuevo belen","panama","parque lefevre","pedregal","penonome","rio abajo","sabanitas","san miguelito","santiago de veraguas","tocumen","veracruz"],"PG":["arawa","bulolo","daru","goroka","kimbe","kokopo","lae","madang","mendi","mount hagen","popondetta","port moresby","wewak"],"PY":["asuncion","caacupe","caaguazu","caazapa","capiata","ciudad del este","concepcion","coronel oviedo","encarnacion","fernando de la mora","filadelfia","ita","itaugua","lambare","limpio","mariano roque alonso","nemby","pedro juan caballero","pilar","presidente franco","san antonio","san juan bautista","san lorenzo","villa elisa","villa hayes","villarrica"],"PE":["abancay","andahuaylas","arequipa","ayacucho","ayaviri","bagua grande","barranca","belen","bellavista","brena","cajamarca","callao","camana","carmen de la legua reynoso","catacaos","centenario","cerro de pasco","chachapoyas","chancay","chaupimarca","chepen","chiclayo","chilca","chimbote","chincha alta","chocope","chongoyape","chosica","chulucanas","ciudad satelite","coishco","cono norte","cusco","el pedregal","ferrenafe","guadalupe","huacho","hualmay","huamachuco","huancavelica","huancayo","huanta","huanuco","huaral","huaraz","huarmey","huaura","ica","ilave","ilo","imperial","iquitos","jacobo hunter","jaen","jauja","jesus maria","juanjui","juliaca","junin","la banda","la breita","la oroya","la peca","la rinconada","la union","lambayeque","laredo","lima","mala","marcavelica","minas de marcona","moche","mollendo","monsefu","moquegua","moyobamba","nazca","nuevo imperial","pacasmayo","paijan","paita","paramonga","patapo","picsi","pimentel","pisco","piura","pucallpa","puerto maldonado","puno","querecotillo","rioja","san antonio","san clemente","san fernando","san francisco de borja","san isidro","san juan","san martin","san pedro de lloc","san vicente de canete","sana","santa ana","santa anita - los ficus","santa rosa","santiago","santiago de cao","santiago de surco","satipo","sechura","selva alegre","sicuani","sullana","tacna","talara","tambo grande","tambopata","tarma","tingo maria","tocache","trujillo","tumbes","uchiza","viru","wanchaq","yanacancha","yauri","yunguyo","yurimaguas","zarumilla"],"PH":["abucay","abuyog","agoo","alabel","alaminos","aliaga","alicia","amadeo","angat","angeles city","angono","antipolo","apalit","aparri","apas","arayat","aringay","asia","atimonan","aurora","ayala alabang","baao","babo-pangulo","baclaran","bacolod city","bacoor","baggabag b","bago city","bagong pagasa","bagong silangan","baguio","bah-bah","bais","balagtas","balamban","balanga","balayan","baliuag","bambang","banco filipino homes","banga","bansalan","bantayan","baras","batac city","batangas","bato","bauan","bauang","bay","bayambang","bayawan","baybay","bayombong","bayugan","bel air","bignay uno","binalbagan","binan","binangonan","binmaley","binondo","binonga","bislig","bocaue","bogo","bongabon","bongao","borongan","boroon","botolan","budta","buenavista","bugo","buhi","bulacan","bulan","bulaon","buluan","bunawan","burgos","bustos","butuan","cabadbaran","cabagan","cabanatuan city","cabayangan","cabiao","cabuyao","cadiz","cagayan de oro","cainta","calabanga","calaca","calamba","calapan","calasiao","calatagan","calauag","calauan","calbayog city","caloocan city","calumpang","calumpit","camiling","candaba","candelaria","canlaon","capas","carcar","cardona","carigara","carmona","castillejos","catanauan","catarman","catbalogan","cavite city","cebu city","city of isabela","cogan","compostela","concepcion","concepcion ibaba","consolacion","cordova","cotabato","cuenca","daet","dagupan","danao","dapitan","dasmarinas","davao","del pilar","diadi","digos","dinalupihan","dipolog","dologon","domalanoan","don carlos","dumaguete","escalante","gapan","general mamerto natividad","general santos","general tinio","general trias","gerona","glan","goa","guiguinto","guihulngan","guimba","guiset east","gumaca","guyong","hagonoy","hermosa","himamaylan","hinigaran","iba","ilagan","iligan","iligan city","iloilo","imus","indang","ipil","iriga city","irosin","isabela","isulan","itogon","jaen","jagna","jalajala","jasaan","jolo","jose panganiban","kabacan","kabankalan","kalibo (poblacion)","kawit","kidapawan","koronadal","la carlota","la castellana","la paz","la trinidad","labo","laguilayan","lake sebu","laoag","laoang","lapu-lapu city","las pinas","laur","legaspi","libertad","libon","lilio","liloan","limay","lingayen","lipa city","loboc","loma de gato","lopez","los banos","lubao","lucban","lucena","lumbang","lupon","maao","maasin","mabalacat city","magalang","maganoy","magarao","magsaysay","magugpo poblacion","mahayag","makati city","malabanban norte","malanday","malapatan","malaybalay","malilipot","malingao","malita","malolos","malungun","maluso","malvar","mamatid","mamburao","manaoag","manapla","manay","mandaluyong city","mandaue city","mangaldan","manibaug pasig","manila","mankayan","manolo fortich","mansalay","mansilingan","mantampay","maragondon","maramag","marawi city","mariano","marilao","mariveles","masantol","masbate","masinloc","mati","mauban","mendez-nunez","mercedes","mexico","meycauayan","midsayap","minglanilla","molave","monkayo","morong","munoz","murcia","muricay","nabua","nabunturan","naga","nagcarlan","naic","narra","nasugbu","navotas","new corella","nia valencia","norzagaray","noveleta","obando","olongapo","orani","orion","ormoc","oroquieta","ozamiz city","paco","pacol","paete","pagadian","pagalungan","pagbilao","palayan city","palo","panabo","panalanoy","pandacaqui","pandan","pandi","pangil","paniqui","pantubig","paombong","papaya","paraiso","paranaque city","parang","pasay","pasig city","passi","patuto","penaranda","pila","pilar","pililla","pinamalayan","pinamungahan","pio","plaridel","polangui","polomolok","porac","port area","puerto princesa","pulilan","pulong santa cruz","pulupandan","quezon","quezon city","quiapo","ramon","ramos","recodo","rizal","rodriguez","romblon","roxas","roxas city","sablayan","sagay","samal","sampaloc","san antonio","san fernando","san francisco","san ildefonso","san jose","san jose del monte","san juan","san leonardo","san luis","san marcelino","san mariano","san mateo","san miguel","san narciso","san nicolas","san pablo","san pascual","san pedro","san simon","san vicente","santa ana","santa barbara","santa catalina","santa cruz","santa maria","santa rosa","santiago","santo tomas","santol","saravia","sariaya","sexmoan","sibulan","silang","sipalay","sitangkai","solana","solano","sorsogon","suay","subic","sumag","surallah","surigao","taal","tabaco","tabuk","tacloban","tacurong","tagas","tagaytay","tagbilaran city","tagoloan","tagudin","taguig","talacogon","talavera","talisay","taloc","tanauan","tanay","tandag","tangub","tanjay","tanza","tarlac city","tayabas","taytay","telabastagan","teresa","ternate","tinongan","tiwi","toledo","trento","tuguegarao","tunasan","tupi","ualog","upper bicutan","urdaneta","veruela","victoria","victorias","vigan","virac","wao","zamboanga"],"PN":["adamstown"],"PL":["aleksandrow lodzki","andrychow","augustow","bartoszyce","bedzin","belchatow","bemowo","biala podlaska","bialogard","bialoleka","bialystok","bielany","bielawa","bielsk podlaski","bielsko-biala","bierun","bilgoraj","bochnia","bogatynia","boguszow-gorce","boleslawiec","braniewo","brodnica","brzeg","brzesko","busko-zdroj","bydgoszcz","bytom","bytow","chelm","chelmno","chelmza","chodziez","chojnice","chorzow","choszczno","chrzanow","ciechanow","cieszyn","czechowice-dziedzice","czeladz","czerwionka-leszczyny","czestochowa","dabrowa gornicza","debica","deblin","dzialdowo","dzierzoniow","elblag","elk","fordon","garwolin","gdansk","gdynia","gierloz","gizycko","gliwice","glogow","glowno","glucholazy","gniezno","goleniow","gorlice","gorzow wielkopolski","gostyn","gostynin","grajewo","grodzisk mazowiecki","grudziadz","gryfice","gryfino","gubin","hajnowka","hrubieszow","ilawa","inowroclaw","jarocin","jaroslaw","jaslo","jastrzebie zdroj","jawor","jaworzno","jedrzejow","jelcz","jelcz laskowice","jelenia gora","jozefow","kabaty","kalisz","kamienna gora","kartuzy","katowice","kedzierzyn-kozle","ketrzyn","kety","kielce","klodzko","kluczbork","knurow","kobylka","kolo","kolobrzeg","konin","konskie","konstancin-jeziorna","konstantynow lodzki","koscian","koscierzyna","kostrzyn nad odra","koszalin","kozanow","kozienice","krakow","krapkowice","krasnik","krasnystaw","krosno","krotoszyn","kutno","kwidzyn","lancut","lapy","lask","laziska gorne","lebork","leczna","leczyca","ledziny","legionowo","legnica","leszno","libiaz","lidzbark warminski","lodz","lomianki","lomza","lowicz","luban","lubartow","lubin","lublin","lubliniec","lubon","lukow","malbork","marki","miedzyrzec podlaski","miedzyrzecz","mielec","mikolow","milanowek","minsk mazowiecki","mlawa","mokotow","mragowo","myslenice","myslowice","myszkow","naklo nad notecia","namyslow","nisko","nowa ruda","nowa sol","nowogard","nowy dwor mazowiecki","nowy sacz","nowy targ","nowy tomysl","nysa","oborniki","ochota","olawa","olecko","olesnica","olkusz","olsztyn","opoczno","opole","orzesze","osiedle kosmonautow","ostroda","ostroleka","ostrow mazowiecka","ostrow wielkopolski","ostrowiec swietokrzyski","oswiecim","otwock","ozorkow","pabianice","piaseczno","piastow","piekary slaskie","pila","pionki","piotrkow trybunalski","pisz","pleszew","plock","plonsk","police","polkowice","poznan","praga polnoc","praga poludnie","prudnik","pruszcz gdanski","pruszkow","przasnysz","przemysl","przeworsk","pszczyna","pulawy","pultusk","pyskowice","raciborz","radlin","radom","radomsko","radzionkow","radzyn podlaski","rawa mazowiecka","rawicz","reda","rejon placu grunwaldzkiego","rejon placu swietego macieja","rejon ulicy traugutta","rembertow","ropczyce","rozanka-polanka","ruda slaska","rumia","rybnik","rydultowy","rypin","rzeszow","sandomierz","sanok","siedlce","siemianowice slaskie","siemiatycze","sieradz","sierpc","skarzysko-kamienna","skawina","skierniewice","slubice","slupsk","sochaczew","sokolka","sokolow podlaski","solec kujawski","sopot","sosnowiec","srem","sroda wielkopolska","srodmiescie","stalowa wola","starachowice","stargard","starogard gdanski","staszow","strzegom","strzelce opolskie","sulechow","sulejowek","suwalki","swarzedz","swidnica","swidnik","swidwin","swiebodzice","swiebodzin","swiecie","swietochlowice","swinoujscie","szamotuly","szczecin","szczecinek","szczytno","targowek","tarnobrzeg","tarnow","tarnowskie gory","tczew","tomaszow lubelski","tomaszow mazowiecki","torun","trzcianka","trzebinia","turek","tychy","ursus","ursynow","ustka","ustron","wadowice","wagrowiec","walbrzych","walcz","warsaw","wawer","wejherowo","wesola","wieliczka","wielun","wlochy","wloclawek","wodzislaw slaski","wola","wolomin","wroclaw","wrzesnia","wyszkow","zabki","zabkowice slaskie","zabrze","zagan","zakopane","zambrow","zamosc","zary","zawiercie","zdunska wola","zgierz","zgorzelec","zielona gora","zielonka","zlotoryja","zlotow","zoliborz","zory","zyrardow","zywiec"],"PT":["aguas santas","albufeira","alcabideche","alcobaca","alfena","alfragide","alges","algueirao","almada","alvalade","amadora","amora","arcos de valdevez","arrentela","aveiro","azeitao","baguim do monte","baiao","barcelos","barreiro","beja","belas","benfica","bougado","braga","braganca","cabeceiras de basto","cacem","caldas da rainha","camara de lobos","camarate","canico","canidelo","caparica","carcavelos","carnaxide","cascais","castelo branco","charneca de caparica","chaves","coimbra","condeixa-a-nova","corroios","covilha","custoias","entroncamento","ermesinde","espinho","esposende","estoril","evora","fafe","fanzeres","faro","feira","felgueiras","figueira da foz","funchal","gondomar","guarda","guimaraes","ilhavo","lagos","laranjeiro","lavradio","leca da palmeira","leca do bailio","leiria","linda-a-velha","lisbon","loule","loures","maia","marinha grande","massama","matosinhos","moita","moncao","monsanto","monte estoril","montijo","moscavide e portela","odivelas","oeiras","olhao","olivais","oliveira do douro","ovar","paco de arcos","palmela","parede","paredes","pedroso","peniche","piedade","pinhal novo","pombal","ponta delgada","ponte de lima","pontinha","portalegre","portimao","porto","povoa de santa iria","povoa de varzim","quarteira","queluz","quinta do conde","ramada","rio de mouro","rio tinto","sacavem","santa iria da azoia","santarem","santo antonio dos olivais","sao domingos de rana","sao joao da madeira","sao joao da talha","sao mamede de infesta","sao martinho","sao pedro da cova","senhora da hora","sequeira","sesimbra","setubal","sintra","tavira","tomar","torres novas","torres vedras","trofa","valongo","vialonga","viana do castelo","vila do conde","vila franca de xira","vila nova de gaia","vila real","vilar de andorinho","viseu"],"PR":["aguadilla","arecibo","barceloneta","bayamon","caguas","candelaria","carolina","catano","cayey","fajardo","guayama","guaynabo","humacao","levittown","manati","mayaguez","ponce","san juan","trujillo alto","vega baja","yauco"],"QA":["al khawr","al wakrah","ar rayyan","doha","umm salal muhammad"],"CG":["brazzaville","dolisie","gamboma","impfondo","kayes","loandjili","madingou","mossendjo","ouesso","owando","pointe-noire","sibiti"],"RE":["la possession","le port","le tampon","piton saint-leu","saint-andre","saint-benoit","saint-denis","saint-joseph","saint-leu","saint-louis","saint-paul","saint-pierre","sainte-marie","sainte-suzanne"],"RO":["adjud","aiud","alba iulia","alexandria","arad","bacau","baia mare","baia sprie","baicoi","bailesti","bals","barlad","bistrita","blaj","bocsa","borsa","botosani","brad","braila","brasov","breaza","bucharest","buftea","buhusi","buzau","calafat","campia turzii","campina","campulung moldovenesc","caracal","caransebes","carei","cernavoda","cisnadie","cluj-napoca","codlea","comanesti","constanta","corabia","craiova","cugir","curtea de arges","dej","deva","dorohoi","dragasani","drobeta-turnu severin","fagaras","falticeni","fetesti","fetesti-gara","filiasi","focsani","gaesti","galati","gheorgheni","gherla","giurgiu","gura humorului","hunedoara","husi","iasi","ludus","lugoj","lupeni","mangalia","medgidia","medias","miercurea-ciuc","mioveni","mizil","moinesti","moreni","motru","navodari","ocna mures","odorheiu secuiesc","oltenita","oradea","orastie","pantelimon","pascani","petrila","petrosani","piatra neamt","pitesti","ploiesti","popesti-leordeni","radauti","ramnicu sarat","ramnicu valcea","rasnov","reghin-sat","resita","roman","rosiorii de vede","sacele","salonta","satu mare","sebes","sector 1","sector 2","sector 3","sector 4","sector 5","sector 6","sfantu gheorghe","sibiu","sighetu marmatiei","sighisoara","simleu silvaniei","slatina","slobozia","suceava","targoviste","targu jiu","targu neamt","targu secuiesc","targu-mures","tarnaveni","tecuci","timisoara","tulcea","turda","turnu magurele","urziceni","vaslui","vatra dornei","viseu de sus","voluntari","vulcan","zalau","zarnesti","zimnicea"],"RU":["abakan","abaza","abdulino","abinsk","achinsk","achkhoy-martan","adler","admiralteisky","afipskiy","agidel","aginskoye","agryz","akademgorodok","akademicheskoe","akhtubinsk","akhtyrskiy","aksay","al'met'yevsk","alagir","alapayevsk","alatyr","aldan","aleksandrov","aleksandrovsk","aleksandrovskoye","alekseyevka","aleksin","alexeyevka","aleysk","altuf'yevskiy","amin'yevo","amursk","anadyr","anapa","andreyevskoye","angarsk","anna","annino","anzhero-sudzhensk","apatity","aprelevka","apsheronsk","aramil","ardon","argun","arkhangel'sk","armavir","arsen'yev","arsk","artem","artemovskiy","arzamas","arzgir","asbest","asha","asino","astrakhan","atkarsk","avtovo","avtury","aykhal","azov","babushkin","bagayevskaya","bakal","baksan","balabanovo","balakovo","balashikha","balashov","balezino","baltiysk","barabinsk","barnaul","barysh","bataysk","bavly","baykal'sk","baymak","belaya glina","belaya kalitva","belebey","belev","belgorod","belidzhi","belogorsk","beloozyorskiy","belorechensk","beloretsk","belovo","beloyarskiy","berdsk","berezniki","berezovka","berezovskiy","beryozovsky","beslan","bezenchuk","bezhetsk","bibirevo","bikin","birobidzhan","birsk","biryulevo","biryulevo zapadnoye","biysk","blagodarnyy","blagoveshchensk","bobrov","bodaybo","bogdanovich","bogoroditsk","bogorodsk","bogorodskoye","bogotol","boguchar","boksitogorsk","bol'shaya setun","bol'shoy kamen","bologoye","bolotnoye","bor","borisoglebsk","borodino","borovichi","borovskiy","borzya","brateyevo","bratsk","bronnitsy","bryansk","bryukhovetskaya","budyonnovsk","bugulma","buguruslan","buinsk","buturlinovka","buy","buynaksk","buzuluk","centralniy","chapayevsk","chaykovskiy","chebarkul","cheboksary","chegem","chekhov","chelyabinsk","cheremkhovo","cheremushki","cherepanovo","cherepovets","cherkessk","chernaya rechka","chernogolovka","chernogorsk","chernushka","chernyakhovsk","chernyanka","chertanovo yuzhnoye","chishmy","chistopol","chita","chudovo","chunskiy","chusovoy","dachnoye","dagestanskiye ogni","dagomys","dalnegorsk","dalnerechensk","danilov","dankov","davlekanovo","davydkovo","dedovsk","degtyarsk","derbent","desnogorsk","dimitrovgrad","dinskaya","divnogorsk","divnoye","dmitrov","dobryanka","dolgoprudnyy","domodedovo","donetsk","donskoy","donskoye","dorogomilovo","dubna","dubovka","dudinka","dugulubgey","dyat'kovo","dyurtyuli","dzerzhinsk","dzerzhinskiy","dzerzhinsky","ekazhevo","elektrogorsk","elektrostal","elektrougli","elista","enem","engels","ezhva","fedorovskiy","fili","finlyandskiy","fokino","frolovo","fryazevo","fryazino","furmanov","gagarin","galich","gatchina","gavrilov-yam","gay","gelendzhik","georgiyevsk","giaginskaya","glazov","gol'yanovo","golitsyno","gorelovo","gorno-altaysk","gornyak","gorodets","gorodishche","goryachevodskiy","goryachiy klyuch","grazhdanka","gribanovskiy","groznyy","gryazi","gryazovets","gubakha","gubkin","gubkinskiy","gudermes","gukovo","gul'kevichi","gur'yevsk","gus'-khrustal'nyy","gusev","gusinoozyorsk","igra","il'skiy","ilanskiy","inozemtsevo","inza","ipatovo","irbit","irkutsk","isakogorka","ishim","ishimbay","iskitim","istra","ivanovo","ivanovskoye","ivanteyevka","ivdel","izberbash","izhevsk","izluchinsk","izmaylovo","izobil'nyy","kabanovo","kachkanar","kalach","kalach-na-donu","kalachinsk","kaliningrad","kalininsk","kalininskiy","kaltan","kaluga","kamen'-na-obi","kamensk-shakhtinsky","kamensk-ural'skiy","kamyshin","kamyshlov","kamyzyak","kanash","kandalaksha","kanevskaya","kansk","kantyshevo","kapotnya","karabanovo","karabash","karabulak","karachayevsk","karachev","karasuk","karpinsk","kartaly","kashin","kashira","kasimov","kasli","kaspiysk","kastanayevo","katav-ivanovsk","kataysk","kavalerovo","kayyerkan","kazan","kedrovka","kemerovo","khabarovsk","khabarovsk vtoroy","khadyzhensk","khanty-mansiysk","kharabali","khasavyurt","khimki","kholmsk","kholmskiy","khoroshevo-mnevniki","khosta","khot'kovo","kimovsk","kimry","kinel","kinel'-cherkassy","kineshma","kingisepp","kireyevsk","kirishi","kirov","kirovgrad","kirovo-chepetsk","kirovsk","kirsanov","kirzhach","kiselevsk","kislovodsk","kizel","kizilyurt","kizlyar","klimovsk","klin","klintsy","kochenevo","kochubeyevskoye","kodinsk","kogalym","kokhma","kol'chugino","kolomenskoye","kolomna","kolomyagi","kolpashevo","kolpino","komendantsky aerodrom","kommunar","komsomolsk-on-amur","konakovo","kondopoga","konstantinovsk","kopeysk","korenovsk","korkino","korolev","korsakov","koryazhma","kosaya gora","kostomuksha","kostroma","kotel'nich","kotel'niki","kotel'nikovo","kotlas","kotlovka","kotovo","kotovsk","kovdor","kovrov","kovylkino","koz'modem'yansk","kozel'sk","kozeyevo","kozhukhovo","krasnaya glinka","krasnoarmeysk","krasnoarmeyskaya","krasnodar","krasnogorsk","krasnogvardeyskoye","krasnogvargeisky","krasnokamensk","krasnokamsk","krasnoobsk","krasnoturinsk","krasnoufimsk","krasnoural'sk","krasnovishersk","krasnoyarsk","krasnoye selo","krasnoznamensk","krasnyy sulin","krestovskiy ostrov","kronstadt","kropotkin","krymsk","kstovo","kubinka","kudepsta","kudrovo","kudymkar","kukmor","kulebaki","kulunda","kumertau","kungur","kupchino","kupino","kur'yanovo","kurchaloy","kurchatov","kurgan","kurganinsk","kurortnyy","kurovskoye","kursk","kurtamysh","kusa","kushchyovskaya","kushva","kuskovo","kuvandyk","kuybyshev","kuz'minki","kuznetsk","kyakhta","kyshtym","kyzyl","l'govskiy","labinsk","labytnangi","lakinsk","langepas","lazarevskoye","lebedyan","lefortovo","leningradskaya","leninogorsk","leninsk","leninsk-kuznetsky","leninskiye gory","lensk","leonovo","lermontov","lesnoy","lesosibirsk","lesozavodsk","levoberezhnyy","lianozovo","likhobory","likino-dulevo","linevo","lipetsk","liski","livny","lobnya","lodeynoye pole","lomonosov","losino-petrovskiy","luchegorsk","luga","lukhovitsy","luzhniki","lyantor","lys'va","lyskovo","lytkarino","lyubertsy","lyublino","lyudinovo","magadan","magnitogorsk","makhachkala","malakhovka","malgobek","maloyaroslavets","manturovo","mar'ino","mariinsk","markova","marks","matveyevskoye","maykop","mayma","mednogorsk","medvedevo","medvedovskaya","medvezh'yegorsk","megion","melenki","meleuz","mendeleyevsk","menzelinsk","metallostroy","metrogorodok","mezgor'e","mezhdurechensk","miass","michurinsk","mikhalkovo","mikhaylovka","mikhaylovsk","millerovo","mineralnye vody","minusinsk","mirny","mirnyy","monchegorsk","monino","morozovsk","morshansk","moscow","moskovskiy","mostovskoy","mozdok","mozhaysk","mozhga","mtsensk","muravlenko","murmansk","murom","myski","mytishchi","naberezhnyye chelny","nadym","nagornyy","nakhabino","nakhodka","nalchik","nar'yan-mar","naro-fominsk","nartkala","nazarovo","nazran","neftegorsk","neftekamsk","neftekumsk","nefteyugansk","nelidovo","nerchinsk","nerekhta","neryungri","nesterovskaya","nev'yansk","nevel","nevel'sk","nevinnomyssk","nezlobnaya","nikel","nikol'sk","nikol'skoye","nikolayevsk","nikolayevsk-on-amure","nikulino","nizhnekamsk","nizhnesortymskiy","nizhneudinsk","nizhnevartovsk","nizhniy lomov","nizhniy novgorod","nizhny tagil","nizhnyaya salda","nizhnyaya tura","noginsk","norilsk","novaya balakhna","novaya derevnya","novaya usman","novo-peredelkino","novoaleksandrovsk","novoaltaysk","novoanninskiy","novocheboksarsk","novocherkassk","novodvinsk","novogireyevo","novokhovrino","novokubansk","novokuybyshevsk","novokuz'minki","novokuznetsk","novomichurinsk","novomoskovsk","novopavlovsk","novopokrovskaya","novorossiysk","novoshakhtinsk","novosibirsk","novosilikatnyy","novotitarovskaya","novotroitsk","novoul'yanovsk","novoural'sk","novouzensk","novovladykino","novovoronezh","novozybkov","novy oskol","novyy urengoy","novyye cheremushki","novyye kuz'minki","noyabrsk","nurlat","nyagan","nyandoma","nytva","ob","obninsk","obruchevo","obukhovo","ochakovo-matveyevskoye","ocher","odintsovo","okha","oktyabr'sk","oktyabrsky","olenegorsk","omsk","omutninsk","onega","orekhovo-borisovo","orekhovo-borisovo severnoye","orekhovo-zuyevo","orel","orenburg","orlovskiy","orsk","osa","osinniki","ostankinskiy","ostashkov","ostrogozhsk","ostrov","otradnaya","otradnoye","otradnyy","ozerki","ozersk","ozery","pallasovka","parnas","partizansk","pashkovskiy","pavlovo","pavlovsk","pavlovskaya","pavlovskiy posad","pechora","penza","pereslavl'-zalesskiy","perm","persianovka","pervouralsk","pestovo","peterhof","petrodvorets","petrogradka","petropavlovsk-kamchatsky","petrovsk","petrovsk-zabaykal'skiy","petrovskaya","petrozavodsk","petushki","pikalevo","plast","plavsk","pochep","podolsk","podporozh'ye","pokachi","pokhvistnevo","pokrov","pokrovskoye-streshnevo","polevskoy","polyarnyy","polyarnyye zori","polysayevo","poronaysk","povorino","poykovskiy","presnenskiy","pridonskoy","primorsko-akhtarsk","priozersk","privolzhsk","privolzhskiy","priyutovo","prokhladnyy","prokop'yevsk","proletarsk","promyshlennaya","protvino","pskov","pugachev","pushchino","pushkin","pushkino","pyatigorsk","pyt-yakh","raduzhny","raduzhnyy","ramenki","ramenskoye","rasskazovo","raychikhinsk","rayevskiy","razumnoye","reftinskiy","reutov","revda","rezh","rodniki","roshal","roslavl","rossosh","rostokino","rostov","rostov-na-donu","rtishchevo","rublevo","rubtsovsk","ruzayevka","ryazan","ryazanskiy","ryazhsk","rybatskoye","rybinsk","rybnoye","ryl'sk","rzhev","safonovo","saint petersburg","sal'sk","salavat","salekhard","samara","sampsonievskiy","saraktash","saransk","sarapul","saratov","sarov","sasovo","satka","sayanogorsk","sayansk","segezha","sel'tso","semenov","semenovskoye","semikarakorsk","semiluki","serdobsk","sergach","sergiyev posad","serov","serpukhov","sertolovo","sestroretsk","setun","severnyy","severo-zadonsk","severobaykal'sk","severodvinsk","severomorsk","severoural'sk","seversk","severskaya","shadrinsk","shakhty","shakhun'ya","shali","shar'ya","sharypovo","shatura","shchekino","shcherbinka","shchigry","shchukino","shchyolkovo","shebekino","sheksna","shelekhov","shilovo","shimanovsk","shumerlya","shumikha","shushary","shushenskoye","shuya","sibay","sim","skhodnya","skopin","slantsy","slavgorod","slavyansk-na-kubani","slobodka","slobodskoy","slyudyanka","smolensk","snezhinsk","sobinka","sochi","sofrino","sokol","sokol'niki","sol'-iletsk","solikamsk","solnechnogorsk","solntsevo","sorochinsk","sortavala","sosnogorsk","sosnovaya polyana","sosnovka","sosnovoborsk","sosnovyy bor","sovetsk","sovetskaya gavan","sovetskiy","spassk-dal'niy","sredneuralsk","staraya derevnya","staraya kupavna","staraya russa","starodub","starominskaya","staroshcherbinovskaya","staryy malgobek","staryy oskol","stavropol","sterlitamak","strezhevoy","strogino","stroitel","strunino","stupino","sukhinichi","sukhoy log","sunzha","surgut","surkhakhi","surovikino","suvorov","suvorovskaya","suzun","svetlanovskiy","svetlograd","svetlyy","svetogorsk","sviblovo","svobodnyy","svobody","syktyvkar","sysert","syzran","taganrog","taganskiy","tal'menka","talitsa","talnakh","tambov","tara","tarko-sale","tashtagol","tatarsk","tavda","tayga","tayshet","tbilisskaya","tekstil'shchiki","temryuk","terek","teykovo","tikhoretsk","tikhvin","timashyovsk","tobolsk","toguchin","tolyatti","tomilino","tomsk","topki","torzhok","tosno","trekhgornyy","troitsk","troitskaya","troparevo","trubchevsk","trudovoye","tsaritsyno","tsimlyansk","tsotsin-yurt","tuapse","tuchkovo","tula","tulun","turinsk","tutayev","tuymazy","tver","tynda","tyoply stan","tyrnyauz","tyumen","uchaly","uchkeken","udachny","udomlya","ufa","uglich","ukhta","ulan-ude","ulyanovsk","unecha","untolovo","uray","uritsk","urus-martan","uryupinsk","usinsk","usman","usol'ye-sibirskoye","ussuriysk","ust'-dzheguta","ust'-ilimsk","ust'-katav","ust'-kut","ust'-labinsk","uva","uvarovo","uzhur","uzlovaya","vagonoremont","valday","valuyki","vanino","vasil'yevo","vasyl'evsky ostrov","vatutino","vel'sk","velikiy novgorod","velikiy ustyug","velikiye luki","venev","vereshchagino","verkhniy ufaley","verkhnyaya pyshma","verkhnyaya salda","veshnyaki","vichuga","vidnoye","vikhorevka","vilyuchinsk","vladikavkaz","vladimir","vladivostok","vnukovo","vol'sk","volgodonsk","volgograd","volgorechensk","volkhov","vologda","volokolamsk","volzhsk","volzhsky","vorgashor","vorkuta","vorob'yovo","voronezh","voskresensk","vostochnoe degunino","vostryakovo","votkinsk","vrangel","vsevolozhsk","vyatskiye polyany","vyaz'ma","vyazemskiy","vyazniki","vyborg","vykhino-zhulebino","vyksa","vyselki","vyshniy volochek","yablonovskiy","yagry","yakutsk","yalutorovsk","yanaul","yaransk","yaroslavl","yaroslavskiy","yarovoye","yartsevo","yasenevo","yashkino","yasnogorsk","yasnyy","yefremov","yegor'yevsk","yegorlykskaya","yekaterinburg","yelabuga","yelan","yelets","yelizavetinskaya","yelizovo","yemanzhelinsk","yemva","yeniseysk","yershov","yessentuki","yessentukskaya","yeysk","yoshkar-ola","yubileyny","yugorsk","yur'yev-pol'skiy","yurga","yuzhno-sakhalinsk","yuzhnoural'sk","yuzhnyy","zagor'ye","zainsk","zamoskvorech'ye","zapolyarnyy","zaraysk","zarechnyy","zarinsk","zarya","zavety il'icha","zavodoukovsk","zavolzh'ye","zelenchukskaya","zelenodolsk","zelenogorsk","zelenograd","zelenogradsk","zelenokumsk","zernograd","zeya","zheleznodorozhnyy","zheleznogorsk","zheleznogorsk-ilimskiy","zheleznovodsk","zherdevka","zhigulevsk","zhirnovsk","zhukovka","zhukovsky","zhulebino","zima","zimovniki","zlatoust","znamensk","zvenigorod","zverevo","zyablikovo","zyuzino"],"RW":["butare","byumba","cyangugu","gisenyi","gitarama","kibungo","kibuye","kigali","musanze","nzega","rwamagana"],"BL":["gustavia"],"SH":["jamestown"],"KN":["basseterre"],"LC":["castries"],"MF":["marigot"],"PM":["saint-pierre"],"VC":["kingstown","kingstown park"],"WS":["apia"],"SM":["san marino"],"ST":["sao tome"],"SA":["abha","abqaiq","abu 'arish","ad dawadimi","ad dilam","afif","al bahah","al battaliyah","al bukayriyah","al hufuf","al jubayl","al jumum","al khafji","al kharj","al mithnab","al mubarraz","al munayzilah","al qatif","al wajh","al-`ula","an nimas","ar rass","arar","as sulayyil","ash shafa","at taraf","az zulfi","badr hunayn","bariq","buraydah","dammam","dhahran","duba","ha'il","hafar al-batin","jeddah","jizan","khamis mushait","khobar","mecca","medina","najran","qaisumah","qal'at bishah","qurayyat","rabigh","rahimah","riyadh","sabt alalayah","sabya","safwa","sakakah","samitah","sayhat","sultanah","ta'if","tabuk","tarut","tubarjal","turabah","turaif","umluj","yanbu"],"SN":["bignona","dakar","dara","guinguineo","joal-fadiout","kaffrine","kaolack","kayar","kedougou","kolda","louga","matam","mbake","mekhe","n'diareme limamoulaye","ndibene dahra","nguekhokh","nioro du rip","pikine","pourham","pout","richard-toll","saint-louis","sedhiou","tambacounda","thies","thies nones","tiebo","touba","velingara","ziguinchor"],"RS":["apatin","arandelovac","backa palanka","backa topola","becej","belgrade","bor","cacak","cuprija","gornji milanovac","indija","jagodina","kikinda","knjazevac","kragujevac","kraljevo","krusevac","lazarevac","leskovac","negotin","nis","nova pazova","novi pazar","novi sad","obrenovac","pancevo","pirot","pozarevac","prokuplje","ruma","sabac","senta","smederevo","smederevska palanka","sombor","sremcica","sremska mitrovica","stara pazova","subotica","trstenik","uzice","valjevo","vranje","vrbas","vrsac","zajecar","zemun","zrenjanin"],"SC":["victoria"],"SL":["bo","bumpe","freetown","goderich","kabala","kenema","koidu","lunsar","makeni","port loko","segbwema","waterloo"],"SG":["geylang","marine parade","queenstown estate","singapore","woodlands"],"SX":["philipsburg"],"SK":["banovce nad bebravou","banska bystrica","bardejov","bratislava","brezno","cadca","dolny kubin","dubnica nad vahom","dunajska streda","galanta","handlova","hlohovec","humenne","kezmarok","komarno","kosice","kysucke nove mesto","levice","liptovsky mikulas","lucenec","malacky","martin","michalovce","nitra","nove mesto nad vahom","nove zamky","partizanske","pezinok","piestany","poprad","povazska bystrica","presov","prievidza","puchov","rimavska sobota","roznava","ruzomberok","sala","senica","skalica","snina","spisska nova ves","stara lubovna","stare mesto","stupava","trebisov","trencin","trnava","vranov nad toplou","ziar nad hronom","zilina","zlate moravce","zvolen"],"SI":["celje","koper","kranj","ljubljana","maribor","novo mesto","ptuj","trbovlje","velenje"],"SB":["honiara"],"SO":["afgooye","baardheere","baidoa","baki","balanbale","beled hawo","beledweyne","berbera","bosaso","burao","buulobarde","buurhakaba","cabudwaaq","ceeldheer","ceerigaabo","dhabad","diinsoor","eyl","gaalkacyo","garoowe","hargeysa","jamaame","jawhar","jilib","kismayo","laascaanood","luuq","marka","mogadishu","qandala","qoryooley","saaxo","wanlaweyn"],"ZA":["alberton","aliwal north","allanridge","atlantis","balfour","ballito","barberton","beaufort west","bela bela","benoni","bethal","bethlehem","bhisho","bloemfontein","bloemhof","boksburg","bothaville","botshabelo","brakpan","brits","bronkhorstspruit","butterworth","cape town","carletonville","centurion","ceres","christiana","cradock","cullinan","de aar","delmas","diepsloot","driefontein","duiwelskloof","dundee","durban","east london","edenvale","ekangala","emalahleni","embalenhle","emkhomazi","empangeni","ermelo","esikhaleni","fochville","fort beaufort","ga-rankuwa","george","giyani","graaff-reinet","grabouw","grahamstown","harrismith","heidelberg","heilbron","hendrina","hennenman","hermanus","howick","johannesburg","kimberley","klerksdorp","knysna","kokstad","komatipoort","kraaifontein","kriel","kroonstad","krugersdorp","kruisfontein","kutloanong","kwadukuza","lady frere","ladybrand","lansdowne","lebowakgomo","lichtenburg","louis trichardt","lydenburg","mabopane","malmesbury","margate","middelburg","midrand","midstream","mmabatho","modimolle","mokopane","mondlo","montagu","mossel bay","mpophomeni","mpumalanga","mthatha","nelspruit","newcastle","nigel","nkowakowa","oudtshoorn","paarl","pampierstad","parys","phalaborwa","phuthaditjhaba","piet retief","pietermaritzburg","pinetown","plettenberg bay","polokwane","port alfred","port elizabeth","port shepstone","postmasburg","potchefstroom","pretoria","queensdale","queenstown","randburg","randfontein","reitz","retreat","richards bay","richmond","riverlea","riversdale","robertson","rondebosch","roodepoort","rustenburg","saldanha","sasolburg","schweizer-reneke","scottburgh","secunda","senekal","siyabuswa","somerset east","soweto","springs","standerton","stellenbosch","stilfontein","stutterheim","tembisa","thaba nchu","theunissen","thohoyandou","tzaneen","uitenhage","ulundi","upington","vanderbijlpark","vereeniging","viljoenskroon","virginia","volksrust","vredenburg","vryburg","vryheid","warrenton","welkom","wellington","wesselsbron","westonaria","white river","wolmaransstad","worcester","zeerust"],"GS":["grytviken"],"KR":["andong","ansan-si","anseong","anyang-si","asan","beolgyo","boryeong","bucheon-si","busan","buyeo","changnyeong","changsu","changwon","cheonan","cheongju-si","cheongsong gun","chinch'on","chinju","chuncheon","chungju","daegu","daejeon","donghae city","eisen","gaigeturi","ganghwa-gun","gangneung","gapyeong","gijang","gimcheon","gongju","goseong","goyang-si","gumi","gunpo","gunsan","guri-si","gwangju","gwangmyeong","gyeongju","gyeongsan-si","haenam","hanam","hayang","heunghae","hongch'on","hongseong","hwacheon","hwado","hwaseong-si","hwasun","hwawon","icheon-si","iksan","imsil","incheon","jeju city","jenzan","jeongeup","jeonju","jinan-gun","jumunjin","kimhae","kimje","kinzan","koch'ang","koesan","kosong","kunwi","kurye","kwangyang","kyosai","masan","miryang","mokpo","muan","mungyeong","munsan","naeso","naju","namyangju","nangen","neietsu","nonsan","okcheon","osan","pohang","puan","pubal","sangju","santyoku","sejong","seogwipo","seonghwan","seongnam-si","seosan","seoul","sinan","sinhyeon","sokcho","suncheon","suwon","t'aebaek","taesal-li","tangjin","uijeongbu-si","ulsan","ungsang","wabu","waegwan","wanju","wonju","yanggu","yangju","yangp'yong","yangsan","yeoju","yeongam","yeongdong","yeonggwang","yeongju","yeonil","yeosu","yesan","yonmu"],"SS":["aweil","bor","gogrial","juba","kafia kingi","kuacjok","leer","malakal","pajok","rumbek","tonj","torit","wau","winejok","yambio","yei"],"ES":["a coruna","a estrada","adeje","adra","aguilas","aguimes","alaquas","albacete","albal","albolote","alboraya","alcala de guadaira","alcala de henares","alcala la real","alcaniz","alcantarilla","alcazar de san juan","alcobendas","alcorcon","alcoy","alcudia","aldaia","alfafar","algeciras","algemesi","algete","algorta","alhama de murcia","alhaurin de la torre","alhaurin el grande","alicante","aljaraque","almansa","almassora","almendralejo","almeria","almonte","almoradi","almozara","almunecar","altea","alzira","amorebieta","amposta","andujar","antequera","aranda de duero","aranjuez","archena","arcos de la frontera","arenys de mar","arganda","arganzuela","armilla","arona","arrasate / mondragon","arrecife","arroyo de la miel","arroyomolinos","arteixo","arucas","aspe","atamaria","atarfe","avila","aviles","ayamonte","azuqueca de henares","badajoz","badalona","baena","baeza","bailen","balaguer","banyoles","barajas de madrid","barakaldo","baranain","barbastro","barbate","barbera del valles","barcelona","barri de les corts","barri de sant andreu","barri gotic","basauri","baza","bejar","benalmadena","benavente","benetusser","benicarlo","benicassim","benidorm","berga","berja","bermeo","betera","bilbao","blanes","boadilla del monte","boiro","bormujos","burgos","burjassot","burlata","burriana","cabra","caceres","cadiz","calafell","calahorra","calatayud","caldes de montbui","calella","callosa de segura","calp","calvia","camargo","camas","cambre","cambrils","campina","campo de criptana","candelaria","cangas do morrazo","canovelles","carabanchel","caravaca","carballo","carcaixent","cardedeu","carlet","carmona","carrizal","cartagena","cartama","cartaya","castellar del valles","castelldefels","castello de la plana","castilleja de la cuesta","castro-urdiales","catarroja","cehegin","cerdanyola del valles","ceuta","chamartin","chamberi","chiclana de la frontera","chipiona","ciempozuelos","cieza","ciudad lineal","ciudad real","ciutadella","ciutat vella","coin","collado-villalba","colmenar viejo","conil de la frontera","cordoba","coria del rio","cornella de llobregat","corvera de asturias","coslada","crevillente","cuenca","cullera","culleredo","daimiel","delicias","denia","don benito","donostia / san sebastian","dos hermanas","dreta de l'eixample","durango","ecija","eibar","eixample","ejea de los caballeros","el arahal","el astillero","el baix guinardo","el besos i el maresme","el camp d'en grassot i gracia nova","el camp de l'arpa del clot","el campello","el carmel","el clot","el ejido","el escorial","el grao","el guinardo","el masnou","el poblenou","el prat de llobregat","el puerto de santa maria","el putxet i el farro","el raval","el turo de la peira","el vendrell","el viso del alcor","elche","elda","erandio","ermitagana","ermua","errenteria","esparreguera","esplugues de llobregat","estepona","felanitx","ferrol","figueres","fort pienc","fuencarral-el pardo","fuengirola","fuenlabrada","galapagar","galdakao","galdar","gamonal","gandia","gasteiz / vitoria","gava","gernika-lumo","getafe","getxo","gijon","girona","gracia","granada","granadilla de abona","granollers","grao de murviedro","guadalajara","guadix","guardamar del segura","guia de isora","guimar","hellin","hernani","hondarribia","horta","horta-guinardo","hortaleza","hostafrancs","huelva","huercal-overa","huesca","humanes de madrid","ibi","ibiza","icod de los vinos","igualada","illescas","inca","ingenio","irun","isla cristina","iturrama","jaen","javea","jerez de la frontera","jumilla","l'alfas del pi","l'antiga esquerra de l'eixample","l'eliana","l'hospitalet de llobregat","la algaba","la barceloneta","la bonanova","la bordeta","la carolina","la guineueta","la laguna","la linea de la concepcion","la marina de port","la maternitat i sant ramon","la nova esquerra de l'eixample","la nucia","la oliva","la orotava","la pineda","la pobla de vallbona","la prosperitat","la rinconada","la roda","la sagrera","la solana","la union","la verneda i la pau","la vila de gracia","laguna de duero","lalin","las cabezas de san juan","las gabias","las palmas de gran canaria","las rozas de madrid","las torres de cotillas","las tres torres","lasarte","latina","laudio / llodio","lebrija","leganes","leioa","leon","lepe","les corts","les roquetes","linares","llefia","lleida","lliria","lloret de mar","llucmajor","logrono","loja","lora del rio","lorca","los alcazares","los barrios","los llanos de aridane","los palacios y villafranca","los realejos","lucena","lugo","madrid","madrid centro","mairena del alcor","mairena del aljarafe","majadahonda","malaga","malgrat de mar","manacor","manises","manlleu","manresa","manzanares","mao","maracena","marbella","marchena","marin","marratxi","martorell","martos","maspalomas","massamagrell","mataro","mazarron","medina del campo","mejorada del campo","melilla","merida","mieres","miguelturra","mijas","miranda de ebro","mislata","moana","mogan","moguer","molina de segura","molins de rei","mollet del valles","moncada","moncloa-aravaca","monforte de lemos","montcada i reixac","montecanal","montijo","montilla","montornes del valles","monzon","moratalaz","moron de la frontera","mostoles","motril","mula","mungia","murcia","mutxamel","naron","natahoyo","navalcarnero","navalmoral de la mata","navas","nerja","nigran","nijar","nou barris","novelda","oleiros","olesa de montserrat","oliva","oliver-valdefierro","olot","onda","ontinyent","oria","orihuela","osuna","ourense","oviedo","paiporta","pajara","palafrugell","palamos","palencia","palma","palma del rio","pamplona","parets del valles","parla","pasaia","paterna","picassent","piera","pilar de la horadada","pinar de chamartin","pineda de mar","pinto","plasencia","playa del ingles","poble sec","poio","pollenca","ponferrada","ponteareas","pontevedra","porrino","porta","portugalete","pozoblanco","pozuelo de alarcon","premia de mar","priego de cordoba","primer ensanche","provenals del poblenou","pucol","puente de vallecas","puente-genil","puerto de la cruz","puerto del carmen","puerto del rosario","puerto real","puertollano","quart de poblet","realejo alto","redondela","requena","retiro","reus","ribarroja del turia","ribeira","rincon de la victoria","ripollet","rivas-vaciamadrid","rojales","ronda","roquetas de mar","roses","rota","rubi","sabadell","sagrada familia","sagunto","salamanca","salou","salt","sama","san andres del rabanedo","san bartolome","san bartolome de tirajana","san blas-canillejas","san fernando","san fernando de henares","san isidro","san javier","san juan de aznalfarache","san lorenzo de el escorial","san martin de la vega","san miguel de abona","san pedro de alcantara","san pedro del pinatar","san roque","san sebastian de los reyes","san vicent del raspeig","sanlucar de barrameda","sant adria de besos","sant andreu","sant andreu de la barca","sant antoni","sant antoni de portmany","sant boi de llobregat","sant carles de la rapita","sant celoni","sant cugat del valles","sant feliu de guixols","sant feliu de llobregat","sant gervasi - galvany","sant joan d'alacant","sant joan despi","sant just desvern","sant marti","sant marti de provencals","sant pere de ribes","sant pere, santa caterina i la ribera","sant quirze del valles","sant vicenc dels horts","santa brigida","santa coloma de gramenet","santa cruz de la palma","santa cruz de tenerife","santa eularia des riu","santa lucia","santa perpetua de mogoda","santa pola","santa uxia de ribeira","santafe","santander","santiago de compostela","santomera","sants","sants - badal","sants-montjuic","santurtzi","santutxu","sanxenxo","sarria","sarria-sant gervasi","segovia","segundo ensanche","sesena","sestao","sevilla","silla","sitges","soria","sueca","tacoronte","talavera de la reina","tarancon","tarifa","tarragona","tarrega","tavernes de la valldigna","teguise","telde","teo","terrassa","teruel","tetuan de las victorias","tias","toledo","tolosa","tomares","tomelloso","tordera","torre del mar","torre-pacheco","torredembarra","torrejon de ardoz","torrelavega","torrelodones","torremolinos","torrent","torrevieja","torrox","tortosa","totana","tres cantos","tudela","tui","ubeda","ubrique","usera","utebo","utrera","valdemoro","valdepenas","valencia","valladolid","vallcarca","valls","velez-malaga","vic","vicalvaro","vicar","vigo","vila-real","vila-seca","viladecans","vilafranca del penedes","vilagarcia de arousa","vilalba","vilanova i la geltru","vilapicina i la torre llobeta","vilaseca","vilassar de mar","villa de vallecas","villajoyosa","villanueva de la canada","villanueva de la serena","villanueva del pardillo","villaquilambre","villarrobledo","villaverde","villaviciosa de odon","villena","vinaros","viveiro","xativa","xirivella","yecla","zafra","zamora","zaragoza","zarautz","zubia"],"LK":["ambalangoda","ampara","anuradhapura","badulla","battaramulla south","batticaloa","bentota","beruwala","chilaw","colombo","dambulla","dehiwala-mount lavinia","devinuwara","eravur town","galle","gampola","hanwella ihala","hatton","hendala","homagama","ja ela","jaffna","kalmunai","kalutara","kandana","kandy","kataragama","katunayaka","kegalle","kelaniya","kolonnawa","kotikawatta","kurunegala","maharagama","matale","matara","moratuwa","mulleriyawa","negombo","nuwara eliya","panadura","peliyagoda","pita kotte","point pedro","puttalam","ratnapura","sri jayewardenepura kotte","trincomalee","vakarai","valvedditturai","vavuniya","wattala","weligama","welisara"],"SD":["abu jibeha","abu zabad","ad dindar","ad douiem","ad-damazin","al hasaheisa","al hawatah","al hilaliyya","al manaqil","al mijlad","al qadarif","al qitena","an nuhud","ar rahad","ar ruseris","as suki","atbara","barah","berber","dilling","doka","ed damer","el bauga","el daein","el fasher","el obeid","geneina","gereida","kadugli","kassala","khartoum","kinana","kosti","kuraymah","maiurno","nyala","omdurman","port sudan","rabak","sawakin","shendi","singa","sinnar","tandalti","tokar","umm ruwaba","wad medani","zalingei"],"SR":["lelydorp","paramaribo"],"SJ":["longyearbyen"],"SE":["akersberga","alingsas","angelholm","arsta","bjorlanda","boden","boo","boras","borlange","bromma","enkoping","eskilstuna","eslov","falkenberg","falkoping","falun","gamla uppsala","gavle","goteborg","gustavsberg","halmstad","haninge","harnosand","hassleholm","helsingborg","huddinge","hudiksvall","huskvarna","jakobsberg","jonkoping","kalmar","karlshamn","karlskoga","karlskrona","karlstad","katrineholm","kinna","kiruna","koping","kristianstad","kristinehamn","kumla","kungalv","kungsbacka","kungsholmen","landskrona","lerum","lidingo","lidkoping","linkoping","ljungby","ludvika","lulea","lund","majorna","malmo","mariestad","marsta","molndal","molnlycke","motala","nacka","nassjo","norrkoping","norrtalje","nykoping","orebro","ornskoldsvik","oskarshamn","ostermalm","ostersund","partille","pitea","rasunda","sandviken","skelleftea","skovde","sodermalm","sodertalje","sollentuna","solna","staffanstorp","stockholm","sundbyberg","sundsvall","taby","tensta","trelleborg","trollhattan","tullinge","tumba","uddevalla","umea","upplands vasby","uppsala","vallentuna","vanersborg","varberg","varnamo","vasastan","vasteras","vastervik","vastra frolunda","vaxjo","visby","ystad"],"CH":["aarau","adliswil","allschwil","baar","baden","basel","bellinzona","bern","biel/bienne","bulle","burgdorf","carouge","cham","chur","dietikon","dubendorf","emmen","frauenfeld","fribourg","geneve","gossau","grenchen","herisau","horgen","jona","kloten","koniz","kreuzlingen","kriens","la chaux-de-fonds","lancy","lausanne","littau","lugano","luzern","meyrin","monthey","montreux","muttenz","neuchatel","nyon","oberwinterthur (kreis 2)","olten","onex","pully","rapperswil","renens","riehen","sankt gallen","schaffhausen","seen (kreis 3)","sierre","sitten","stadt winterthur (kreis 1)","steffisburg","thun","uster","vernier","vevey","wettingen","wetzikon","wil","winterthur","yverdon-les-bains","zug","zurich","zurich (kreis 10)","zurich (kreis 10) / hongg","zurich (kreis 10) / wipkingen","zurich (kreis 11)","zurich (kreis 11) / affoltern","zurich (kreis 11) / oerlikon","zurich (kreis 11) / seebach","zurich (kreis 12)","zurich (kreis 2)","zurich (kreis 2) / wollishofen","zurich (kreis 3)","zurich (kreis 3) / sihlfeld","zurich (kreis 4) / aussersihl","zurich (kreis 6)","zurich (kreis 6) / unterstrass","zurich (kreis 7)","zurich (kreis 8)","zurich (kreis 9)","zurich (kreis 9) / albisrieden","zurich (kreis 9) / altstetten"],"SY":["ad dana","ad darbasiyah","afrin","al bab","al hasakah","al hirak","al kiswah","al mayadin","al qaryatayn","al qunaytirah","al qusayr","al qutayfah","albu kamal","aleppo","an nabk","ar raqqah","ar rastan","as safirah","as salamiyah","as sanamayn","as-suwayda","at tall","ath thawrah","ayn al 'arab","az zabadani","baniyas","batabo","binnish","damascus","dar'a","darayya","dayr hafir","deir ez-zor","duma","hajin","halfaya","hamah","harasta","homs","i'zaz","idlib","inkhil","irbin","jablah","jarabulus","jasim","jayrud","jisr ash shughur","kabbasin","kafr laha","kafr takharim","kafr zayta","kafranbel","khan shaykhun","latakia","ma'arratmisrin","manbij","masyaf","nubl","qarah","qatana","safita","salqin","saraqib","shaykh miskin","subaykhan","suran","tadif","tadmur","tafas","tall rif'at","tallbisah","tallkalakh","tartus","tayyibat al imam","yabrud"],"TW":["bade","banqiao","daxi","donggang","douliu","hengchun","hsinchu","hualien city","jincheng","kaohsiung","keelung","lugu","magong","nantou","neihu","puli","sanxia","sanzhi","shulin","taichung","tainan","taipei","taoyuan city","wufeng","xizhi","yilan","yingge","yongkang","yuanlin","yujing","zhongxing new village"],"TJ":["bokhtar","boshkengash","buston","chubek","danghara","dushanbe","farkhor","hisor","hulbuk","isfara","ishqoshim","istaravshan","khorugh","khujand","kolkhozobod","konibodom","kulob","moskovskiy","norak","panjakent","proletar","qayroqqum","taboshar","tursunzoda","vahdat","vakhsh","yovon"],"TZ":["arusha","babati","bagamoyo","bariadi","bashanet","basotu","biharamulo","bugarama","bukoba","bunda","bungu","buseresere","butiama","chake chake","chala","chalinze","chanika","chato","chimala","dar es salaam","dareda","dodoma","dongobesh","galappo","geiro","geita","hedaru","ifakara","igugunu","igunga","igurusi","ikungi","ilembula","ilongero","ilula","ipinda","iringa","isaka","itigi","izazi","kabanga","kahama","kakonko","kamachumu","kasamwa","kasulu","katerero","katoro","katumba","kibaha","kibakwe","kibara","kibiti","kibondo","kidatu","kidodi","kigoma","kigonsera","kihangara","kilosa","kingori","kiomboi","kirando","kiratu","kisesa","kishapu","kitama","kiwira","kondoa","kyela","laela","lalago","lembeni","lindi","liwale","luchingu","lugoba","lukuledi","lushoto","mabama","mafinga","magole","magomeni","magugu","mahanje","makumbako","makuyuni","malampaka","malinyi","maposeni","maramba","masasi","masumbwe","maswa","matai","matiri","matui","mazinde","mbeya","mbinga","mbuguni","merelani","mgandu","mhango","mikumi","misungwi","mkuranga","mlalo","mlandizi","mlangali","mlimba","mlowo","morogoro","moshi","mpanda","mpwapwa","msowero","mtinko","mto wa mbu","mtwango","mtwara","mugumu","muheza","mungaa","muriti","musoma","mvomero","mwadui","mwandiga","mwanza","nachingwea","namanyere","nanganga","nangomba","nangwa","nanyamba","newala kisimani","ngara","ngerengere","ngudu","nguruka","njombe","nshamba","nsunga","nyakabindi","nyalikungu","nyamuswa","nyangao","nzega","old shinyanga","puma","rujewa","rulenge","same","sepuka","shelui","shinyanga","sikonge","singida","sirari","sokoni","somanda","songea","songwa","sumbawanga","tabora","tandahimba","tanga","tarime","tinde","tingi","tukuyu","tumbi","tunduma","urambo","usa river","usagara","usevia","ushirombo","uvinza","uyovu","vikindu","vwawa","wete","zanzibar"],"TH":["amnat charoen","amphoe sikhiu","aranyaprathet","ban bang kadi pathum thani","ban bueng","ban chalong","ban chang","ban dung","ban huai thalaeng","ban khlong bang sao thong","ban lam luk ka","ban mai","ban mo","ban na","ban na san","ban nong wua so","ban phaeo","ban phai","ban phan don","ban phe","ban pong","ban ratsada","ban selaphum","ban tak","ban talat bueng","ban talat nua","ban talat yai","bang ban","bang bo district","bang bua thong","bang krathum","bang kruai","bang lamung","bang len","bang mun nak","bang pa-in","bang pakong","bang phae","bang racham","bang rakam","bang saphan","bangkok","betong","bo phloi","bua yai","buri ram","cha-am","chachoengsao","chai badan","chai nat","chaiyaphum","chanthaburi","chiang mai","chiang rai","chok chai","chom bueng","chon buri","chon daen","chum phae","chumphon","damnoen saduak","dan khun thot","den chai","det udom","dok kham tai","hang dong","hat yai","hua hin","huai yot","kabin buri","kaeng khoi","kaeng khro","kalasin","kamalasai","kamphaeng phet","kanchanaburi","kantharalak","kaset sombun","kaset wisai","kathu","khanu woralaksaburi","khao wong","khao yoi","khlong luang","khon buri","khon kaen","klaeng","ko samui","krabi","krathum baen","kuchinarai","kui buri","kut chap","laem sing","lampang","lamphun","lang suan","lat yao","loei","lom sak","lop buri","mae chan","mae ramat","mae sai","mae sot","maha sarakham","makkasan","mueang nonthaburi","mukdahan","na klang","nakhon luang","nakhon nayok","nakhon pathom","nakhon phanom","nakhon ratchasima","nakhon sawan","nakhon si thammarat","nam som","nan","nang rong","narathiwat","non sung","nong bua lamphu","nong khae","nong khai","nong kung si","nong phai","pa sang","pak chong","pak kret","pak phanang","pathum thani","pattani","pattaya","phak hai","phan thong","phanat nikhom","phanom sarakham","phasi charoen","phatthalung","phayao","phetchabun","phetchaburi","phibun mangsahan","phichit","phitsanulok","phon charoen","photharam","phra nakhon si ayutthaya","phra phutthabat","phra pradaeng","phrae","phu khiao","phu kradueng","phuket","prachin buri","prachuap khiri khan","prakhon chai","pran buri","ra-ngae","ranong","ranot","ratchaburi","rayong","roi et","ron phibun","sa kaeo","sadao","sakon nakhon","sam phran","sam roi yot","samut prakan","samut sakhon","samut songkhram","san kamphaeng","san pa tong","saraburi","sattahip","satun","sawang daen din","sawankhalok","seka","si racha","si sa ket","si satchanalai","sing buri","songkhla","su-ngai kolok","sukhothai","suphan buri","surat thani","surin","tak","tak bai","taphan hin","tha bo","tha kham","tha mai","tha maka","tha muang","tha ruea","tha yang","thap khlo","thap than","thoen","thung song","trang","trat","ubon ratchathani","udon thani","uthai thani","uttaradit","wang nam yen","wang noi","wang saphung","warin chamrap","wichian buri","wichit","wiset chaichan","yala","yaring","yasothon"],"TL":["aileu","baukau","dili","likisa","lospalos","maliana","maubara","suai","venilale"],"TG":["aneho","atakpame","badou","bafilo","bassar","dapaong","kara","kpalime","lome","mango","niamtougou","notse","sokode","sotouboua","tchamba","tsevie","vogan"],"TO":["nuku'alofa"],"TT":["arima","chaguanas","laventille","marabella","mon repos","paradise","point fortin","port of spain","rio claro","san fernando","sangre grande","scarborough","tunapuna"],"TN":["akouda","al marsa","ar rudayyif","ariana","beja","bekalta","ben arous","beni khiar","bizerte","carthage","chebba","dar chabanne","djemmal","douane","douar tindja","douz","el alia","el fahs","el hamma","el jem","el kef","ezzouhour","gabes","gafsa","galaat el andeless","ghardimaou","gremda","hammam sousse","hammam-lif","hammamet","houmt el souk","jendouba","kairouan","kasserine","kebili","kelibia","korba","ksar hellal","ksour essaf","la goulette","la mohammedia","la sebala du mornag","mahdia","manouba","mateur","medenine","medjez el bab","mennzel bou zelfa","menzel abderhaman","menzel bourguiba","menzel jemil","metlaoui","midoun","monastir","msaken","nabeul","nefta","ouardenine","oued lill","rades","sfax","sidi bouzid","siliana","skanes","sousse","tajerouine","takelsa","tataouine","thala","tozeur","tunis","zaghouan","zarzis","zouila"],"TR":["adana","adapazari","adilcevaz","adiyaman","afsin","afyonkarahisar","agri","ahlat","akcaabat","akcakale","akcakoca","akdagmadeni","akhisar","aksaray","aksehir","akyazi","akyurt","alaca","alanya","alapli","alasehir","aliaga","amasya","anamur","ankara","antakya","antalya","arakli","ardahan","ardesen","arhavi","arnavutkoy","arsin","artvin","askale","atasehir","aydin","ayvalik","babaeski","bafra","bagcilar","bahcelievler","balikesir","banaz","bandirma","bartin","basaksehir","baskil","batikent","batman","bayburt","bayindir","belek","belen","bergama","besikduzu","besni","beykonak","beylikduzu","beypazari","beysehir","biga","bigadic","bilecik","bingol","birecik","bismil","bitlis","bodrum","bolu","bolvadin","bor","boyabat","bozova","bozuyuk","bozyazi","bucak","bulancak","bulanik","burdur","burhaniye","bursa","buyukcekmece","caglayancerit","can","canakkale","cankaya","cankiri","carsamba","catalca","cay","caycuma","cayeli","cerkes","cerkezkoy","cermik","cesme","ceyhan","ceylanpinar","cimin","cine","cizre","corlu","corum","cubuk","cumra","dalaman","darende","dargecit","demirci","denizciler","denizli","derince","develi","devrek","didim","dinar","diyadin","diyarbakir","dogubayazit","dortyol","dursunbey","duzce","edirne","edremit","egirdir","elazig","elbistan","eleskirt","elmadag","elmali","emet","eminonu","emirdag","erbaa","ercis","erdek","erdemli","eregli","ergani","ermenek","erzin","erzincan","erzurum","esenler","esenyurt","eskisehir","espiye","ezine","fatsa","ferizli","fethiye","foca","gaziantep","gazipasa","gebze","gediz","gelibolu","gemerek","gemlik","genc","gerede","geyve","giresun","goksun","golbasi","golcuk","gonen","gorele","gumushane","gungoren merter","gurgentepe","guroymak","gurpinar","gursu","hacilar","hadim","hakkari","havza","hayrabolu","hendek","hilvan","hinis","hizan","hopa","horasan","idil","igdir","ilgin","imamoglu","incirliova","inegol","iskenderun","iskilip","isparta","istanbul","izmir","izmit","iznik","kadinhani","kadirli","kagizman","kahramanmaras","kahta","kaman","karabaglar","karabuk","karacabey","karacoban","karakocan","karaman","karamursel","karapinar","karasu","karasu mahallesi","kars","kastamonu","kavakli","kayseri","kazan","kelkit","kemalpasa","kemer","kesan","keskin","kestel","kilis","kirikhan","kirikkale","kirkagac","kirklareli","kirsehir","kizilcahamam","kiziltepe","kocaali","konya","korfez","korgan","korkuteli","kovancilar","kozan","kozluk","kula","kulp","kulu","kumru","kurtalan","kusadasi","kutahya","lice","luleburgaz","mahmutlar","malatya","malazgirt","malkara","maltepe","manavgat","manisa","mardin","marmaris","menderes","menemen","merkezefendi","mersin","merter keresteciler","merzifon","midyat","milas","mimarsinan","mucur","mudanya","mugla","muratpasa","mus","mustafakemalpasa","mut","nallihan","nazilli","nevsehir","nigde","niksar","nizip","nusaybin","odemis","of","oltu","ordu","orhangazi","ortaca","ortakoy","osmancik","osmaneli","osmaniye","pasinler","patnos","pazarcik","polatli","reyhanli","rize","safranbolu","salihli","samsun","sancaktepe","sandikli","sanliurfa","sapanca","saraykoy","sarigerme","sarikamis","sarkikaraagac","sarkisla","sebin karahisar","seferihisar","selcuk","semdinli","senirkent","sereflikochisar","serik","serinhisar","serinyol","seydisehir","siirt","silifke","silivri","silopi","silvan","simav","sinop","sirnak","sisli","sivas","siverek","soke","solhan","soma","sorgun","sultanbeyli","sultangazi","suluova","sungurlu","surmene","suruc","susehri","susurluk","talas","tarsus","taskopru","tasova","tatvan","tavsanli","tekirdag","tekirova","tekkekoy","tepecik","terme","tire","tirebolu","tokat","torbali","tosya","trabzon","tunceli","turgutlu","turgutreis","turhal","umraniye","unye","urgup","urla","usak","uskudar","uzunkopru","vakfikebir","van","varto","vezirkopru","viransehir","yahyali","yakuplu","yalova","yalvac","yatagan","yenisehir","yerkoy","yesilli","yomra","yozgat","yuksekova","zeytinburnu","zile","zonguldak"],"TM":["abadan","anew","ashgabat","baharly","balkanabat","bayramaly","bereket","boldumsaz","dasoguz","gazojak","gowurdak","gumdag","kaka","kerki","koneurgench","mary","sayat","seydi","tagta","tejen","turkmenabat","turkmenbasy","yoloten","yylanly"],"TC":["cockburn town"],"TV":["funafuti"],"UG":["adjumani","apac","arua","bugiri","bundibugyo","busembatia","busia","buwenge","bwizibwera","entebbe","fort portal","gulu","hoima","ibanda","iganga","jinja","kabale","kampala","kamwenge","kasese","kayunga","kireka","kitgum","kotido","kyenjojo","lira","lugazi","luwero","masaka","masindi","mbale","mbarara","mityana","moyo","mubende","mukono","namasuba","nebbi","njeru","ntungamo","nyachera","paidha","pallisa","soroti","tororo","wakiso","wobulenzi","yumbe"],"UA":["alchevsk","alushta","amvrosiivka","antratsyt","apostolove","armyansk","avdiivka","bakhchysarai","bakhmach","bakhmut","balaklava","balakliia","balta","bar","berdyansk","berdychiv","berehove","berezan","berezhany","bila tserkva","bilhorod-dnistrovskyi","bilohirsk","bilopillia","bohodukhiv","bohuslav","boiarka","bolhrad","boryslav","boryspil","brianka","brody","brovary","bucha","cherkasy","chernihiv","chernivtsi","chervonohrad","chervonopartyzansk","chornomors'k","chortkiv","chuhuiv","chystyakove","debaltseve","derhachi","dnipro","dniprorudne","dobropillia","dokuchaievsk","dolyna","dolynska","donetsk","dovzhansk","drohobych","druzhkivka","dubno","dunayivtsi","dzhankoi","enerhodar","fastiv","feodosiya","hadyach","haysyn","henichesk","hlukhiv","holubivka","horishni plavni","horlivka","horodok","hostomel","ilovays'k","irpin","ivano-frankivsk","iziaslav","izium","izmail","kadiyivka","kakhovka","kalush","kalynivka","kamianets-podilskyi","kamyanske","kaniv","kerch","kharkiv","khartsyzk","kherson","khmelnytskyi","khmilnyk","khrestivka","khrustalnyi","khust","kiliya","kivsharivka","kolomyia","konotop","korosten","korostyshiv","korsun-shevchenkivskyy","kostiantynivka","kostopil","kotsiubynske","kovel","kozyatyn","kramatorsk","krasnohrad","krasyliv","kremenchuk","kremenets","kreminna","krolevets","kropyvnytskyy","kryvyy rih","kupiansk","kurakhove","kurakhovo","kyiv","ladyzhyn","lebedyn","lozova","lubny","luhansk","lutsk","lutuhyne","lviv","lyman","lysychansk","lyubotyn","makiivka","malyn","marhanets","mariupol","melitopol","merefa","mohyliv-podilskyy","molodohvardiisk","mostyska","mukachevo","mykolayiv","myrhorod","myrnohrad","nadvirna","netishyn","nikopol","nizhyn","nova kakhovka","novomoskovsk","novoukrayinka","novovolynsk","novoyavorivs'k","obukhiv","odesa","okhtyrka","oleksandriya","oleshky","ovruch","pavlohrad","pereiaslav","perevalsk","pershotravensk","pervomaisk","pervomaiskyi","pervomaysk","pidhorodne","podilsk","pokrov","pokrovsk","polohy","polonne","poltava","popasna","pryluky","pyatykhatky","radomyshl","rakhiv","reni","rivne","romny","rovenky","rozdilna","rubizhne","saki","sambir","sarny","selydove","sevastopol","shakhtarsk","shepetivka","shostka","shpola","sievierodonetsk","simferopol","skadovsk","skvyra","slavuta","slavutych","slobozhans'ke","sloviansk","smila","snizhne","sokal","sorokyne","starobilsk","starokostyantyniv","stebnyk","stryi","sudak","sumy","svalyava","svatove","svitlovodsk","synelnykove","ternivka","ternopil","tokmak","toretsk","trostianets","truskavets","tulchyn","uman","uzhgorod","varash","vasylkiv","vatutine","verkhnodniprovsk","vilnohirsk","vilnyansk","vinnytsya","volnovakha","volochysk","volodymyr-volynskyi","vovchansk","voznesensk","vynohradiv","vyshhorod","vyshneve","yahotyn","yalta","yany kapu","yasynuvata","yenakiieve","yevpatoriya","yuzhne","yuzhnoukrayinsk","zaporizhzhya","zdolbuniv","zhmerynka","zhovti vody","zhytomyr","znamyanka","zolochiv","zolotonosha","zuhres","zvenihorodka","zviahel"],"AE":["abu dhabi","adh dhayd","ajman city","al ain city","al fujairah city","al shamkhah city","ar ruways","bani yas city","dibba al-fujairah","dibba al-hisn","dubai","khalifah a city","khawr fakkan","musaffah","ras al khaimah city","reef al fujairah city","sharjah","umm al quwain city","zayed city"],"GB":["aberdare","aberdeen","abergele","aberystwyth","abingdon","accrington","acocks green","acton","adwick le street","airdrie","aldershot","aldridge","alfreton","alloa","alton","altrincham","amersham","amersham on the hill","ammanford","ampthill","andover","antrim","arbroath","archway","arnold","ascot","ashford","ashington","ashton in makerfield","ashton-under-lyne","aston","atherton","aylesbury","ayr","baildon","ballymena","banbridge","banbury","bangor","banstead","barking","barnes","barnet","barnsley","barnstaple","barrhead","barrow in furness","barry","bartley green","basford","basildon","basingstoke","bath","bathgate","batley","battersea","bayswater","bearsden","bebington","beckenham","becontree","bedford","bedlington","bedworth","belfast","bellshill","belper","bentley","berkhamsted","bethnal green","beverley","bexhill-on-sea","bexley","bicester","biddulph","bideford","biggleswade","billericay","billingham","bingley","birkenhead","birmingham","bishop auckland","bishopbriggs","bishops stortford","bishopstoke","blackburn","blackheath","blackpool","blackwall","blackwood","blantyre","bletchley","bloxwich","blyth","bognor regis","bolton","bonnyrigg","bootle","bordon","borehamwood","boston","bournemouth","bow","bowthorpe","bracknell","bradford","braintree","bramhall","bredbury","brent","brentwood","bridgend","bridgwater","bridlington","brierley hill","brighouse","brighton","bristol","briton ferry","brixham","brixton","broadstairs","brockley","bromsgrove","brough","brownhills","broxburn","brymbo","buckley","burgess hill","burngreave","burnham-on-sea","burnley","burntwood","burton upon trent","bury","bury st edmunds","bushey","buxton","caerphilly","calne","camberley","camborne","cambridge","cambuslang","camden town","canary wharf","canning town","cannock","canterbury","canvey island","cardiff","carlisle","carmarthen","carrickfergus","carshalton","carterton","castleford","castlereagh","caterham","catford","chalfont saint peter","chalk farm","chapel allerton","chapeltown","chatham","cheadle hulme","chelmsford","chelsea","cheltenham","chepstow","chesham","cheshunt","chessington","chester","chester-le-street","chesterfield","chichester","chingford","chippenham","chipping sodbury","chislehurst","chiswick","chorley","christchurch","cirencester","city of westminster","clacton-on-sea","cleckheaton","cleethorpes","clevedon","clydach","clydebank","coalville","coatbridge","cobham","coity","colchester","coleraine","colne","colwyn bay","congleton","conisbrough","consett","corby","coulsdon","coventry","cowes","cowley","craigavon","cramlington","crawley","crewe","cricklewood","crosby","crowborough","crowthorne","croydon","cumbernauld","cwmbran","dagenham","dalserf","darlington","dartford","darton","darwen","daventry","deal","deeside","denton","derby","derry","devizes","dewsbury","didcot","dinnington","doncaster","dorchester","dorking","dover","droitwich","dronfield","droylsden","dudley","dukinfield","dumbarton","dumfries","dundee","dunfermline","dunstable","durham","earl shilton","earlsfield","east dereham","east grinstead","east kilbride","east molesey","eastbourne","eastleigh","eastwood","ebbw vale","eccles","edinburgh","edmonton","egham","elgin","elland","ellesmere port town","eltham","ely","emsworth","enfield lock","enfield town","epsom","erskine","esher","evesham","ewell","exeter","exmouth","failsworth","falkirk","falmouth","fareham","farnborough","farnham","farnworth","faversham","felixstowe","felling","feltham","ferndown","finchley","fleet","fleetwood","flint","folkestone","formby","friern barnet","frinton-on-sea","frome","fulham","fulwood","furzedown","fylde","gainsborough","gateshead","gelligaer","gerrards cross","gillingham","glasgow","glenrothes","glossop","gloucester","godalming","golborne","golders green","goole","gorseinon","gosforth","gosport","grangemouth","grantham","gravesend","grays","great malvern","great sankey","great wyrley","great yarmouth","greenford","greenock","grimsby","grove","guildford","guisborough","guiseley","hadleigh","hadley wood","hailsham","hale","halesowen","halifax","hamilton","hampton","hanworth","harlesden","harlow","harpenden","harringay","harrogate","harrow","hartlepool","hartley","harwich","haslingden","hastings","hatfield","havant","haverhill","hawarden","haydock","hayes","hayling island","haywards heath","hazel grove","heanor","heavitree","hebburn","hedge end","hemel hempstead","hereford","herne bay","hertford","heston","heswall","heysham","heywood","high blantyre","high peak","high wycombe","highbury","hinckley","hindley","hitchin","hoddesdon","holloway","hook","horley","hornchurch","horsforth","horsham","horwich","houghton-le-spring","hounslow","hove","hoyland nether","hucknall","huddersfield","huntingdon","huyton","hyde","hythe","ilford","ilkeston","inverness","ipswich","irlam","irvine","isle of lewis","isleworth","islington","jarrow","johnstone","keighley","kempston","kempston hardwick","kendal","kenilworth","kettering","keynsham","kidderminster","kidlington","kidsgrove","kilburn","kilmarnock","kilwinning","king's lynn","kingston upon hull","kingswinford","kingswood","kippax","kirkby","kirkby in ashfield","kirkcaldy","kirkintilloch","lancaster","lancing","larkhall","larne","leatherhead","leeds","leek","leicester","leigh","leighton buzzard","letchworth garden city","lewes","leyland","leytonstone","lichfield","limehouse","lincoln","lisburn","litherland","littlehampton","liverpool","livingston","llandudno","llanelli","lofthouse","london","londonderry county borough","long eaton","longfield","longsight","loughborough","louth","lower earley","lowestoft","luton","lymington","lytham st annes","macclesfield","maesteg","maghull","maidenhead","maidstone","maldon","maltby","manchester","mangotsfield","manor park","mansfield","mansfield woodhouse","march","margate","market harborough","marlow","marple","meikle earnock","melksham","melton mowbray","mendip","merthyr tydfil","mexborough","middlesbrough","middleton","milton keynes","mirfield","mitcham","morden","morecambe","moreton","morley","motherwell","mountsorrel","musselburgh","muswell hill","nailsea","nantwich","neath","nelson","neston","new cross","new malden","new mills","new milton","newark on trent","newburn","newbury","newcastle under lyme","newcastle upon tyne","newmarket","newport","newport pagnell","newquay","newry","newton abbot","newton aycliffe","newton mearns","newton-le-willows","newtownabbey","newtownards","norbury","north shields","northallerton","northampton","northolt","northwich","norwich","nottingham","nuneaton","oadby","oldham","omagh","ormskirk","orpington","ossett","oswestry","oxford","paignton","paisley","palmers green","peacehaven","peckham","penarth","penicuik","penrith","penzance","perry vale","perth","peterborough","peterhead","peterlee","pinner","pitsea","plumstead","plymouth","plymstock","ponders end","pontefract","pontypool","pontypridd","poole","port glasgow","portadown","porthcawl","portishead","portslade","portsmouth","potters bar","poulton-le-fylde","prescot","prestatyn","preston","prestwich","pudsey","purley","putney","radcliffe","ramsbottom","ramsgate","rawmarsh","rawtenstall","rayleigh","reading","redcar","redditch","redhill","redruth","reigate","renfrew","retford","rhondda","rhosllanerchrugog","rhyl","richmond","ripley","ripon","risca","rochdale","rochester","rochford","roehampton","romford","romsey","rossendale","rotherham","rottingdean","royal leamington spa","royal tunbridge wells","royston","royton","rugby","rugeley","ruislip","runcorn","rushden","rutherglen","ryde","ryton","saffron walden","saint andrews","saint neots","saint peters","sale","salford","salisbury","saltash","sandbach","sandhurst","sandown","scarborough","scunthorpe","seaford","seaham","selby","seven sisters","sevenoaks","shadwell","sheffield","shepherds bush","shipley","shirley","shoreham-by-sea","shrewsbury","sinfin","sittingbourne","skegness","skelmersdale","sleaford","slough","solihull","south benfleet","south croydon","south elmsall","south hayling","south norwood","south ockendon","south shields","southall","southampton","southend-on-sea","southport","southsea","spalding","spennymoor","st albans","st austell","st helens","stafford","staines","stalybridge","stamford","stamford hill","stanford-le-hope","stanley","staveley","stepney","stevenage","stirling","stockport","stockton-on-tees","stoke-on-trent","stourbridge","stourport-on-severn","stowmarket","stratford","stratford-upon-avon","streatham","stretford","strood","stroud","sudbury","sunbury-on-thames","sunderland","surbiton","sutton","sutton coldfield","sutton in ashfield","swadlincote","swanley","swanscombe","swansea","swindon","swinton","tadley","tamworth","taunton","teignmouth","telford","tewkesbury","thamesmead","thatcham","thetford","thornaby-on-tees","thorne","thornton-cleveleys","tipton","tiverton","tonbridge","tonypandy","tooting","torquay","tottenham","tottenham hale","totteridge","totton","trowbridge","truro","tyldesley","tynemouth","uckfield","upper norwood","urmston","uxbridge","vale of leven","viewpark","wakefield","walkden","wallasey","wallington","wallsend","walsall","waltham abbey","walthamstow","walton-on-thames","walton-on-the-naze","wantage","ware","warminster","warrington","warwick","washington","washwood heath","waterlooville","watford","wath upon dearne","wednesbury","wednesfield","welling","wellingborough","wellington","welwyn garden city","wembley","west bridgford","west bromwich","west ham","west molesey","westbury","westhoughton","weston-super-mare","weybridge","weymouth","whickham","whitefield","whitehaven","whitley bay","whitstable","wickford","widnes","wigan","wigston magna","willenhall","willesden","wilmslow","wimbledon","winchester","windsor","winsford","wisbech","wishaw","witham","witney","woking","wokingham","wolverhampton","wombwell","wood green","woodford green","worcester","worcester park","workington","worksop","worthing","wrexham","yarm","yate","yateley","yeadon","yeovil","york"],"US":["aberdeen","abilene","abington","acton","acworth","ada","adams morgan","addison","adelanto","adelphi","adrian","affton","agawam","agoura","agoura hills","ahwatukee foothills","aiken","akron","alabaster","alafaya","alameda","alamo","alamogordo","albany","albany park","albemarle","albert lea","albertville","albuquerque","aldine","alexandria","algonquin","alhambra","alice","alief","aliso viejo","allapattah","allen","allen park","allendale","allentown","alliance","allison park","aloha","alpharetta","alsip","altadena","altamont","altamonte springs","alton","altoona","altus","alum rock","alvin","amarillo","american canyon","american fork","americus","ames","amesbury","amherst","amherst center","amsterdam","anacortes","anaheim","anchorage","anderson","andover","angleton","ankeny","ann arbor","annandale","annapolis","anniston","anoka","ansonia","antelope","anthem","antioch","apache junction","apex","apopka","apple valley","appleton","arbutus","arcadia","arcata","arden-arcade","ardmore","arlington","arlington heights","arnold","arroyo grande","artesia","arvada","arvin","asbury park","ashburn","asheboro","asheville","ashland","ashtabula","ashwaubenon","aspen hill","astoria","atascadero","atascocita","athens","atlanta","atlantic city","attleboro","atwater","auburn","auburn gresham","auburn hills","auburndale","augusta","aurora","austin","austintown","avenel","aventura","avocado heights","avon","avon center","avon lake","avondale","azusa","back mountain","badger","baileys crossroads","bainbridge island","bakersfield","balch springs","baldwin","baldwin park","ballenger creek","ballwin","baltimore","bangor","banning","barberton","barnstable","barrington","barstow","barstow heights","bartlesville","bartlett","bartow","basking ridge","batavia","bath beach","baton rouge","battle creek","battle ground","bay city","bay point","bay shore","bay village","baychester","bayonet point","bayonne","bayou cane","bayshore gardens","bayside","baytown","bayville","bear","beaumont","beaver dam","beavercreek","beaverton","beckley","bedford","bel air north","bel air south","bell","bell gardens","bella vista","bellaire","belle glade","belleville","bellevue","bellflower","bellingham","bellmore","bellview","bellwood","belmont","belmont cragin","beloit","belton","beltsville","belvedere park","belvidere","benbrook","bend","benicia","bensalem","bensenville","bensonhurst","benton","bentonville","berea","bergenfield","berkeley","berkley","berwyn","bessemer","bethany","bethel park","bethesda","bethlehem","bethpage","bettendorf","beverly","beverly cove","beverly hills","biddeford","big spring","billerica","billings","biloxi","binghamton","birmingham","bismarck","bixby","blacksburg","blaine","bloomfield","bloomingdale","bloomington","blue island","blue springs","bluffton","blythe","boardman","boca del mar","boca raton","boise","bolingbrook","bon air","bonita springs","bonney lake","boone","borough park","bossier city","boston","bostonia","bothell","bothell west","boulder","boulder city","bountiful","bourbonnais","bowie","bowling green","boyle heights","boynton beach","bozeman","bradenton","bradley","braintree","brandon","branford","brawley","brea","bremerton","brenham","brent","brentwood","brentwood estates","briarwood","bridgeport","bridgeton","bridgeview","bridgewater","brigham city","brighton","brighton beach","brighton park","bristol","broad ripple","broadview heights","brockton","broken arrow","brook park","brookfield","brookhaven","brookings","brookline","brooklyn","brooklyn center","brooklyn heights","brooklyn park","broomfield","brownsburg","brownsville","brownwood","brunswick","brushy creek","bryan","bryant","bryn mawr-skyway","buckeye","buckhall","buena park","buenaventura lakes","buffalo","buffalo grove","bullhead city","burbank","burien","burke","burleson","burlingame","burlington","burnsville","burton","bushwick","butte","cabot","calabasas","caldwell","caledonia","calexico","calhoun","calumet city","calverton","camarillo","camas","cambria heights","cambridge","camden","cameron park","camp springs","campbell","canarsie","canby","candler-mcafee","canoga park","canon city","canton","cantonment","canyon country","canyon lake","cape coral","cape girardeau","carbondale","carlisle","carlsbad","carmel","carmichael","carney","carol city","carol stream","carpentersville","carrboro","carrollton","carrollwood","carrollwood village","carson","carson city","carteret","cartersville","cary","casa de oro-mount helix","casa grande","casas adobes","casper","casselberry","castaic","castle rock","castlewood","castro valley","catalina foothills","cathedral city","catonsville","cave spring","cedar city","cedar falls","cedar hill","cedar park","cedar rapids","centennial","center city","center point","centereach","centerville","central","central city","central falls","central islip","central point","centralia","centreville","ceres","cerritos","chalmette","chambersburg","chamblee","champaign","champlin","chandler","chanhassen","channelview","chantilly","chapel hill","charleston","charlotte","charlottesville","chaska","chatham","chatsworth","chattanooga","cheektowaga","chelmsford","chelsea","cherry hill","chesapeake","cheshire","chester","chesterfield","cheyenne","chicago","chicago heights","chicago lawn","chicago loop","chickasha","chico","chicopee","chillicothe","chillum","chinatown","chino","chino hills","chowchilla","christiansburg","chula vista","cibolo","cicero","cimarron hills","cincinnati","cinco ranch","citrus heights","citrus park","city of milford (balance)","city of sammamish","claremont","claremore","clark-fulton","clarksburg","clarksdale","clarksville","clay","clayton","clearfield","clearlake","clearwater","cleburne","clemmons","clemson","clermont","cleveland","cleveland heights","cliffside park","clifton","clifton park","clinton","clinton township","clive","cloverleaf","cloverly","clovis","coachella","coalinga","cockeysville","cocoa","coconut creek","coconut grove","coeur d'alene","cohoes","colchester","college park","college point","college station","colleyville","collierville","collinsville","collinwood","colonia","colonial heights","colorado springs","colton","columbia","columbia heights","columbine","columbus","commack","commerce city","compton","concord","coney island","conroe","converse","conway","conyers","cookeville","coon rapids","cooper city","coos bay","copiague","coppell","copperas cove","coral gables","coral springs","coral terrace","coralville","coram","corcoran","cordova","corinth","cornelius","corona","coronado","corpus christi","corsicana","cortland","cortlandt manor","corvallis","costa mesa","cottage grove","cottage lake","cottonwood heights","council bluffs","country club","country club hills","country walk","coventry","covina","covington","cranberry township","cranford","cranston","crawfordsville","crest hill","crestview","creve coeur","crofton","crown point","crystal","crystal lake","cudahy","cullman","culpeper","culver city","cumberland","cupertino","cutler","cutler bay","cutler ridge","cuyahoga falls","cypress","cypress hills","dale city","dallas","dalton","daly city","damascus","dana point","danbury","dania beach","danvers","danville","daphne","darien","davenport","davie","davis","dayton","daytona beach","de pere","dearborn","dearborn heights","debary","decatur","dedham","deer park","deer valley","deerfield","deerfield beach","defiance","dekalb","del city","del rio","deland","delano","delaware","delray beach","deltona","denison","denton","denver","denville","depew","derby","derry","derry village","des moines","des plaines","desert hot springs","desoto","detroit","detroit-shoreway","diamond bar","dickinson","dickson","dinuba","dix hills","dixiana","dixon","dodge city","dolton","donna","doral","dothan","douglas","douglasville","dover","downers grove","downey","dracut","draper","drexel heights","drexel hill","duarte","dublin","dubuque","duluth","dumas","dumont","duncan","duncanville","dundalk","dunedin","dunwoody","durango","durant","durham","duxbury","dyer","dyersburg","dyker heights","eagan","eagle","eagle mountain","eagle pass","eagle river","easley","east amherst","east brainerd","east brunswick","east chattanooga","east chicago","east cleveland","east concord","east elmhurst","east flatbush","east florence","east garfield park","east hampton","east harlem","east hartford","east haven","east hemet","east hill-meridian","east honolulu","east independence","east lake","east lake-orient park","east lansing","east longmeadow","east los angeles","east massapequa","east meadow","east millcreek","east moline","east naples","east new york","east northport","east norwalk","east orange","east palo alto","east patchogue","east pensacola heights","east peoria","east point","east providence","east rancho dominguez","east ridge","east riverdale","east saint louis","east setauket","east tremont","east village","eastchester","easthampton","eastlake","eastmont","easton","eastpointe","eastvale","eau claire","echo park","eden","eden prairie","edgewater","edgewood","edina","edinburg","edison","edmond","edmonds","edwardsville","eggertsville","egypt lake-leto","el cajon","el centro","el cerrito","el dorado","el dorado hills","el mirage","el monte","el paso","el reno","el segundo","eldersburg","elgin","elizabeth","elizabeth city","elizabethtown","elk grove","elk grove village","elk river","elkhart","elko","elkridge","elkton","ellendale","ellensburg","ellicott city","elmhurst","elmira","elmont","elmwood park","eloy","elyria","emerson hill","emporia","encanto","enchanted hills","encinitas","encino","enfield","englewood","enid","ennis","ensley","enterprise","erie","erlanger","escondido","essex","estelle","estero","euclid","eugene","euless","eureka","eustis","evans","evanston","evansville","everett","evergreen park","ewa gentry","ewing","fair lawn","fair oaks","fairbanks","fairborn","fairfax","fairfield","fairfield heights","fairhaven","fairhope","fairland","fairmont","fairview heights","fairview park","fairwood","fall river","fallbrook","far rockaway","fargo","faribault","farmers branch","farmington","farmington hills","farmingville","farragut","fayetteville","federal way","ferguson","fern creek","ferndale","fernley","ferry pass","fillmore","financial district","findlay","fishers","fitchburg","five corners","flagami","flagstaff","flatbush","flatlands","fleming island","flint","floral park","florence","florence-graham","florida ridge","florin","florissant","flower mound","flowing wells","foley","folsom","fond du lac","fontana","foothill farms","fordham","fords","forest grove","forest hills","forest lake","forest park","forney","fort bragg","fort collins","fort dodge","fort hamilton","fort hood","fort hunt","fort lauderdale","fort lee","fort leonard wood","fort myers","fort pierce","fort smith","fort thomas","fort walton beach","fort washington","fort wayne","fort worth","fortuna foothills","foster city","fountain","fountain hills","fountain valley","fountainebleau","four corners","framingham","framingham center","franconia","frankfort","franklin","franklin park","franklin square","frederick","fredericksburg","frederickson","freeport","fremont","fresh meadows","fresno","fridley","friendswood","frisco","front royal","fruit cove","fullerton","fuquay-varina","gadsden","gage park","gahanna","gainesville","gaithersburg","galesburg","gallatin","gallup","galt","galveston","garden city","garden grove","gardena","gardner","garfield","garfield heights","garland","garner","gary","gastonia","gates-north gates","gatesville","gautier","geneva","georgetown","germantown","gilbert","gillette","gilroy","gladstone","glassboro","glassmanor","glastonbury","glen avon","glen burnie","glen cove","glen ellyn","glendale","glendale heights","glendora","glenvar heights","glenview","glenville","gloucester","gloversville","godfrey","golden","golden gate","golden glades","golden valley","goldsboro","goleta","goodings grove","goodlettsville","goodyear","goose creek","goshen","grafton","graham","gramercy park","grand boulevard","grand forks","grand island","grand junction","grand prairie","grand rapids","grandview","grandville","granger","granite bay","granite city","graniteville","grants pass","grapevine","gravesend","grayslake","great bend","great falls","great kills","greater grand crossing","greater northdale","greater upper marlboro","greeley","green","green bay","green haven","green valley","greenacres city","greenbelt","greenburgh","greeneville","greenfield","greenpoint","greensboro","greenville","greenwood","greenwood village","greer","gresham","gretna","griffin","griffith","grosse pointe woods","grove city","groves","guilford","gulfport","gurnee","gwynn oak","hacienda heights","hackensack","hagerstown","haines city","hallandale beach","haltom city","ham lake","hamden","hamilton","hammond","hampton","hamtramck","hanahan","hanford","hannibal","hanover","hanover park","happy valley","harker heights","harlem","harlingen","harrisburg","harrison","harrisonburg","hartford","harvey","haslett","hastings","hattiesburg","hauppauge","havelock","haverhill","hawthorne","hayesville","hays","hayward","hazel dell","hazel park","hazelwood","hazleton","helena","hell's kitchen","hemet","hempstead","henderson","hendersonville","henrietta","hercules","hereford","hermiston","hermitage","hermosa beach","hernando","herndon","herriman","hesperia","hialeah","hialeah gardens","hibbing","hickory","hicksville","high point","highland","highland park","highland springs","highland village","highlands ranch","highview","hillcrest heights","hilliard","hillsboro","hillsborough","hillside","hilo","hilton head","hilton head island","hinesville","hinsdale","hobart","hobbs","hoboken","hoffman estates","holbrook","holden","holiday","holladay","holland","hollis","hollister","holly springs","hollywood","holt","holtsville","holyoke","homer glen","homestead","homewood","honolulu","hoover","hopatcong hills","hope mills","hopewell","hopkins","hopkinsville","horizon city","horn lake","hot springs","hot springs national park","hough","houma","houston","howard","howard beach","huber heights","hudson","hueytown","humble","hunt valley","huntersville","huntington","huntington beach","huntington park","huntington station","huntley","hunts point","huntsville","hurricane","hurst","hutchinson","hutto","hyattsville","hybla valley","hyde park","idaho falls","idylwood","ilchester","immokalee","imperial","imperial beach","independence","indian trail","indianapolis","indianola","indio","inglewood","inglewood-finn hill","inkster","inver grove heights","iona","iowa city","irondequoit","ironville","irvine","irving","irving park","irvington","iselin","isla vista","islip","issaquah","ithaca","ives estates","jackson","jackson heights","jacksonville","jacksonville beach","jamaica","jamaica plain","jamestown","janesville","jasmine estates","jasper","jefferson city","jeffersontown","jeffersonville","jenison","jenks","jersey city","johns creek","johnson city","johnston","johnstown","joliet","jollyville","jonesboro","joplin","junction city","juneau","jupiter","jurupa valley","kahului","kailua","kalamazoo","kalispell","kaneohe","kankakee","kannapolis","kansas city","kapolei","katy","kaukauna","kaysville","kearney","kearns","kearny","keene","keizer","keller","ken caryl","kendale lakes","kendall","kendall west","kenmore","kenner","kennesaw","kennewick","kenosha","kensington","kent","kentwood","kenwood","kernersville","kerrville","kettering","kew gardens","kew gardens hills","key west","keystone","kihei","killeen","killingly center","king of prussia","kingman","kings bridge","kings park","kingsland","kingsport","kingston","kingsville","kinston","kirkland","kirksville","kirkwood","kiryas joel","kissimmee","klamath falls","knoxville","kokomo","koreatown","kuna","kyle","la canada flintridge","la crescenta-montrose","la crosse","la grange","la habra","la jolla","la marque","la mesa","la mirada","la palma","la porte","la presa","la puente","la quinta","la vergne","la verne","la vista","lacey","lackawanna","laconia","ladera ranch","lafayette","lagrange","laguna","laguna beach","laguna hills","laguna niguel","laguna woods","lake butler","lake charles","lake elsinore","lake forest","lake havasu city","lake in the hills","lake jackson","lake magdalene","lake mary","lake oswego","lake ridge","lake ronkonkoma","lake shore","lake stevens","lake wales","lake worth","lake worth corridor","lake zurich","lakeland","lakeside","lakeville","lakewood","lamont","lancaster","land o' lakes","landover","langley park","lanham-seabrook","lansdale","lansing","laplace","laporte","laramie","laredo","largo","las cruces","las vegas","latham","lathrop","lauderdale lakes","lauderhill","laurel","laurelton","laurinburg","lawndale","lawrence","lawrenceville","lawton","layton","league city","lealman","leander","leavenworth","leawood","lebanon","ledyard","lee's summit","leesburg","lehi","lehigh acres","leisure city","leland","lemay","lemon grove","lemont","lemoore","lenexa","lennox","lenoir","lents","leominster","levittown","lewiston","lewiston orchards","lewisville","lexington","lexington-fayette","liberal","liberty","libertyville","lima","limerick","lincoln","lincoln park","lincoln square","lincolnia","linda","linden","lindenhurst","lindenwold","lino lakes","linton hall","lisle","lithia springs","little elm","little rock","littleton","live oak","livermore","livingston","livonia","lochearn","lockport","lodi","logan","logan square","logansport","loma linda","lombard","lomita","lompoc","long beach","long branch","long island city","longmeadow","longmont","longview","lorain","lorton","los altos","los angeles","los banos","los gatos","los lunas","louisville","loveland","loves park","lowell","lower west side","lubbock","ludlow","lufkin","lumberton","lutherville-timonium","lutz","lynbrook","lynchburg","lyndhurst","lynn","lynn haven","lynnwood","lynwood","mableton","machesney park","macomb","macon","madera","madison","madison heights","madisonville","magna","mahwah","maitland","makakilo","makakilo city","malden","mamaroneck","manassas","manassas park","manchester","mandan","manhattan","manhattan beach","manitowoc","mankato","mansfield","mansfield city","manteca","maple grove","maple heights","maple shade","maple valley","maplewood","marana","marblehead","marco island","margate","maricopa","marietta","marina","mariners harbor","marion","marlboro","marlborough","marquette","marrero","marshall","marshalltown","marshfield","martha lake","martinez","martinsburg","maryland city","maryland heights","marysville","maryvale","maryville","mason","mason city","maspeth","massapequa","massapequa park","massillon","mastic","matteson","matthews","mattoon","mauldin","maumelle","mayfield heights","maywood","mcalester","mcallen","mcdonough","mchenry","mckeesport","mckinley park","mckinleyville","mckinney","mclean","mcminnville","mead valley","meadow woods","meadowbrook","meads","mechanicsville","medford","medina","mehlville","melbourne","melrose","melrose park","melville","memphis","menasha","menifee","menlo park","menomonee falls","menomonie","mentor","mequon","merced","mercedes","mercer island","mercerville-hamilton square","meriden","meridian","merrick","merrifield","merrillville","merrimack","merritt island","mesa","mesquite","metairie","metairie terrace","methuen","miami","miami beach","miami gardens","miami lakes","miamisburg","michigan city","middle river","middle village","middleborough","middleburg heights","middleton","middletown","midland","midlothian","midvale","midway","midwest city","milford","milford mill","mililani town","mill creek","mill creek east","millbrae","millbrook","millburn","millcreek","milledgeville","millville","milpitas","milton","milwaukee","milwaukie","mineola","minneapolis","minnetonka","minnetonka mills","minot","mint hill","mira mesa","miramar","mishawaka","mission","mission bend","mission district","mission viejo","missoula","missouri city","mitchell","mobile","modesto","mokena","moline","monroe","monroeville","monrovia","monsey","montclair","montebello","monterey","monterey park","montgomery","montgomery village","montrose","montville center","moore","mooresville","moorhead","moorpark","moraga","moreno valley","morgan hill","morgan park","morganton","morgantown","morningside heights","morris heights","morrisania","morristown","morrisville","morton","morton grove","moscow","moses lake","mott haven","mount clemens","mount greenwood","mount juliet","mount laurel","mount lebanon","mount pleasant","mount prospect","mount vernon","mountain brook","mountain view","mountlake terrace","mukilteo","muncie","mundelein","munster","murfreesboro","murphy","murray","murrieta","murrysville","muscatine","muskego","muskegon","muskogee","mustang","myrtle beach","myrtle grove","nacogdoches","nampa","nanuet","napa","naperville","naples","narragansett","nashua","nashville","natchez","natchitoches","natick","national city","naugatuck","navarre","near north side","near south side","nederland","needham","neenah","new albany","new bedford","new berlin","new bern","new braunfels","new brighton","new britain","new brunswick","new canaan","new castle","new city","new haven","new hope","new iberia","new lenox","new london","new milford","new orleans","new philadelphia","new port richey","new rochelle","new smyrna beach","new south memphis","new springville","new territory","new york city","newark","newberg","newburg","newburgh","newburyport","newington","newnan","newport","newport beach","newport news","newton","niagara falls","nicetown-tioga","nicholasville","niles","nipomo","nixa","noblesville","noe valley","nogales","norco","norcross","norfolk","norland","normal","norman","norristown","north amityville","north andover","north arlington","north atlanta","north attleborough center","north augusta","north aurora","north babylon","north bay shore","north bel air","north bellmore","north bergen","north bethesda","north canton","north center","north charleston","north chicago","north chicopee","north creek","north decatur","north druid hills","north fort myers","north haven","north highlands","north hills","north hollywood","north kingstown","north la crosse","north las vegas","north lauderdale","north lawndale","north liberty","north little rock","north massapequa","north miami","north miami beach","north myrtle beach","north ogden","north olmsted","north peoria","north plainfield","north platte","north port","north potomac","north providence","north richland hills","north ridgeville","north royalton","north salt lake","north stamford","north tonawanda","north tustin","north valley stream","northampton","northbrook","northdale","northfield","northglenn","northport","northridge","norton","norton shores","norwalk","norwich","norwood","novato","novi","nutley","o'fallon","oak creek","oak forest","oak grove","oak harbor","oak hill","oak lawn","oak park","oak ridge","oakdale","oakland","oakland park","oakleaf plantation","oakley","oakton","oakville","ocala","ocean acres","ocean springs","oceanside","ocoee","oconomowoc","odenton","odessa","ogden","oildale","ojus","okemos","oklahoma city","okolona","olathe","old bridge","old jamestown","olive branch","olney","olympia","omaha","onalaska","ontario","opa-locka","opelika","opelousas","opportunity","orange","orangevale","orchards","orcutt","oregon","oregon city","orem","orinda","orland park","orlando","ormond beach","oro valley","oroville","oshkosh","ossining","oswego","otsego","ottawa","ottumwa","overland","overland park","oviedo","owasso","owatonna","owensboro","owings mills","oxford","oxnard","oxon hill","oxon hill-glassmanor","ozark","ozone park","pace","pacific grove","pacifica","paducah","pahrump","painesville","palatine","palestine","palisades park","palm bay","palm beach gardens","palm city","palm coast","palm desert","palm harbor","palm river-clair mel","palm springs","palm valley","palmdale","palmer","palmetto bay","palo alto","palos hills","pampa","panama city","papillion","paradise","paragould","paramount","paramus","paris","park forest","park ridge","park slope","parkchester","parker","parkersburg","parkland","parkville","parlier","parma","parma heights","parole","parsippany","pasadena","pascagoula","pasco","paso robles","passaic","pataskala","paterson","patterson","pawtucket","payson","peabody","peachtree city","peachtree corners","pearl","pearl city","pearl river","pearland","pecan grove","peekskill","pekin","pelham","pembroke pines","pendleton","penn hills","pennsauken","pennsport","pensacola","peoria","perris","perry","perry hall","perrysburg","perth amboy","petaluma","petersburg","pflugerville","pharr","phenix city","philadelphia","phoenix","phoenixville","pickerington","picnic point-north lynnwood","pico rivera","pikesville","pine bluff","pine hills","pinecrest","pinehurst","pinellas park","pinewood","pinole","piqua","piscataway","pittsburg","pittsburgh","pittsfield","placentia","plainfield","plainview","plainville","plano","plant city","plantation","plattsburgh","pleasant grove","pleasant hill","pleasant prairie","pleasanton","pleasantville","pleasure ridge park","plum","plymouth","pocatello","poinciana","point pleasant","pomona","pompano beach","ponca city","ponte vedra beach","pontiac","pooler","poplar bluff","port angeles","port arthur","port charlotte","port chester","port hueneme","port huron","port orange","port richmond","port saint lucie","port washington","portage","portage park","porterville","portland","portsmouth","portsmouth heights","post falls","potomac","pottstown","poughkeepsie","poway","prairie village","prairieville","prattville","prescott","prescott valley","prichard","princeton","prior lake","prospect heights","prosper","providence","provo","prunedale","pueblo","pueblo west","pullman","punta gorda","punta gorda isles","puyallup","queen creek","queens","queens village","queensbury","quincy","racine","radcliff","radford","radnor","rahway","raleigh","ramona","ramsey","rancho cordova","rancho cucamonga","rancho mirage","rancho palos verdes","rancho penasquitos","rancho san diego","rancho santa margarita","randallstown","randolph","rapid city","raymore","raytown","reading","red wing","redan","redding","redford","redland","redlands","redmond","redondo beach","redwood city","reedley","rego park","reisterstown","reno","renton","republic","reston","revere","rexburg","reynoldsburg","rialto","richardson","richfield","richland","richmond","richmond hill","richmond west","ridgecrest","ridgeland","ridgewood","rio linda","rio rancho","rio rico","ripon","river falls","riverbank","riverdale","riverside","riverton","riverview","riviera beach","roanoke","roanoke rapids","rochester","rochester hills","rock hill","rock island","rock springs","rockford","rockland","rockledge","rocklin","rockville","rockville centre","rockwall","rocky mount","rocky river","rogers","rogers park","rohnert park","rolla","rolling meadows","rome","romeoville","romulus","ronkonkoma","roosevelt","rosamond","rose hill","roseburg","rosedale","roselle","rosemead","rosemont","rosemount","rosenberg","roseville","rossville","roswell","rotterdam","round lake","round lake beach","round rock","rowland heights","rowlett","roy","royal oak","royal palm beach","rubidoux","ruskin","russellville","ruston","rutherford","rutland","rye","sachse","saco","sacramento","safety harbor","saginaw","saginaw township north","sahuarita","saint andrews","saint charles","saint clair shores","saint cloud","saint george","saint joseph","saint louis park","saint matthews","saint michael","saint paul","saint peters","salem","salina","salinas","salisbury","salmon creek","salt lake city","sammamish","san angelo","san antonio","san benito","san bernardino","san bruno","san carlos","san carlos park","san clemente","san diego","san dimas","san fernando","san francisco","san gabriel","san jacinto","san jose","san juan","san juan capistrano","san leandro","san lorenzo","san luis","san luis obispo","san marcos","san mateo","san pablo","san pedro","san rafael","san ramon","san tan valley","sand springs","sandalfoot cove","sandusky","sandy","sandy hills","sandy springs","sanford","sanger","santa ana","santa barbara","santa clara","santa clarita","santa cruz","santa fe","santa fe springs","santa maria","santa monica","santa paula","santa rosa","santa rosa beach","santee","sapulpa","sarasota","saratoga","saratoga springs","sartell","saugus","savage","savannah","sayreville","sayreville junction","sayville","scaggsville","scarsdale","schaumburg","schenectady","schererville","schertz","schofield barracks","scotch plains","scottsdale","scranton","seabrook","seaford","seagoville","seal beach","searcy","seaside","seatac","seattle","sebastian","secaucus","security-widefield","sedalia","seguin","selden","selma","seminole","setauket-east setauket","seven oaks","severn","severna park","sevierville","sewell","seymour","shafter","shaker heights","shakopee","shaw","shawnee","sheboygan","sheepshead bay","shelby","shelbyville","shelton","shenandoah","sheridan","sherman","sherman oaks","sherrelwood","sherwood","shirley","shively","shoreline","shoreview","shorewood","short pump","shreveport","shrewsbury","sicklerville","sidney","sierra vista","sikeston","siloam springs","silver firs","silver lake","silver spring","silverdale","simi valley","simpsonville","sioux city","sioux falls","skokie","slidell","smithfield","smithtown","smyrna","snellville","socastee","socorro","socorro mission number 1 colonia","soledad","solon","somerset","somerton","somerville","south bel air","south bend","south boston","south bradenton","south burlington","south chicago","south el monte","south elgin","south euclid","south gate","south hadley","south hill","south holland","south houston","south jordan","south jordan heights","south kingstown","south lake tahoe","south laurel","south lawndale","south miami heights","south milwaukee","south ogden","south old bridge","south orange","south ozone park","south pasadena","south peabody","south plainfield","south portland","south portland gardens","south riding","south river","south saint paul","south salt lake","south san francisco","south san jose hills","south shore","south suffolk","south valley","south vineland","south whittier","south windsor","south yuba city","southaven","southbridge","southbury","southchase","southfield","southgate","southglenn","southlake","spanaway","spanish fork","spanish lake","spanish springs","sparks","sparta","spartanburg","spokane","spokane valley","spring","spring hill","spring valley","springboro","springdale","springfield","springfield gardens","springville","st. charles","st. johns","st. louis","st. marys","st. petersburg","stafford","stallings","stamford","stanton","starkville","state college","staten island","statesboro","statesville","staunton","stephenville","sterling","sterling heights","steubenville","stevens point","stevenson ranch","stillwater","stockbridge","stockton","stonecrest","stoneham","storrs","stoughton","stow","stratford","streamwood","streetsboro","strongsville","stuart","studio city","sudbury","sudley","suffolk","sugar hill","sugar land","suisun","suitland","suitland-silver hill","sulphur","sulphur springs","summerlin south","summerville","summit","sumter","sun city","sun city center","sun city west","sun prairie","sun valley","sunland","sunland park","sunny isles beach","sunnyside","sunnyvale","sunrise","sunrise manor","sunset","sunset park","superior","surprise","susanville","suwanee","swansea","sweetwater","sycamore","sylvania","syosset","syracuse","tacoma","tahlequah","takoma park","talladega","tallahassee","tallmadge","tamarac","tamiami","tampa","tanque verde","tarpon springs","taunton","tavares","taylor","taylors","taylorsville","teaneck","temecula","tempe","tempe junction","temple","temple city","temple terrace","terrace heights","terre haute","terrell","terrytown","tewksbury","texarkana","texas city","the acreage","the bronx","the colony","the crossings","the dalles","the hammocks","the villages","the woodlands","thomasville","thornton","thousand oaks","three lakes","throgs neck","tiffin","tifton","tigard","tillmans corner","tinley park","tinton falls","titusville","toledo","toms river","tooele","topeka","torrance","torrington","town 'n' country","towson","tracy","traverse city","tremont","trenton","tri-cities","trotwood","troutdale","troy","truckee","trumbull","trussville","tualatin","tuckahoe","tucker","tucson","tujunga","tukwila","tulare","tullahoma","tulsa","tumwater","tupelo","turlock","tuscaloosa","tustin","twentynine palms","twin falls","twinsburg","tyler","tysons corner","ukiah","union","union city","union hill-novelty hill","uniondale","unionport","universal city","university","university city","university heights","university park","university place","upland","upper alton","upper arlington","upper saint clair","uptown","urbana","urbandale","utica","uvalde","vacaville","valdosta","valencia","valinda","vallejo","valley glen","valley station","valley stream","valparaiso","valrico","van buren","van nest","van nuys","vancouver","vandalia","venice","ventura","vernon hills","vero beach","vero beach south","vestal","vestavia hills","vicksburg","victoria","victorville","vienna","villa park","vincennes","vincent","vincentown","vineland","vineyard","virginia beach","visalia","visitacion valley","vista","voorhees","waco","wade hampton","wadsworth","wahiawa","wailuku","waipahu","wake forest","wakefield","waldorf","walker","walla walla","wallingford","wallingford center","walnut","walnut creek","walnut park","waltham","wantagh","warner robins","warren","warren township","warrensburg","warwick","wasco","washington","washington heights","washougal","watauga","waterbury","waterford","waterloo","watertown","waterville","watsonville","waukee","waukegan","waukesha","wausau","wauwatosa","waverly","waxahachie","wayne","waynesboro","weatherford","webster groves","weirton","weirton heights","wekiwa springs","wellesley","wellington","wenatchee","wentzville","weslaco","wesley chapel","west albany","west allis","west and east lealman","west babylon","west bend","west bloomfield township","west carson","west chester","west chicago","west columbia","west coon rapids","west covina","west des moines","west elkridge","west elsdon","west englewood","west falls church","west fargo","west garfield park","west gulfport","west hartford","west haven","west hempstead","west hills","west hollywood","west islip","west jordan","west lafayette","west lake sammamish","west lake stevens","west lawn","west linn","west little river","west lynchburg","west melbourne","west memphis","west mifflin","west milford","west new york","west odessa","west orange","west palm beach","west park","west pensacola","west puente valley","west raleigh","west ridge","west sacramento","west saint paul","west scarborough","west seneca","west springfield","west torrington","west town","west university place","west valley city","west warwick","west whittier-los nietos","westbrook","westbury","westchase","westchester","westerly","westerville","westfield","westford","westlake","westland","westminster","westmont","weston","westport","wethersfield","weymouth","wharton","wheat ridge","wheaton","wheeling","white bear lake","white oak","white plains","white settlement","whitehall","whitehall township","whitestone","whitman","whitney","whittier","wichita","wichita falls","wildomar","wildwood","wilkes-barre","wilkinsburg","williamsburg","williamsport","williamstown","willimantic","willingboro","williston","willmar","willoughby","willow grove","willowbrook","wilmette","wilmington","wilmington island","wilson","wilsonville","wilton","winchester","winder","windham","windsor","winona","winston-salem","winter garden","winter gardens","winter haven","winter park","winter springs","winthrop","wisconsin rapids","woburn","wolcott","wolf trap","woodbridge","woodburn","woodbury","woodhaven","woodland","woodland hills","woodlawn","woodmere","woodridge","woodrow","woodside","woodstock","woonsocket","wooster","worcester","wright","wyandotte","wyckoff","wylie","wyoming","xenia","yakima","yarmouth","yonkers","yorba linda","york","yorkville","youngstown","ypsilanti","yuba city","yucaipa","yucca valley","yukon","yuma","zachary","zanesville","zion","zionsville"],"UY":["artigas","barros blancos","canelones","carmelo","colonia del sacramento","delta del tigre","dolores","durazno","florida","fray bentos","la paz","las piedras","maldonado","melo","mercedes","minas","montevideo","pando","paso de carrasco","paysandu","progreso","rivera","rocha","salto","san carlos","san jose de mayo","santa lucia","tacuarembo","treinta y tres","trinidad","young"],"VI":["charlotte amalie","saint croix"],"UZ":["andijon","angren","asaka","bekobod","bektemir","beruniy","beshariq","beshkent","bo'ka","boysun","bukhara","bulung'ur shahri","chelak","chinoz","chirchiq","chiroqchi","chortoq","chust","dardoq","dashtobod","denov","do'stlik shahri","druzhba","fergana","g'azalkent","g'ijduvon shahri","g'uzor","gagarin shahri","galaosiyo shahri","guliston","gurlan","haqqulobod","hazorasp","iskandar","jalolquduq","jizzax","juma shahri","karakul","kattaqo'rg'on shahri","kirguli","kitob","kogon shahri","koson","kosonsoy","manghit","marg'ilon","muborak","namangan","navoiy","novyy turtkul","nukus","nurota","ohangaron","olmaliq","oltiariq","oltinko'l","oqtosh","oyim","parkent","paxtakor shahri","payshamba shahri","piskent","pop","qarshi","qibray","qo'qon","qo'rg'ontepa","qo'shko'pir","qorasuv","qunghirot","quva","quvasoy","salor","samarkand","shahrisabz","sho'rchi","shofirkon shahri","shovot","sirdaryo","sultonobod","tashkent","tirmiz","to'rqao'rg'on","toshbuloq","toshloq","tuytepa","uchqurghon shahri","urganch","urgut shahri","uychi","vobkent shahri","xiva","xo'jaobod","xo'jayli shahri","xonobod","yangiobod","yangiqo'rg'on","yangirabot","yangiyer","yangiyul","yaypan","zafar","zomin shaharchasi"],"VU":["port-vila"],"VA":["vatican city"],"VE":["acarigua","achaguas","altagracia de orituco","alto barinas","anaco","aragua de barcelona","araure","araya","aroa","bailadores","barcelona","barinas","barinitas","barquisimeto","barrancas","baruta","bejuma","biruaca","bocono","boconoito","boraure","cabimas","cabudare","cagua","caicara","caicara del orinoco","caja seca","calabozo","camaguan","cantaura","capacho nuevo","caraballeda","caracas","cariaco","caripito","carora","carrizal","carupano","casanay","casigua el cubo","catia la mar","caucagua","caucaguito","chacao","chaguaramas","charallave","chiquinquira","chivacoa","ciudad bolivar","ciudad bolivia","ciudad guayana","ciudad ojeda","ciudad piar","clarines","cocorote","colon","coloncito","concepcion","coro","cua","cumana","cumanacoa","dabajuro","duaca","ejido","el cafetal","el dorado","el hatillo","el limon","el pao","el sombrero","el tigre","el tocuyo","el vigia","elorza","encontrados","escuque","guacara","guama","guanare","guanarito","guarenas","guasdualito","guasipati","guatire","guigue","guiria","higuerote","juan griego","judibana","la asuncion","la azulita","la concepcion","la dolorita","la fria","la grita","la guaira","la paragua","la vela de coro","la victoria","la villa del rosario","lagunillas","las tejerias","las vegas","lecherias","los dos caminos","los puertos de altagracia","los rastrojos","los teques","machiques","maiquetia","mamporal","maracaibo","maracay","mariara","maturin","mene de mauroa","mene grande","merida","michelena","miranda","montalban","moron","motatan","nirgua","nueva bolivia","obispos","ocumare del tuy","ospino","palmira","palo negro","pampan","pampanito","pampatar","pariaguan","petare","piritu","porlamar","pueblo nuevo","puerto ayacucho","puerto cabello","puerto cumarebo","puerto la cruz","puerto piritu","punta cardon","punta de mata","punta de piedras","punto fijo","quibor","rio chico","rubio","sabana de parra","sabaneta","san antonio de los altos","san antonio del tachira","san carlos","san carlos del zulia","san cristobal","san felipe","san fernando de apure","san joaquin","san jose de barlovento","san jose de guanipa","san josecito","san juan bautista","san juan de los morros","san mateo","san rafael","san rafael de onoto","sanare","santa ana","santa barbara","santa cruz de los taques","santa cruz de mara","santa cruz de mora","santa elena de uairen","santa rita","santa teresa del tuy","socopo","soledad","tabay","tacarigua","tariba","temblador","tia juana","timotes","tinaco","tinaquillo","tovar","trujillo","tucacas","tucani","tucupido","tucupita","tumeremo","turmero","upata","urachiche","urena","valencia","valera","valle de la pascua","villa bruzual","villa de cura","yaritagua","yumare","zaraza"],"VN":["bac giang","bac kan","bac lieu","bac ninh","bao loc","ben tre","bien hoa","bim son","binh minh","binh thuy","buon ho","buon ma thuot","ca mau","cai rang","cam pha","cam pha mines","cam ranh","can gio","can giuoc","can tho","cao bang","cao lanh","cat ba","chau doc","chi linh","co do","co loa","cu chi","cung kiem","da lat","da nang","dai loc","di an","dien bien phu","dinh van","dong ha","dong hoi","dong xoai","duc trong","ea drang","gia nghia","go cong","ha dong","ha giang","ha long","ha tien","ha tinh","hai duong","haiphong","hanoi","ho chi minh city","hoa binh","hoi an","hue","hung yen","huyen lam ha","kon tum","la gi","lang son","lao cai","long xuyen","mong cai","muong lay","my tho","nam dinh","nghia lo","nha be","nha trang","ninh binh","ninh hoa","o mon","phan rang-thap cham","phan thiet","phong dien","phu khuong","phu ly","phu quoc","pleiku","quan duc thanh","quan duc thinh","quang minh","quang ngai","qui nhon","rach gia","sa dec","soc trang","son la","son tay","song cau","tam ky","tan an","tay ninh","thai binh","thai nguyen","thanh hoa","thanh pho uong bi","thi tran tan thanh","thi xa quang tri","thoi lai","thot not","thu dau mot","thuan an","tra vinh","tuy hoa","tuyen quang","vi thanh","viet tri","vinh","vinh chau","vinh long","vinh thanh","vinh yen","vung tau","xuan mai","yen bai","yen vinh"],"WF":["mata-utu"],"EH":["boujdour","dakhla","laayoune"],"YE":["aden","al bayda","al hazm","al hudaydah","amran","ataq","bajil","bayt al faqih","dhamar","dhi as sufal","hajjah","ibb","lahij","ma'rib","mukalla","sa'dah","sahar","sanaa","sayyan","taiz","yarim","zabid","zinjibar"],"ZM":["chililabombwe","chingola","chipata","choma","kabwe","kafue","kalulushi","kansanshi","kapiri mposhi","kasama","kawambwa","kitwe","livingstone","luanshya","lusaka","mansa","mazabuka","mbala","mongu","monze","mpika","mufulira","mumbwa","nchelenge","ndola","petauke","samfya","sesheke","siavonga"],"ZW":["beitbridge","bindura","bulawayo","chegutu","chinhoyi","chipinge","chiredzi","chitungwiza","epworth","gokwe","gwanda","gweru","harare","hwange","kadoma","kariba","karoi","kwekwe","marondera","masvingo","mutare","norton","redcliff","rusape","ruwa","shurugwi","victoria falls","zvishavane"]} -def get_cities(value): - return country_code_to_cities[value] diff --git a/backend/inputs/get_places.js b/backend/inputs/get_places.js deleted file mode 100644 index 9b2d6c4ce..000000000 --- a/backend/inputs/get_places.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * @typedef {import('../../frontend/node_modules/botasaurus-controls/dist/index').Controls} Controls - */ - -const CountryOptions = [{ "value": "AF", "label": "Afghanistan (49 Cities)" }, { "value": "AX", "label": "Aland Islands (1 City)" }, { "value": "AL", "label": "Albania (21 Cities)" }, { "value": "DZ", "label": "Algeria (250 Cities)" }, { "value": "AS", "label": "American Samoa (1 City)" }, { "value": "AD", "label": "Andorra (2 Cities)" }, { "value": "AO", "label": "Angola (26 Cities)" }, { "value": "AI", "label": "Anguilla (1 City)" }, { "value": "AG", "label": "Antigua and Barbuda (1 City)" }, { "value": "AR", "label": "Argentina (225 Cities)" }, { "value": "AM", "label": "Armenia (19 Cities)" }, { "value": "AW", "label": "Aruba (3 Cities)" }, { "value": "AU", "label": "Australia (289 Cities)" }, { "value": "AT", "label": "Austria (48 Cities)" }, { "value": "AZ", "label": "Azerbaijan (59 Cities)" }, { "value": "BS", "label": "Bahamas (3 Cities)" }, { "value": "BH", "label": "Bahrain (8 Cities)" }, { "value": "BD", "label": "Bangladesh (104 Cities)" }, { "value": "BB", "label": "Barbados (1 City)" }, { "value": "BY", "label": "Belarus (49 Cities)" }, { "value": "BE", "label": "Belgium (224 Cities)" }, { "value": "BZ", "label": "Belize (5 Cities)" }, { "value": "BJ", "label": "Benin (29 Cities)" }, { "value": "BM", "label": "Bermuda (1 City)" }, { "value": "BT", "label": "Bhutan (4 Cities)" }, { "value": "BO", "label": "Bolivia (39 Cities)" }, { "value": "BQ", "label": "Bonaire, Saint Eustatius and Saba (1 City)" }, { "value": "BA", "label": "Bosnia and Herzegovina (22 Cities)" }, { "value": "BW", "label": "Botswana (18 Cities)" }, { "value": "BR", "label": "Brazil (1200 Cities)" }, { "value": "VG", "label": "British Virgin Islands (1 City)" }, { "value": "BN", "label": "Brunei (4 Cities)" }, { "value": "BG", "label": "Bulgaria (56 Cities)" }, { "value": "BF", "label": "Burkina Faso (41 Cities)" }, { "value": "BI", "label": "Burundi (10 Cities)" }, { "value": "CV", "label": "Cabo Verde (4 Cities)" }, { "value": "KH", "label": "Cambodia (27 Cities)" }, { "value": "CM", "label": "Cameroon (63 Cities)" }, { "value": "CA", "label": "Canada (329 Cities)" }, { "value": "KY", "label": "Cayman Islands (2 Cities)" }, { "value": "CF", "label": "Central African Republic (20 Cities)" }, { "value": "TD", "label": "Chad (24 Cities)" }, { "value": "CL", "label": "Chile (103 Cities)" }, { "value": "CN", "label": "China (1784 Cities)" }, { "value": "CX", "label": "Christmas Island (1 City)" }, { "value": "CC", "label": "Cocos Islands (1 City)" }, { "value": "CO", "label": "Colombia (303 Cities)" }, { "value": "KM", "label": "Comoros (2 Cities)" }, { "value": "CK", "label": "Cook Islands (1 City)" }, { "value": "CR", "label": "Costa Rica (40 Cities)" }, { "value": "HR", "label": "Croatia (25 Cities)" }, { "value": "CU", "label": "Cuba (126 Cities)" }, { "value": "CW", "label": "Curacao (1 City)" }, { "value": "CY", "label": "Cyprus (9 Cities)" }, { "value": "CZ", "label": "Czechia (96 Cities)" }, { "value": "CD", "label": "Democratic Republic of the Congo (68 Cities)" }, { "value": "DK", "label": "Denmark (59 Cities)" }, { "value": "DJ", "label": "Djibouti (4 Cities)" }, { "value": "DM", "label": "Dominica (1 City)" }, { "value": "DO", "label": "Dominican Republic (48 Cities)" }, { "value": "EC", "label": "Ecuador (66 Cities)" }, { "value": "EG", "label": "Egypt (133 Cities)" }, { "value": "SV", "label": "El Salvador (35 Cities)" }, { "value": "GQ", "label": "Equatorial Guinea (3 Cities)" }, { "value": "ER", "label": "Eritrea (6 Cities)" }, { "value": "EE", "label": "Estonia (8 Cities)" }, { "value": "SZ", "label": "Eswatini (3 Cities)" }, { "value": "ET", "label": "Ethiopia (91 Cities)" }, { "value": "FK", "label": "Falkland Islands (1 City)" }, { "value": "FO", "label": "Faroe Islands (1 City)" }, { "value": "FJ", "label": "Fiji (6 Cities)" }, { "value": "FI", "label": "Finland (76 Cities)" }, { "value": "FR", "label": "France (649 Cities)" }, { "value": "GF", "label": "French Guiana (5 Cities)" }, { "value": "PF", "label": "French Polynesia (3 Cities)" }, { "value": "TF", "label": "French Southern Territories (1 City)" }, { "value": "GA", "label": "Gabon (9 Cities)" }, { "value": "GM", "label": "Gambia (7 Cities)" }, { "value": "GE", "label": "Georgia (21 Cities)" }, { "value": "DE", "label": "Germany (1109 Cities)" }, { "value": "GH", "label": "Ghana (61 Cities)" }, { "value": "GI", "label": "Gibraltar (1 City)" }, { "value": "GR", "label": "Greece (113 Cities)" }, { "value": "GL", "label": "Greenland (1 City)" }, { "value": "GD", "label": "Grenada (1 City)" }, { "value": "GP", "label": "Guadeloupe (10 Cities)" }, { "value": "GU", "label": "Guam (7 Cities)" }, { "value": "GT", "label": "Guatemala (102 Cities)" }, { "value": "GG", "label": "Guernsey (1 City)" }, { "value": "GN", "label": "Guinea (19 Cities)" }, { "value": "GW", "label": "Guinea-Bissau (2 Cities)" }, { "value": "GY", "label": "Guyana (3 Cities)" }, { "value": "HT", "label": "Haiti (26 Cities)" }, { "value": "HN", "label": "Honduras (24 Cities)" }, { "value": "HK", "label": "Hong Kong (19 Cities)" }, { "value": "HU", "label": "Hungary (114 Cities)" }, { "value": "IS", "label": "Iceland (6 Cities)" }, { "value": "IN", "label": "India (2408 Cities)" }, { "value": "ID", "label": "Indonesia (400 Cities)" }, { "value": "IR", "label": "Iran (202 Cities)" }, { "value": "IQ", "label": "Iraq (72 Cities)" }, { "value": "IE", "label": "Ireland (39 Cities)" }, { "value": "IM", "label": "Isle of Man (1 City)" }, { "value": "IL", "label": "Israel (103 Cities)" }, { "value": "IT", "label": "Italy (613 Cities)" }, { "value": "CI", "label": "Ivory Coast (60 Cities)" }, { "value": "JM", "label": "Jamaica (11 Cities)" }, { "value": "JP", "label": "Japan (828 Cities)" }, { "value": "JE", "label": "Jersey (1 City)" }, { "value": "JO", "label": "Jordan (27 Cities)" }, { "value": "KZ", "label": "Kazakhstan (77 Cities)" }, { "value": "KE", "label": "Kenya (58 Cities)" }, { "value": "KI", "label": "Kiribati (1 City)" }, { "value": "XK", "label": "Kosovo (21 Cities)" }, { "value": "KW", "label": "Kuwait (18 Cities)" }, { "value": "KG", "label": "Kyrgyzstan (30 Cities)" }, { "value": "LA", "label": "Laos (11 Cities)" }, { "value": "LV", "label": "Latvia (14 Cities)" }, { "value": "LB", "label": "Lebanon (14 Cities)" }, { "value": "LS", "label": "Lesotho (9 Cities)" }, { "value": "LR", "label": "Liberia (10 Cities)" }, { "value": "LY", "label": "Libya (43 Cities)" }, { "value": "LI", "label": "Liechtenstein (1 City)" }, { "value": "LT", "label": "Lithuania (36 Cities)" }, { "value": "LU", "label": "Luxembourg (3 Cities)" }, { "value": "MO", "label": "Macao (1 City)" }, { "value": "MG", "label": "Madagascar (84 Cities)" }, { "value": "MW", "label": "Malawi (17 Cities)" }, { "value": "MY", "label": "Malaysia (142 Cities)" }, { "value": "MV", "label": "Maldives (1 City)" }, { "value": "ML", "label": "Mali (21 Cities)" }, { "value": "MT", "label": "Malta (7 Cities)" }, { "value": "MH", "label": "Marshall Islands (2 Cities)" }, { "value": "MQ", "label": "Martinique (8 Cities)" }, { "value": "MR", "label": "Mauritania (14 Cities)" }, { "value": "MU", "label": "Mauritius (13 Cities)" }, { "value": "YT", "label": "Mayotte (3 Cities)" }, { "value": "MX", "label": "Mexico (620 Cities)" }, { "value": "FM", "label": "Micronesia (1 City)" }, { "value": "MD", "label": "Moldova (21 Cities)" }, { "value": "MC", "label": "Monaco (2 Cities)" }, { "value": "MN", "label": "Mongolia (22 Cities)" }, { "value": "ME", "label": "Montenegro (8 Cities)" }, { "value": "MS", "label": "Montserrat (2 Cities)" }, { "value": "MA", "label": "Morocco (85 Cities)" }, { "value": "MZ", "label": "Mozambique (26 Cities)" }, { "value": "MM", "label": "Myanmar (67 Cities)" }, { "value": "NA", "label": "Namibia (14 Cities)" }, { "value": "NR", "label": "Nauru (1 City)" }, { "value": "NP", "label": "Nepal (43 Cities)" }, { "value": "NL", "label": "Netherlands (228 Cities)" }, { "value": "NC", "label": "New Caledonia (3 Cities)" }, { "value": "NZ", "label": "New Zealand (55 Cities)" }, { "value": "NI", "label": "Nicaragua (36 Cities)" }, { "value": "NE", "label": "Niger (25 Cities)" }, { "value": "NG", "label": "Nigeria (244 Cities)" }, { "value": "NU", "label": "Niue (1 City)" }, { "value": "NF", "label": "Norfolk Island (1 City)" }, { "value": "MP", "label": "Northern Mariana Islands (1 City)" }, { "value": "KP", "label": "North Korea (59 Cities)" }, { "value": "MK", "label": "North Macedonia (37 Cities)" }, { "value": "NO", "label": "Norway (39 Cities)" }, { "value": "OM", "label": "Oman (26 Cities)" }, { "value": "PK", "label": "Pakistan (315 Cities)" }, { "value": "PW", "label": "Palau (1 City)" }, { "value": "PS", "label": "Palestinian Territory (43 Cities)" }, { "value": "PA", "label": "Panama (26 Cities)" }, { "value": "PG", "label": "Papua New Guinea (13 Cities)" }, { "value": "PY", "label": "Paraguay (26 Cities)" }, { "value": "PE", "label": "Peru (130 Cities)" }, { "value": "PH", "label": "Philippines (438 Cities)" }, { "value": "PN", "label": "Pitcairn (1 City)" }, { "value": "PL", "label": "Poland (333 Cities)" }, { "value": "PT", "label": "Portugal (140 Cities)" }, { "value": "PR", "label": "Puerto Rico (21 Cities)" }, { "value": "QA", "label": "Qatar (5 Cities)" }, { "value": "CG", "label": "Republic of the Congo (12 Cities)" }, { "value": "RE", "label": "Reunion (14 Cities)" }, { "value": "RO", "label": "Romania (134 Cities)" }, { "value": "RU", "label": "Russia (1077 Cities)" }, { "value": "RW", "label": "Rwanda (11 Cities)" }, { "value": "BL", "label": "Saint Barthelemy (1 City)" }, { "value": "SH", "label": "Saint Helena (1 City)" }, { "value": "KN", "label": "Saint Kitts and Nevis (1 City)" }, { "value": "LC", "label": "Saint Lucia (1 City)" }, { "value": "MF", "label": "Saint Martin (1 City)" }, { "value": "PM", "label": "Saint Pierre and Miquelon (1 City)" }, { "value": "VC", "label": "Saint Vincent and the Grenadines (2 Cities)" }, { "value": "WS", "label": "Samoa (1 City)" }, { "value": "SM", "label": "San Marino (1 City)" }, { "value": "ST", "label": "Sao Tome and Principe (1 City)" }, { "value": "SA", "label": "Saudi Arabia (63 Cities)" }, { "value": "SN", "label": "Senegal (31 Cities)" }, { "value": "RS", "label": "Serbia (48 Cities)" }, { "value": "SC", "label": "Seychelles (1 City)" }, { "value": "SL", "label": "Sierra Leone (12 Cities)" }, { "value": "SG", "label": "Singapore (5 Cities)" }, { "value": "SX", "label": "Sint Maarten (1 City)" }, { "value": "SK", "label": "Slovakia (53 Cities)" }, { "value": "SI", "label": "Slovenia (9 Cities)" }, { "value": "SB", "label": "Solomon Islands (1 City)" }, { "value": "SO", "label": "Somalia (33 Cities)" }, { "value": "ZA", "label": "South Africa (169 Cities)" }, { "value": "GS", "label": "South Georgia and the South Sandwich Islands (1 City)" }, { "value": "KR", "label": "South Korea (125 Cities)" }, { "value": "SS", "label": "South Sudan (16 Cities)" }, { "value": "ES", "label": "Spain (624 Cities)" }, { "value": "LK", "label": "Sri Lanka (54 Cities)" }, { "value": "SD", "label": "Sudan (48 Cities)" }, { "value": "SR", "label": "Suriname (2 Cities)" }, { "value": "SJ", "label": "Svalbard and Jan Mayen (1 City)" }, { "value": "SE", "label": "Sweden (106 Cities)" }, { "value": "CH", "label": "Switzerland (86 Cities)" }, { "value": "SY", "label": "Syria (76 Cities)" }, { "value": "TW", "label": "Taiwan (31 Cities)" }, { "value": "TJ", "label": "Tajikistan (27 Cities)" }, { "value": "TZ", "label": "Tanzania (185 Cities)" }, { "value": "TH", "label": "Thailand (222 Cities)" }, { "value": "TL", "label": "Timor Leste (9 Cities)" }, { "value": "TG", "label": "Togo (17 Cities)" }, { "value": "TO", "label": "Tonga (1 City)" }, { "value": "TT", "label": "Trinidad and Tobago (13 Cities)" }, { "value": "TN", "label": "Tunisia (74 Cities)" }, { "value": "TR", "label": "Turkey (391 Cities)" }, { "value": "TM", "label": "Turkmenistan (24 Cities)" }, { "value": "TC", "label": "Turks and Caicos Islands (1 City)" }, { "value": "TV", "label": "Tuvalu (1 City)" }, { "value": "UG", "label": "Uganda (48 Cities)" }, { "value": "UA", "label": "Ukraine (254 Cities)" }, { "value": "AE", "label": "United Arab Emirates (19 Cities)" }, { "value": "GB", "label": "United Kingdom (823 Cities)" }, { "value": "US", "label": "United States (2829 Cities)" }, { "value": "UY", "label": "Uruguay (31 Cities)" }, { "value": "VI", "label": "U.S. Virgin Islands (2 Cities)" }, { "value": "UZ", "label": "Uzbekistan (103 Cities)" }, { "value": "VU", "label": "Vanuatu (1 City)" }, { "value": "VA", "label": "Vatican (1 City)" }, { "value": "VE", "label": "Venezuela (207 Cities)" }, { "value": "VN", "label": "Vietnam (116 Cities)" }, { "value": "WF", "label": "Wallis and Futuna (1 City)" }, { "value": "EH", "label": "Western Sahara (3 Cities)" }, { "value": "YE", "label": "Yemen (23 Cities)" }, { "value": "ZM", "label": "Zambia (29 Cities)" }, { "value": "ZW", "label": "Zimbabwe (28 Cities)" }] - -/** - * @param {Controls} controls - */ -function getInput(controls) { - const hasCountry = (data) => data['country'] - controls - .listOfTexts('queries', { - isDisabled: hasCountry, - defaultValue: ["Web Developers in Bangalore"], - placeholder: "Web Developers in Bangalore", - label: 'Search Queries', - isRequired: true - }) - .section("Extract Cities By Country", (section) => { - section - .select('country', { - options: CountryOptions, - }) - .text('business_type', { - placeholder: "Web Developers", - isRequired: hasCountry - } - ) - .greaterThanOrEqualToOne('max_cities', { - placeholder: 100, - label: 'Maximum Cities to Extract (Leave empty to extract all cities in a country)' - }).switch('randomize_cities' , { - defaultValue:true, - label:"Randomize Cities (Recommended)", - helpText:"When multiple users are targeting the same places in the same cities, it reduces the opportunity for each individual user to make a sale. By randomizing cities, it spreads the places across different locations, giving each user a better chance to make a sale." - }) - }) - .section("Email and Social Links Extraction", (section) => { - section.text('api_key', { - placeholder: "2e5d346ap4db8mce4fj7fc112s9h26s61e1192b6a526af51n9", - label: 'Email and Social Links Extraction API Key', - helpText: 'Enter your API key to extract email addresses and social media links.', - }) - }) - .section("Reviews Extraction", (section) => { - section - .switch('enable_reviews_extraction', { - label: "Enable Reviews Extraction" - }) - .greaterThanOrEqualToZero('max_reviews', { - label: 'Max Reviews per Place (Leave empty to extract all reviews)', - placeholder: 20, - isShown: (data) => data['enable_reviews_extraction'], defaultValue: 20, - }) - .choose('reviews_sort', { - label: "Sort Reviews By", - isRequired: true, isShown: (data) => data['enable_reviews_extraction'], defaultValue: 'newest', options: [{ value: 'newest', label: 'Newest' }, { value: 'most_relevant', label: 'Most Relevant' }, { value: 'highest_rating', label: 'Highest Rating' }, { value: 'lowest_rating', label: 'Lowest Rating' }] - }) - }) - .section("Language and Max Results", (section) => { - section - .addLangSelect() - .greaterThanOrEqualToOne('max_results', { - placeholder: 100, - label: 'Max Results per Search Query (Leave empty to extract all places)' - }) - }) - .section("Geo Location", (section) => { - section - .text('coordinates', { - placeholder: '12.900490, 77.571466' - }) - .greaterThanOrEqualToOne('zoom_level', { - label: 'Zoom Level (1-21)', - defaultValue: 14, - placeholder: 14 - }) - }) -} - diff --git a/backend/scrapers.py b/backend/scrapers.py deleted file mode 100644 index c517300c1..000000000 --- a/backend/scrapers.py +++ /dev/null @@ -1,331 +0,0 @@ -from botasaurus_server.server import Server -from src.gmaps import get_places -import random -from botasaurus_server.ui import View, Field, ExpandDictField, ExpandListField, filters, sorts -from botasaurus import cl -import urllib.parse -from .country import get_cities -from .category import category_options - -def convert_to_string(input_str): - return urllib.parse.unquote_plus(input_str).strip() - -def create_tasks_for_links(data, links): - """Creates tasks specifically designed for handling links.""" - task = data.copy() - task['links'] = links # Set the links property - task['query'] = "Links" # Set a generic query indicating link processing - return task - -def randomize_strings(string_list): - """ - Randomizes the order of strings in the given list and returns a new list. - - Args: - string_list (list): A list of strings. - - Returns: - list: A new list with the strings in a randomized order. - """ - # Create a copy of the original list to avoid modifying it - randomized_list = string_list.copy() - - # Shuffle the list in-place using the random.shuffle() function - random.shuffle(randomized_list) - - return randomized_list - -def prepend_to_strings(strings_list, prepend_str, ): - """ - Prepend a given string to each item in a list of strings. - """ - # Ensure the prepend_str ends with a space - prepend_str = prepend_str + " in " - return [prepend_str + s for s in strings_list] - - -def create_tasks_for_queries(data, queries): - tasks = [] - # Create individual tasks - for query in queries: - task = data.copy() # Shallow copy to preserve other settings - task["query"] = query # Assign the single query - # Delete the old "queries" property - tasks.append(task) - return tasks - -def split_by_gmaps_search_links(links): - # Lists to hold the divided links - search_queries = [] - in_place_links = [] - - # Iterate over each link in the input list - for link in links: - # Parse the link to get its components - parsed_link = cl.extract_path_from_link(link) - - # Check if the path starts with '/maps/search' - if parsed_link.startswith('/maps/search'): - # Add to search queries list if true - x = convert_to_string(parsed_link.lstrip('/maps/search/').split('/')[0]) - if x: - search_queries.append((x)) - else: - # Otherwise, add to in place links list - in_place_links.append(link) - - return in_place_links, search_queries - -def filter_links(queries): - return [query for query in queries if query.startswith("http://") or query.startswith("https://")] - -def split_and_create_tasks(data, queries): - alllnks = filter_links(queries) - places_links, search_queries = split_by_gmaps_search_links(alllnks) - places_links_set = set(alllnks) - for query in queries: - if query not in places_links_set: - search_queries.append(query) - # Create tasks for non-link queries - tasks = create_tasks_for_queries(data, search_queries) - - # Create tasks for links - if places_links: - links_task = create_tasks_for_links(data, places_links) - tasks.insert(0, links_task) - return tasks - - -def split_task_by_query(data): - """Splits a task dictionary into a list of tasks based on queries, - optionally prepending city names if a country is specified. - """ - if data["country"]: - cities = get_cities(data["country"]) - - if data["randomize_cities"]: - cities = randomize_strings(cities) - - if data["max_cities"]: - cities = cities[:data["max_cities"]] - - queries = prepend_to_strings(cities, data["business_type"], ) - del data["queries"] # Avoid passing potentially big queries object - return create_tasks_for_queries(data, queries) - else: - queries = data["queries"] # Use queries directly - del data["queries"] # Avoid passing potentially big queries object - # Split queries into links and non-links - - tasks = split_and_create_tasks(data, queries) - - return tasks - - -def get_task_name(data): - return data["query"] - -featured_reviews_view = View( - "Featured Reviews", - fields=[ - Field("place_id"), - Field("name", output_key="place_name"), - ExpandListField( - "featured_reviews", - fields=[ - Field("review_id"), - Field("rating"), - Field("review_text"), - Field("published_at"), - Field("published_at_date"), - Field("response_from_owner_text"), - Field("response_from_owner_ago"), - Field("response_from_owner_date"), - Field("review_likes_count"), - Field("total_number_of_reviews_by_reviewer"), - Field("total_number_of_photos_by_reviewer"), - Field("is_local_guide"), - Field("review_translated_text"), - Field("response_from_owner_translated_text"), - Field("review_photos"), - ], - ), - ], -) - -detailed_reviews_view = View( - "Detailed Reviews", - fields=[ - Field("place_id"), - Field("name", output_key="place_name"), - ExpandListField( - "detailed_reviews", - fields=[ - Field("review_id"), - Field("rating"), - Field("review_text"), - Field("published_at"), - Field("published_at_date"), - Field("response_from_owner_text"), - Field("response_from_owner_ago"), - Field("response_from_owner_date"), - Field("review_likes_count"), - Field("total_number_of_reviews_by_reviewer"), - Field("total_number_of_photos_by_reviewer"), - Field("is_local_guide"), - Field("review_translated_text"), - Field("response_from_owner_translated_text"), - ], - ), - ], -) - - -def competitors_to_string(data): - # Check if the data is a list - if isinstance(data, list): - # Initialize an empty list to hold formatted strings - formatted_strings = [] - - # Iterating through each competitor in the list - for competitor in data: - name = competitor.get("name", "No Name") - link = competitor.get("link", "No Link") - reviews = competitor.get("reviews", "No Reviews") - - # Formatting each competitor's information and adding it to the list - formatted_strings.append( - f"Name: {name}\nLink: {link}\nReviews: {reviews} reviews\n" - ) - - # Joining all formatted strings with a newline character - return "\n".join(formatted_strings).strip() - else: - # Return data as it is if it's not a list - return data - - -def join_review_keywords(data, record): - return ", ".join([kw["keyword"] for kw in data]) - - -def join_closed_on(data, record): - if isinstance(data, list): - return ", ".join(data) - else: - return data - - -join_with_commas = lambda value, record: ", ".join(value or []) - -social_fields = [ - Field("emails", map=join_with_commas), - Field("phones", map=join_with_commas), - Field("linkedin"), - Field("twitter"), - Field("facebook"), - Field("youtube"), - Field("instagram"), -] - -overview_view = View( - "Overview", - fields=[ - Field("place_id"), - Field("name"), - Field("description"), - Field("is_spending_on_ads"), - Field("reviews"), - Field("competitors", map=lambda value, record: competitors_to_string(value)), - Field("website"), - Field("can_claim"), - ] - + social_fields - + [ - ExpandDictField( - "owner", - fields=[ - Field( - "name", - output_key="owner_name", - ), - Field( - "link", - output_key="owner_profile_link", - ), - ], - ), - Field("featured_image"), - Field("main_category"), - Field("categories", map=join_with_commas), - Field("rating"), - Field("workday_timing"), - Field("closed_on", map=join_closed_on), - Field("phone"), - Field("address"), - Field("review_keywords", map=join_review_keywords), - Field("link"), - ], -) - -best_customers = sorts.Sort( - label="Best Potential Customers", - is_default=True, - sorts=[ - sorts.NumericAscendingSort("name"), - sorts.NumericDescendingSort("reviews"), - sorts.TrueFirstSort("website"), - sorts.TruthyFirstSort( - "linkedin", - ), - sorts.TrueFirstSort( - "is_spending_on_ads", - ), - ], -) - -Server.add_scraper( - get_places, - create_all_task=True, - split_task=split_task_by_query, - get_task_name=get_task_name, - filters=[ - filters.MinNumberInput("reviews", label="Min Reviews"), - filters.MaxNumberInput("reviews", label="Max Reviews"), - filters.IsTruthyCheckbox("website"), - filters.IsTruthyCheckbox("phone"), - filters.IsTrueCheckbox("is_spending_on_ads"), - filters.IsTrueCheckbox("can_claim"), - filters.MultiSelectDropdown( - "category_in", - options=category_options, - ), - filters.MinNumberInput("rating", label="Min Rating"), - ], - sorts=[ - best_customers, - sorts.NumericDescendingSort("reviews"), - sorts.NumericAscendingSort("reviews"), - sorts.NumericAscendingSort("name"), - ], - views=[ - overview_view, - featured_reviews_view, - detailed_reviews_view, - ], -) - -Server.set_rate_limit(request=1) -Server.enable_cache() -Server.configure( - title="Google Maps Scraper", - header_title="Made with Botasaurus", - description="Find thousands of new customers personal phone, email and grow your business exponentially.", - right_header={ - "text": "Love It? Star It! ★", - "link": "https://github.com/omkarcloud/botasaurus", - }, -) -# python -m backend.scrapers -if __name__ == "__main__": - print(split_by_gmaps_search_links(["https://www.google.com/maps/search/food+restaurant+in+++washingtk/@40.7338104,-74.0287773,13z/data=!3m1!4b1?entry=ttu", "https://www.google.com/maps/place/Top+App+%26+Web+Development+company+in+ahmedabad.Summer+internship+in+Php,Flutter,Python,AngularJS,React+JS,Node+JS+,UI%2FUx/data=!4m7!3m6!1s0x395e9b4922484c6f:0xe077cfffcd90ee87!8m2!3d23.0372919!4d72.5118722!16s%2Fg%2F11fzb0hl8n!19sChIJb0xIIkmbXjkRh-6Qzf_Pd-A?authuser=0&hl=en&rclk=1"])) \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml deleted file mode 100644 index a6983cd82..000000000 --- a/docker-compose.yaml +++ /dev/null @@ -1,13 +0,0 @@ -version: "3" -services: - bot-1: - restart: "no" - shm_size: 800m - build: - dockerfile: Dockerfile - context: . - volumes: - - .:/app - ports: - - "3000:3000" - - "8000:8000" \ No newline at end of file diff --git a/frontend/.dockerignore b/frontend/.dockerignore deleted file mode 100644 index 38ff92948..000000000 --- a/frontend/.dockerignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules -npm-debug.log -README.md -.next -.git -package-lock.json \ No newline at end of file diff --git a/frontend/.gitignore b/frontend/.gitignore deleted file mode 100644 index 59b85d19d..000000000 --- a/frontend/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -node_modules -npm-debug.log -README.md -.next -.git -package-lock.json -public/themes diff --git a/frontend/LICENSE b/frontend/LICENSE deleted file mode 100644 index 460719da6..000000000 --- a/frontend/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2019 Elasticsearch BV - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/frontend/next-env.d.ts b/frontend/next-env.d.ts deleted file mode 100644 index 4f11a03dc..000000000 --- a/frontend/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// -/// - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/frontend/next.config.js b/frontend/next.config.js deleted file mode 100644 index cf2402f41..000000000 --- a/frontend/next.config.js +++ /dev/null @@ -1,210 +0,0 @@ -/* eslint-disable @typescript-eslint/no-var-requires,@typescript-eslint/no-use-before-define,@typescript-eslint/no-empty-function,prefer-template */ -const crypto = require('crypto') -const fs = require('fs') -const glob = require('glob') -const path = require('path') - -const CopyWebpackPlugin = require('copy-webpack-plugin') -const { IgnorePlugin } = require('webpack') - -/** - * If you are deploying your site under a directory other than `/` e.g. - * GitHub pages, then you have to tell Next where the files will be served. - * We don't need this during local development, because everything is - * available under `/`. - */ - -const themeConfig = buildThemeConfig() - -const nextConfig = { - env: { - THEME_CONFIG: JSON.stringify(themeConfig), - }, - typescript: { - // !! WARN !! - // Dangerously allow production builds to successfully complete even if - // your project has type errors. - // !! WARN !! - // speed up project - ignoreBuildErrors: true, - }, - - reactStrictMode: true, - rewrites: function rewrites() { - return [ - { - source: '/api/:path*', - destination: "http://127.0.0.1:8000/api/:path*", // Proxy to Backend - }, - ] - }, - compiler: { - emotion: true, - }, - /** Disable the `X-Powered-By: Next.js` response header. */ - poweredByHeader: false, - - /** - * When set to something other than '', this field instructs Next to - * expect all paths to have a specific directory prefix. This fact is - * transparent to (almost all of) the rest of the application. - */ - basePath: '', - - images: { - loader: 'custom', - }, - - /** - * Set custom `process.env.SOMETHING` values to use in the application. - * You can do this with Webpack's `DefinePlugin`, but this is more concise. - * It's also possible to provide values via `publicRuntimeConfig`, but - * this method is preferred as it can be done statically at build time. - * - * @see https://nextjs.org/docs/api-reference/next.config.js/environment-variables - */ - - /** - * Next.js reports TypeScript errors by default. If you don't want to - * leverage this behavior and prefer something else instead, like your - * editor's integration, you may want to disable it. - */ - // typescript: { - // ignoreDevErrors: true, - // }, - - /** Customises the build */ - webpack(config, { isServer }) { - // EUI uses some libraries and features that don't work outside of a - // browser by default. We need to configure the build so that these - // features are either ignored or replaced with stub implementations. - if (isServer) { - config.externals = config.externals.map(eachExternal => { - if (typeof eachExternal !== 'function') { - return eachExternal - } - - return (context, callback) => { - if (context.request.indexOf('@elastic/eui')> -1) { - return callback() - } - - return eachExternal(context, callback) - } - }) - - // Mock HTMLElement on the server-side - const definePluginId = config.plugins.findIndex( - p => p.constructor.name === 'DefinePlugin' - ) - - config.plugins[definePluginId].definitions = { - ...config.plugins[definePluginId].definitions, - HTMLElement: function () {}, - } - } - - // Copy theme CSS files into `public` - config.plugins.push( - new CopyWebpackPlugin({ patterns: themeConfig.copyConfig }), - - // Moment ships with a large number of locales. Exclude them, leaving - // just the default English locale. If you need other locales, see: - // https://create-react-app.dev/docs/troubleshooting/#momentjs-locales-are-missing - new IgnorePlugin({ - resourceRegExp: /^\.\/locale$/, - contextRegExp: /moment$/, - }) - ) - - config.resolve.mainFields = ['module', 'main'] - - return config - }, -} - -/** - * Enhances the Next config with the ability to: - * - Analyze the webpack bundle - * - Load images from JavaScript. - * - Load SCSS files from JavaScript. - */ -module.exports = nextConfig - -/** - * Find all EUI themes and construct a theme configuration object. - * - * The `copyConfig` key is used to configure CopyWebpackPlugin, which - * copies the default EUI themes into the `public` directory, injecting a - * hash into the filename so that when EUI is updated, new copies of the - * themes will be fetched. - * - * The `availableThemes` key is used in the app to includes the themes in - * the app's ` ` element, and for theme switching. - * - * @return {ThemeConfig} - */ -function buildThemeConfig() { - const themeFiles = glob.sync( - path.join( - __dirname, - 'node_modules', - '@elastic', - 'eui', - 'dist', - 'eui_theme_*.min.css' - ) - ) - - const themeConfig = { - availableThemes: [], - copyConfig: [], - } - - for (const each of themeFiles) { - const basename = path.basename(each, '.min.css') - - const themeId = basename.replace(/^eui_theme_/, '') - - const themeName = - themeId[0].toUpperCase() + themeId.slice(1).replace(/_/g, ' ') - - const publicPath = `themes/${basename}.${hashFile(each)}.min.css` - const toPath = path.join( - __dirname, - `public`, - `themes`, - `${basename}.${hashFile(each)}.min.css` - ) - - themeConfig.availableThemes.push({ - id: themeId, - name: themeName, - publicPath, - }) - - themeConfig.copyConfig.push({ - from: each, - to: toPath, - }) - } - - return themeConfig -} - -/** - * Given a file, calculate a hash and return the first portion. The number - * of characters is truncated to match how Webpack generates hashes. - * - * @param {string} filePath the absolute path to the file to hash. - * @return string - */ -function hashFile(filePath) { - const hash = crypto.createHash(`sha256`) - const fileData = fs.readFileSync(filePath) - hash.update(fileData) - const fullHash = hash.digest(`hex`) - - // Use a hash length that matches what Webpack does - return fullHash.substr(0, 20) -} \ No newline at end of file diff --git a/frontend/package.json b/frontend/package.json deleted file mode 100644 index 15bf789c8..000000000 --- a/frontend/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "frontend", - "private": true, - "description": "Botasaurus Frontend", - "version": "1.0.0", - "author": { - "name": "Omkar", - "email": "chetan@omkar.cloud", - "url": "https://www.omkar.cloud" - }, - "keywords": [ - "botasaurus", - "web-scraping", - "anti-detection" - ], - "engines": { - "node": ">=16" - }, - "license": "Apache-2.0", - "scripts": { - "dev": "next dev", - "build": "next build --no-lint", - "start": "next start" - - }, - "repository": { - "type": "git", - "url": "https://github.com/omkarcloud/botasaurus" - }, - "bugs": { - "url": "https://github.com/omkarcloud/botasaurus/issues" - }, - "dependencies": { - "@elastic/eui": "^63.0.0", - "@emotion/cache": "^11.10.3", - "@emotion/react": "^11.10.4", - "@omkar111111/utils": "^0.2.77", - "axios": "^0.26.1", - "botasaurus-controls": "latest", - "cogo-toast-react-17-fix": "latest", - "regenerator-runtime": "^0.13.9" - }, - "devDependencies": { - "copy-webpack-plugin": "^10.0.0", - "glob": "^7.2.0", - "moment": "^2.29.4", - "next": "^12.3.1", - "react": "^17.0.2", - "react-dom": "^17.0.2", - "typescript": "^4.5.2" - }, - "browserslist": [ - "last 2 chrome versions" - ] -} \ No newline at end of file diff --git a/frontend/public/images/404_rainy_cloud_light.png b/frontend/public/images/404_rainy_cloud_light.png deleted file mode 100644 index 9735dc6f7..000000000 Binary files a/frontend/public/images/404_rainy_cloud_light.png and /dev/null differ diff --git a/frontend/public/images/favicon/favicon-16x16.png b/frontend/public/images/favicon/favicon-16x16.png deleted file mode 100644 index ab7c5619c..000000000 Binary files a/frontend/public/images/favicon/favicon-16x16.png and /dev/null differ diff --git a/frontend/public/images/favicon/favicon-32x32.png b/frontend/public/images/favicon/favicon-32x32.png deleted file mode 100644 index 27cc2bae7..000000000 Binary files a/frontend/public/images/favicon/favicon-32x32.png and /dev/null differ diff --git a/frontend/public/images/favicon/favicon-48x48.png b/frontend/public/images/favicon/favicon-48x48.png deleted file mode 100644 index ad45f003a..000000000 Binary files a/frontend/public/images/favicon/favicon-48x48.png and /dev/null differ diff --git a/frontend/public/images/logo.svg b/frontend/public/images/logo.svg deleted file mode 100644 index 79a2c37a4..000000000 --- a/frontend/public/images/logo.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/frontend/public/images/mascot.png b/frontend/public/images/mascot.png deleted file mode 100644 index 7afe62fcc..000000000 Binary files a/frontend/public/images/mascot.png and /dev/null differ diff --git a/frontend/public/images/twitter-card.png b/frontend/public/images/twitter-card.png deleted file mode 100644 index e54c0e886..000000000 Binary files a/frontend/public/images/twitter-card.png and /dev/null differ diff --git a/frontend/public/robots.txt b/frontend/public/robots.txt deleted file mode 100644 index cb77a739f..000000000 --- a/frontend/public/robots.txt +++ /dev/null @@ -1,4 +0,0 @@ -User-agent: * -Allow: / - -Sitemap: /sitemap.xml \ No newline at end of file diff --git a/frontend/sandbox.config.json b/frontend/sandbox.config.json deleted file mode 100644 index b8b5c5a71..000000000 --- a/frontend/sandbox.config.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "container": { - "node": "16" - } -} diff --git a/frontend/src/components/AboutComponent/AboutComponent.tsx b/frontend/src/components/AboutComponent/AboutComponent.tsx deleted file mode 100644 index b238a990f..000000000 --- a/frontend/src/components/AboutComponent/AboutComponent.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import MarkdownComponent from '../MarkdownComponent/MarkdownComponent' - -const AboutComponent = ({ markdownContent }) => ( - -) - -export default AboutComponent diff --git a/frontend/src/components/ApiIntegrationComponent/ApiIntegrationComponent.tsx b/frontend/src/components/ApiIntegrationComponent/ApiIntegrationComponent.tsx deleted file mode 100644 index dc23d0973..000000000 --- a/frontend/src/components/ApiIntegrationComponent/ApiIntegrationComponent.tsx +++ /dev/null @@ -1,484 +0,0 @@ -import { createControls } from 'botasaurus-controls' -import { useMemo, } from 'react' -import { useState } from 'react' -import { EmptyScraper } from '../Empty/Empty' -import MarkdownComponent from '../MarkdownComponent/MarkdownComponent' -import ScraperSelector from '../ScraperSelector/ScraperSelector' -import { hasFilters, hasSorts, hasViews } from '../../utils/models' - -function createApiInitializationText(baseUrl) { - if (baseUrl) { - return baseUrl + ', ' - } else { - return '' - } -} - -const default_intentation = 4 -function js_object_to_python_dict_string(object, indent = default_intentation, brackets_indentation = 0) { - const x = ' '.repeat(indent) - const brackets_indentation_Str = ' '.repeat(brackets_indentation) - - const entrieslist = Object.entries(object) - if (entrieslist.length === 0) { - return brackets_indentation_Str + '{}' - - } - - const entries = entrieslist.map(([key, value]) => { - // Handle different value types - if (typeof value === 'string') { - return `${x}'${key}': '${value}',` // Strings need quotes - } else if (Array.isArray(value)) { - if (value.length> 0 && typeof value[0] === 'string') { - const z = value.map((v) => `'${v}'`).join(', ') // Strings in arrays need quotes - const y = `[${z}]` - return `${x}'${key}': ${y},` // Arrays use JSON.stringify - } else { - return `${x}'${key}': ${JSON.stringify(value)},` // Arrays use JSON.stringify - } - - } else if (value === null) { - return `${x}'${key}': None,` // Null becomes None - } else if (typeof value === 'boolean') { - return `${x}'${key}': ${value.toString().charAt(0).toUpperCase() + value.toString().slice(1)},` // Booleans need True/False capitalization - } else { - return `${x}'${key}': ${value},` // Numbers and other values directly - } - }) - - // Construct the final Python dictionary string with indentation - const formattedString = `${brackets_indentation_Str}{\n` + entries.join('\n') + `\n${brackets_indentation_Str}}` - return formattedString -} -function create_canbeone_options_string(options) { - const slicelength = 10 - if (options.length === 0) { - return "# No options available"; - } else if (options.length> slicelength) { - return `# Can be one among ${options.length} options: ${(options.slice(0, slicelength).map((option) => option.value)).join(', ')}, ...`; - } else { - return `# Can be one of the following options: ${join_strings(options.map((option) => option.value))}`; - } -} - -function create_canbeany_options_string(options) { - const slicelength = 10 - - if (options.length === 0) { - return "# No options available"; - } else if (options.length> slicelength) { - return `# Can be any among ${options.length} options: ${(options.slice(0, slicelength).map((option) => option.value)).join(', ')}, ...`; - } else { - return `# Can be any combination of the following options: ${join_strings(options.map((option) => option.value))}`; - } -} - -function filters_to_python_dict_string(filters, indent = default_intentation, brackets_indentation = 0) { - const x = ' '.repeat(indent) + "# "; - const brackets_indentation_str = ' '.repeat(brackets_indentation); - if (filters.length === 0) { - return `{} # No filters available`; - } - const entries = filters.map(({ id, type, options }) => { - switch (type) { - case 'MinNumberInput': - case 'MaxNumberInput': - return `${x}'${id}': 0, # Enter a number`; - case 'IsTrueCheckbox': - case 'IsFalseCheckbox': - case 'IsNullCheckbox': - case 'IsNotNullCheckbox': - case 'IsTruthyCheckbox': - case 'IsFalsyCheckbox': - return `${x}'${id}': True, # Must be True Only`; - case 'SingleSelectDropdown': - return `${x}'${id}': 'your-option', ${create_canbeone_options_string(options)}`; - case 'MultiSelectDropdown': - return `${x}'${id}': ['your-option-1', 'your-option-2'], ${create_canbeany_options_string(options)}`; - case 'SearchTextInput': - return `${x}'${id}': '', # Enter your search text string`; - default: - throw Error('Not Implemented'); - } - }); - - // Construct the final Python dictionary string with indentation - const formattedString = `{\n` + entries.join('\n') + `\n${brackets_indentation_str}}` - return formattedString -} - - -function create_api_task_text(scraper_name, hasSingleScraper, default_data) { - let x = hasSingleScraper ? '' : `scraper_name='${scraper_name}', ` - - return `To create an asynchronous task, use the \`create_async_task\` method: - -\`\`\`python -data = ${js_object_to_python_dict_string(default_data)} -task = api.create_async_task(${x}data) -\`\`\` - -To create a synchronous task, use the \`create_sync_task\` method: - -\`\`\`python -data = ${js_object_to_python_dict_string(default_data)} -task = api.create_sync_task(${x}data) -\`\`\` - -You can create multiple asynchronous or synchronous tasks at once using the \`create_async_tasks\` and \`create_sync_tasks\` methods, respectively: - -\`\`\`python -data_items = [ -${js_object_to_python_dict_string(default_data, 8, 4)}, -${js_object_to_python_dict_string(default_data, 8, 4)}, -] -tasks = api.create_async_tasks(${x}data_items) -tasks = api.create_sync_tasks(${x}data_items) -\`\`\`` -} - - -function create_scraper_task_data_text(scraper_name, hasSingleScraper) { - let x = hasSingleScraper ? '' : `, scraper_name='${scraper_name}'` - - - return `(data${x})` -} - -function create_scraper_task_data_text2(scraper_name, hasSingleScraper) { - let x = hasSingleScraper ? '' : `, scraper_name='${scraper_name}'` - return `(data_items${x})` -} - -function create_filter_string(filters) { - return `\n filters=${filters_to_python_dict_string(filters, 8, 4)}` -} - -function join_strings(strings: string[], separator: string = 'or'): string { - if (strings.length === 0) { - return "" - } else if (strings.length === 1) { - return strings[0] - } else { - const lastElement = strings.pop() - const joinedStrings = strings.join(", ") - return `${joinedStrings} ${separator} ${lastElement}` - } -} - -function create_sort_string(sorts, default_sort) { - return `\n sort=None, # sort can be one of: ${join_strings(sorts.map((view) => { - if (view.id === default_sort) { - return `${view.id} (default)` - } - return view.id - }))}` -} - -function create_views_string(views) { - if (views.length === 1) { - return `\n view=None, # view can be ${views[0].id}` - }else { - return `\n view=None, # view can be one of: ${join_strings(views.map((view) => view.id))}` - } -} - - -function generateList(pagination, views: any, filters: any, sorts: any) { - const result: string[] = [] - - if (pagination) { - result.push("pagination") - } - if (hasViews(views)) { - result.push("views") - } - - if (hasFilters(filters)) { - result.push("filters") - } - - if (hasSorts(sorts)) { - result.push("sorts") - } - - return result -} - -function create_fetching_task_results_text(sorts, filters, views, default_sort) { - const ls = join_strings(generateList(true, views, filters, sorts), "or") - - return `You can also apply ${ls}: - -\`\`\`python -results = api.get_task_results( - task_id=1, - page=1, - per_page=20,${hasViews(views) ? create_views_string(views) : ""}${hasSorts(sorts) ? create_sort_string(sorts, default_sort) : ""}${hasFilters(filters) ? create_filter_string(filters) : ""} -) -\`\`\`` -} - -function create_fetching_task_text(sorts, filters, views, default_sort) { - const ls = join_strings(generateList(true, views, filters, sorts), "or") - - return `By default, all tasks are returned. You can also apply ${ls}: - -\`\`\`python -results = api.get_task_results( - task_id=1, - page=1, - per_page=20,${hasViews(views) ? create_views_string(views) : ""}${hasSorts(sorts) ? create_sort_string(sorts, default_sort) : ""}${hasFilters(filters) ? create_filter_string(filters) : ""} -) -\`\`\`` -} - -function create_download_task_text(sorts, filters, views, default_sort) { - const ls = join_strings(generateList(false, views, filters, sorts), "or") - if (ls) { - return `To download the results of a specific task in a particular format, use the \`download_task_results\` method: - -\`\`\`python -results_bytes, filename = api.download_task_results(task_id=1, format='csv') -with open(filename, 'wb') as file: - file.write(results_bytes) -\`\`\` - -You can also apply ${ls}: - -\`\`\`python -results_bytes, filename = api.download_task_results( - task_id=1, - format='excel', # format can be one of: json, csv or excel${hasViews(views) ? create_views_string(views) : ""}${hasSorts(sorts) ? create_sort_string(sorts, default_sort) : ""}${hasFilters(filters) ? create_filter_string(filters) : ""} -) -\`\`\`` - } else { - return `To download the results of a specific task in a particular format, use the \`download_task_results\` method: - -\`\`\`python -results_bytes, filename = api.download_task_results(task_id=1, format='csv') -with open(filename, 'wb') as file: - file.write(results_bytes) -\`\`\`` - } -} - - - -function createApiREADME(baseUrl, scraper_name, hasSingleScraper, default_data, sorts, filters, views, default_sort) { - - return `# API Integration - -The Botasaurus API client provides a convenient way to access the ${hasSingleScraper?'Scrapers':'Scraper'} via an API. - -It provides a simple and convenient way to create, fetch, download, abort, and delete tasks, as well as manage their results. - -## Usage - -First, import the \`Api\` class from the library: - -\`\`\`python -from botasaurus_api import Api -\`\`\` - -Then, create an instance of the \`Api\` class: - -\`\`\`python -api = Api(${baseUrl}) -\`\`\` - -Additionally, the API client will create response JSON files in the \`output/responses/\` directory to help with debugging and development. If you want to disable this feature in production, you can set \`create_response_files=False\`. - -\`\`\`python -api = Api(${createApiInitializationText(baseUrl)}create_response_files=False) -\`\`\` - -### Creating Tasks - -There are two types of tasks: - -- Asynchronous Task -- Synchronous Task - -Asynchronous tasks run asynchronously, without waiting for the task to be completed. The server will return a response immediately, containing information about the task, but not the actual results. The client can then retrieve the results later. - -Synchronous tasks, on the other hand, wait for the completion of the task. The server response will contain the results of the task. - -You should use asynchronous tasks when you want to run a task in the background and retrieve the results later. Synchronous tasks are better suited for scenarios where you have a small number of tasks and want to wait and get the results immediately. - -${create_api_task_text(scraper_name, hasSingleScraper, default_data)} - -### Fetching Tasks - -To fetch tasks from the server, use the \`get_tasks\` method: - -\`\`\`python -tasks = api.get_tasks() -\`\`\` - -${create_fetching_task_text(sorts, filters, views, default_sort)} - -To fetch a specific task by its ID, use the \`get_task\` method: - -\`\`\`python -task = api.get_task(task_id=1) -\`\`\` - -### Fetching Task Results - -To fetch the results of a specific task, use the \`get_task_results\` method: - -\`\`\`python -results = api.get_task_results(task_id=1) -\`\`\` - -${create_fetching_task_results_text(sorts, filters, views, default_sort)} - -### Downloading Task Results - -${create_download_task_text(sorts, filters, views, default_sort)} - -### Aborting and Deleting Tasks - -To abort a specific task, use the \`abort_task\` method: - -\`\`\`python -api.abort_task(task_id=1) -\`\`\` - -To delete a specific task, use the \`delete_task\` method: - -\`\`\`python -api.delete_task(task_id=1) -\`\`\` - -You can also bulk abort or delete multiple tasks at once using the \`abort_tasks\` and \`delete_tasks\` methods, respectively: - -\`\`\`python -api.abort_tasks(1, 2, 3) -api.delete_tasks(4, 5, 6) -\`\`\` - -## Examples - -Here are some example usages of the API client: - -\`\`\`python -from botasaurus_api import Api - -# Create an instance of the API client -api = Api() - -# Create an asynchronous task -data = ${js_object_to_python_dict_string(default_data)} -task = api.create_sync_task${create_scraper_task_data_text(scraper_name, hasSingleScraper)} - -# Fetch the task -task = api.get_task(task['id']) - -# Fetch the task results -results = api.get_task_results(task['id']) - -# Download the task results as a CSV -results_bytes, filename = api.download_task_results(task['id'], format='csv') - -# Abort the task -api.abort_task(task['id']) - -# Delete the task -api.delete_task(task['id']) - -# --- Bulk Operations --- - -# Create multiple synchronous tasks -data_items = [ -${js_object_to_python_dict_string(default_data, 8, 4)}, -${js_object_to_python_dict_string(default_data, 8, 4)}, -] -tasks = api.create_sync_tasks${create_scraper_task_data_text2(scraper_name, hasSingleScraper)} - -# Fetch all tasks -all_tasks = api.get_tasks() - -# Bulk abort tasks -api.abort_tasks(*[task['id'] for task in tasks]) - -# Bulk delete tasks -api.delete_tasks(*[task['id'] for task in tasks]) -\`\`\` - -## That's It! - -Now, go and build something awesome.` -} - -function getBaseUrl(): string { - // Check if window is defined - if (typeof window === 'undefined') { - return '' - } - - // Extract the hostname from the current URL - const hostname = window.location.hostname - - // Check for localhost addresses and return '' if matched - if ( - hostname === 'localhost' || - hostname === '127.0.0.1' || - hostname === '0.0.0.0' - ) { - return '' - } - - // Return the current page URL enclosed in double quotes if none of the above conditions are met - return `'${window.location.origin}'` -} - -const ContentContainer = ({ selectedScraper, hasSingleScraper }) => { - const baseUrl = getBaseUrl() - - const sorts = selectedScraper.sorts - const filters = selectedScraper.filters - const views = selectedScraper.views - const default_sort = selectedScraper.default_sort - - const controls = useMemo( - () => createControls(selectedScraper.input_js), - [selectedScraper] - ) - - //@ts-ignore - const defdata = controls.getDefaultData() - - const readmeContent = createApiREADME(baseUrl, selectedScraper.scraper_name, hasSingleScraper, defdata, sorts, filters, views, default_sort) - return -} - -const ScraperContainer = ({ scrapers }) => { - const [selectedScraper, setSelectedScraper] = useState(scrapers[0]) - - const hasSingleScraper = scrapers.length <= 1 - return ( -
- {hasSingleScraper ? null : ( - - )} - -
- ) -} - -const ApiIntegrationComponent = ({ scrapers }) => { - if (!scrapers || scrapers.length === 0) { - return - } - - return -} - -export default ApiIntegrationComponent \ No newline at end of file diff --git a/frontend/src/components/AxiosErrorHoc.tsx b/frontend/src/components/AxiosErrorHoc.tsx deleted file mode 100644 index d05cc25fd..000000000 --- a/frontend/src/components/AxiosErrorHoc.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { GetServerSideProps } from 'next/types' -import Error from 'next/error' -function removeDotFromLineEnding(line) { - return line.replace(/\.$/, ''); - } - -const AxiosErrorHoc = (WrappedComponent) => { - return (props) => { - if (props.errorCode) { - if (props.errorMessage) { - props.errorMessage - - return - } - return - } - return - } -} - -const handleErrorResponse = (response: any) => { - return { - props: { - errorCode: response.status, - errorMessage: response.data?.['message'], - }, - } -} - -export function wrapAxiosErrors(fn: GetServerSideProps) { - return async (x) => { - try { - // Attempt to call the provided function with its arguments - return await fn(x) - } catch (e) { - // If an error occurs, check if it's an Axios response error - if (e.response) { - // Handle the error response and return its result - return handleErrorResponse(e.response) - } - // If the error does not have a response (not an Axios error), re-throw it - throw e - } - } -} - -export default AxiosErrorHoc \ No newline at end of file diff --git a/frontend/src/components/CenterContent.tsx b/frontend/src/components/CenterContent.tsx deleted file mode 100644 index cc99a0f24..000000000 --- a/frontend/src/components/CenterContent.tsx +++ /dev/null @@ -1,13 +0,0 @@ -export default function CenterContent({ children, ...props }) { - return ( -
- {children} -
- ) -} diff --git a/frontend/src/components/CenteredSpinner.tsx b/frontend/src/components/CenteredSpinner.tsx deleted file mode 100644 index 679977dbb..000000000 --- a/frontend/src/components/CenteredSpinner.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { EuiLoadingSpinner } from '@elastic/eui' - -export default function CenteredSpinner({ addMargin = false }) { - return ( -
- -
- ) -} diff --git a/frontend/src/components/ClickOutside/ClickOutside.tsx b/frontend/src/components/ClickOutside/ClickOutside.tsx deleted file mode 100644 index b315eecd5..000000000 --- a/frontend/src/components/ClickOutside/ClickOutside.tsx +++ /dev/null @@ -1,108 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom' -export const UnreachableError = new Error('REACHED AN UNREACHABLE STATEMENT') - -export function closest( - el: HTMLElement | null, - check: (el: HTMLElement) => boolean -): HTMLElement | undefined { - let x: HTMLElement | null = el - - while (x) { - if (check(x)) return x - x = x.parentElement - } - return undefined -} - -export const instances: React.Component[] = [] -type Func1 = (a1: T1) => R - -type Props = { - exceptions?: (string | Func1)[] - handleClickOutside: Func1 -} - -export const IGNORE_CLICK = true -export default class ClickOutside extends React.Component { - // eslint-disable-next-line react/static-property-placement - static defaultProps = { - exceptions: [], - } - - componentDidMount() { - if (instances.length === 0) { - document.addEventListener('mousedown', this.handleAll, true) - } - instances.push(this) - } - - componentWillUnmount() { - instances.splice(instances.indexOf(this), 1) - if (instances.length === 0) { - document.removeEventListener('mousedown', this.handleAll, true) - } - } - - handleAll = (e: MouseEvent) => { - const target: HTMLElement = e.target as HTMLElement - if (!target) return - - instances.forEach(instance => { - const { exceptions, handleClickOutside: onClickOutside } = - instance.props as Required - let exceptionsCount = 0 - - if (exceptions.length> 0) { - const { functionExceptions, stringExceptions } = exceptions.reduce( - (acc, exception) => { - switch (typeof exception) { - case 'function': - acc.functionExceptions.push(exception) - break - case 'string': - acc.stringExceptions.push(exception) - break - default: - throw UnreachableError - } - - return acc - }, - { - functionExceptions: [] as Func1[], - stringExceptions: [] as string[], - } - ) - if (functionExceptions.length> 0) { - exceptionsCount += functionExceptions.filter( - exception => exception(e) === true - ).length - } - - if (exceptionsCount === 0 && stringExceptions.length> 0) { - const el = closest(target, node => - stringExceptions.some(ex => node.classList.contains(ex)) - ) - if (el) { - exceptionsCount += 1 - } - } - } - - if (exceptionsCount === 0) { - // eslint-disable-next-line react/no-find-dom-node - const node = ReactDOM.findDOMNode(instance) - - if (node && !node.contains(target)) { - onClickOutside(e) - } - } - }) - } - - render() { - const { children } = this.props as any - return React.Children.only(children) - } -} diff --git a/frontend/src/components/ClientOnly.tsx b/frontend/src/components/ClientOnly.tsx deleted file mode 100644 index d702f35c4..000000000 --- a/frontend/src/components/ClientOnly.tsx +++ /dev/null @@ -1,10 +0,0 @@ -const ClientOnly = (WrappedComponent) => { - return (props) => { - if (typeof window === 'undefined') { - return null; - } - return ; - }; -}; - -export default ClientOnly \ No newline at end of file diff --git a/frontend/src/components/Description/Description.tsx b/frontend/src/components/Description/Description.tsx deleted file mode 100644 index 5c3d9cca4..000000000 --- a/frontend/src/components/Description/Description.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { EuiText } from '@elastic/eui' - -const Description = ({ description }) => { - return ( - -

{description}

-
- ) -} - -export default Description diff --git a/frontend/src/components/DownloadStickyBar/DownloadStickyBar.tsx b/frontend/src/components/DownloadStickyBar/DownloadStickyBar.tsx deleted file mode 100644 index 7c16c3c39..000000000 --- a/frontend/src/components/DownloadStickyBar/DownloadStickyBar.tsx +++ /dev/null @@ -1,171 +0,0 @@ -import { - EuiButton, - EuiIcon, - EuiModal, - EuiModalBody, - EuiModalHeader, - EuiModalHeaderTitle, - EuiToolTip, -} from '@elastic/eui' -import { useState } from 'react' -import ClickOutside from '../ClickOutside/ClickOutside' -import Tabs from '../Tabs/Tabs' - -import { EuiForm, EuiFormRow } from '@elastic/eui' -import CheckboxField from '../inputs/CheckBoxField' -function getprefs() { - if (typeof window === 'undefined') { - return { format: 'csv', convert_to_english: true } - } - - let downloadPreference - try { - downloadPreference = JSON.parse( - localStorage.getItem('download_preference') || - '{"format": "csv", "convert_to_english": true}' - ) - } catch (error) { - console.error('Error parsing download preferences:', error) - downloadPreference = { format: 'csv', convert_to_english: true } // Default value in case of error - } - return downloadPreference -} - -let prefs = getprefs() - -const tabs = [ - { - id: 'csv', - name: 'CSV', - content: , // Assuming no content is needed for the sorting tabs - }, - { - id: 'json', - name: 'JSON', - content: , // Assuming no content is needed for the sorting tabs - }, - { - id: 'excel', - name: 'Excel', - content: , // Assuming no content is needed for the sorting tabs - }, -] - -const DownloadForm = ({ onSubmit }) => { - const [state, setState] = useState(getprefs) - - const onTabClick = selectedTab => { - setState({ - ...state, - format: selectedTab.id, - }) - } - - const handleCheckboxChange = e => { - setState({ - ...state, - convert_to_english: e, - }) - } - - const handleSubmit = event => { - event.preventDefault() - prefs = state - localStorage.setItem('download_preference', JSON.stringify(state)) - if (onSubmit) { - onSubmit(state) - } - } - - return ( - - - - - - - - Convert non-English characters to English characters{' '} - - - - } - fullWidth> - - - - - Download - - - ) -} - -function useDownloadModal(onDownload) { - const [isModalVisible, setIsModalVisible] = useState(false) - - const toggleModal = () => { - setIsModalVisible(!isModalVisible) - } - - // Call this function when the download is successfully initiated - function successClose(data) { - toggleModal() - onDownload(data) // Call the passed function on successful submission/download - } - - const modal = isModalVisible && ( - - { - toggleModal() - }}> -
- - Download Results - - - - -
-
-
- ) - - return { showModal: () => setIsModalVisible(true), modal } -} -const DownloadStickyBar = ({ onDownload, showPagination }) => { - function directDownload() { - // gets download preference from local storage, if not then it is {"format": "csv", "convert_to_english": true } - // if convert_to_english is true then the language will be converted to english - const downloadPreference = getprefs() - onDownload(downloadPreference) - } - - const { modal, showModal } = useDownloadModal(onDownload) - const fmt = `Download ${tabs.find(x => x.id === prefs.format).name}` - return ( -
- {modal} - - {fmt} - - -
- ) -} - -export default DownloadStickyBar diff --git a/frontend/src/components/Empty/Empty.tsx b/frontend/src/components/Empty/Empty.tsx deleted file mode 100644 index 605c887d6..000000000 --- a/frontend/src/components/Empty/Empty.tsx +++ /dev/null @@ -1,258 +0,0 @@ -import { - EuiButton, - EuiCodeBlock, - EuiDescriptionListDescription, - EuiEmptyPrompt, - EuiImage, - EuiLink, -} from '@elastic/eui' -import Link from 'next/link' -import CenteredSpinner from '../CenteredSpinner' - - -function OutputLink() { - return - View All Tasks - -} - - -export const EmptyInputs = props => { - return ( -
- - } - body={ -

- Learn how to add inputs to your scraper by reading the Botasaurus - docs{' '} - - here - - .{' '} -

- } - color="subdued" - layout="vertical" - title={

Add Inputs

} - titleSize="m" - /> -
- ) -} - -export const EmptyScraper = props => { - return ( -
- - } - body={ -

- Learn how to add scrapers by reading the Botasaurus docs{' '} - - here - - .{' '} -

- } - color="subdued" - layout="vertical" - title={

Add Scraper

} - titleSize="m" - /> -
- ) -} - -export const EmptyOutputs = props => { - return ( -
- - } - body={ -

Go to the Input Tab, run your scraper, to see the outputs.

- } - color="subdued" - layout="vertical" - title={

No Output Yet!

} - titleSize="m" - /> -
- ) -} - -export const EmptyResults = props => { - return ( -
- - } - body={ - - - Try running your scraper with different inputs. - - - - - Go to Input - - - - } - color="subdued" - layout="horizontal" - title={

No results

} - titleSize="m" - /> -
- ) -} - -export const EmptyFilterResults = props => { - return ( -
- - } - body={ - - Try adjusting your filters. - - } - color="subdued" - layout="horizontal" - title={

No results

} - titleSize="m" - /> -
- ) -} - -export const EmptyPending = () => { - return ( -
- - -

The Task is pending to be executed.

-
- } - color="subdued" - layout="vertical" - title={

Pending

} - titleSize="m" - /> - - ) -} - -export const EmptyInProgress = () => { - return ( -
- - -

The Task is in progress.

- -
- } - color="subdued" - layout="vertical" - title={

In Progress

} - titleSize="m" - /> - - ) -} - -export const EmptyFailed = ({ error }) => { - return ( -
- - -
- The Task has failed due to following Exception. -
- - {error} - -
:
-

The task has failed.

-
- } - color="subdued" - layout="vertical" - title={

Failed

} - titleSize="m" - /> - - ) -} - -export const EmptyAborted = () => { - return ( -
- - -

The task has been aborted.

-
- } - color="subdued" - layout="vertical" - title={

Aborted

} - titleSize="m" - /> - - ) -} \ No newline at end of file diff --git a/frontend/src/components/H1Text.tsx b/frontend/src/components/H1Text.tsx deleted file mode 100644 index ec74a5385..000000000 --- a/frontend/src/components/H1Text.tsx +++ /dev/null @@ -1,10 +0,0 @@ -export function H1Text({ content, className = '' }) { - return ( -

- {content} -

- ) -} diff --git a/frontend/src/components/Header/Header.tsx b/frontend/src/components/Header/Header.tsx deleted file mode 100644 index c139bbd5c..000000000 --- a/frontend/src/components/Header/Header.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { EuiLink } from '@elastic/eui' - -const Header = () => ( -
- - Love It? Star It! ★ - -
-) - -export default Header diff --git a/frontend/src/components/InputComponent/InputComponent.tsx b/frontend/src/components/InputComponent/InputComponent.tsx deleted file mode 100644 index 55492c61a..000000000 --- a/frontend/src/components/InputComponent/InputComponent.tsx +++ /dev/null @@ -1,418 +0,0 @@ -import { - EuiButton, - EuiButtonEmpty, - EuiFormRow, - EuiIcon, - EuiToolTip, -} from '@elastic/eui' - -import { EuiForm } from '@elastic/eui' - -import { Control, WithChooseOptions, createControls } from 'botasaurus-controls' -import { useMemo, useState } from 'react' -import { useRouter } from 'next/router' -import Api from '../../utils/api' -import { isEmptyObject } from '../../utils/missc' -import { pushToRoute } from '../../utils/next' -import { EmptyInputs, EmptyScraper } from '../Empty/Empty' -import ScraperSelector from '../ScraperSelector/ScraperSelector' -import CheckboxField from '../inputs/CheckBoxField' -import ChooseField from '../inputs/ChooseField' -import CollapsibleSection from '../inputs/CollapsibleSection' -import ListOfTextFields from '../inputs/ListOfTextFields' -import NumberField from '../inputs/NumberField' -import SingleSelect from '../inputs/SingleSelect' -import SwitchField from '../inputs/SwitchField' -import TextAreaField from '../inputs/TextAreaField' -import TextField from '../inputs/TextField' -import ClientOnly from '../ClientOnly' - -function mapControlsToElements( - controls: Control[], - callback: (control: Control) => any, accords, onToggle -): any[] { - const mappedControls: any[] = [] - controls.forEach(control => { - if (control.type === 'section') { - const nestedElements: any[] = [] - //@ts-ignore - control.controls.forEach(nestedControl => { - nestedElements.push(callback(nestedControl)) - }) - - if (!nestedElements.every(x => x === null)) { - mappedControls.push( - { - const newState = isOpen ? 'open' : 'closed'; - onToggle( control.id, newState); - }} forceState={accords[control.id]} key={control.id} title={control.label}> - {nestedElements} - - ) - } - } else { - mappedControls.push(callback(control)) // Map each top-level control - } - }) - - return mappedControls -} - -function isFunc(isRequired: any) { - return typeof isRequired === "function" -} - -function convertToBool(isRequired?: boolean | ((data: any) => boolean), data?: any): boolean { - if (typeof isRequired === "boolean") { - return isRequired - } else if (isFunc(isRequired)) { - // @ts-ignore - return !!isRequired(data) - } else { - return false - } -} -const InputFields = ({ - isSubmitting, - validationResult, - controls, - data, - onDataChange, - onSubmit, - onReset, - submitAttempted, - accords, - onToggle -}) => { - const handleInputChange = (id, value) => { - onDataChange(id, value) - } - - return ( -
- {mapControlsToElements(controls.controls, control => { - const { id, type, label, helpText, options, isShown, isDisabled, disabledMessage } = control - if (isShown && !isShown(data)) { - return null - } - - const disabled = convertToBool(isDisabled, data) - const disabledMsg = disabled ? disabledMessage : undefined - - let inputElement - - switch (type) { - case 'text': - inputElement = ( - handleInputChange(id, value)} - /> - ) - break - case 'link': - inputElement = ( - handleInputChange(id, value)} - /> - ) - break - case 'textarea': - inputElement = ( - handleInputChange(id, value)} - /> - ) - break - case 'number': - inputElement = ( - handleInputChange(id, value)} - /> - ) - break - case 'switch': - inputElement = ( - handleInputChange(id, value)} - /> - ) - break - case 'checkbox': - inputElement = ( - handleInputChange(id, value)} - /> - ) - break - case 'choose': - inputElement = ( - handleInputChange(id, value)} - /> - ) - break - case 'select': - inputElement = ( - handleInputChange(id, value)} - /> - ) - break - case 'listOfTexts': - case 'listOfLinks': - inputElement = ( - handleInputChange(id, value)} - /> - ) - break - default: - throw new Error(`Unknown control type: ${type}`) - } - return ( - - - {label} - - - ) : ( - label - ) - } - isInvalid={submitAttempted && validationResult.hasOwnProperty(id)} - error={validationResult[id]} - fullWidth> - {inputElement} - - ) - }, accords, onToggle)} -
- - Run - - Reset to Default -
-
- ) -} - -// There is a Bug in Next.js such that if -// we change state to make an element disabled -// Then reload, (local storage gives different state and default state is different) -// Then next.js does not disable the element and keep it enabled -// fix is to render inputs in client side only - -const NextOnlyFields = ClientOnly(InputFields) - - -function getDefaultData(controls: any) { - return { ...controls.getDefaultData() } -} - - -function shouldBeOpenResult(control: any, validationResult: any) { - for (let i = 0; i < control.controls.length; i++) { - const nestedControl = control.controls[i] - if (validationResult.hasOwnProperty(nestedControl.id)) { - return 'open' - } - } - return 'closed' -} -function getInitialData(scraper_name, input_js_hash, controls) { - const defaultData = getDefaultData(controls) - if (typeof window === 'undefined') { - return defaultData - } - - const savedData = localStorage.getItem( - `input_${scraper_name}_${input_js_hash}` - ) - return savedData ? JSON.parse(savedData) : defaultData -} - -const ScraperFormContainer = ({ selectedScraper }) => { - const [submitAttempted, setSubmitAttempted] = useState(false) - const [isSubmitting, setIsSubmitting] = useState(false); - - const controls = useMemo( - () => createControls(selectedScraper.input_js), - [selectedScraper] - ) - const [data, setData] = useState(() => - getInitialData( - selectedScraper.scraper_name, - selectedScraper.input_js_hash, - controls - ) - ) - - const handleDataChange = (id, value) => { - setData(prevData => { - const newData = { ...prevData, [id]: value } - localStorage.setItem( - `input_${selectedScraper.scraper_name}_${selectedScraper.input_js_hash}`, - JSON.stringify(newData) - ) - return newData - }) - } - const router = useRouter() - // @ts-ignore - const validationResult = controls.validate(data) - - const [accords, setaccords] = useState(() => { - const rs = {} - // @ts-ignore - controls.controls.forEach(control => { - if (control.type === 'section') { //@ts-ignore - rs[control.id] = shouldBeOpenResult(control, validationResult) - } - }) - - return rs - }); - const onToggle = (id, state) => { - setaccords((x)=>({...x , [id]: state })) - } - - const handleSubmit = async e => { - e.preventDefault() - setSubmitAttempted(true) - if (isEmptyObject(validationResult)) { - // @ts-ignore - const cleanedData = controls.getBackendValidationResult(data)['data'] - setIsSubmitting(true) - const response = await Api.createTask({ - scraper_name: selectedScraper.scraper_name, - data: cleanedData, - }).finally(()=>setIsSubmitting(false)) - - const result = response.data - const outputId = Array.isArray(result) ? result[0].id : result.id - pushToRoute(router, `/output/${outputId}`) - } else { - const rs = {...accords} - - // @ts-ignore - controls.controls.forEach(control => { - if (control.type === 'section') { //@ts-ignore - if (rs[control.id] === 'closed') { - rs[control.id] = shouldBeOpenResult(control, validationResult) - } - } - }) - - setaccords(rs) - } - } - // @ts-ignore - if (!controls.controls.length) { - return - } - return ( - - { - const dd = getDefaultData(controls) - localStorage.setItem( - `input_${selectedScraper.scraper_name}_${selectedScraper.input_js_hash}`, - JSON.stringify(dd) - ) - setData(dd) - }} - accords={accords} - onToggle={onToggle} - validationResult={validationResult} - controls={controls} - data={data} - onDataChange={handleDataChange} - onSubmit={handleSubmit} - isSubmitting={isSubmitting} - submitAttempted={submitAttempted} - /> - - ) -} - - -const ScraperContainer = ({ scrapers }) => { - const [selectedScraper, setSelectedScraper] = useState(scrapers[0]) - - return ( - - {scrapers.length <= 1 ? null : ( - - )} - - - ) -} - -const InputComponent = ({ scrapers }) => { - if (!scrapers || scrapers.length === 0) { - return - } - - return -} - -export default InputComponent \ No newline at end of file diff --git a/frontend/src/components/MarkdownComponent/MarkdownComponent.tsx b/frontend/src/components/MarkdownComponent/MarkdownComponent.tsx deleted file mode 100644 index 8a7b60b89..000000000 --- a/frontend/src/components/MarkdownComponent/MarkdownComponent.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import { EuiMarkdownFormat } from '@elastic/eui' - -const MarkdownComponent = ({ content }) => ( - {content} -) - -export default MarkdownComponent diff --git a/frontend/src/components/OutputComponent/OutputComponent.tsx b/frontend/src/components/OutputComponent/OutputComponent.tsx deleted file mode 100644 index 9d964196a..000000000 --- a/frontend/src/components/OutputComponent/OutputComponent.tsx +++ /dev/null @@ -1,386 +0,0 @@ -import { - EuiBadge, - EuiBasicTable, - EuiBasicTableColumn, - EuiButton, - EuiButtonEmpty, - EuiLink, - EuiModal, - EuiModalBody, - EuiModalFooter, - EuiModalHeader, - EuiModalHeaderTitle, - EuiPagination, - EuiText, - formatDate, -} from '@elastic/eui' -import Link from 'next/link' -import { useEffect, useState } from 'react' -import Api from '../../utils/api' -import { TaskStatus, filterAndMapAllTasks, filterIsPendingTasks, filterIsProgressTasks, } from '../../utils/models' -import { EmptyOutputs, EmptyScraper } from '../Empty/Empty' -import Toast from '../../utils/cogo-toast' -import ClickOutside from '../ClickOutside/ClickOutside' -import { isEmpty } from '../../utils/missc' -import CenteredSpinner from '../CenteredSpinner' - -function convertLocalDateToUTCDate(date, toUTC) { - date = new Date(date) - const localOffset = date.getTimezoneOffset() * 60000 - const localTime = date.getTime() - if (toUTC) { - date = localTime + localOffset - } else { - date = localTime - localOffset - } - date = new Date(date) - return date -} - -const toTitleCase = str => { - return str.replace(/_/g, ' ').replace(/\w\S*/g, txt => { - return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase() - }) -} - -// Function to get appropriate badge color for each status -const getBadgeColor = status => { - switch (status) { - case TaskStatus.PENDING: - return 'default' - case TaskStatus.IN_PROGRESS: - return 'primary' - case TaskStatus.COMPLETED: - return 'success' - case TaskStatus.FAILED: - case TaskStatus.ABORTED: - return 'danger' - default: - return 'default' - } -} - -function datetostring(date: any) { - if (!date) { - return '' - - } - return formatDate(convertLocalDateToUTCDate(date, false), 'dateTime') -} - - -function getTaskString(task) { - const onlyTaskName = `Task ${task.id}` - if (isEmpty(task.task_name)) { - return onlyTaskName - } else if (onlyTaskName === task.task_name) { - return onlyTaskName - } else { - return `Task ${task.id} (${task.task_name})` - } - -} - -function timeToHumanReadable(seconds) { - if (seconds === null) { - return '' - } - if (seconds === 0) { - return '0s' - } - - // remove decimals using bitwise - seconds = ~~seconds - - if (seconds < 60) return `${seconds}s` - - let time = '' - const days = Math.floor(seconds / 86400) - seconds %= 86400 - const hours = Math.floor(seconds / 3600) - seconds %= 3600 - const minutes = Math.floor(seconds / 60) - seconds = seconds % 60 - - if (days> 0) time += `${days}d ` - if (hours> 0) time += `${hours}h ` - if (minutes> 0) time += `${minutes}m ` - if (seconds> 0) { - time += `${seconds}s` - }; - - return time.trim() -} - - -function calculateDuration(obj) { - if (obj.started_at) { - // Convert datetime strings to Date objects - const startedAt = new Date(obj.started_at) - const endTime = obj.finished_at ? new Date(obj.finished_at) : convertLocalDateToUTCDate(new Date(), true) - // @ts-ignore - const duration = (endTime - startedAt) / 1000 - - if (duration === 0) { - return 0 - } - - return duration - } else { - return null - } -} - -const DurationComponent = ({ task }) => { - const [duration, setDuration] = useState(calculateDuration(task)) - - useEffect(() => { - const isExecuting = task.status === TaskStatus.IN_PROGRESS - if (isExecuting) { - const interval = setInterval(() => { - setDuration(calculateDuration(task)) - }, 1000) // Update duration every 1 second - - return () => clearInterval(interval) // Clear interval on component unmount - } - - }, [task]) // Dependency array includes task to recalculate if task changes - - return {timeToHumanReadable(duration)} -} - -const TaskTable = ({ activePage, onPageClick, isLoading, total_pages, tasks, updateTasks }) => { - const [taskToBeDeleted, setDeleteTask] = useState(null) - - const closeModal = () => { - setDeleteTask(false) - } - const confirmDelete = (task) => { - Api.deleteTask(task.id, activePage).then((response) => { - Toast.success('Successfully Deleted Task') - updateTasks(response.data, null) - }).finally(() => { - closeModal() - }) - } - - - const abortTask: (item: any) => void = (task) => { - Api.abortTask(task.id, activePage).then((response) => { - Toast.success('Successfully Aborted Task') - updateTasks(response.data, null) - }) - } - - const deleteTaskButtonClick: (item: any) => void = (task) => { - setDeleteTask(task) - } - // Columns definition - const columns: EuiBasicTableColumn[] = [ - { - field: 'id', - name: 'View Task', - render: id => { - return ( - - {`View Task ${id.toString()}`} - - ) - }, - - // sortable: true, - }, - { - field: 'task_name', - name: 'Task Name', - // sortable: true, - }, - { - field: 'result_count', - name: 'Result Count', - // dataType: 'number', - // sortable: true, - }, - { - field: 'status', - name: 'Status', - render: status => ( - {toTitleCase(status)} - ), - - // sortable: true, - }, - { - field: 'duration', - name: 'Duration', - render: (s, record) => { - return - }, - - // timeToHumanReadable - // dataType: 'number', - // sortable: true, - }, - { - field: 'started_at', - name: 'Start Time', - dataType: 'date', - render: date => { - return datetostring(date) - }, - // sortable: true, - }, - { - field: 'finished_at', - name: 'Finish Time', - dataType: 'date', - render: date => datetostring(date), - // sortable: true, - }, - { - name: 'Actions', - actions: [ - { - name: 'Abort', - description: 'Abort the Task', - icon: 'cross', - type: 'icon', - color: 'danger', - onClick: abortTask, - }, - { - name: 'Delete', - description: 'Delete the Task', - icon: 'trash', - type: 'icon', - color: 'danger', - onClick: deleteTaskButtonClick, - }, - ], - }, - ] - return ( - - {taskToBeDeleted && ( - - { closeModal() }}> -
- - - Confirm Delete - - - - Are you sure you want to delete {getTaskString(taskToBeDeleted)}? - The action is irreversible. - - - - Cancel - confirmDelete(taskToBeDeleted)}> - Delete - - - -
-
-
- )} - {isLoading ? ( - - ) : ( - - ({ - className: 'pointer', - })} - /> - onPageClick(x)} - /> - - )} - - -
- - ) -} - -const OutputComponent = ({ scrapers, tasks: taskResponse }) => { - - const [state, setState] = useState({ ...taskResponse, active_page: 1 }) - const [isLoading, setLoading] = useState(false) - const total_pages = state.total_pages - const results = state.results - const active_page = state.active_page - - useEffect(() => { - const pendingTsks = filterIsPendingTasks(results) - const progressTsks = filterIsProgressTasks(results) - const hasTasks = pendingTsks.length> 0 || progressTsks.length> 0 - if (!isLoading && hasTasks) { - const isCleared = { isCleared: false }; // Initialize as an object with isCleared property - const intervalId = setInterval(async () => { - if (!isCleared.isCleared) { // Access the isCleared property - const all_tasks = filterAndMapAllTasks(pendingTsks.concat(progressTsks)) - const response = await Api.isAnyTaskFinished(pendingTsks.map(task => task.id), progressTsks.map(task => task.id), all_tasks) - if (response.data.result && !isCleared.isCleared) { - const { data } = await Api.getTasks(active_page) - if (!isCleared.isCleared) { // Access the isCleared property - setState((x) => ({ ...data, active_page: x.active_page> data.total_pages ? 1 : x.active_page })) - } - } - } - }, 1000) - return () => { - isCleared.isCleared = true; // Set the isCleared property to true - return clearInterval(intervalId) - } - } - }, [isLoading, results, active_page]); - - - function updateState(data, current_page) { - setState((curr) => { - if (current_page === null) { - return ({ ...curr, ...data, active_page: curr.active_page> data.total_pages ? 1 : curr.active_page }) - } - return ({ ...data, active_page: current_page> data.total_pages ? 1 : current_page }) - }) - } - - const onPageChange = x => { - async function fetchData() { - setLoading(true) - const data = (await Api.getTasks(x)).data - updateState(data, x) - setLoading(false) - - } - fetchData() - } - - if (!scrapers || scrapers.length === 0) { - return - } - - if (results && results.length === 0) { - return - } - return ( - onPageChange(x + 1)} isLoading={isLoading} total_pages={total_pages} tasks={results} updateTasks={updateState} /> - ) -} - -export default OutputComponent diff --git a/frontend/src/components/PagesTabs/PagesTabs.tsx b/frontend/src/components/PagesTabs/PagesTabs.tsx deleted file mode 100644 index 5a390a5f4..000000000 --- a/frontend/src/components/PagesTabs/PagesTabs.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { useRouter } from 'next/router' -import { useEffect, useState } from 'react' -import { pushToRoute } from '../../utils/next' -import Tabs from '../Tabs/Tabs' - -export const TabsId = { - INPUT: 'input', - OUTPUT: 'output', - ABOUT: 'about', - API_INTEGRATION: 'api-integration', -} - -const tabs = [ - { route: '/', id: TabsId.INPUT, name: 'Input', content: }, - { route: '/output', id: TabsId.OUTPUT, name: 'Output', content: }, - { route: '/about', id: TabsId.ABOUT, name: 'About', content: }, - { - route: '/api-integration', - id: TabsId.API_INTEGRATION, - name: 'API Integration', - content: , - }, -] - -const PagesTabs = ({ initialSelectedTab }) => { - const [selectedTabId, setSelectedTabId] = useState(initialSelectedTab) - const router = useRouter() - - useEffect(() => { - setSelectedTabId(initialSelectedTab) - }, [initialSelectedTab]) - - const onTabChange = tab => { - setSelectedTabId(tab.id) - pushToRoute(router, tab.route) - } - - return ( - - ) -} - -export default PagesTabs diff --git a/frontend/src/components/RunStickyBar/RunStickyBar.tsx b/frontend/src/components/RunStickyBar/RunStickyBar.tsx deleted file mode 100644 index 56c110ad1..000000000 --- a/frontend/src/components/RunStickyBar/RunStickyBar.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { EuiButton } from '@elastic/eui' - -const RunStickyBar = () => ( -
- Run -
-) - -export default RunStickyBar diff --git a/frontend/src/components/ScraperSelector/ScraperSelector.tsx b/frontend/src/components/ScraperSelector/ScraperSelector.tsx deleted file mode 100644 index 3c62e48d6..000000000 --- a/frontend/src/components/ScraperSelector/ScraperSelector.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { EuiFormRow } from '@elastic/eui' -import ChooseField from '../inputs/ChooseField' - -function ScraperSelector({ scrapers, selectedScraper, onSelectScraper }) { - const options = scrapers.map(scraper => ({ - label: scraper.name, // Assuming 'scraper_name' is a unique identifier - value: scraper.scraper_name, // The text to display in the dropdown - })) - - const handleChange = selectedValue => { - const selectedScraper = scrapers.find( - scraper => scraper.scraper_name === selectedValue - ) - onSelectScraper(selectedScraper) - } - - return ( - -
- -
-
- ) -} - -export default ScraperSelector diff --git a/frontend/src/components/Seo.tsx b/frontend/src/components/Seo.tsx deleted file mode 100644 index 896aca024..000000000 --- a/frontend/src/components/Seo.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import Head from 'next/head' - -export default function Seo({ - title = 'Omkar Cloud', - description = 'Elementasaurus is The Best Free Website Builder for Web Designers', -}) { - return ( - - {title} - - - - - - - ) -} - -// · diff --git a/frontend/src/components/ServerStatusComponent.tsx b/frontend/src/components/ServerStatusComponent.tsx deleted file mode 100644 index 9973b97fd..000000000 --- a/frontend/src/components/ServerStatusComponent.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { useState, useEffect } from 'react' -import { EuiEmptyPrompt } from '@elastic/eui' -import Api from '../utils/api' - - -const minute = 60 * 1000 -const tensecond = 10 * 1000 - -const ServerStatusComponent = () => { - const [isDown, setIsDown] = useState(false) - - useEffect(() => { - const checkApiStatus = async () => { - try { - const response = await Api.isApiRunning() // Assuming Api.isApiRunning() returns a promise - if (response.status !== 200) { - setIsDown(true) - } else { - setIsDown(false) - } - } catch (error) { - setIsDown(true) - } - } - - const INTERVAL = isDown ? tensecond : minute - // Then set an interval to check every minute - // const interval = setInterval(checkApiStatus, 1000 ) - - const interval = setInterval(checkApiStatus, INTERVAL ) - - // Clear interval on component unmount - return () => clearInterval(interval) - }, []) - - if (isDown) { - return ( - Server is Down} - body={ -

- Your Server is down. Kindly check it. -

- } - /> - - ) - } - - return null // Render nothing if no alert -} - -export default ServerStatusComponent diff --git a/frontend/src/components/Tabs/Tabs.tsx b/frontend/src/components/Tabs/Tabs.tsx deleted file mode 100644 index 8e114400b..000000000 --- a/frontend/src/components/Tabs/Tabs.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { EuiTabbedContent } from '@elastic/eui' - -const Tabs = ({ tabs, selectedTab, onTabChange, ...props }) => { - return ( - tab.id === selectedTab)} - onTabClick={tab => onTabChange(tab)} - /> - ) -} - -export default Tabs diff --git a/frontend/src/components/TaskComponent/DataPanel.tsx b/frontend/src/components/TaskComponent/DataPanel.tsx deleted file mode 100644 index e3f39e2d1..000000000 --- a/frontend/src/components/TaskComponent/DataPanel.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import { EuiDataGrid, EuiLink } from '@elastic/eui' - -function createColumns(fields) { - return fields.map(({ key, label }) => ({ - id: key, - display: label, - })) -} -function isValidLink(string) { - try { - new URL(string); - return true; - } catch (error) { - return false; - } -} -function isLink(value) { - return ( - typeof value === 'string' && - (value.startsWith('http://') || value.startsWith('https://')) && isValidLink(value) - ) -} - -const DataPanel = ({ response, fields }) => { - const slicedData = response.results - - const columns = createColumns(fields) - - return ( - id), - setVisibleColumns: x => null, - }} - columns={columns} - rowCount={slicedData.length} - renderCellValue={({ rowIndex, columnId }) => { - const el = slicedData[rowIndex] - const value = el[columnId] - - // Check if value is a boolean and render "True" or "False" - if (typeof value === 'boolean') { - return value ? 'True' : 'False' - } - - if (isLink(value)) { - return ( - - {value} - - ) - } - - if ( - (typeof value === 'object' && value !== null) || - Array.isArray(value) - ) { - // Stringify the value - return JSON.stringify(value) - } - - return value ?? null - }} - toolbarVisibility={{ - showColumnSelector: false, - showSortSelector: false, - showFullScreenSelector: true, - showDisplaySelector: true, - }} - /> - ) -} - -export default DataPanel diff --git a/frontend/src/components/TaskComponent/FilterComponent.tsx b/frontend/src/components/TaskComponent/FilterComponent.tsx deleted file mode 100644 index 0c5ccc5a8..000000000 --- a/frontend/src/components/TaskComponent/FilterComponent.tsx +++ /dev/null @@ -1,152 +0,0 @@ -import { EuiButton, EuiFormRow } from '@elastic/eui' -import { useState } from 'react' -import CheckboxField from '../inputs/CheckBoxField' -import MultiSelect from '../inputs/MultiSelect' -import NumberField from '../inputs/NumberField' -import SearchField from '../inputs/SearchField' -import SingleSelect from '../inputs/SingleSelect' - -const NumericInputWithLabel = ({ label, value, onChange }) => { - return ( - - - - ) -} - -const CheckboxWithLabel = ({ label, value, onChange }) => { - return ( - - - - ) -} - -const SingleSelectWithLabel = ({ label, value, onChange, options }) => { - return ( - - - - ) -} - -const MultiSelectWithLabel = ({ label, value, onChange, options }) => { - return ( - - - - ) -} - -const TextFieldWithLabel = ({ label, value, onChange }) => { - return ( - - - - ) -} - -export const FilterComponent = ({ - filter_data, - setFilter: handleFilterChange, - filters, -}) => { - const [showFilters, setShowFilters] = useState(false) - - return ( -
- {showFilters ? ( - setShowFilters(false)} - size="s"> - {' '} - Hide Filters{' '} - - ) : ( - setShowFilters(true)} size="s"> - {' '} - Show Filters{' '} - - )} - - {showFilters && - filters.map(({ id, type, label, options }) => { - switch (type) { - case 'MinNumberInput': - case 'MaxNumberInput': - return ( - handleFilterChange(id, v)} - /> - ) - case 'IsTrueCheckbox': - case 'IsFalseCheckbox': - case 'IsNullCheckbox': - case 'IsNotNullCheckbox': - case 'IsTruthyCheckbox': - case 'IsFalsyCheckbox': - return ( - handleFilterChange(id, v)} - /> - ) - case 'SingleSelectDropdown': - return ( - handleFilterChange(id, value)} - /> - ) - case 'MultiSelectDropdown': - return ( - { - return handleFilterChange(id, value) - }} - /> - ) - case 'SearchTextInput': - return ( - handleFilterChange(id, v)} - /> - ) - default: - throw Error('Not Implemented') - } - })} -
- ) -} diff --git a/frontend/src/components/TaskComponent/SortComponent.tsx b/frontend/src/components/TaskComponent/SortComponent.tsx deleted file mode 100644 index 936f1bd65..000000000 --- a/frontend/src/components/TaskComponent/SortComponent.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { EuiFormRow } from '@elastic/eui' -import ChooseField from '../inputs/ChooseField' -import SingleSelect from '../inputs/SingleSelect' - -export const SortComponent = ({ sort, setSort, sorts }) => { - // Convert sorts to the format expected by TabsComponent - const sortTabs = [ - ...sorts.map(({ id, label }) => ({ - value: id, - label, - })), - ] - - if (sortTabs.length <= 3) { - return ( - { - if (x === null) { - return setSort('no_sort') - }else{ - return setSort(x) - } - }} - /> - ) - } else { - return -
- - -
-
- } - -} diff --git a/frontend/src/components/TaskComponent/TaskComponent.tsx b/frontend/src/components/TaskComponent/TaskComponent.tsx deleted file mode 100644 index 5490ea8b8..000000000 --- a/frontend/src/components/TaskComponent/TaskComponent.tsx +++ /dev/null @@ -1,353 +0,0 @@ -import { EuiButton, EuiLink, EuiPagination, EuiText } from '@elastic/eui' -import { useEffect, useRef, useState } from 'react' -import Api from '../../utils/api' -import { isEmpty, isEmptyObject } from '../../utils/missc' -import { TaskStatus, hasFilters, isDoing, hasSorts, hasViews } from '../../utils/models' -import CenteredSpinner from '../CenteredSpinner' -import DownloadStickyBar from '../DownloadStickyBar/DownloadStickyBar' -import { - EmptyAborted, - EmptyFailed, - EmptyFilterResults, - EmptyInProgress, - EmptyPending, - EmptyResults, -} from '../Empty/Empty' -import { - Container, - OutputContainerWithBottomPadding, - OutputTabsContainer, -} from '../Wrappers' -import DataPanel from './DataPanel' -import { FilterComponent } from './FilterComponent' -import { SortComponent } from './SortComponent' -import { ViewComponent } from './ViewComponent' -import Link from 'next/link' - -function sentenceCase(string) { - // Convert a string into Sentence case. - if (!string) { - return '' - } - // Add space between separators and numbers - string = string - .split(/([\W_\d])/) - .filter(s => s) - .join(' ') - // Remove separators (except numbers) - string = string.replace(/[\W_]/g, ' ').split(/\s+/).join(' ') - // Manage capital letters and capitalize the first character - return string - .replace(/([A-Z])/g, ' 1ドル') - .trim() - .replace(/^\w/, c => c.toUpperCase()) -} - -function titleCase(string) { - // Convert a string into Title Sentence Case. - if (!string) { - return '' - } - return sentenceCase(string) - .split(' ') - .map(word => word.charAt(0).toUpperCase() + word.slice(1)) - .join(' ') -} - -const PromotionWrapper = () => { - return ( -
- - Unlock the full potential of Google Maps! Get the Pro Version to see hidden fields, and enjoy a no questions asked 90-day money-back guarantee, with lifetime updates. - - - Get Pro Risk Free - -
- ) -} - -function clean_filter_data(filter_data, filters) { - const cleanedFilterData = { ...filter_data } // Create a copy to modify - - for (const filter of filters) { - const filterKey = filter.id - // Special handling for MultiSelectDropdown type filters - if (filter.type === 'MultiSelectDropdown') { - const filterValue = cleanedFilterData[filter.id] - if (filterKey in cleanedFilterData) { - // If the value's length is 0, delete the filter entry from cleanedData - if (filterValue.length === 0) { - delete cleanedFilterData[filter.id] - } else { - const dt = filterValue.map(option => option.value) - // Map the value to extract the id for each selected option - cleanedFilterData[filter.id] = dt - } - } - } - } - - return cleanedFilterData -} - -function isNullishObject(obj) { - if (isEmptyObject(obj)) { - return true - } - for (const key in obj) { - if (obj[key] === false || isEmpty(obj[key])) { - return true - } - } - return false -} - -function caseFields(fieldNames) { - return fieldNames.map(({ key }) => ({ - key, - label: titleCase(key), - })) -} - -function determineFields(results) { - // Check if the results array is empty - if (!results || results.length === 0) { - return [] // Return an empty array if there are no results - } - - return Object.keys(results[0]).map(fieldName => ({ - key: fieldName, - })) -} - -const TaskComponent = ({ - sorts, - filters, - views, - default_sort, - response: initialResponse, - taskId, -}) => { - const [response, setResponse] = useState(initialResponse) - const defaultView = views.length> 0 ? views[0].id : null - - const [sort, setSort] = useState(default_sort || '') - const [pageAndView, setPageAndView] = useState({ - currentPage: 0, - view: defaultView, - filter_data: {}, - }) - const [loading, setLoading] = useState(false) - const filter_data = pageAndView.filter_data - - const onDownload = data => { - const params = { - sort, - filters: clean_filter_data(filter_data, filters), - view: pageAndView.view, - ...data, - } - Api.downloadTaskResults(taskId, params) - } - - // For Filters - const mountedRef = useRef(false) - - useEffect(() => { - if (!mountedRef.current) { - mountedRef.current = true - return - } - const fetchData = async () => { - setLoading(true) - try { - const per_page_records = 25 - const params = { - sort, - filters: clean_filter_data(filter_data, filters), - view: pageAndView.view, - page: pageAndView.currentPage + 1, - per_page: per_page_records, - } - const { data } = await Api.getTaskResults(taskId, params) - setResponse(data) - } catch (error) { - console.error('Failed to fetch task:', error) - } - setLoading(false) - } - - fetchData() - }, [taskId, sort, filter_data, pageAndView.view, pageAndView.currentPage]) - - // For Updates - useEffect(() => { - const isExecuting = isDoing(response.task) // Assuming isDoing is a function to check task status - if (isExecuting) { - const fetchData = async () => { - try { - // First check if the task has been updated - const isUpdatedResponse = await Api.isTaskUpdated(taskId, response.task.updated_at, response.task.status); - if (isUpdatedResponse.data.result) { - // If the task has been updated, fetch the task results - const per_page_records = 25; - const params = { - sort, - filters: clean_filter_data(filter_data, filters), - view: pageAndView.view, - page: pageAndView.currentPage + 1 , - per_page: per_page_records, - }; - const { data } = await Api.getTaskResults(taskId, params); - if ((pageAndView.currentPage + 1)> data.total_pages) { - setPageAndView((x) => ({ ...x, currentPage: 0 })); - } - setResponse(data); - } - } catch (error) { - console.error('Failed to fetch task:', error); - } - }; - - const intervalId = setInterval(fetchData, 1000) // Polling every 1000 milliseconds - return () => clearInterval(intervalId) - } - }, [response.task.updated_at, taskId, response.task.status, sort, filter_data, pageAndView.view, pageAndView.currentPage]) - - let selectedFields = - !pageAndView.view - ? determineFields(response.results) - : views.find(v => v.id === pageAndView.view)?.fields ?? null - - if (selectedFields) { - selectedFields = caseFields(selectedFields) - } - - const handlePageClick = page => { - setPageAndView(prev => ({ ...prev, currentPage: page })) - } - - const handleViewSet = view => { - setPageAndView((x) => ({ ...x, view, currentPage: 0 })) - } - - const hasResults = !!response.count - const showPagination = hasResults && response.total_pages> 1 - - const isResultsNotArray = !Array.isArray(response.results) - if (isResultsNotArray) { - switch (response.task.status) { - case TaskStatus.PENDING: - return ( - - - - ) - case TaskStatus.IN_PROGRESS: - return ( - - - - ) - case TaskStatus.FAILED: - return ( - - - - ) - case TaskStatus.ABORTED: - return ( - - - - ) - default: - break - } - } - - const setFilter = (id, value) => { - setPageAndView((prev) => ({ - ...prev, - filter_data: { - ...prev.filter_data, - [id]: value, - }, - })) - } - return ( - - -
- - - View All Tasks - - {hasFilters(filters) ? ( - - ):null} - - {hasSorts(sorts) ? ( -
- ) : null} -
- - {hasViews(views) ?
- -
:
} - - - {loading ? ( - - ) : hasResults ? ( - - - {showPagination ? ( - - ) : ( -
- )} - { - - } - - ) : ( - - {isNullishObject(filter_data) ? ( - - ) : ( - - )} - - )} - - - ) -} - -export default TaskComponent diff --git a/frontend/src/components/TaskComponent/ViewComponent.tsx b/frontend/src/components/TaskComponent/ViewComponent.tsx deleted file mode 100644 index feaa31247..000000000 --- a/frontend/src/components/TaskComponent/ViewComponent.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import Tabs from '../Tabs/Tabs' - -export const ViewComponent = ({ view, setView, views }) => { - // Convert sorts to the format expected by TabsComponent - const viewTabs = [ - ...views.map(({ id, label }) => ({ - id, - name: label, - content: , // Assuming no content is needed for the sorting tabs - })), - {"id": "__all_fields__", "name": "All Fields", content: }, - ] - - // Handler for when a tab is clicked - const onViewChange = selectedTab => { - const view = selectedTab.id - setView(view === "__all_fields__" ? null: view) - } - // return null - return -} diff --git a/frontend/src/components/Wrappers.tsx b/frontend/src/components/Wrappers.tsx deleted file mode 100644 index 64cbfe45e..000000000 --- a/frontend/src/components/Wrappers.tsx +++ /dev/null @@ -1,97 +0,0 @@ -export const Container = ({ children }) => { - return ( -
- {children} -
- ) -} - -export const OutputTabsContainer = ({ children }) => { - return ( -
- {children} -
- ) -} - -export const OutputTabsContainerWithBottomPadding = ({ children }) => { - return ( -
- {children} -
- ) -} - -export const OutputContainer = ({ children }) => { - return ( -
- {children} -
- ) -} - -export const OutputContainerWithoutBottomPadding = ({ children }) => { - return ( -
- {children} -
- ) -} - -export const OutputContainerWithBottomPadding = ({ children }) => { - return ( -
- {children} -
- ) -} - -export const TabWrapper = ({ children }) => { - return
{children}
-} diff --git a/frontend/src/components/auth/context.tsx b/frontend/src/components/auth/context.tsx deleted file mode 100644 index dca729534..000000000 --- a/frontend/src/components/auth/context.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { formatDate } from '@elastic/eui' -import { createContext, useContext } from 'react' - -// Create a new context for the authentication state -const AuthContext = createContext(undefined) - -// Create a provider component that will wrap the app and provide access to the authentication state -function AuthProvider({ children, ...props }) { - const joined_at = props.created_at && formatDate(props.created_at) - const userInfo = props - return ( - - {children} - - ) -} - -// Create a custom hook to easily access the authentication state and functions from any component -function useAuth() { - return useContext(AuthContext) -} - -export { AuthProvider, useAuth } diff --git a/frontend/src/components/chrome/index.tsx b/frontend/src/components/chrome/index.tsx deleted file mode 100644 index dff0b45eb..000000000 --- a/frontend/src/components/chrome/index.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { EuiProvider } from '@elastic/eui' -import createCache from '@emotion/cache' - -/** - * Renders the UI that surrounds the page content. - */ -const Chrome = ({ children }: any) => { - /** - * This `@emotion/cache` instance is used to insert the global styles - * into the correct location in ``. Otherwise they would be - * inserted after the static CSS files, resulting in style clashes. - * Only necessary until EUI has converted all components to CSS-in-JS: - * https://github.com/elastic/eui/issues/3912 - */ - const defaultCache = createCache({ - key: 'eui', - container: - typeof document !== 'undefined' - ? document.querySelector('meta[name="eui-styles"]') - : null, - }) - const utilityCache = createCache({ - key: 'util', - container: - typeof document !== 'undefined' - ? document.querySelector('meta[name="eui-styles-utility"]') - : null, - }) - - return ( - - {children} - - ) -} - -export default Chrome diff --git a/frontend/src/components/inputs/CheckBoxField.tsx b/frontend/src/components/inputs/CheckBoxField.tsx deleted file mode 100644 index 88c8a0def..000000000 --- a/frontend/src/components/inputs/CheckBoxField.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { EuiCheckbox, useGeneratedHtmlId } from '@elastic/eui' - -export default function CheckboxField({ value, onChange, ...props }: any) { - const handleNumberChange = event => { - const value = event.target.checked - onChange(value) - } - - const id = useGeneratedHtmlId() - return ( - - ) -} diff --git a/frontend/src/components/inputs/ChooseField.tsx b/frontend/src/components/inputs/ChooseField.tsx deleted file mode 100644 index 9fe66ba0e..000000000 --- a/frontend/src/components/inputs/ChooseField.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { EuiButtonGroup } from '@elastic/eui' -import React from 'react' - -type ChooseOption = { - value: string - label: string -} - -type ChooseProps = { - color?: string - options: ChooseOption[] - title?:any - disabled?:boolean - value: string // Currently selected value - onChange: (value: string) => void // Function to call when the selection changes - name?: string -} - -const ChooseField: React.FC = ({ - options, - value, - onChange, - title, - disabled, - name, - color, -}) => { - // Prepare options for EuiButtonGroupn - const buttonOptions = options.map(option => ({ - id: option.value, // Use the option's value as the unique id - label: option.label.toString(), - })) - - const handleChange = (optionId: string) => { - const newValue = value === optionId ? null : optionId // Toggle selection - onChange(newValue) // Call the provided onChange function with the new value or null - } - - return ( - - ) -} - -export default ChooseField diff --git a/frontend/src/components/inputs/CollapsibleSection.tsx b/frontend/src/components/inputs/CollapsibleSection.tsx deleted file mode 100644 index 7a833d852..000000000 --- a/frontend/src/components/inputs/CollapsibleSection.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { EuiAccordion, EuiFlexGroup, EuiFlexItem, EuiTitle } from '@elastic/eui' - -const CollapsibleSection= ({ - title, - children, - forceState ,onToggle -}) => { - const buttonContent = ( -
- - - -

{title}

-
-
-
-
- ) - - - return ( - -
{children}
-
- ) -} - -export default CollapsibleSection diff --git a/frontend/src/components/inputs/ListOfTextFields.tsx b/frontend/src/components/inputs/ListOfTextFields.tsx deleted file mode 100644 index 76cb9e9d2..000000000 --- a/frontend/src/components/inputs/ListOfTextFields.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { - EuiButton, - EuiButtonIcon, - EuiFieldText, - EuiFlexGroup, - EuiFlexItem, -} from '@elastic/eui' - -const ListOfTextFields = ({ value, onChange, placeholder , disabled, title}) => { - const handleFieldChange = (index, newValue) => { - const updatedValue = value.map((item, i) => (i === index ? newValue : item)) - onChange(updatedValue) - } - - const handleRemoveField = index => { - const updatedValue = value.filter((_, i) => i !== index) - onChange(updatedValue) - } - - const handleAddField = () => { - onChange([...value, '']) // Add an empty string as a new field - } - - return ( -
-
- {value.map((item, index) => ( - - - handleFieldChange(index, e.target.value)} - fullWidth - /> - - - handleRemoveField(index)} - /> - - - ))} -
- - Add Field - -
- ) -} - -export default ListOfTextFields diff --git a/frontend/src/components/inputs/MultiSelect.tsx b/frontend/src/components/inputs/MultiSelect.tsx deleted file mode 100644 index 32e921d76..000000000 --- a/frontend/src/components/inputs/MultiSelect.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { EuiComboBox } from '@elastic/eui' - -export default function MultiSelect({ - options, - value, - onChange, - ...props -}: any) { - const selected = value - // cleanedOptions.filter(x => value.includes(x.value)) - - return ( - { - onChange(option) - }} - isClearable={true} - /> - ) -} diff --git a/frontend/src/components/inputs/NumberField.tsx b/frontend/src/components/inputs/NumberField.tsx deleted file mode 100644 index 5b2fac2a0..000000000 --- a/frontend/src/components/inputs/NumberField.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import Browser from '@omkar111111/utils/browser' -import Language from '@omkar111111/utils/language' -import { EuiFieldNumber } from '@elastic/eui' - -export default function NumberField({ value, onChange, ...props }: any) { - const handleNumberChange = event => { - const value = Browser.inputValue(event) - onChange(Language.readNumber(value)) - } - - return ( - onChange(value)} - value={value ?? ''} - onChange={handleNumberChange} - /> - ) -} diff --git a/frontend/src/components/inputs/SearchField.tsx b/frontend/src/components/inputs/SearchField.tsx deleted file mode 100644 index 3888981c6..000000000 --- a/frontend/src/components/inputs/SearchField.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { EuiFieldSearch } from '@elastic/eui' -import Browser from '@omkar111111/utils/browser' - -export default function SearchField({ - value, - onChange, - onApply, - ...props -}: any) { - const handleChange = event => { - const value = Browser.inputValue(event) - onChange(value) - } - - return ( - onChange(value)} - value={value ?? ''} - onChange={handleChange} - /> - ) -} diff --git a/frontend/src/components/inputs/Select.tsx b/frontend/src/components/inputs/Select.tsx deleted file mode 100644 index 05b139489..000000000 --- a/frontend/src/components/inputs/Select.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { EuiSelect } from '@elastic/eui' -import Browser from '@omkar111111/utils/browser' - -export default function Select({ options, value, onChange, ...props }: any) { - const cleanedOptions = options.map(o => ({ - value: o.value, - text: o.label, - })) - - const selected = cleanedOptions.find(x => x.value === value) - const selectedValue = selected?.value - - return ( - { - const change = Browser.inputValue(e) - if (selectedValue !== change) { - onChange(change) - } - }} - /> - ) -} diff --git a/frontend/src/components/inputs/SingleSelect.tsx b/frontend/src/components/inputs/SingleSelect.tsx deleted file mode 100644 index 89fbcce96..000000000 --- a/frontend/src/components/inputs/SingleSelect.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { EuiComboBox } from '@elastic/eui' - -export default function SingleSelect({ - options, - value, - onChange, - ...props -}: any) { - let selected = options.find(x => x.value === value) - if (!selected && value) { - selected = { value, label: value } - } - - return ( - { - const change = option.length === 0 ? null : option[0].value - onChange(change) - }} - singleSelection={{ asPlainText: true }} - /> - ) -} diff --git a/frontend/src/components/inputs/SwitchField.tsx b/frontend/src/components/inputs/SwitchField.tsx deleted file mode 100644 index 0f547cb56..000000000 --- a/frontend/src/components/inputs/SwitchField.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { EuiSwitch, useGeneratedHtmlId } from '@elastic/eui' - -export default function SwitchField({ value, onChange, ...props }: any) { - const handleSwitchChange = event => { - const value = event.target.checked - onChange(value) - } - - const id = useGeneratedHtmlId() - return ( - - ) -} diff --git a/frontend/src/components/inputs/TextAreaField.tsx b/frontend/src/components/inputs/TextAreaField.tsx deleted file mode 100644 index a6141d068..000000000 --- a/frontend/src/components/inputs/TextAreaField.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { EuiTextArea } from '@elastic/eui' -import Browser from '@omkar111111/utils/browser' - -export default function TextAreaField({ value, onChange, ...props }: any) { - const handleChange = event => { - const value = Browser.inputValue(event) - onChange(value) - } - - return ( - - ) -} diff --git a/frontend/src/components/inputs/TextField.tsx b/frontend/src/components/inputs/TextField.tsx deleted file mode 100644 index d48a1086b..000000000 --- a/frontend/src/components/inputs/TextField.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { EuiFieldText } from '@elastic/eui' -import Browser from '@omkar111111/utils/browser' - -export default function TextField({ value, onChange, ...props }: any) { - const handleChange = event => { - const value = Browser.inputValue(event) - onChange(value) - } - - return ( - - ) -} diff --git a/frontend/src/components/inputs/outputs.tsx b/frontend/src/components/inputs/outputs.tsx deleted file mode 100644 index 351d63254..000000000 --- a/frontend/src/components/inputs/outputs.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { useState, useEffect } from 'react' -import TextAreaField from './TextAreaField' -import TextField from './TextField' - -export function OutputTextAreaField({ value: output, ...props }) { - const [state, setstate] = useState({ - textOutput: '', - }) - - function onChange(change) { - setstate(prev => ({ ...prev, ...change })) - } - - useEffect(() => { - onChange({ textOutput: output }) - }, [output]) - return ( - { - onChange({ textOutput }) - }} - /> - ) -} - -export function OutputTextField({ value: output, ...props }) { - const [state, setstate] = useState({ - textOutput: '', - }) - - function onChange(change) { - setstate(prev => ({ ...prev, ...change })) - } - - useEffect(() => { - onChange({ textOutput: output }) - }, [output]) - return ( - { - onChange({ textOutput }) - }} - /> - ) -} diff --git a/frontend/src/components/starter/header.styles.ts b/frontend/src/components/starter/header.styles.ts deleted file mode 100644 index 8f6a1d301..000000000 --- a/frontend/src/components/starter/header.styles.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { css } from '@emotion/react' - -export const headerStyles = euiTheme => ({ - logo: css` - display: inline-flex; - flex-wrap: wrap; - gap: ${euiTheme.size.m}; - `, - title: css` - line-height: 1.75; // Measured in the browser - `, -}) diff --git a/frontend/src/components/starter/header.tsx b/frontend/src/components/starter/header.tsx deleted file mode 100644 index eb4e711d7..000000000 --- a/frontend/src/components/starter/header.tsx +++ /dev/null @@ -1,133 +0,0 @@ -import { - EuiCollapsibleNav, - EuiCollapsibleNavGroup, - EuiFlexItem, - EuiHeader, - EuiHeaderLink, - EuiHeaderSectionItemButton, - EuiIcon, - EuiListGroup, - EuiListGroupItem, - EuiTitle, - useEuiTheme, - useGeneratedHtmlId, -} from '@elastic/eui' -import Image from 'next/image' -import Link from 'next/link' -import { imageLoader } from '../../lib/loader' -import { headerStyles } from './header.styles' -import { useState } from 'react' -// @ts-ignore -import Logo from '../../../public/images/logo.svg' -import Links from '../../utils/data/links' - -function HeaderLogo({ header_title, white = false }) { - const { euiTheme } = useEuiTheme() - - const styles = headerStyles(euiTheme) - - return ( - - - - {header_title && ( - - - {header_title} - - - )} - - - ) -} - -function RightHeader({ text, link }) { - const { euiTheme } = useEuiTheme() - - const styles = headerStyles(euiTheme) - - return link ? ( - - {text} - - ) : ( - - {text} - - ) -} - -const Header = ({ header_title, right_header }) => { - const guideHeaderCollapsibleNavId = useGeneratedHtmlId({ - prefix: 'guideHeaderCollapsibleNav', - }) - - const [navIsOpen, setNavIsOpen] = useState(false) - - const collapsibleNav = ( - setNavIsOpen(!navIsOpen)}> - - ) - - const header_items: any = [ - { - items: [ - collapsibleNav, -
, // Added key for list item - , - ], - borders: 'none', - }, - ] - - if (right_header?.text) { - header_items.push({ - items: [], - borders: 'none', - }) - } - - return ( - - - - ) -} - -export default Header diff --git a/frontend/src/components/starter/wrapper.tsx b/frontend/src/components/starter/wrapper.tsx deleted file mode 100644 index a125bb385..000000000 --- a/frontend/src/components/starter/wrapper.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function ContentWrapper({ children }: any) { - return
{children}
-} diff --git a/frontend/src/components/theme.tsx b/frontend/src/components/theme.tsx deleted file mode 100644 index e586de960..000000000 --- a/frontend/src/components/theme.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { useEffect } from 'react' -import { enableTheme } from '../lib/theme' - -export const Theme = ({ children }: any) => { - useEffect(() => enableTheme('light'), []) - - return {children} -} diff --git a/frontend/src/custom_typings/index.d.ts b/frontend/src/custom_typings/index.d.ts deleted file mode 100644 index f0ad1a028..000000000 --- a/frontend/src/custom_typings/index.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ - -// These type definitions allow us to import image files in JavaScript without -// causing type errors. They tell the TypeScript compiler that such imports -// simply return a value, which they do, thanks to Webpack. - -// This section works with the `typescript-plugin-css-modules` plugin, and -// allows us to type-check the name in our CSS modules (and get IDE completion!) - -import 'axios' - -declare module '*.png' { - const value: any - export = value -} - -declare module '*.svg' { - const value: any - export = value -} - -declare module '*.module.scss' { - const content: { [className: string]: string } - export default content -} - -declare module 'axios' { - export declare interface AxiosRequestConfig { - silent?: boolean - message?: - | 'Deleting' - | 'Creating' - | 'Loading' - | 'Uploading' - | 'Submitting' - | 'Downloading' - | (string & {}) - redirectToSignInOn404?: boolean - silenceError?: boolean - } -} diff --git a/frontend/src/layouts/AuthedDashboard.tsx b/frontend/src/layouts/AuthedDashboard.tsx deleted file mode 100644 index 2efa8985e..000000000 --- a/frontend/src/layouts/AuthedDashboard.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import Header from '../components/starter/header' - -export default function AuthedDashboard({ children, ...props }: any) { - return ( - -
- {children} - - ) -} diff --git a/frontend/src/lib/loader.ts b/frontend/src/lib/loader.ts deleted file mode 100644 index 522ba51f6..000000000 --- a/frontend/src/lib/loader.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { ImageLoader } from 'next/image' - -export const imageLoader: ImageLoader = ({ src, width, quality }) => - `${src}?w=${width}&q=${quality || 75}` diff --git a/frontend/src/lib/theme.ts b/frontend/src/lib/theme.ts deleted file mode 100644 index c29a2b0ed..000000000 --- a/frontend/src/lib/theme.ts +++ /dev/null @@ -1,59 +0,0 @@ -/** - * The functions here are for tracking and setting the current theme. - * localStorage is used to store the currently preferred them, though - * that doesn't work on the server, where we just use a default. - */ - -const selector = 'link[data-name="eui-theme"]' -export const defaultTheme = 'light' - -function getAllThemes(): HTMLLinkElement[] { - // @ts-ignore - return [...document.querySelectorAll(selector)] -} - -export function enableTheme(newThemeName: string): void { - const oldThemeName = getTheme() - localStorage.setItem('theme', newThemeName) - - for (const themeLink of getAllThemes()) { - // Disable all theme links, except for the desired theme, which we enable - themeLink.disabled = themeLink.dataset.theme !== newThemeName - themeLink['aria-disabled'] = themeLink.dataset.theme !== newThemeName - } - - // Add a class to the `body` element that indicates which theme we're using. - // This allows any custom styling to adapt to the current theme. - if (document.body.classList.contains(`appTheme-${oldThemeName}`)) { - document.body.classList.replace( - `appTheme-${oldThemeName}`, - `appTheme-${newThemeName}` - ) - } else { - document.body.classList.add(`appTheme-${newThemeName}`) - } -} - -export function getTheme(): string { - const storedTheme = localStorage.getItem('theme') - - return storedTheme || defaultTheme -} - -export interface Theme { - id: string - name: string - publicPath: string -} - -// This is supplied to the app as JSON by Webpack - see next.config.js -export interface ThemeConfig { - availableThemes: Theme[] - copyConfig: { - from: string - to: string - }[] -} - -// The config is generated during the build and made available in a JSON string. -export const themeConfig: ThemeConfig = JSON.parse(process.env.THEME_CONFIG!) diff --git a/frontend/src/pages/404.tsx b/frontend/src/pages/404.tsx deleted file mode 100644 index 6caff5b53..000000000 --- a/frontend/src/pages/404.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { - EuiButton, - EuiEmptyPrompt, - EuiImage, - EuiPageTemplate, -} from '@elastic/eui' - -function NotFoundPage(props) { - const illustration = '/images/404_rainy_cloud_light.png' - - return ( - - - - Go Home - , - ]} - body={

{`Sorry, we can't find the page you're looking for. It might have been removed or renamed, or maybe it never existed.`}

} - icon={} - layout="vertical" - title={

Page not found

} - titleSize="m" /> -
-
- ) -} - -export default NotFoundPage diff --git a/frontend/src/pages/_app.tsx b/frontend/src/pages/_app.tsx deleted file mode 100644 index da22d9e71..000000000 --- a/frontend/src/pages/_app.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import 'regenerator-runtime/runtime' -import { EuiErrorBoundary } from '@elastic/eui' -import { Global } from '@emotion/react' -import Head from 'next/head' -import Chrome from '../components/chrome' -import { Theme } from '../components/theme' -import { globalStyles } from '../styles/global.styles' - -/** - * Next.js uses the App component to initialize pages. You can override it - * and control the page initialization. Here use use it to render the - * `Chrome` component on each page, and apply an error boundary. - * - * @see https://nextjs.org/docs/advanced-features/custom-app - */ - -const EuiApp = ({ Component, pageProps }) => { - return ( - - - - - - - - - - - - - - ) -} -export default EuiApp diff --git a/frontend/src/pages/_document.tsx b/frontend/src/pages/_document.tsx deleted file mode 100644 index 895380cb0..000000000 --- a/frontend/src/pages/_document.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import Document, { Head, Html, Main, NextScript } from 'next/document' -import { ReactElement } from 'react' -import { Theme, defaultTheme, themeConfig } from '../lib/theme' - -function themeLink(theme: Theme): ReactElement { - let disabledProps = {} - - if (theme.id !== defaultTheme) { - disabledProps = { - disabled: true, - 'aria-disabled': true, - } - } - - return ( - - ) -} - -/** - * A custom `Document` is commonly used to augment your application's - * `` and `
` tags. This is necessary because Next.js pages skip - * the definition of the surrounding document's markup. - * - * In this case, we customize the default `Document` implementation to - * inject the available EUI theme files. Only the `light` theme is - * initially enabled. - * - * @see https://nextjs.org/docs/advanced-features/custom-document - */ - -export default class MyDocument extends Document { - render(): ReactElement { - const favicon16Prod = `/images/favicon/favicon-16x16.png` - const favicon32Prod = `/images/favicon/favicon-32x32.png` - const favicon48Prod = `/images/favicon/favicon-48x48.png` - - return ( - - - - - - {themeConfig.availableThemes - .filter(x => x.id !== 'dark') - .map(each => themeLink(each))} - - - - - - - - - -
- -

AltStyle によって変換されたページ (->オリジナル) /

- - ) - } -} diff --git a/frontend/src/pages/_error.tsx b/frontend/src/pages/_error.tsx deleted file mode 100644 index a1f271a11..000000000 --- a/frontend/src/pages/_error.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import Error from 'next/error' - -const ErrorWrapper = ({ statusCode }) => { - return -} - -// @ts-ignore getInitialProps doesn't exist on FunctionComponent -ErrorWrapper.getInitialProps = ({ res, err }) => { - const statusCode = res ? res.statusCode : err ? err.statusCode : 404 - return { statusCode } -} - -export default ErrorWrapper diff --git a/frontend/src/pages/about/index.tsx b/frontend/src/pages/about/index.tsx deleted file mode 100644 index 25dd14092..000000000 --- a/frontend/src/pages/about/index.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { GetServerSideProps } from 'next/types' -import AboutComponent from '../../components/AboutComponent/AboutComponent' -import { wrapAxiosErrors } from '../../components/AxiosErrorHoc' -import Description from '../../components/Description/Description' -import Tabs, { TabsId } from '../../components/PagesTabs/PagesTabs' -import Seo from '../../components/Seo' -import { Container, TabWrapper } from '../../components/Wrappers' -import AuthedDashboard from '../../layouts/AuthedDashboard' -import Api from '../../utils/api' -import { create_title } from '../../utils/common' - -const Page = ({ ...props }: any) => { - const markdownContent = props.readme - - return ( - - - - - - - - - - - - - - ) -} - -export const getServerSideProps: GetServerSideProps = wrapAxiosErrors(async ({}) => { - const config = await Api.getConfig() - return { - props: config, - } -}) - -export default Page diff --git a/frontend/src/pages/api-integration/index.tsx b/frontend/src/pages/api-integration/index.tsx deleted file mode 100644 index 6f77dfa74..000000000 --- a/frontend/src/pages/api-integration/index.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { GetServerSideProps } from 'next/types' -import ApiIntegrationComponent from '../../components/ApiIntegrationComponent/ApiIntegrationComponent' -import { wrapAxiosErrors } from '../../components/AxiosErrorHoc' -import Description from '../../components/Description/Description' -import Tabs, { TabsId } from '../../components/PagesTabs/PagesTabs' -import Seo from '../../components/Seo' -import { Container, TabWrapper } from '../../components/Wrappers' -import AuthedDashboard from '../../layouts/AuthedDashboard' -import Api from '../../utils/api' -import { create_title } from '../../utils/common' - -const Page = ({ ...props }: any) => { - return ( - - - - - - - - - - - - - ) -} - -export const getServerSideProps: GetServerSideProps = wrapAxiosErrors(async ({}) => { - const config = await Api.getConfig() - return { - props: config, - } -}) - -export default Page diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx deleted file mode 100644 index 245d7442e..000000000 --- a/frontend/src/pages/index.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { GetServerSideProps } from 'next/types' -import { wrapAxiosErrors } from '../components/AxiosErrorHoc' -import Description from '../components/Description/Description' -import InputComponent from '../components/InputComponent/InputComponent' -import Tabs, { TabsId } from '../components/PagesTabs/PagesTabs' -import Seo from '../components/Seo' -import { Container, TabWrapper } from '../components/Wrappers' -import AuthedDashboard from '../layouts/AuthedDashboard' -import Api from '../utils/api' -import { create_title } from '../utils/common' -import Links from '../utils/data/links' - -// Create a Container Component adds padding - -const Page = ({ ...props }: any) => { - return ( - - - - - - - - - - - - - ) -} -export const getServerSideProps: GetServerSideProps = wrapAxiosErrors(async ({}) => { - const config = await Api.getConfig() - return { - props: config, - } -}) - -export default Page diff --git a/frontend/src/pages/output/[taskId].tsx b/frontend/src/pages/output/[taskId].tsx deleted file mode 100644 index 239a75804..000000000 --- a/frontend/src/pages/output/[taskId].tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { GetServerSideProps } from 'next/types' -import Seo from '../../components/Seo' -import TaskComponent from '../../components/TaskComponent/TaskComponent' -import AuthedDashboard from '../../layouts/AuthedDashboard' -import Api from '../../utils/api' -import { create_title } from '../../utils/common' -import Links from '../../utils/data/links' -import AxiosErrorHoc, { wrapAxiosErrors } from '../../components/AxiosErrorHoc' - -function findScraperConfig(scrapers: any, task: any) { - return scrapers.find( - scraper => scraper.scraper_name === task.scraper_name - ) -} - -const Page = ({ taskId, scrapers, ...props }: any) => { - const response = props.response - const task = response.task - const scraperConfig = findScraperConfig(scrapers, task) - - if (!scraperConfig) { - return
No Scraper Config Found, Did you forgot to add Scraper?
- } - - return ( - - - - - - - ) -} - - -export const getServerSideProps: GetServerSideProps = wrapAxiosErrors(async ({ - params, - res, - req, -}) => { - try { - const id = (params as any).taskId - const config = await Api.getConfig() - - const { data } = await Api.getTaskResults(id, { - "per_page": 25, - "page": 1, - }, true) - - - return { - props: {...config, response: data, taskId: id }, - } - } catch (error) { - if (error.response && error.response.status === 404) { - return { - redirect: { destination: Links.notFound, permanent: false }, - } - } - else { - throw error - } - } -}) -export default AxiosErrorHoc(Page) \ No newline at end of file diff --git a/frontend/src/pages/output/index.tsx b/frontend/src/pages/output/index.tsx deleted file mode 100644 index 70df70d15..000000000 --- a/frontend/src/pages/output/index.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { GetServerSideProps } from 'next/types' -import Description from '../../components/Description/Description' -import OutputComponent from '../../components/OutputComponent/OutputComponent' -import Tabs, { TabsId } from '../../components/PagesTabs/PagesTabs' -import Seo from '../../components/Seo' -import { - OutputContainer, - OutputTabsContainer, - TabWrapper, -} from '../../components/Wrappers' -import AuthedDashboard from '../../layouts/AuthedDashboard' -import Api from '../../utils/api' -import AxiosErrorHoc, { wrapAxiosErrors } from '../../components/AxiosErrorHoc' -import ServerStatusComponent from '../../components/ServerStatusComponent' - -const Page = ({ tasks, ...props }: any) => { - return ( - - - - - - - - - - - - - - - - - - ) -} -export const getServerSideProps: GetServerSideProps = wrapAxiosErrors(async ({}) => { - const [tasks, config] = await Promise.all([Api.getTasks(), Api.getConfig()]); - - return { - props: { ...config, tasks: tasks.data }, - } - -}) -export default AxiosErrorHoc(Page) diff --git a/frontend/src/pages/sitemap.xml.js b/frontend/src/pages/sitemap.xml.js deleted file mode 100644 index a4988f8c2..000000000 --- a/frontend/src/pages/sitemap.xml.js +++ /dev/null @@ -1,49 +0,0 @@ -import Links from '../utils/data/links' - -function generateSiteMap() { - function wrapInPath(ls) { - return ls.map(x => ({ path: x })) - } - const links = [ - ...wrapInPath([ - Links.home, - Links.output, - Links.about, - Links.api, - Links.notFound, - ]), - ] - - return ` - - - ${links - .map( - url => ` - - ${url.path} - - ` - ) - .join('')} - `.trim() -} - -function SiteMap() {} - -export async function getServerSideProps({ res }) { - // We make an API call to gather the URLs for our site - // We generate the XML sitemap with the posts data - const sitemap = generateSiteMap() - - res.setHeader('Content-Type', 'text/xml') - // we send the XML to the browser - res.write(sitemap) - res.end() - - return { - props: {}, - } -} - -export default SiteMap diff --git a/frontend/src/styles/getting-started.styles.ts b/frontend/src/styles/getting-started.styles.ts deleted file mode 100644 index e741ed25b..000000000 --- a/frontend/src/styles/getting-started.styles.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { css } from '@emotion/react' - -export const gettingStartedStyles = euiTheme => ({ - wrapperInner: css` - padding-top: ${euiTheme.size.xxl}; - padding-bottom: ${euiTheme.size.xl}; - `, -}) diff --git a/frontend/src/styles/global.styles.ts b/frontend/src/styles/global.styles.ts deleted file mode 100644 index b5b9f75c9..000000000 --- a/frontend/src/styles/global.styles.ts +++ /dev/null @@ -1,525 +0,0 @@ -import { css } from '@emotion/react' - -const buttoncss = ` - -/*! CSS Used from: https://getbootstrap.com/docs/5.0/dist/css/bootstrap.min.css */ -button { - border-radius: 0; - cursor: pointer; -} -button:focus:not(:focus-visible) { - outline: 0; -} -button { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -button { - text-transform: none; -} -[type='button'], -button { - -webkit-appearance: button; -} -::-moz-focus-inner { - padding: 0; - border-style: none; -} -.btn { - display: inline-block; - font-weight: 400; - text-align: center; - white-space: nowrap; - vertical-align: middle; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - border: 1px solid transparent; - padding: 0.375rem 0.75rem; - font-size: 1rem; - line-height: 1.5; - border-radius: 0.25rem; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, - box-shadow 0.15s ease-in-out; -} -@media (prefers-reduced-motion: reduce) { - .btn { - transition: none; - } -} -.btn:hover { - color: #212529; -} -.btn:focus { - outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); -} -.btn:disabled { - pointer-events: none; - opacity: 0.65; -} -.btn-outline-primary { - color: #0d6efd; - border-color: #0d6efd; -} -.btn-outline-primary:hover { - color: #fff; - background-color: #0d6efd; - border-color: #0d6efd; -} -.btn-outline-primary:focus { - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); -} -.btn-outline-primary:active { - color: #fff; - background-color: #0d6efd; - border-color: #0d6efd; -} -.btn-outline-primary:active:focus { - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); -} -.btn-outline-primary:disabled { - color: #0d6efd; - background-color: transparent; -} -.btn-outline-secondary { - color: #6c757d; - border-color: #6c757d; -} -.btn-outline-secondary:hover { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} -.btn-outline-secondary:focus { - box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); -} -.btn-outline-secondary:active { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; -} -.btn-outline-secondary:active:focus { - box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); -} -.btn-outline-secondary:disabled { - color: #6c757d; - background-color: transparent; -} -.btn-outline-success { - color: #198754; - border-color: #198754; -} -.btn-outline-success:hover { - color: #fff; - background-color: #198754; - border-color: #198754; -} -.btn-outline-success:focus { - box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); -} -.btn-outline-success:active { - color: #fff; - background-color: #198754; - border-color: #198754; -} -.btn-outline-success:active:focus { - box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); -} -.btn-outline-success:disabled { - color: #198754; - background-color: transparent; -} -.btn-outline-info { - color: #0dcaf0; - border-color: #0dcaf0; -} -.btn-outline-info:hover { - color: #000; - background-color: #0dcaf0; - border-color: #0dcaf0; -} -.btn-outline-info:focus { - box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); -} -.btn-outline-info:active { - color: #000; - background-color: #0dcaf0; - border-color: #0dcaf0; -} -.btn-outline-info:active:focus { - box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); -} -.btn-outline-info:disabled { - color: #0dcaf0; - background-color: transparent; -} -.btn-outline-warning { - color: #ffc107; - border-color: #ffc107; -} -.btn-outline-warning:hover { - color: #000; - background-color: #ffc107; - border-color: #ffc107; -} - -.btn-outline-warning:focus { - box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); -} -.btn-outline-warning:active { - color: #000; - background-color: #ffc107; - border-color: #ffc107; -} -.btn-outline-warning:active:focus { - box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); -} -.btn-outline-warning:disabled { - color: #ffc107; - background-color: transparent; -} -.btn-outline-danger { - color: #dc3545; - border-color: #dc3545; -} -.btn-outline-danger:hover { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} -.btn-outline-danger:focus { - box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); -} -.btn-outline-danger:active { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; -} -.btn-outline-danger:active:focus { - box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); -} -.btn-outline-danger:disabled { - color: #dc3545; - background-color: transparent; -} -.btn-outline-light { - color: #f8f9fa; - border-color: #f8f9fa; -} -.btn-outline-light:hover { - color: #000; - background-color: #f8f9fa; - border-color: #f8f9fa; -} -.btn-outline-light:focus { - box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); -} -.btn-outline-light:active { - color: #000; - background-color: #f8f9fa; - border-color: #f8f9fa; -} -.btn-outline-light:active:focus { - box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); -} -.btn-outline-light:disabled { - color: #f8f9fa; - background-color: transparent; -} -.btn-outline-dark { - color: #212529; - border-color: #212529; -} -.btn-outline-dark:hover { - color: #fff; - background-color: #212529; - border-color: #212529; -} -.btn-outline-dark:focus { - box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); -} -.btn-outline-dark:active { - color: #fff; - background-color: #212529; - border-color: #212529; -} -.btn-outline-dark:active:focus { - box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); -} -.btn-outline-dark:disabled { - color: #212529; - background-color: transparent; -} - -.btn-sm { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - border-radius: 0.2rem; -} - -/*No box shadow*/ -.btn { - box-shadow: none !important; -} - -` -export const globalStyles = css` - #__next, - .euiDataGrid__content { - background: inherit; - } - - html { - background-color: unset; - font-size: 16px; - } - - body { - background: #f6e2e7; - } - - .container { - max-width: 1200px; - margin: 0 auto; - padding: 0 15px; - } - - .container-padding-only { - margin: 0 auto; - padding: 0 12px; - } - - .video-responsive { - overflow: hidden; - padding-bottom: 56.25%; - position: relative; - height: 0; - } - - .video-responsive iframe { - left: 0; - top: 0; - height: 100%; - width: 100%; - position: absolute; - } - - .page-card-wrapper { - width: 100%; - max-width: 600px; - margin: 0 auto; - padding: 20px; - } - - .page-card-wrapper-large { - width: 100%; - max-width: 800px; - margin: 0 auto; - padding: 20px; - } - - .page-content { - min-height: calc(100vh); - } - - .page-inner-content { - min-height: calc(100vh - 48px); - } - - .content { - height: calc(100vh - 48px); - } - - .euiHeader + * { - padding-top: 48px; - } - - .euiHeader + .home-container { - padding-top: 68px; - } - - .sidebar-height { - height: calc(100vh - 48px - 2rem); - } - - .table-height { - height: calc(100vh - 48px - 2rem - 32px); - } - - ::-webkit-scrollbar { - width: 4px; - } - - nav.euiCollapsibleNav, - .euiOverlayMask { - top: 48px; - } - .child-iframe-m-auto iframe { - margin: auto !important; - } - .euiForm__errors { - text-align: left; - margin-bottom: 24px; - } - - .primary-link { - font-weight: 500; - text-align: left; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; - color: #006bb8; - padding: 0; - line-height: inherit; - font-size: 12px; - } - - .euiHeaderSectionItem { - min-width: 0px; - } - - .child-h-full> * { - height: 100%; - } - .euiCollapsibleNavGroup__children { - display: flex; - flex-direction: column; - justify-content: space-between; - } - - .bg-cta { - background-color: #0065f2 !important; - } - - .cta-button { - padding: 40px 16px; - font-size: 20px; - font-weight: 600; - } - - .cta-button .euiButton__text { - font-size: 20px; - font-weight: 600; - } - .force-eui-primary, - .landing .hide-section a, - .landing .hide-section .euiLink { - color: #006bb8 !important; - } - .text-m { - color: inherit; - clear: both; - font-size: 1.1429rem; - line-height: 1.7143rem; - } - - .translucent { - background-color: rgba(0, 0, 0, 0.8); - } - - .modal-dialog { - width: 600px; - overflow: hidden; - border-radius: 0.375rem; - --tw-bg-opacity: 1; - background-color: rgba(255, 255, 255, var(--tw-bg-opacity)); - } - - .modal-dialog__header { - border-bottom-width: 1px; - --tw-border-opacity: 1; - border-color: rgba(234, 236, 242, var(--tw-border-opacity)); - padding: 1rem; - text-align: center; - font-weight: 700; - --tw-text-opacity: 1; - color: rgba(220, 53, 69, var(--tw-text-opacity)); - } - - .modal-dialog__body { - border-bottom-width: 1px; - --tw-border-opacity: 1; - border-color: rgba(234, 236, 242, var(--tw-border-opacity)); - padding: 1rem; - } - - .modal-dialog__footer { - padding: 1rem; - } - .modal-dialog__footer { - display: flex; - justify-content: flex-end; - } - .modal-dialog__body> :not([hidden]) ~ :not([hidden]) { - --tw-space-y-reverse: 0; - margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); - margin-bottom: calc(1rem * var(--tw-space-y-reverse)); - } - - .modal-dialog__footer> :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0.5rem * var(--tw-space-x-reverse)); - margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); - } - - ${buttoncss} - - .menu-item { - display: block; - width: 100%; - } - .menu-item { - padding-left: 1rem; - padding-right: 1rem; - padding-top: 0.5rem; - padding-bottom: 0.5rem; - text-align: left; - font-size: 0.875rem; - line-height: 1.25rem; - --tw-text-opacity: 1; - color: rgba(55, 65, 81, var(--tw-text-opacity)); - } - - .menu-item:hover { - --tw-bg-opacity: 1; - background-color: rgba(243, 244, 246, var(--tw-bg-opacity)); - } - - .center-flex { - display: flex; - align-items: center; - justify-content: center; - } - - .pointer { - cursor: pointer; - } - - .euiCheckbox .euiCheckbox__input { - left: 0; - } - - .remove-tabs-bottom-border .euiTabs--bottomBorder { - box-shadow: none; - } - .euiAccordion legend:hover { - text-decoration: none; - } - - .filter-prompt> div { - width: 768px; - } - - img { - border: none; - } - - .row-label-auto .euiFormRow__labelWrapper { - width: auto; - } - ` diff --git a/frontend/src/utils/api.tsx b/frontend/src/utils/api.tsx deleted file mode 100644 index e12356f16..000000000 --- a/frontend/src/utils/api.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import AxiosInstance, {baseUrl} from './axios' - - -async function getConfig() { - const res = await fetch(`${baseUrl}/ui/config`) - - if (!res.ok) { - throw new Error(`HTTP error! status: ${res.status}`) - } - - const data = await res.json() - return data -} - - -function createTask(data: any) { - return AxiosInstance.post('/tasks/create-task-async', data, { - message: 'Starting Task', - }) -} - -function createTaskAndGetResult(data: any) { - return AxiosInstance.post('/tasks/create-task-sync', data, { silent: true }) -} - - -function isApiRunning() { - return AxiosInstance.get(null, { silent: true, silenceError:true }) -} - -function getTasks(page=1) { - return AxiosInstance.get(`/ui/tasks?page=${page}`, { - silent: true, - silenceError:true, - }) -} - -function isAnyTaskFinished(pending_task_ids, progress_task_ids, all_tasks) { - return AxiosInstance.post(`/ui/tasks/is-any-task-updated`, { - pending_task_ids, - progress_task_ids, - all_tasks, - }, { - silent: true, - silenceError:true, - }) -} -function isTaskUpdated(taskId, lastUpdated, status) { - return AxiosInstance.post(`/ui/tasks/is-task-updated`, { - task_id: taskId, - last_updated: lastUpdated, - status: status, - }, { - silent: true, - silenceError: true, - }); -} - - - -function abortTask(task_id: number, page) { - return AxiosInstance.patch(`/ui/tasks?page=${page}` , { - action: 'abort', - task_ids: [task_id] - }, { - message: 'Aborting...', - }) -} -function deleteTask(task_id: number, page) { - return AxiosInstance.patch(`/ui/tasks?page=` + page, { - action: 'delete', - task_ids: [task_id] - }, { - message: 'Deleting...', - }) -} - -function downloadViaLink(response) { - const filename = response.headers['content-disposition'] - .split('filename=')[1] - .replace(/['"]/g, '') - - const url = window.URL.createObjectURL(new Blob([response.data])) - // create a link element - const link = document.createElement('a') - // set the link's href to the URL created above - link.href = url - // set the link's download attribute to the desired file name - link.setAttribute('download', filename) - // append the link to the body and trigger the download - document.body.appendChild(link) - link.click() - link.remove() -} -function downloadTaskResults(taskId, data = {}) { - return AxiosInstance.post(`/tasks/${taskId}/download`, data, { - responseType: 'blob', - message: 'Downloading...', - }).then(downloadViaLink) -} - -function getTaskResults(taskId, data = {}, force_apply_first_view = false) { - return AxiosInstance.post( force_apply_first_view ?`/ui/tasks/${taskId}/results?force_apply_first_view=${force_apply_first_view}` :`/ui/tasks/${taskId}/results` , data, { silent: true , silenceError:true,}) -} - -const Api = { - getConfig, - isApiRunning, - isAnyTaskFinished, - isTaskUpdated, - createTask, - createTaskAndGetResult, - getTasks, - deleteTask, - abortTask, - downloadTaskResults, - getTaskResults, -} - -export default Api diff --git a/frontend/src/utils/axios/apply-interceptors.ts b/frontend/src/utils/axios/apply-interceptors.ts deleted file mode 100644 index 55a219c71..000000000 --- a/frontend/src/utils/axios/apply-interceptors.ts +++ /dev/null @@ -1,92 +0,0 @@ -// @ts-nocheck -import { AxiosInstance } from 'axios' -import cogoToast from 'cogo-toast-react-17-fix' -import Toast from '../cogo-toast' - -import { JSObject } from '@omkar111111/utils/types' -import Router from 'next/router' - -function applyInterceptors(AxiosInstance: AxiosInstance) { - const map = new Map() - function showLoading(config: JSObject, message: string) { - const hideFn = cogoToast.loading(message, { - hideAfter: 0, - position: 'bottom-right', - }).hide! - map.set(config, hideFn) - } - - function hideLoading(config: JSObject) { - const hidefn = map.get(config) - if (hidefn) { - hidefn() - } - } - - const HTTP_STATUS_ENTITY_TOO_LARGE = 413 - - function handleAxiosError(error: any) { - console.error(error) - if (error.response) { - if (error.response.status === HTTP_STATUS_ENTITY_TOO_LARGE) { - Toast.error('Please upload smaller files.') - } else if (error.response.data.message) { - Toast.error(error.response.data.message) - } else { - Toast.error('Something went wrong, please try again later.') - } - } else { - Toast.error('Something went wrong, please try again later.') - } - } - - function redirectIfShouldRedirect(response: any) { - if (response?.data?.redirect) { - Router.push(response.data.redirect) - return true - } - return false - } - - function is404(res: any) { - return res?.status === 404 - } - - AxiosInstance.interceptors.request.use( - (config: any) => { - if (config.silent) { - return config - } - showLoading(config, config.message ? config.message : 'Submitting') - - return config - }, - error => { - return Promise.reject(error) - } - ) - AxiosInstance.interceptors.response.use( - response => { - hideLoading(response.config) - redirectIfShouldRedirect(response) - return response - }, - error => { - hideLoading(error.config) - let isRedirected = redirectIfShouldRedirect(error.response) - if (error.config.redirectToSignInOn404 && is404(error.response)) { - Router.push('/auth/sign-in') - isRedirected = true - } - if (error.config.silenceError) { - return Promise.reject(error) - } else { - if (!isRedirected) { - handleAxiosError(error) - } - return Promise.reject(error) - } - } - ) -} -export default applyInterceptors diff --git a/frontend/src/utils/axios/backend.ts b/frontend/src/utils/axios/backend.ts deleted file mode 100644 index ac22e6564..000000000 --- a/frontend/src/utils/axios/backend.ts +++ /dev/null @@ -1,11 +0,0 @@ -import axios from 'axios' -import fetchAdapter from './fetch-adapter' - -export const backendBaseURL = 'http://127.0.0.1:8000/api' - -const BackendAxios = axios.create({ - baseURL: backendBaseURL, - adapter: fetchAdapter as any, -}) - -export default BackendAxios diff --git a/frontend/src/utils/axios/fetch-adapter.ts b/frontend/src/utils/axios/fetch-adapter.ts deleted file mode 100644 index e7adf0949..000000000 --- a/frontend/src/utils/axios/fetch-adapter.ts +++ /dev/null @@ -1,138 +0,0 @@ -// @ts-nocheck -/** - * Code Taken from @vespaiach/axios-fetch-adapter in order to solve next.js transpilation errors - */ -import buildFullPath from "axios/lib/core/buildFullPath" -import createError from "axios/lib/core/createError" -import settle from "axios/lib/core/settle" -import buildURL from "axios/lib/helpers/buildURL" -import { isUndefined } from "axios/lib/utils" - -/** - * - Create a request object - * - Get response body - * - Check if timeout - */ -export default async function fetchAdapter(config) { - const request = createRequest(config) - const promiseChain = [getResponse(request, config)] - - if (config.timeout && config.timeout> 0) { - promiseChain.push( - new Promise((res) => { - setTimeout(() => { - const message = config.timeoutErrorMessage - ? config.timeoutErrorMessage - : "timeout of " + config.timeout + "ms exceeded" - res(createError(message, config, "ECONNABORTED", request)) - }, config.timeout) - }) - ) - } - - const data = await Promise.race(promiseChain) - return new Promise((resolve, reject) => { - if (data instanceof Error) { - reject(data) - } else { - Object.prototype.toString.call(config.settle) === "[object Function]" - ? config.settle(resolve, reject, data) - : settle(resolve, reject, data) - } - }) -} - -/** - * Fetch API stage two is to get response body. This funtion tries to retrieve - * response body based on response's type - */ -async function getResponse(request, config) { - let stageOne - try { - stageOne = await fetch(request) - } catch (e) { - return createError("Network Error", config, null, request) - } - - const response = { - ok: stageOne.ok, - status: stageOne.status, - statusText: stageOne.statusText, - headers: new Headers(stageOne.headers), // Make a copy of headers - config, - request, - } - - if (stageOne.status>= 200 && stageOne.status !== 204) { - switch (config.responseType) { - case "arraybuffer": - response.data = await stageOne.arrayBuffer() - break - case "blob": - response.data = await stageOne.blob() - break - case "json": - response.data = await stageOne.json() - break - case "formData": - response.data = await stageOne.formData() - break - default: - response.data = await stageOne.text() - break - } - } - - return response -} - -/** - * This function will create a Request object based on configuration's axios - */ -function createRequest(config) { - const headers = new Headers(config.headers) - - // HTTP basic authentication - if (config.auth) { - const username = config.auth.username || "" - const password = config.auth.password - ? decodeURI(encodeURIComponent(config.auth.password)) - : "" - headers.set("Authorization", `Basic ${btoa(username + ":" + password)}`) - } - - const method = config.method.toUpperCase() - const options = { - headers, - method, - } - if (method !== "GET" && method !== "HEAD") { - options.body = config.data - } - if (config.mode) { - options.mode = config.mode - } - if (config.cache) { - options.cache = config.cache - } - if (config.integrity) { - options.integrity = config.integrity - } - if (config.redirect) { - options.integrity = config.redirect - } - if (config.referrer) { - options.referrer = config.referrer - } - // This config is similar to XHR’s withCredentials flag, but with three available values instead of two. - // So if withCredentials is not set, default value 'same-origin' will be used - if (!isUndefined(config.withCredentials)) { - options.credentials = config.withCredentials ? "include" : "omit" - } - - const fullPath = buildFullPath(config.baseURL, config.url) - const url = buildURL(fullPath, config.params, config.paramsSerializer) - - // Expected browser to throw error if there is any wrong configuration value - return new Request(url, options) -} diff --git a/frontend/src/utils/axios/frontend.ts b/frontend/src/utils/axios/frontend.ts deleted file mode 100644 index ffed99ab7..000000000 --- a/frontend/src/utils/axios/frontend.ts +++ /dev/null @@ -1,11 +0,0 @@ -import axios from 'axios' -import applyInterceptors from './apply-interceptors' - -export const frontendBaseURL = '/api' - -const FrontendAxios = axios.create({ - baseURL: frontendBaseURL, -}) - -applyInterceptors(FrontendAxios) -export default FrontendAxios diff --git a/frontend/src/utils/axios/index.ts b/frontend/src/utils/axios/index.ts deleted file mode 100644 index 6d8c5b468..000000000 --- a/frontend/src/utils/axios/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import BackendAxios, { backendBaseURL } from './backend' -import FrontendAxios, { frontendBaseURL } from './frontend' - -const AxiosInstance = - typeof window === 'undefined' ? BackendAxios : FrontendAxios - -export const baseUrl = - typeof window === 'undefined' ? backendBaseURL : frontendBaseURL - -export default AxiosInstance diff --git a/frontend/src/utils/axios/use-axios.ts b/frontend/src/utils/axios/use-axios.ts deleted file mode 100644 index a78605e9a..000000000 --- a/frontend/src/utils/axios/use-axios.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { AxiosError } from 'axios' -import { useEffect, useState } from 'react' - -function useAxios( - requests: () => Promise, - { - onSuccess, - mapData, - }: { mapData?: (x: any) => any; onSuccess?: (x: any) => any } = {}, - runOnMount = true -) { - const [data, setData] = useState(undefined) - const [error, setError] = useState(undefined) - const [isLoading, setLoading] = useState(runOnMount ? true : false) - - const fetchData = async () => { - setLoading(true) - let final = null - try { - const result = await Promise.all([requests].map(requests => requests())) - const datas = result.map(result => result?.data) - - setError(undefined) - if (datas.length === 1) { - final = datas[0] - } else { - final = datas - } - - final = mapData ? mapData(final) : final - - onSuccess?.(final) - - setData(final) - setLoading(false) - } catch (error) { - console.error(error) - setError(error as any) - setLoading(false) - throw error - } - // setLoading(false); - return final - } - - useEffect(() => { - if (runOnMount) { - fetchData() - } - }, []) - - return { - data: data as A | undefined, - fetch: fetchData, - refetch: fetchData, - error, - isLoading, - } -} - -function useLazyAxios(requests: () => Promise, options = {}) { - return useAxios(requests, options, false) -} - -export { useAxios, useLazyAxios } -export default useAxios diff --git a/frontend/src/utils/backend/types.ts b/frontend/src/utils/backend/types.ts deleted file mode 100644 index 13f3e9c7a..000000000 --- a/frontend/src/utils/backend/types.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { JSObject, WithId } from '@omkar111111/utils/types' - -type Timespamps = { - created_at: string - updated_at: string -} -export type User = WithId & - Timespamps & { - name: string - email: string - username: string - bytes_used: number - } - -export type ProjectImage = WithId & { - name: string - url: string - hash: string - project: number -} - -export type ProjectSvg = WithId & { - name: string - content: string - hash: string - project: number -} - -export type Page = WithId & { - title: string - nodes: JSObject[] - link: string -} - -export type ProjectData = { - pages: Page[] - homepage: string -} - -export type Project = WithId & - Timespamps & { - name: string - data: ProjectData - website_content: string - images: ProjectImage[] - svgs: ProjectSvg[] - } - -export type PostImage = WithId & - Timespamps & { - name: string - url: string - hash: string - post: number - } - -export type Post = WithId & - Timespamps & { - title: string - content: string - thumbnail: null | number - project: number - images: PostImage[] - } diff --git a/frontend/src/utils/cogo-toast.js b/frontend/src/utils/cogo-toast.js deleted file mode 100644 index 313870254..000000000 --- a/frontend/src/utils/cogo-toast.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";function t(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var o=t(require("cogo-toast-react-17-fix")),n={};function i(t,o){n[o]||(n[o]=!0,t().finally((function(){delete n[o]})))}var e={loadingPromise:function(t,n){void 0===n&&(n="Uploading");var i=o.default.loading(n,{hideAfter:0,position:"bottom-right"}).hide;return t.finally((function(){i()}))},info:function(t){i((function(){return o.default.info(t,{position:"bottom-right"})}),t)},error:function(t,n){i((function(){return o.default.error(t,{heading:n,position:"bottom-right"})}),t)},success:function(t){i((function(){return o.default.success(t,{position:"bottom-right"})}),t)}};module.exports=e; \ No newline at end of file diff --git a/frontend/src/utils/common.tsx b/frontend/src/utils/common.tsx deleted file mode 100644 index 5a1990b70..000000000 --- a/frontend/src/utils/common.tsx +++ /dev/null @@ -1,6 +0,0 @@ -export function create_title(props: any, suffix): string { - if (props?.title) { - return `${props.title.trim()} | ${suffix}` - } - return suffix -} diff --git a/frontend/src/utils/config.ts b/frontend/src/utils/config.ts deleted file mode 100644 index 7990d5650..000000000 --- a/frontend/src/utils/config.ts +++ /dev/null @@ -1,7 +0,0 @@ -const env = process.env.NODE_ENV - -const Config = { - IS_DEV: env == 'development', -} - -export default Config diff --git a/frontend/src/utils/data/links.tsx b/frontend/src/utils/data/links.tsx deleted file mode 100644 index 3c9f35591..000000000 --- a/frontend/src/utils/data/links.tsx +++ /dev/null @@ -1,8 +0,0 @@ -const Links = { - home: '/', - output: '/output', - about: '/about', - api: '/api', - notFound: '/404', -} -export default Links diff --git a/frontend/src/utils/data/mappers.tsx b/frontend/src/utils/data/mappers.tsx deleted file mode 100644 index 8d1e6264f..000000000 --- a/frontend/src/utils/data/mappers.tsx +++ /dev/null @@ -1,16 +0,0 @@ -export function formatDate(value: any) { - const date = new Date(value) - const yyyy = date.getFullYear() - let mm = date.getMonth() + 1 // Months start at 0! - let dd = date.getDate() - - // @ts-ignore - if (dd < 10) dd = `0${dd}` - - // @ts-ignore - if (mm < 10) mm = `0${mm}` - - const formatted = `${dd}/${mm}/${yyyy}` - - return formatted -} diff --git a/frontend/src/utils/messages.tsx b/frontend/src/utils/messages.tsx deleted file mode 100644 index c4ed01b45..000000000 --- a/frontend/src/utils/messages.tsx +++ /dev/null @@ -1,5 +0,0 @@ -const Messages = { - EMAIL_IN_VALID: 'Please enter a valid email address.', -} - -export default Messages diff --git a/frontend/src/utils/missc.ts b/frontend/src/utils/missc.ts deleted file mode 100644 index 899534295..000000000 --- a/frontend/src/utils/missc.ts +++ /dev/null @@ -1,41 +0,0 @@ -import Language from '@omkar111111/utils/language' -import { AxiosResponse } from 'axios' - -export async function getDataFromAxiosResponse(res: Promise) { - try { - return (await res).data - } catch (e: any) { - const data = e.response?.data - return data - } -} - -export function isEmpty(x: any) { - return ( - x === null || - x === undefined || - x === '' || - (typeof x == 'string' && x?.trim() === '') - ) -} - -export function isEmptyObject(obj) { - return Object.keys(obj).length === 0 && obj.constructor === Object -} - -export function isNotEmpty(x: any) { - return !isEmpty(x) -} - -export function generateListWithIdAndValue(n) { - const list = [] - for (let i = 1; i <= n; i++) { - list.push({ id: i.toString(), value: i.toString() }) - } - return list -} - -export const isStringOrListNotEmpty = (x: any) => - typeof x === 'string' ? isNotEmpty(x) : !Language.isListEmpty(x) - -export const isStringOrListEmpty = (x: any) => !isStringOrListNotEmpty(x) diff --git a/frontend/src/utils/models.tsx b/frontend/src/utils/models.tsx deleted file mode 100644 index f900534bd..000000000 --- a/frontend/src/utils/models.tsx +++ /dev/null @@ -1,51 +0,0 @@ - -export const TaskStatus = { - PENDING: 'pending', - IN_PROGRESS: 'in_progress', - COMPLETED: 'completed', - FAILED: 'failed', - ABORTED: 'aborted', -} - -export function hasViews(views: any) { - return views.length -} - -export function hasFilters(filters: any) { - return filters.length -} - -export function hasSorts(sorts: any) { - return sorts.length> 1 -} - -function isPending(task: any): boolean { - return task.status === TaskStatus.PENDING -} - -function isInProgress(task: any) { - return task.status === TaskStatus.IN_PROGRESS -} -export function isDoing(task) { - return ( - isInProgress(task) || isPending(task) - ) -} - -export function filterIsDoingTasks(tasks: any[]) { - return tasks.filter(isDoing) -} - - -export function filterIsPendingTasks(tasks: any[]) { - return tasks.filter(isPending) -} - -export function filterIsProgressTasks(tasks: any[]) { - return tasks.filter(isInProgress) -} - - -export function filterAndMapAllTasks(tasks: any[]) { - return tasks.filter(x=> x.is_all_task === true && isDoing(x) ).map(x=> ({id: x.id, result_count: x.result_count})) -} \ No newline at end of file diff --git a/frontend/src/utils/next/index.tsx b/frontend/src/utils/next/index.tsx deleted file mode 100644 index 2140a8413..000000000 --- a/frontend/src/utils/next/index.tsx +++ /dev/null @@ -1,11 +0,0 @@ -export function pushToHome(router: any) { - router.push({ - pathname: '/', - }) -} - -export function pushToRoute(router: any, path) { - router.push({ - pathname: path, - }) -} diff --git a/frontend/src/utils/types.ts b/frontend/src/utils/types.ts deleted file mode 100644 index 5b8fcc4b6..000000000 --- a/frontend/src/utils/types.ts +++ /dev/null @@ -1,24 +0,0 @@ -export type WithData = { - data: A -} - -export type WithRefetch = { refetch: () => void } -export type WithLabel = { label: string } - -export type WithOnChange = { - onChange: (value: T) => void -} - -export type WithValue = { - value: T -} - -export type VandC = WithValue & WithOnChange -export type F1 = (a: A) => void - -export type WithPaginationResponse = { - count: number - next: string | null - previous: string | null - results: A[] -} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json deleted file mode 100644 index 13d2daa9a..000000000 --- a/frontend/tsconfig.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "compilerOptions": { - "plugins": [ - { - "name": "typescript-plugin-css-modules" - } - ], - "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "allowJs": true, - "skipLibCheck": true, - "strict": false, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "jsxImportSource": "@emotion/react", - "incremental": true - }, - "include": [ - "./src/**/*" - ], - "exclude": [ - "node_modules" - ] -} diff --git a/frontend/tsconfig.tsbuildinfo b/frontend/tsconfig.tsbuildinfo deleted file mode 100644 index dbfbf2634..000000000 --- a/frontend/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"program":{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@types/scheduler/tracing.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/@emotion/utils/types/index.d.ts","./node_modules/@emotion/serialize/types/index.d.ts","./node_modules/@emotion/cache/types/index.d.ts","./node_modules/@emotion/react/types/helper.d.ts","./node_modules/@emotion/react/types/theming.d.ts","./node_modules/@emotion/react/types/index.d.ts","./node_modules/@emotion/react/types/jsx-namespace.d.ts","./node_modules/@emotion/react/types/jsx-runtime.d.ts","./src/components/centercontent.tsx","./node_modules/@types/chroma-js/index.d.ts","./node_modules/moment/ts3.1-typings/moment.d.ts","./node_modules/react-focus-lock/interfaces.d.ts","./node_modules/react-focus-lock/ui/ui.d.ts","./node_modules/react-focus-on/dist/es5/types.d.ts","./node_modules/tabbable/index.d.ts","./node_modules/react-virtualized-auto-sizer/dist/declarations/src/vendor/detectelementresize.d.ts","./node_modules/react-virtualized-auto-sizer/dist/declarations/src/types.d.ts","./node_modules/react-virtualized-auto-sizer/dist/declarations/src/autosizer.d.ts","./node_modules/react-virtualized-auto-sizer/dist/declarations/src/index.d.ts","./node_modules/react-virtualized-auto-sizer/dist/react-virtualized-auto-sizer.cjs.d.ts","./node_modules/@types/prismjs/index.d.ts","./node_modules/@types/refractor/core.d.ts","./node_modules/@types/refractor/index.d.ts","./node_modules/@types/react-window/index.d.ts","./node_modules/@types/react-input-autosize/index.d.ts","./node_modules/@types/react-beautiful-dnd/index.d.ts","./node_modules/@types/unist/index.d.ts","./node_modules/vfile/node_modules/vfile-message/types/index.d.ts","./node_modules/vfile/types/index.d.ts","./node_modules/unified/types/ts4.0/index.d.ts","./node_modules/remark-parse/types/index.d.ts","./node_modules/vfile-message/node_modules/@types/unist/index.d.ts","./node_modules/vfile-message/lib/index.d.ts","./node_modules/vfile-message/index.d.ts","./node_modules/@types/mdast/index.d.ts","./node_modules/mdast-util-definitions/types/index.d.ts","./node_modules/mdast-util-to-hast/types/index.d.ts","./node_modules/hast-to-hyperscript/types/index.d.ts","./node_modules/rehype-react/types/index.d.ts","./node_modules/@elastic/eui/eui.d.ts","./src/components/centeredspinner.tsx","./src/components/h1text.tsx","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./src/components/seo.tsx","./src/components/wrappers.tsx","./src/lib/theme.ts","./src/components/theme.tsx","./src/components/markdowncomponent/markdowncomponent.tsx","./src/components/aboutcomponent/aboutcomponent.tsx","./node_modules/@types/node/ts4.8/assert.d.ts","./node_modules/@types/node/ts4.8/assert/strict.d.ts","./node_modules/@types/node/ts4.8/globals.d.ts","./node_modules/@types/node/ts4.8/async_hooks.d.ts","./node_modules/@types/node/ts4.8/buffer.d.ts","./node_modules/@types/node/ts4.8/child_process.d.ts","./node_modules/@types/node/ts4.8/cluster.d.ts","./node_modules/@types/node/ts4.8/console.d.ts","./node_modules/@types/node/ts4.8/constants.d.ts","./node_modules/@types/node/ts4.8/crypto.d.ts","./node_modules/@types/node/ts4.8/dgram.d.ts","./node_modules/@types/node/ts4.8/diagnostics_channel.d.ts","./node_modules/@types/node/ts4.8/dns.d.ts","./node_modules/@types/node/ts4.8/dns/promises.d.ts","./node_modules/@types/node/ts4.8/dom-events.d.ts","./node_modules/@types/node/ts4.8/domain.d.ts","./node_modules/@types/node/ts4.8/events.d.ts","./node_modules/@types/node/ts4.8/fs.d.ts","./node_modules/@types/node/ts4.8/fs/promises.d.ts","./node_modules/@types/node/ts4.8/http.d.ts","./node_modules/@types/node/ts4.8/http2.d.ts","./node_modules/@types/node/ts4.8/https.d.ts","./node_modules/@types/node/ts4.8/inspector.d.ts","./node_modules/@types/node/ts4.8/module.d.ts","./node_modules/@types/node/ts4.8/net.d.ts","./node_modules/@types/node/ts4.8/os.d.ts","./node_modules/@types/node/ts4.8/path.d.ts","./node_modules/@types/node/ts4.8/perf_hooks.d.ts","./node_modules/@types/node/ts4.8/process.d.ts","./node_modules/@types/node/ts4.8/punycode.d.ts","./node_modules/@types/node/ts4.8/querystring.d.ts","./node_modules/@types/node/ts4.8/readline.d.ts","./node_modules/@types/node/ts4.8/repl.d.ts","./node_modules/@types/node/ts4.8/stream.d.ts","./node_modules/@types/node/ts4.8/stream/promises.d.ts","./node_modules/@types/node/ts4.8/stream/consumers.d.ts","./node_modules/@types/node/ts4.8/stream/web.d.ts","./node_modules/@types/node/ts4.8/string_decoder.d.ts","./node_modules/@types/node/ts4.8/test.d.ts","./node_modules/@types/node/ts4.8/timers.d.ts","./node_modules/@types/node/ts4.8/timers/promises.d.ts","./node_modules/@types/node/ts4.8/tls.d.ts","./node_modules/@types/node/ts4.8/trace_events.d.ts","./node_modules/@types/node/ts4.8/tty.d.ts","./node_modules/@types/node/ts4.8/url.d.ts","./node_modules/@types/node/ts4.8/util.d.ts","./node_modules/@types/node/ts4.8/v8.d.ts","./node_modules/@types/node/ts4.8/vm.d.ts","./node_modules/@types/node/ts4.8/wasi.d.ts","./node_modules/@types/node/ts4.8/worker_threads.d.ts","./node_modules/@types/node/ts4.8/zlib.d.ts","./node_modules/@types/node/ts4.8/globals.global.d.ts","./node_modules/@types/node/ts4.8/index.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./src/components/empty/empty.tsx","./src/components/inputs/choosefield.tsx","./src/components/scraperselector/scraperselector.tsx","./src/components/apiintegrationcomponent/apiintegrationcomponent.tsx","./node_modules/@types/react-dom/index.d.ts","./src/components/clickoutside/clickoutside.tsx","./src/components/description/description.tsx","./src/components/tabs/tabs.tsx","./src/components/inputs/checkboxfield.tsx","./src/components/downloadstickybar/downloadstickybar.tsx","./src/components/header/header.tsx","./node_modules/botasaurus-controls/dist/index.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/next/dist/server/font-utils.d.ts","./node_modules/next/dist/shared/lib/html-context.d.ts","./node_modules/@next/env/types/index.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/server/router.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/server/send-payload/revalidate-headers.d.ts","./node_modules/next/dist/server/send-payload/index.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/types/index.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/router.d.ts","./node_modules/axios/index.d.ts","./src/utils/axios/fetch-adapter.ts","./src/utils/axios/backend.ts","./node_modules/cogo-toast-react-17-fix/index.d.ts","./src/utils/axios/cogo-toast.js","./node_modules/@omkar111111/utils/types/index.d.ts","./src/utils/axios/apply-interceptors.ts","./src/utils/axios/frontend.ts","./src/utils/axios/index.ts","./src/utils/api.tsx","./node_modules/@omkar111111/utils/language/index.d.ts","./src/utils/missc.ts","./src/utils/next/index.tsx","./src/components/inputs/collapsiblesection.tsx","./src/components/inputs/listoftextfields.tsx","./node_modules/@omkar111111/utils/browser/index.d.ts","./src/components/inputs/numberfield.tsx","./src/components/inputs/singleselect.tsx","./src/components/inputs/switchfield.tsx","./src/components/inputs/textareafield.tsx","./src/components/inputs/textfield.tsx","./src/components/inputcomponent/inputcomponent.tsx","./src/utils/models.tsx","./src/components/outputcomponent/outputcomponent.tsx","./src/components/pagestabs/pagestabs.tsx","./src/components/runstickybar/runstickybar.tsx","./src/components/taskcomponent/datapanel.tsx","./src/components/inputs/multiselect.tsx","./src/components/inputs/searchfield.tsx","./src/components/taskcomponent/filtercomponent.tsx","./src/components/taskcomponent/sortcomponent.tsx","./src/components/taskcomponent/viewcomponent.tsx","./src/components/taskcomponent/taskcomponent.tsx","./src/components/auth/context.tsx","./src/components/chrome/index.tsx","./src/components/inputs/select.tsx","./src/components/inputs/outputs.tsx","./src/components/starter/header.styles.ts","./node_modules/next/dist/client/image.d.ts","./node_modules/next/image.d.ts","./src/lib/loader.ts","./src/utils/data/links.tsx","./src/components/starter/header.tsx","./src/components/starter/wrapper.tsx","./src/custom_typings/index.d.ts","./src/layouts/autheddashboard.tsx","./src/pages/404.tsx","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./src/styles/global.styles.ts","./src/pages/_app.tsx","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./src/pages/_document.tsx","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/error.d.ts","./src/pages/_error.tsx","./src/utils/common.tsx","./src/pages/index.tsx","./src/pages/sitemap.xml.js","./src/pages/work-in-progress.tsx","./src/pages/about/index.tsx","./src/pages/api-integration/index.tsx","./src/pages/output/[taskid].tsx","./src/pages/output/index.tsx","./src/styles/getting-started.styles.ts","./src/utils/config.ts","./src/utils/messages.tsx","./src/utils/types.ts","./src/utils/axios/use-axios.ts","./src/utils/backend/types.ts","./src/utils/data/mappers.tsx","./node_modules/@types/eslint/helpers.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/@types/json-schema/index.d.ts","./node_modules/@types/eslint/index.d.ts","./node_modules/@types/eslint-scope/index.d.ts","./node_modules/@types/hast/index.d.ts","./node_modules/@types/hoist-non-react-statics/index.d.ts","./node_modules/@types/json5/index.d.ts","./node_modules/@types/lodash/common/common.d.ts","./node_modules/@types/lodash/common/array.d.ts","./node_modules/@types/lodash/common/collection.d.ts","./node_modules/@types/lodash/common/date.d.ts","./node_modules/@types/lodash/common/function.d.ts","./node_modules/@types/lodash/common/lang.d.ts","./node_modules/@types/lodash/common/math.d.ts","./node_modules/@types/lodash/common/number.d.ts","./node_modules/@types/lodash/common/object.d.ts","./node_modules/@types/lodash/common/seq.d.ts","./node_modules/@types/lodash/common/string.d.ts","./node_modules/@types/lodash/common/util.d.ts","./node_modules/@types/lodash/index.d.ts","./node_modules/@types/numeral/index.d.ts","./node_modules/@types/parse-json/index.d.ts","./node_modules/@types/parse5/index.d.ts","./node_modules/redux/index.d.ts","./node_modules/@types/react-redux/index.d.ts","./node_modules/@types/react-virtualized-auto-sizer/index.d.ts","./node_modules/@types/resize-observer-browser/index.d.ts","./node_modules/@types/responselike/index.d.ts","./node_modules/@types/scheduler/index.d.ts","./node_modules/@types/semver/classes/semver.d.ts","./node_modules/@types/semver/functions/parse.d.ts","./node_modules/@types/semver/functions/valid.d.ts","./node_modules/@types/semver/functions/clean.d.ts","./node_modules/@types/semver/functions/inc.d.ts","./node_modules/@types/semver/functions/diff.d.ts","./node_modules/@types/semver/functions/major.d.ts","./node_modules/@types/semver/functions/minor.d.ts","./node_modules/@types/semver/functions/patch.d.ts","./node_modules/@types/semver/functions/prerelease.d.ts","./node_modules/@types/semver/functions/compare.d.ts","./node_modules/@types/semver/functions/rcompare.d.ts","./node_modules/@types/semver/functions/compare-loose.d.ts","./node_modules/@types/semver/functions/compare-build.d.ts","./node_modules/@types/semver/functions/sort.d.ts","./node_modules/@types/semver/functions/rsort.d.ts","./node_modules/@types/semver/functions/gt.d.ts","./node_modules/@types/semver/functions/lt.d.ts","./node_modules/@types/semver/functions/eq.d.ts","./node_modules/@types/semver/functions/neq.d.ts","./node_modules/@types/semver/functions/gte.d.ts","./node_modules/@types/semver/functions/lte.d.ts","./node_modules/@types/semver/functions/cmp.d.ts","./node_modules/@types/semver/functions/coerce.d.ts","./node_modules/@types/semver/classes/comparator.d.ts","./node_modules/@types/semver/classes/range.d.ts","./node_modules/@types/semver/functions/satisfies.d.ts","./node_modules/@types/semver/ranges/max-satisfying.d.ts","./node_modules/@types/semver/ranges/min-satisfying.d.ts","./node_modules/@types/semver/ranges/to-comparators.d.ts","./node_modules/@types/semver/ranges/min-version.d.ts","./node_modules/@types/semver/ranges/valid.d.ts","./node_modules/@types/semver/ranges/outside.d.ts","./node_modules/@types/semver/ranges/gtr.d.ts","./node_modules/@types/semver/ranges/ltr.d.ts","./node_modules/@types/semver/ranges/intersects.d.ts","./node_modules/@types/semver/ranges/simplify.d.ts","./node_modules/@types/semver/ranges/subset.d.ts","./node_modules/@types/semver/internals/identifiers.d.ts","./node_modules/@types/semver/index.d.ts","./node_modules/@types/yargs-parser/index.d.ts","./node_modules/@types/yargs/index.d.ts","./src/utils/controls.ts"],"fileInfos":[{"version":"89f78430e422a0f06d13019d60d5a45b37ec2d28e67eb647f73b1b0d19a46b72","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940","746d62152361558ea6d6115cf0da4dd10ede041d14882ede3568bce5dc4b4f1f","2cc028cd0bdb35b1b5eb723d84666a255933fffbea607f72cbd0c7c7b4bee144",{"version":"abba1071bfd89e55e88a054b0c851ea3e8a494c340d0f3fab19eb18f6afb0c9e","affectsGlobalScope":true},{"version":"927cb2b60048e1395b183bf74b2b80a75bdb1dbe384e1d9fac654313ea2fb136","affectsGlobalScope":true},{"version":"d8996609230d17e90484a2dd58f22668f9a05a3bfe00bfb1d6271171e54a31fb","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"4378fc8122ec9d1a685b01eb66c46f62aba6b239ca7228bb6483bcf8259ee493","affectsGlobalScope":true},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"1b3fe904465430e030c93239a348f05e1be80640d91f2f004c3512c2c2c89f34","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"d071129cba6a5f2700be09c86c07ad2791ab67d4e5ed1eb301d6746c62745ea4","affectsGlobalScope":true},{"version":"6c55633c733c8378db65ac3da7a767c3cf2cf3057f0565a9124a16a3a2019e87","affectsGlobalScope":true},{"version":"fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe","affectsGlobalScope":true},{"version":"5b0ca94ec819d68d33da516306c15297acec88efeb0ae9e2b39f71dbd9685ef7","affectsGlobalScope":true},{"version":"e8c9f4e445a489991ca1a4232667de3ac36b07ba75ea335971fbeacf2d26fe67","affectsGlobalScope":true},{"version":"10bbdc1981b8d9310ee75bfac28ee0477bb2353e8529da8cff7cb26c409cb5e8","affectsGlobalScope":true},{"version":"3b75495c77f85fef76a898491b2eff2e4eb80a37d798a8ad8b39a578c2303859","affectsGlobalScope":true},"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","9ed09d4538e25fc79cefc5e7b5bfbae0464f06d2984f19da009f85d13656c211","b1bf87add0ccfb88472cd4c6013853d823a7efb791c10bb7a11679526be91eda",{"version":"7e6f46ed7dbebb2b1a5bdfac5a41582dfd266217a30387d9cbdeb2af84a39c52","affectsGlobalScope":true},"531cd80e4dba2620d86844a50e7d21b89436e56a14e66d6774e99b3759ac69ad","74fe0b69c88fa28f23f5bf424c3019316b83fd6aa28e385180c3b48fc33af91c","c83a76ad0bf69b0176042adfc65f8c6be7dd1141b66cfa20954520315dcf2c1a","83e56d3337e1a6dbafdbe5a2502a84c330b1a328ed2860d689b2ded82b1f5c95","f186de91b1c50640e4d2bef41307ee06446d7ec76f787d4384ef808981025546","4886055af73784b27ea115b68763c1c0c30df8528ba50e7d1d3e0922c6e7d8e3","c8459c432571ea13d18cdec09ed6fae9286dafc21a590d39fcb01698fb71c540","d1811d6f41bc2c8dddfdb534c9928fa78c4fb5b3bbc843058a2eeb0b7bd788c8",{"version":"b5075aba739deed9ebf8647ceabfac3c34d0ac8e2cca240b56bad06b66cd17db","signature":"7b4c04de61a2eed358f3f293ca5cebf40d8e80927fcda46a76a0d91b8c5737ef"},"73a4400d051fc0d781dd5310bc1b6833c95b0f0e7b6b998a29cbcda84deec90b","4051f6311deb0ce6052329eeb1cd4b1b104378fe52f882f483130bea75f92197","f2917720607a6da9b902efe7dc8aab330b5ae09e5bdd4868e4adf252ed11e179","c10aa465ddfc6523c0341115fa1b7d7187d3102caa3757fdf6d7fc122d4b40b1","e3403c5c93e5eb08ec0d6e8f23a9fbdcb5e047e2457fccc823b6a0fd2dd86ace","143068bb0f6bcbbc7862c1ea38f64cc06ea73ffc9c36d423a05eddd6cf3db54f","a97f6891d757661cef6af85e69707bd2be71c94f79a3caf92892300560a53c6d","a5e652ff1bd5fbdbcdf4658d4253774d60ed7b3aa664da760113ac5be58448e4","4d5776a6298929cac9e96dec79fa8e78f96c5e2e03e9e632460921934304e4d9","81ce6ab82bbff003e8be9b4d846d483cd6a3be599af5f3ca33eb177accf1d39a","d16e4ff9c5967e76429e7d55e42dbc3b42c4728f917484baf3f42cc4c95207ac","c271193e426325d9acab2f99997bb9f5f2dff850ec8c7c011c5abafe5af83b5f","872f84bb585f04692cc2ffc5e3d26aaa4a7843fc2681d08549b9fa94d9e43101","3b0080fb13cb1557bb7645e32dd8375d766292ad414309e8b304d3cafc7abe23","59859bcb84574c0f1bd8a04251054fb54f2e2d2718f1668a148e7e2f48c4980d","6bd674ede88a0f285940a4a26da44a3951bd879b722830d30e52f6eaf4b401b5","e66f26a75bd5a23640087e17bfd965bf5e9f7d2983590bc5bf32c500db8cf9fd","6d09838b65c3c780513878793fc394ae29b8595d9e4729246d14ce69abc71140","eb09cf44043f7d6e0208dca6f0555207015e91fff5ff77b9c21d63672f7d68d5","bbf6f246061b92bb84241897eebfcdb9ce28444ab6acbc32c425388dd27c1011","8c5990f1b988eb2c72fc421763db2dd9c27357a9ee145e0b72160e0a0f26eb60","914bd301c653aef4bd821a5f771145c70fdf3f1a10f8d3335e618c5cb2775973","89121c1bf2990f5219bfd802a3e7fc557de447c62058d6af68d6b6348d64499a","5c5d901a999dfe64746ef4244618ae0628ac8afdb07975e3d5ed66e33c767ed0","85d08536e6cd9787f82261674e7d566421a84d286679db1503432a6ccf9e9625","202f8582ee3cd89e06c4a17d8aabb925ff8550370559c771d1cc3ec3934071c2","1c822ea96bdb6c0c6dd63e0e2c4cb8cdbce23edb1017f01bdde3de0c7b9e1b80","0ccf747baf3b50b93f34309901e5f13c618ae31d4b947caae6993916608d073e","c1bf9e63d008be6af399fab53220c149b7cbae07f7912658335d0e6346a1f49e","3486bead51e2b01d02d0096fbab6c5e1917d3e02c1ef01c72282796d4846bb3d","d769f407e1a5b278e3fc0332ba83f7bf130cedb2eb37d8f97b2278cd4f5321f7",{"version":"a41d62ffafe74afe24c19a537b654b5af08d7808a12b54d304cc35abf3d67c1c","signature":"e67f8f2eec9ea89cf39848c7a64d2984f3b21e3deb0e544780e211ba36d7403c"},{"version":"61d95c61de6a41dcea78e8f1b2d46f529fe70724e8f8d65d66edf604abdece4d","signature":"70346ce61d573ed55fddc2629049102dc3acec118f6245477220d0624575d5b3"},"c2489c80994d62e5b51370a6f02f537db4c37af5f914fcb5b2755b81f1906cae","47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e",{"version":"7fd4c58458fe386b998da1e80c87403d7f2754abaa5acfedf0bee44b13a00a84","signature":"23c240b19cccb220e418b5b7630d1649bda4f1eb415c7c614920d04f17c8ba20"},{"version":"3753963882fb48af2481c42f06ce696ccf7baa64f56189e8f8ab5fedcf631bc6","signature":"42209a6cae6d2f700a5b4c71e4b778295417e6a85754892ec6d9bc2f542fbc3d"},{"version":"db487f0af54ccaae00506ffe5bc0768b9785e8b209421342844acb66ddfccaba","signature":"c2354163d890b2a86ef554eb417b44d6fd0e1290a6e7ba34a58bb2b9532dacf4"},{"version":"4d8f675423da4cba55265bb4da7539c3ca6ccd370e4b0b68a06f1b6b07945b51","signature":"35470d43db8b1c210560d55739169bcbed21be6a25c5f635b570cae3aa123427"},{"version":"44cc68fb2cb86e57525891e0d5375057b8c5717278af96c6ceda51b951729c47","signature":"ac988f3ef2d98994aae012a297f78874eefacb6f3462693f8b54beaf6c339a08"},{"version":"a9511637d88a83cd34dfad6a3fd3123a1eca8e7d6ee92aea820d0d91d7d6492a","signature":"a3d78d476b3b9ef05e3f797eeb9dbce67b8112898536387f27fd7c272a224efd"},"5b3cd03ae354ea96eff1f74d7c410fe4852e6382227e8b0ecf87ab5e3a5bbcd4","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419",{"version":"056097110efd16869ec118cedb44ecbac9a019576eee808d61304ca6d5cb2cbe","affectsGlobalScope":true},"f51b4042a3ac86f1f707500a9768f88d0b0c1fc3f3e45a73333283dea720cdc6",{"version":"6fb8358e10ed92a7f515b7d79da3904c955a3ffd4e14aa9df6f0ea113041f1cf","affectsGlobalScope":true},"45c831238c6dac21c72da5f335747736a56a3847192bf03c84b958a7e9ec93e2","132ca47da601c60141dd6f10bd08c70d0620177e5638439df2464ec3945b6d98",{"version":"8f387a4ea108cefa8842d015ca988cf11b9a240f0d3eee3cf15d95e7da83f0cd","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb","fe885b109792eab727cb8572d7bb549d4da51737e9edf06fb7b5724741047dd1","2375ed4b439215aa3b6d0c6fd175c78a4384b30cb43cbadaecbf0a18954c98cb","7693b90b3075deaccafd5efb467bf9f2b747a3075be888652ef73e64396d8628","a9d543f20fbb7b7e3eb4cae702168c111495b8ccf0554b52423d9828a5618da8","562b73833a6056449ace10691103b3cba32d40731d43e5b78edb9072fda27d50",{"version":"2c71199d1fc83bf17636ad5bf63a945633406b7b94887612bba4ef027c662b3e","affectsGlobalScope":true},"5f20d20b7607174caf1a6da9141aeb9f2142159ae2410ca30c7a0fccd1d19c99",{"version":"464762c6213566d072f1ced5e8e9a954785ec5e53883b7397198abb5ef5b8f71","affectsGlobalScope":true},"6387920dc3e18927335b086deec75bf8e50f879a5e273d32ee7bb7a55ba50572","9bba37424094688c4663c177a1379b229f919b8912889a472f32fdc5f08ddb4d","29a4be13b3a30d3e66667b75c58ec61fb2df8fa0422534fdee3cfb30c5dbf450","1f972e38400a2a7e97b3627f4e52d36b7b8d3d62e16bd4c692d247c8683bae8b","bf268a0aea37ad4ae3b7a9b58559190b6fc01ea16a31e35cd05817a0a60f895a","f238f3c4409b45a3fda3de9723a7ff8ec62dfd7f47eb09e67cf0aa6bda78780d",{"version":"d7dad6db394a3d9f7b49755e4b610fbf8ed6eb0c9810ae5f1a119f6b5d76de45","affectsGlobalScope":true},"95ed02bacb4502c985b69742ec82a4576d4ff4a6620ecc91593f611d502ae546","bf755525c4e6f85a970b98c4755d98e8aa1b6dbd83a5d8fcc57d3d497351b936","dd67d2b5e4e8a182a38de8e69fb736945eaa4588e0909c14e01a14bd3cc1fd1e",{"version":"28084e15b63e6211769db2fe646d8bc5c4c6776321e0deffe2d12eefd52cb6b9","affectsGlobalScope":true},{"version":"aed37dabf86c99d6c8508700576ecede86688397bc12523541858705a0c737c2","affectsGlobalScope":true},"cc6ef5733d4ea6d2e06310a32dffd2c16418b467c5033d49cecc4f3a25de7497","94768454c3348b6ebe48e45fbad8c92e2bb7af4a35243edbe2b90823d0bd7f9a","0be79b3ff0f16b6c2f9bc8c4cc7097ea417d8d67f8267f7e1eec8e32b548c2ff","1c61ffa3a71b77363b30d19832c269ef62fba787f5610cac7254728d3b69ab2e","84da3c28344e621fd1d591f2c09e9595292d2b70018da28a553268ac122597d4","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","6e191fea1db6e9e4fa828259cf489e820ec9170effff57fb081a2f3295db4722","aed943465fbce1efe49ee16b5ea409050f15cd8eaf116f6fadb64ef0772e7d95","70d08483a67bf7050dbedace398ef3fee9f436fcd60517c97c4c1e22e3c6f3e8","c40fdf7b2e18df49ce0568e37f0292c12807a0748be79e272745e7216bed2606",{"version":"e933de8143e1d12dd51d89b398760fd5a9081896be366dad88a922d0b29f3c69","affectsGlobalScope":true},"4e228e78c1e9b0a75c70588d59288f63a6258e8b1fe4a67b0c53fe03461421d9","b38d55d08708c2410a3039687db70b4a5bfa69fc4845617c313b5a10d9c5c637","205d50c24359ead003dc537b9b65d2a64208dfdffe368f403cf9e0357831db9e","1265fddcd0c68be9d2a3b29805d0280484c961264dd95e0b675f7bd91f777e78",{"version":"a05e2d784c9be7051c4ac87a407c66d2106e23490c18c038bbd0712bde7602fd","affectsGlobalScope":true},{"version":"df90b9d0e9980762da8daf8adf6ffa0c853e76bfd269c377be0d07a9ad87acd2","affectsGlobalScope":true},"cf434b5c04792f62d6f4bdd5e2c8673f36e638e910333c172614d5def9b17f98","1d65d4798df9c2df008884035c41d3e67731f29db5ecb64cd7378797c7c53a2f","1cab96b37d5614aa6f22874894170ffd7fe886a98887be74daad1f7ef2d95c5b","c6c01ea1c42508edf11a36d13b70f6e35774f74355ba5d358354d4a77cc67ea1","867f95abf1df444aab146b19847391fc2f922a55f6a970a27ed8226766cee29f",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"b0297b09e607bec9698cac7cf55463d6731406efb1161ee4d448293b47397c84","f5daecf7f124d12e92b3f640dabe6fe5f0444bb4d471fc2ee1811a5d8ba17981","cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e",{"version":"540b3b26c1ae91803410a8f0b98d953cdd7669a18b1dd1155e0e30bc739515ad","signature":"4d9e1fb19239495a2dfb015df4acfc8051120675ab6255856763111581769c39"},{"version":"f1933b0cba3cf15dc40386ac6304c9693303ee4eb9a52b9f832e4de84b48620c","signature":"e68f5cd72d9672a5b80f1acbf71351ceb9f628dbac1ac5f22abdbad631e87ba3"},{"version":"e33d2a1e16fd413a4f1843152279ffb307d81643592d82038c6e29d51df33b6b","signature":"6d63ad5a70106679937e5798445758d23dfabf23413b73ad3735f459d8600b42"},{"version":"4ea492ec612c21581c524ec2ba034e718b2448cf214fb0db57759a30b4f34141","signature":"e14da4f2c70bde82fb218a90577c7728d337bb965858f9ef5a429c3ee4829280"},"8a02143a323c05741ec49533d54c4928dbf6618d297d855f12114304c3b69846",{"version":"38864b010ad6618f832e6be170541066f0c1d86a386feefa6985b25e46baa8af","signature":"70b653888e6f1cc77f97245ae7dfee6e020aa516a32d0997e228d9813eaa3016"},{"version":"af1fee7f3df738dea5dfb667f5f009504f378ad77aab471bfbafcd1bf7d467d2","signature":"f602eaff3ac2de4f88d05a10fe29d0c85cab265618f5e7397922539292234bd1"},{"version":"8a453b9ad8e985c6cc1a8e4ff89ea1356a5dad87a2e6091b3d0a9a1a6b449bbc","signature":"29e38db8aac005ea0a3f266d18cc058eb9e892c5b5d44817fded17d6a27e52d7"},{"version":"49fe4e7ce7b27ef03f9c09910b4430f5f7fb7a1410abe1ed7b7479fef9b01dd2","signature":"6ae98506fe6a7e38687fc4f7c7e5e42a7d1013026dbe0dd3f798e4c32cb15700"},{"version":"db4759aae5046c4186bc38d8591f3f78406a099c4f215f126ef53932af091e98","signature":"f93d18e3c5a411730d71095b8a8996810931ce7551d65b58e797beddd12c2fa2"},{"version":"ec561ed72fcec82eb0cfff2b42305cf6ab194a691ec1d974265117d6b3160fd9","signature":"5539cf4b0779aa11eef48bdc6a9850b77c42d6628e88034175a4268d0272595d"},"0e36ae1e377c0b21417337a4ef01c3d73881f78483936cc6b1612fa2bd3d260e","db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","625e5d5e9e25017d53e65c62ff944d812d48ec1bbaaf7395c8f8cdf6c9218061","d9eb71e7c70837921557ecc76865043734dac2cd1bf1d3a7b24879de47befc89","30a1b56068b3820c91a055425a6af2294f8ef2bb10a59dcda413f6437093620d","8e64a4268cab5c9790d4895275ffbe654d75b877601ecb0ffadb66f95132b3bd","22671c0bd8afbe9238285b94a9f6bf447838f290ff054850145989d347099192","00357bb70a10782936bbfdf7c87ad632e5c2694b6714224ea0995299db1885ed","b7f9c8b05e3a56b80f6a8362b3f084ea887d3f857bc885a5f1dbc03150b981dd","1329c41c13694c2d89f4576fc3d0f04e07f311a682bf958bde5b79e6c76c0137","3150ee51540bdf0d4e0ccb05de6f905962dc3505bd28b7385c6924f7d9eeba11","2302818e3723d16f85c3d75de67247a1bacc23f5399b8235fde025737a6cc5b8","a13e414841a16a10e8637397f2551c52e1025278f4d8d2397824546dc272441b","98e00fba67d4b527de2929778f96c7f9453fbbb8c50968ff096dddd29057450b","b8d57d43415dc08b757f7bdfa382b596bf3627565dcb11bc325956f351abc813","481317b3d14426c2145b2a9a368f27278b20a76115bcc58ac5eb8649791e66b0","e5fe42c833993ca99b2e7628fd90bc3c0d30c9447a925d332ab90a53dff5743a","e264129e63c4e4c13586d8e166ee80c90a7da663b3d3e2a40f0fcaf89e267685","22082ac39501b626f8b4322d6bd6fb0424de438777b141f663286cf8bd048398","7efab7f15be1969d9e92bab327ec311d0bf7fc972f793cc8ca25ee95d7b720ad","bd53743631e1afc700defefceea03658ce7fa4a5a0a42622daed233b8c8d8473","16a510a8408f5a845b3e5dbe17a731b9e6dfdcd416410c36f8afcd8cf60c57a4","85cc7ba47f064d73b53d98e5384dad6e88809b8c0ecbf155846203d8736e99bb","be5dfb4c5c1bdfb0d853370c0de9a995cb39eef0f277d645a7f43caaea423d18","58902668adae2e5eb67efbccb4048afa02308fa684f1a4e4c7d47668ecf58c1b","2e14bcdfb0fd8cf0f6397a641018bb3d1409870af299707126302bd264cb3d42","11206290b4d52fa4a2ce697aef740ebb4514c58ac73a7c792e5b241b24d03c1b","837acd3f64bcd556da76827c292e82ad812170d880a490a7deb3f2de0ffa7c9a","2e94503b5076c161c7aac50b99bc5244ffc4cc3c4b699d079ce24b86208ebd18","17937316a2f7f362dd6375251a9ce9e4960cfdc0aa7ba6cbd00656f7ab92334b","2a878850cefd50fcb86b1164005cc48294edf62fc3bb100301378a448e3d2112","4e0528cf15ca199d8b363895c38e4f7b45ccd79d34f84861e8800cbd41eb2d37","eaf9ff519bd303bff935b04d60d1269708fd2b5ce41b3d1d8ced373e2c02b76d","71cad090e94ca13ef78b9f4275159a76fb950ad33b47ea24f4874d1df5ad3dfa","6e5f5cee603d67ee1ba6120815497909b73399842254fc1e77a0d5cdc51d8c9c","f6404e7837b96da3ea4d38c4f1a3812c96c9dcdf264e93d5bdb199f983a3ef4b","37ac25883371c238e6c4575498d3517a25433382ed77f5181af60f9fa06eb2c4","1d5b8dfb36cd7234b297aeb66435f37ddb7579b1ef5e94a13e195d51b09c92cd","7a18dff83add08d87a614e3c28b07e919def3d72928dc846d557be176fc9e3a5","ecdfa1a2faf120fe24d456616945fee5c950b55ca60e3936592524b737a0623a","90e20fced750a875bb86a6b781a43593647f11bbb979511a4d7051d2d21f90db","7d03f9b34192444d1ae3d2dce4f88a126e51fb8e0cb0ce5a92019ff6212dc1ca","45f80f549a22887e9f85ad3c6a24a382d1e825c8e7fa72a2d1e7c53e0c4e623f","5cab8fa167ee711e4dfcd22ed632c60be36bd49dc6eea8cfdd3613c59d00c43d",{"version":"a5b7d9811cb310f8abaebedbd80023cea0c9b4011984ca0c58a52f25fee67495","affectsGlobalScope":true},"39a3fc61a65aee8c90cd81bb2c9b508be6c5cc745cd40eaed95954a07c11bb82","254a9b57801e4f45ef7576236e5984e4abd95a03ea06b2018801ae3200e1617e","54be1e9fa1341e79190896d0b79279b681714d79126b7e012777e328385cacb6","2766dee26ea113e9b491b7842cb44df57c4d79b17057b42607e09fc174bd411d",{"version":"b4610d904ab939109aa8bcee6f795de8da780b6b4a4d8ff2ff9d2e3b699f55b7","affectsGlobalScope":true},{"version":"8b20e6ed022d1615533cacba5ff84521a86e86e98ef79318415235d64858a0e9","affectsGlobalScope":true},{"version":"37b859e0b3e9c67252710e6135a3e80daa5ccc5d9eaadd7728ede7ccde2d1263","affectsGlobalScope":true},"cb4047ce260c2f4585b2d592d04a1d9a9c2a1ba32679a688523ec314a977989a","0511c61c22d677da1b6bab4d3844aead1d7e27028d2f0ed1ed315e0860ed5357","1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","2808645b990069e5f8b5ff14c9f1e6077eb642583c3f7854012d60757f23c70e",{"version":"dddf73b8837577b09071406b2a14f887ae998875243e69d916dd661695eebe3b","signature":"9120e8d970767154e13caaaf9d25cf9d7eb7a938b56273c8adae67a6efe14589"},{"version":"9b1c54c3e7d7b01d706f5d8a80417ee1c4c159c90240aa08c053070c878c5d22","signature":"1881c959750f8fb17b161f679c890c0d6ae9ca6e2618d6514914d2ed8efda49b"},"3cde9abf4c12e5d7a71f67947a727798904eb6a4573f4209ef122ec6599ed4dc",{"version":"cc778883d46c706f69b0e955e9b9581bb8dc2281c21315e11535b023b73846e4","signature":"cba9d94be569e5c2d77eed0f219080d48c423a80e959b2901f79272a824e88a8"},"013fa7eeef4edbf969514f08b0fa5b2a72ef2a14c6954593570c8b9c2db49069",{"version":"c1b313a6e9e8df3834cec0c5434e30e70834ccaf3087360b0aa3a133a09719ad","signature":"3dd4f4b2f51027842057954f7fb6a0d40ad803ad00e3035b8f3300f9a6d532c0"},{"version":"9879baf99feb62901670e2a5622be2a6e78d9e97dc988afb5c97df06a81bd91a","signature":"715aac06e3dd87c1ab69c6927063a73d76d81ba18f61fc02f18a92b55ab71420"},{"version":"fbd7c313020056ea822f38b5aa5adfd5b4bf48a3863f093a6a5e21eb01ed874c","signature":"31bd8147ca9f03567f2173640c3ae4e2fbba616bcd8076bdea788b29e36b25c5"},{"version":"afe4bfcb4ed96de45213fcbef23aa581467c30924975cfaddf6f5ad631e2e6a1","signature":"278fba83b5068de954ecefbce70b336ec72dd60a2f5cfa53f4141db3884739ee"},"c38a7fc9bee27abcf388e330e5f977b218e671adbcf11d4eeae14c488bcc90c5",{"version":"b48f404b3be62f2823bf17ee7cdfdacf8ec8d678e135a08cdbd3c8068bf48ea6","signature":"1c9e146dd653ebe5018df920068c4e7712c521842d19888b61916c4e90762e52"},{"version":"598792ff4850f536d0aaf0747eff9aab50eea507b2056c00c133c4333e31fab8","signature":"e5a4259cd7bd03e562679ba0a34ab052081574871c8338371e0d755eff373bc2"},{"version":"b2483b39f15b05fb553320488a999c99fc8638b1030303cd43fdeb3032da62b0","signature":"c64cf850af2a1dbfbd55c8059aa089ed99df180cd08f1f6daf6aead12ec6848b"},{"version":"1209182632f6adc6631c30826467416e27b8126048d1669d824d4ce5e429652b","signature":"6e6242e409cc10959168141d9201eda7642f6148edd5ebe2b60071ebbf03e929"},"44fe4ae468316a1862906044b3e3388ac3c379f3b92b381c2d38c449f717ee01",{"version":"60f3f4d0e836d7e5c16394e0588afe88460320ad3c45926827faff91d6ff76b6","signature":"9f7a66031af06e1d02e23bdaece7b44fed28e238e52a1412be3b3ed61048be24"},{"version":"0277f8b473d435da1ed07c675a05a566f941c0f8e1fc08d8f0a99b28ba712d84","signature":"579c33006ec49b7e828f010ad5278a80d3449fcd1b547f8349f7e896255bcaee"},{"version":"90c03aa27900ec7e3bbb66775611bdef2842b9324d15d3521745eac282565ccf","signature":"cf8fe1192459fdf6376ed1a4035fbfa2242a817ab8b79ab1a52a55438cb93fd8"},{"version":"14a273b378c668328d85cbdb4f3e3e7632c23bdb2c75eaa3b28f9c42712d5f05","signature":"06bdf2d38dba9964a919c8e80cd4cc524302aeb1c80fae3313405e64d8f029bc"},{"version":"6e773e81cc8626df887ab82015b04da1d3100ac1cda1f4a14b3b66febc8a1537","signature":"fe8f0ab94c166df47f2a0e449ff3f80eed76f0536de3490b435e644975fa12aa"},{"version":"6df0354536ac22fe4e39e045d3a43eef97b8540c563da9b6876cedb71fefea42","signature":"0a352bca1b4413a920d5eb01327ee0c7aae5530480c66eddb3718151c86ebdee"},{"version":"6e2d9f62a3d1d8e04c7e77edd0fec3b243599ee12239953a1f0e34eba3013153","signature":"0b56cbdea88829a9be7626915edd95ba4a7ffca7e1435c43f02e0e3d32c57d5f"},{"version":"cfb41272181fdca961512ba9cb5b01beb16178be261fd31a04ec9badb4e63ae4","signature":"a45796a1561942a364d575796a3af56569dd83405ca69849a8fff2db129e11c2"},{"version":"77ccb1d91053a763c2ff6eb5d7e08467c2fc2faff5fb1ef3926e2faab4a57509","signature":"df0f91f85673f6278d064d7704a230232bda33975f2ea224d432f626796cfa5f"},{"version":"85a7ab78cbde690cf3f059ea487b41a6240252599e4c20daa0013e91bf9c3dbb","signature":"186f84ba6ba95237ec9279563d7ed324c6bcbe6fdc384c8a5d5a95e16a4cf39f"},{"version":"fc5b47986a28afda8221854e26b264476868c3a3d47369f5c916e37f8bb261d6","signature":"7fb002a78e24b6447f57d132c52692c26783126494120fc5efde4d4a1c97e776"},{"version":"c2e0b68ca1424437900ada2d7b15f4a278842b3acba2b17db573bf3cff5ed1c2","signature":"9bd9ee55f5820edc7a0399b59f2341fdf30a41f6b513c79bef2466e96e674ef5"},{"version":"22f817a85a251496bdae86c52a3528e473c4e1aa2adfa117883f5f87ec2633e5","signature":"7fb1af1e761be4cd97c9d69c4bbb0a726ed557b850c910f9cf4e49eb70831c30"},{"version":"018df0695bd197a7e53b71ce661ebb3bef8bfaeccca14c173eac286e30805697","signature":"e21df598205a1cfd4d9c0cfb335b6e88dde65e4baf8a959003179de34f94b35c"},{"version":"300a3e6e6efc5465c65af87348e6c38eea30945281a75801ec320cd038a0125b","signature":"66c9315901d7b0de54d74680d785f5d8661acf1652a4b2733c863e00d18fe9a9"},{"version":"66879c56c6626010d4ad07b2c6fe0539e695533f057e6ad15d6d8c31ff8e61f8","signature":"f9de3f8c6536bd379aab3da6962a5cd2697e02eacae96faad2f52680ed5ce6b9"},{"version":"b587c8943bbe746f174e87a814db9e86ee71f8fc26c6a79568663961ec983856","signature":"fb658d8f1222a700228350e1cab05675f2e5169ca46283c6676df79af96199d8"},{"version":"a6bc6977acdeb89a6b6c1f6156b03cea06836ef81bec07b3ba5018ee307d2e6e","signature":"300bae485adba307c1e8444a2e201a8257f02a87ea284e4cce4ef2cfa227b1a5"},{"version":"75264a5334f53560a066038e8cc84a5f33c2d53a49b89aee4c6dd4801d986426","signature":"e7cddaf72096a704370b4aad2ea0d25fc6cd03e044da5de907c981dc0e972cdc"},{"version":"287b57f527ba1ca8d8ef7eff8386bc17ead47f540aeddbc68ada0f1554ad22da","signature":"39ebc9d50d61ea4cc5e327aa69666e06c397c6f137c2e25f5817d80be9f2381e"},{"version":"d732d68451cbcd2064e35ebf2c005f200c6c2e17b9308b7db2a25c8e73709573","signature":"ba1eb2e3fe335c2da1b60b74406dcd06505c5ade36e7062dfcb981692e50dd73"},{"version":"29adbe581e9aacddde6ac536a2cd768232260a50a1c727ebbddd7ba7b10e0546","signature":"1cac276435b098b37401dfd4b00d80b2c79ea2ca48c188b92b8fed027f96ef20"},"38f19e920e7f0babb44119ed394e1916a16cf04b17b6724e07e1497cd5ea1445","42c686ce08bf5576ed178f4a6a62d1b580d941334fb53bdff7054e0980f2dc75",{"version":"0f7c895b79a2df989d3188eee9465f95cb96188171c2222d253600747417f489","signature":"765d56ac5e4db3b405870c3f5e777c11c792937fcb85431f1a4ab4805cc51e01"},{"version":"4bbcdfbbede7abeb592bcf2c720d2e962cb1210895c9e3a9b9941df02ec949d0","signature":"ca11fadb6ebd79cd4a5c7d158e0c3d8a845da7f447005db1b6d25d85db184fa2"},{"version":"34b45b81af39b12e997e9476fbd35a04166a9d2834ba7e67cd60fc4ef25f1f51","signature":"d8b3afd6b6cae40855518a681c6ec23aa961f967080e29bcdf48d6507c5edbfd"},{"version":"69563020186579e39b48d246a8206682bf3c20f4c4cb4fad63041b66752ad6dc","signature":"c5ea3954dd984eaed8368895dcc2100ca444184adb359e71ca2a916e095b9ee5"},"369076c4bb542ae083a7ff583d5b43628b50a7ce28e0dc038d86e0e98c715ab4",{"version":"9e85a1607479f54c89836c45863b389abec6bbdab49c5c3bf740f3aedc1caf59","signature":"74c6ab10dcceb1ed8893b28e12f091b372e6a5c4528ddd4dacf7bf3504378afc"},{"version":"2624a2bed9c35bff6744dced71ae6a4775e16bb4584b728f2cb5dc1f76ce5940","signature":"edaac0422c6baf94cbdd1dce80b01ae67da6f622bb770a79542e6e3d3c36da21"},"f77d46ee52fbe94069be9a6b7d7345144d9b64fceb68c4fd27578ba333b66b6a","65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0",{"version":"f07075d6de8d9c0b727374847c29d46b78d72e310a338ba7f8ecc5aec602cf1a","signature":"0a5a58de3054ac78378cee30afae76c8dc3bf0064c4590a817a093ba6833bc95"},{"version":"50f749a1ac3151be7b2e22ea017f61f1de1fc15bbe96bb7f0211c275b717f0b9","signature":"a041381294c08cf161f563d86bced6989b6064c65bb9e7a3af9b5a5515c60ec5"},"8de50542d92f9ac659c30ead0a97e9c107dd3404a3b4fd4bf3504589a026221a","4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35",{"version":"47acbb7878453ae2e2934d85a43201c3f3ff4b539bfb6d5fd0298eb41eedbf83","signature":"9d48747990e73511a84599381708ef910eeb91a889fe47650e094b9b9f0af266"},"c3a905a7fa93ca648349e934fb19356cf7b40e48d65658de3e0c77d67696fd40","a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5",{"version":"f7d774055e46360fc03377bbfbe540dd57a48d299d84c3d132dd3a376d01dcfa","signature":"114a8a84902a58d31b5cd6c792aa89933c3f7230f2b22f94c845e8c9b1d51418"},{"version":"98144b1e5a0b279230ba25fbb88e9ebe8e169f226dbbe9c06c4e0ce8927bb111","signature":"a43eaa7023870b1e11e288698068ca1d412e0dd7e2b34286a0bfd6126da902ba"},{"version":"bd44f7d5d5cd93f6acc5caf16e723ee877b7abd01a2065576b965e85892588b4","signature":"e1e96a29876115e11b80188d25e36746b4aae8e41300ee6147eebf17f20c4134"},{"version":"9c1f3d0d8c5aba3756d1c7b79629f118195e5b0b9543b98d507cfe54c0871bcf","signature":"2caa602636101b9a1af2800588a3d705848028a6a8f91c4e782313b29dd0ff9d"},{"version":"db4788278929688b690fae746766b2194a2bf3c969324c110491bc4847942d16","signature":"edaac0422c6baf94cbdd1dce80b01ae67da6f622bb770a79542e6e3d3c36da21"},{"version":"f1c8e621c93c42b4d4d459ea60877702ead2b216ce0d106e1f723415dc9b6457","signature":"e1e96a29876115e11b80188d25e36746b4aae8e41300ee6147eebf17f20c4134"},{"version":"fa4701a4440ba1002faa53f925eeb9cdf66ac1f04a18ba8755ae71ada074257b","signature":"e1e96a29876115e11b80188d25e36746b4aae8e41300ee6147eebf17f20c4134"},{"version":"d14fc8909feddf4cf051d369c4b882e83a936d255e9ebf5db4b1c1e3de589c33","signature":"a4159292a010ad412030efa80209bea2cf43c5d2b82f30f70d82975a9d8ae4d7"},{"version":"54e363fba48df0856f36b4d1ef9924c2c22a0e6ad9ed3850e4aec2d64ab2cf7c","signature":"e6cf361881c6bafc50afd8d5551fe9c335437098b65908d93a4c54baa2a5a909"},{"version":"4b34bb1595e9c84c75604108d2abf08bde83f1ea9412ebe1844179dcfcdf9f53","signature":"1a4cbe58e89a96377b11daee1fbc52865c93107625d952282b25f3bc9e3495a0"},{"version":"412e184d924f9678bf5674065c5cd3cfe323a70b443021b30955329b5151f8d9","signature":"c5f3c624918ed0c0f8b475479d6ca1650691f62f7e22eac42d599e4c22ec751b"},{"version":"b2fccd3c42649d268ce45f8118a1a9a35f137fba687caa6136a6d6e8fd015461","signature":"ee83af8e8fde4becdebff8a4e1b5bc0d792a025032025c43245e70070ecdb061"},{"version":"baa3a78dd9db5212e4c87619d6568881cf0c5662d283edbd65da7013aa7b0fe3","signature":"70637d96008b841b6063df5ecaa74dcc63a1599c406be7774c4c55c118dd9001"},{"version":"810a50e0ce3a8e6f8e5f27b168a49a995adcddbb389b638d0a745c734f2a32b5","signature":"b3873137ca1293f3d29d043c972cfb298f323262de01ad941bdc2e6d7a85c4ca"},{"version":"81e18f46fd269d8e04393018f43e906095045d7238b35b57dcaa590e98da2fb6","signature":"0658dbb88df0263424ed2a12c8e5de1874e7e2e4a671d2f1b52c37165c255900"},{"version":"3594a01d83b54851e1d6a3445d37a6039331e1c01a695514b2d333584e610a58","signature":"96de69995a27a81fb6999e3c49b1a0acdf44fecebcbdf32443e2f945e514b9c4"},{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true},"ee7d8894904b465b072be0d2e4b45cf6b887cdba16a467645c4e200982ece7ea","f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","044851e9685b94a0c56bfd7f499b8be4c281e7dc024d1a715a5f9a4598bbf337","1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","fefa1d4c62ddb09c78d9f46e498a186e72b5e7aeb37093aa6b2c321b9d6ecd14","a7ca2a9e61286d74bc37fe64e5dcd7da04607f7f5432f7c651b47b573fc76cef","96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","b8442e9db28157344d1bc5d8a5a256f1692de213f0c0ddeb84359834015a008c","458111fc89d11d2151277c822dfdc1a28fa5b6b2493cf942e37d4cd0a6ee5f22","da2b6356b84a40111aaecb18304ea4e4fcb43d70efb1c13ca7d7a906445ee0d3","187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","febf0b2de54781102b00f61653b21377390a048fbf5262718c91860d11ff34a6","6f294731b495c65ecf46a5694f0082954b961cf05463bea823f8014098eaffa0","0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","68a0d0c508e1b6d8d23a519a8a0a3303dc5baa4849ca049f21e5bad41945e3fc","3c92b6dfd43cc1c2485d9eba5ff0b74a19bb8725b692773ef1d66dac48cda4bd","b03afe4bec768ae333582915146f48b161e567a81b5ebc31c4d78af089770ac9","df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd",{"version":"fa83bd37356b2d3556093f4855d1405e044db35c7635574fa46ac9581d13981e","affectsGlobalScope":true},"916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","c555dd691dd05955e99cd93dd99c685a65e5287813ccb5e6bfde951183248e26",{"version":"fd624f7d7b264922476685870f08c5e1c6d6a0f05dee2429a9747b41f6b699d4","affectsGlobalScope":true},"7233cac35711f43b7493061d2fe7636deb6d14f8cb58e4b3ff248be46f0b543d","fb06ccd456d1def0a27b715f0c5fa79ff8caef4b7290b896ec0078d694845921",{"version":"4091b46d8826ef9e5963d91994fbc3f4baf76773599bbda2b3dd8ec69d3452da","affectsGlobalScope":true},"3cfb0cb51cc2c2e1b313d7c4df04dbf7e5bda0a133c6b309bf6af77cf614b971","4ef960df4f672e93b479f88211ed8b5cfa8a598b97aafa3396cacdc3341e3504","cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","5d30d04a14ed8527ac5d654dc345a4db11b593334c11a65efb6e4facc5484a0e"],"options":{"esModuleInterop":true,"jsx":1,"jsxImportSource":"@emotion/react","module":99,"skipLibCheck":true,"strict":false,"target":1},"fileIdsList":[[48,49,51,52,54,57,61,62,65,66,71,74,75,76,77,78,80,81,82,85,88,90,91],[52,91],[51,91],[51,53,54,55,56,58,91],[51,53,57,91],[58,91],[51,55,57,91],[48,52,91],[91],[91,228],[91,296,298],[91,295,296,297],[78,91],[91,303,305,306,307,308,309,310,311,312,313,314,315],[91,303,304,306,307,308,309,310,311,312,313,314,315],[91,304,305,306,307,308,309,310,311,312,313,314,315],[91,303,304,305,307,308,309,310,311,312,313,314,315],[91,303,304,305,306,308,309,310,311,312,313,314,315],[91,303,304,305,306,307,309,310,311,312,313,314,315],[91,303,304,305,306,307,308,310,311,312,313,314,315],[91,303,304,305,306,307,308,309,311,312,313,314,315],[91,303,304,305,306,307,308,309,310,312,313,314,315],[91,303,304,305,306,307,308,309,310,311,313,314,315],[91,303,304,305,306,307,308,309,310,311,312,314,315],[91,303,304,305,306,307,308,309,310,311,312,313,315],[91,303,304,305,306,307,308,309,310,311,312,313,314],[91,102],[91,105],[91,106,111,138],[91,107,118,119,126,135,146],[91,107,108,118,126],[91,109,147],[91,110,111,119,127],[91,111,135,143],[91,112,114,118,126],[91,113],[91,114,115],[91,118],[91,117,118],[91,105,118],[91,118,119,120,135,146],[91,118,119,120,135],[91,118,121,126,135,146],[91,118,119,121,122,126,135,143,146],[91,121,123,135,143,146],[91,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153],[91,118,124],[91,125,146,151],[91,114,118,126,135],[91,127],[91,128],[91,105,129],[91,130,145,151],[91,131],[91,132],[91,118,133],[91,133,134,147,149],[91,106,118,135,136,137],[91,106,135,137],[91,135,136],[91,138],[91,139],[91,118,141,142],[91,141,142],[91,111,126,135,143],[91,144],[91,126,145],[91,106,121,132,146],[91,111,147],[91,135,148],[91,149],[91,150],[91,106,111,118,120,129,135,146,149,151],[91,135,152],[51,91,301,319],[47,48,49,50,91],[72,91],[73,91],[91,121,135,154],[91,325,364],[91,325,349,364],[91,364],[91,325],[91,325,350,364],[91,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363],[91,350,364],[91,365],[78,86,91],[78,86,87,91],[91,270],[91,170,212,214],[91,179],[91,169,185],[91,169,185,186],[91,169],[51,91,146,154],[51,91,185,217],[51,91,185],[91,219,220],[51,91,177,221],[91,215],[51,91,174,177],[51,91,177],[91,121,154,177,178],[91,121,154,179,214],[91,121,135,154,178,179,183],[91,121,132,146,154,170,171,173,178,179,181,183,184,185,188,195,196,198,200,201,203,205,212,214,215],[91,169,170,171,212,213],[91,214],[91,132,146,154,170,178,179,181,184,194,199,200,202,206,208,209,214],[91,121,146,154,183,205,214],[91,172,177,212],[91,121,132,146,154,170,173,177,178,181,183,184,187,188,194,195,196,198,199,201,202,205,206,207,214],[91,121,154,183,208,210],[91,121,154],[51,91,121,132,154,171,173,179,183,188,200,212,215],[91,121,132,146,154,178,182],[91,204],[91,154,188],[91,132,154,170,178,181,183,215],[91,121,154,188,197],[91,121,154,178,198],[91,194],[91,191],[91,189,190,194,214],[91,189,190,214],[91,182,191,192,193,214],[51,91,172,173,177,212],[51,91,132,146,154,177,215,216,218,221],[91,178,181,185],[91,132,154],[91,180],[51,91,121,132,154,174,175,176,212,215,219],[91,274],[91,277],[91,94],[91,261],[91,155],[91,221],[51,91,121,132,154,161,177,179,211,215],[51,63,91],[51,64,91],[51,67,68,91],[68,69,91],[70,91],[78,81,89,91],[78,81,91],[78,80,91],[84,91],[83,91],[78,79,91],[59,91,100],[51,59,91,100,157,159],[51,59,91],[59,91],[54,59,91],[51,59,91,161],[51,59,91,162,164,165],[59,91,92,156],[51,59,91,157,158,159,165,168,222,232,234,235,236,237,239,240,241,242,243],[59,91,233,238],[51,59,91,242,243],[59,91,238],[51,59,91,156,157,232,245],[51,59,91,164,222,235],[59,91,158],[59,91,95],[57,59,91],[51,59,91,156,260,262,263,264],[51,59,91,165,239,240,250,251],[51,59,91,92,97,157,166,232,234,245,249,252,253,254],[59,91,164],[51,59,91,98],[91,223,267],[59,91,265],[59,91,262],[59,91,222],[57,59,91,95,99,231,232,256,257,271,272],[51,59,91,98,275],[59,91,278],[59,91,96,97,101,163,247,268,280],[59,91,96,97,160,163,247,268,280],[59,91,96,97,163,244,247,268,280],[59,91,96,212,232,255,264,268,280],[59,91,96,97,163,212,232,246,247,268],[59,91,264],[59,91,222,235],[59,91,231],[59,91,222,223,226,227,228,267],[59,91,223,224,267],[59,91,226],[59,91,223,229,267],[59,91,225,230],[51,59,91,223,267],[59,91,228],[59,91,223,233,267],[59],[51],[52],[262],[51,275],[59,212],[223,267],[228]],"referencedMap":[[91,1],[54,2],[55,3],[57,4],[58,5],[59,6],[56,7],[53,8],[52,9],[175,9],[238,10],[233,10],[228,3],[61,9],[299,11],[295,9],[298,12],[296,9],[300,13],[301,3],[297,9],[302,9],[304,14],[305,15],[303,16],[306,17],[307,18],[308,19],[309,20],[310,21],[311,22],[312,23],[313,24],[314,25],[315,26],[86,13],[102,27],[103,27],[105,28],[106,29],[107,30],[108,31],[109,32],[110,33],[111,34],[112,35],[113,36],[114,37],[115,37],[116,38],[117,39],[118,40],[119,41],[120,42],[104,9],[153,9],[121,43],[122,44],[123,45],[154,46],[124,47],[125,48],[126,49],[127,50],[128,51],[129,52],[130,53],[131,54],[132,55],[133,56],[134,57],[135,58],[137,59],[136,60],[138,61],[139,62],[140,9],[141,63],[142,64],[143,65],[144,66],[145,67],[146,68],[147,69],[148,70],[149,71],[150,72],[151,73],[152,74],[316,9],[317,9],[318,9],[72,9],[49,9],[77,3],[161,3],[76,3],[320,75],[321,3],[75,3],[47,9],[51,76],[73,77],[74,78],[322,9],[323,79],[324,9],[50,9],[349,80],[350,81],[325,82],[328,82],[347,80],[348,80],[338,80],[337,83],[335,80],[330,80],[343,80],[341,80],[345,80],[329,80],[342,80],[346,80],[331,80],[332,80],[344,80],[326,80],[333,80],[334,80],[336,80],[340,80],[351,84],[339,80],[327,80],[364,85],[363,9],[358,84],[360,86],[359,84],[352,84],[353,84],[355,84],[357,84],[361,86],[362,86],[354,86],[356,86],[78,9],[365,9],[366,87],[223,9],[168,9],[226,3],[48,9],[89,13],[87,88],[88,89],[62,9],[271,90],[185,91],[195,92],[186,93],[187,94],[196,95],[213,95],[261,3],[155,96],[218,97],[217,98],[221,99],[220,100],[169,9],[170,101],[270,100],[274,102],[277,103],[179,104],[178,105],[199,106],[206,107],[182,79],[214,108],[215,109],[210,110],[209,109],[173,9],[172,9],[207,111],[200,112],[208,113],[211,114],[188,115],[201,116],[183,117],[205,118],[204,119],[184,120],[198,121],[197,122],[189,109],[190,123],[192,124],[191,125],[193,126],[194,127],[176,9],[94,3],[174,128],[171,9],[216,9],[219,129],[203,130],[202,131],[181,132],[180,9],[177,133],[275,134],[278,135],[95,136],[262,137],[156,138],[222,139],[212,140],[63,3],[64,141],[65,142],[69,143],[70,144],[68,3],[67,9],[71,145],[319,9],[90,146],[82,147],[66,9],[10,9],[11,9],[13,9],[12,9],[2,9],[14,9],[15,9],[16,9],[17,9],[18,9],[19,9],[20,9],[21,9],[3,9],[4,9],[25,9],[22,9],[23,9],[24,9],[26,9],[27,9],[28,9],[5,9],[29,9],[30,9],[31,9],[32,9],[6,9],[33,9],[34,9],[35,9],[36,9],[7,9],[41,9],[37,9],[38,9],[39,9],[40,9],[8,9],[45,9],[42,9],[43,9],[44,9],[1,9],[9,9],[46,9],[81,148],[85,149],[84,150],[83,9],[79,13],[80,151],[101,152],[160,153],[256,154],[60,155],[92,155],[257,156],[162,157],[163,155],[166,158],[157,159],[93,155],[167,155],[244,160],[165,155],[158,154],[236,154],[237,155],[250,155],[239,161],[259,162],[251,163],[258,163],[240,155],[241,155],[242,163],[243,163],[100,155],[246,164],[247,165],[248,155],[159,166],[96,167],[260,168],[265,169],[266,155],[164,155],[249,155],[252,170],[253,166],[255,171],[254,172],[99,173],[97,155],[267,174],[268,175],[263,176],[98,155],[269,177],[273,178],[276,179],[279,180],[284,181],[285,182],[281,183],[286,184],[287,185],[282,186],[283,187],[288,168],[272,168],[232,188],[229,189],[225,190],[227,191],[224,155],[230,192],[231,193],[292,194],[293,195],[280,155],[289,155],[264,155],[294,155],[290,155],[234,196],[245,155],[235,155],[291,155]],"exportedModulesMap":[[91,1],[54,2],[55,3],[57,4],[58,5],[59,6],[56,7],[53,8],[52,9],[175,9],[238,10],[233,10],[228,3],[61,9],[299,11],[295,9],[298,12],[296,9],[300,13],[301,3],[297,9],[302,9],[304,14],[305,15],[303,16],[306,17],[307,18],[308,19],[309,20],[310,21],[311,22],[312,23],[313,24],[314,25],[315,26],[86,13],[102,27],[103,27],[105,28],[106,29],[107,30],[108,31],[109,32],[110,33],[111,34],[112,35],[113,36],[114,37],[115,37],[116,38],[117,39],[118,40],[119,41],[120,42],[104,9],[153,9],[121,43],[122,44],[123,45],[154,46],[124,47],[125,48],[126,49],[127,50],[128,51],[129,52],[130,53],[131,54],[132,55],[133,56],[134,57],[135,58],[137,59],[136,60],[138,61],[139,62],[140,9],[141,63],[142,64],[143,65],[144,66],[145,67],[146,68],[147,69],[148,70],[149,71],[150,72],[151,73],[152,74],[316,9],[317,9],[318,9],[72,9],[49,9],[77,3],[161,3],[76,3],[320,75],[321,3],[75,3],[47,9],[51,76],[73,77],[74,78],[322,9],[323,79],[324,9],[50,9],[349,80],[350,81],[325,82],[328,82],[347,80],[348,80],[338,80],[337,83],[335,80],[330,80],[343,80],[341,80],[345,80],[329,80],[342,80],[346,80],[331,80],[332,80],[344,80],[326,80],[333,80],[334,80],[336,80],[340,80],[351,84],[339,80],[327,80],[364,85],[363,9],[358,84],[360,86],[359,84],[352,84],[353,84],[355,84],[357,84],[361,86],[362,86],[354,86],[356,86],[78,9],[365,9],[366,87],[223,9],[168,9],[226,3],[48,9],[89,13],[87,88],[88,89],[62,9],[271,90],[185,91],[195,92],[186,93],[187,94],[196,95],[213,95],[261,3],[155,96],[218,97],[217,98],[221,99],[220,100],[169,9],[170,101],[270,100],[274,102],[277,103],[179,104],[178,105],[199,106],[206,107],[182,79],[214,108],[215,109],[210,110],[209,109],[173,9],[172,9],[207,111],[200,112],[208,113],[211,114],[188,115],[201,116],[183,117],[205,118],[204,119],[184,120],[198,121],[197,122],[189,109],[190,123],[192,124],[191,125],[193,126],[194,127],[176,9],[94,3],[174,128],[171,9],[216,9],[219,129],[203,130],[202,131],[181,132],[180,9],[177,133],[275,134],[278,135],[95,136],[262,137],[156,138],[222,139],[212,140],[63,3],[64,141],[65,142],[69,143],[70,144],[68,3],[67,9],[71,145],[319,9],[90,146],[82,147],[66,9],[10,9],[11,9],[13,9],[12,9],[2,9],[14,9],[15,9],[16,9],[17,9],[18,9],[19,9],[20,9],[21,9],[3,9],[4,9],[25,9],[22,9],[23,9],[24,9],[26,9],[27,9],[28,9],[5,9],[29,9],[30,9],[31,9],[32,9],[6,9],[33,9],[34,9],[35,9],[36,9],[7,9],[41,9],[37,9],[38,9],[39,9],[40,9],[8,9],[45,9],[42,9],[43,9],[44,9],[1,9],[9,9],[46,9],[81,148],[85,149],[84,150],[83,9],[79,13],[80,151],[101,197],[160,197],[256,197],[60,197],[92,197],[257,197],[162,198],[163,197],[166,197],[157,197],[93,197],[167,197],[244,197],[165,197],[158,198],[236,198],[237,197],[250,197],[239,197],[259,197],[251,197],[258,197],[240,197],[241,197],[242,197],[243,197],[100,197],[246,197],[247,197],[248,197],[159,197],[96,197],[260,199],[265,197],[266,197],[164,197],[249,197],[252,197],[253,197],[255,197],[254,197],[99,197],[97,197],[267,174],[268,197],[263,200],[269,197],[273,197],[276,201],[279,197],[284,197],[285,197],[281,197],[286,202],[287,202],[283,197],[288,199],[272,199],[232,203],[229,203],[225,203],[230,203],[231,203],[292,203],[293,204],[234,203]],"semanticDiagnosticsPerFile":[91,54,55,57,58,59,56,53,52,175,238,233,228,61,299,295,298,296,300,301,297,302,304,305,303,306,307,308,309,310,311,312,313,314,315,86,102,103,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,104,153,121,122,123,154,124,125,126,127,128,129,130,131,132,133,134,135,137,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,316,317,318,72,49,77,161,76,320,321,75,47,51,73,74,322,323,324,50,349,350,325,328,347,348,338,337,335,330,343,341,345,329,342,346,331,332,344,326,333,334,336,340,351,339,327,364,363,358,360,359,352,353,355,357,361,362,354,356,78,365,366,223,168,226,48,89,87,88,62,271,185,195,186,187,196,213,261,155,218,217,221,220,169,170,270,274,277,179,178,199,206,182,214,215,210,209,173,172,207,200,208,211,188,201,183,205,204,184,198,197,189,190,192,191,193,194,176,94,174,171,216,219,203,202,181,180,177,275,278,95,262,156,222,212,63,64,65,69,70,68,67,71,319,90,82,66,10,11,13,12,2,14,15,16,17,18,19,20,21,3,4,25,22,23,24,26,27,28,5,29,30,31,32,6,33,34,35,36,7,41,37,38,39,40,8,45,42,43,44,1,9,46,81,85,84,83,79,80,101,160,256,60,92,257,162,163,166,157,93,167,244,165,158,236,237,250,239,259,251,258,240,241,242,243,100,246,247,248,159,96,260,265,266,164,249,252,253,255,254,99,97,267,268,263,98,269,273,276,279,284,285,281,286,287,282,283,288,272,232,229,225,227,224,230,231,292,293,280,289,264,294,290,234,245,235,291],"affectedFilesPendingEmit":[[91,1],[54,1],[55,1],[57,1],[58,1],[59,1],[56,1],[53,1],[52,1],[175,1],[238,1],[233,1],[228,1],[61,1],[299,1],[295,1],[298,1],[296,1],[300,1],[301,1],[297,1],[302,1],[304,1],[305,1],[303,1],[306,1],[307,1],[308,1],[309,1],[310,1],[311,1],[312,1],[313,1],[314,1],[315,1],[86,1],[102,1],[103,1],[105,1],[106,1],[107,1],[108,1],[109,1],[110,1],[111,1],[112,1],[113,1],[114,1],[115,1],[116,1],[117,1],[118,1],[119,1],[120,1],[104,1],[153,1],[121,1],[122,1],[123,1],[154,1],[124,1],[125,1],[126,1],[127,1],[128,1],[129,1],[130,1],[131,1],[132,1],[133,1],[134,1],[135,1],[137,1],[136,1],[138,1],[139,1],[140,1],[141,1],[142,1],[143,1],[144,1],[145,1],[146,1],[147,1],[148,1],[149,1],[150,1],[151,1],[152,1],[316,1],[317,1],[318,1],[72,1],[49,1],[77,1],[161,1],[76,1],[320,1],[321,1],[75,1],[47,1],[51,1],[73,1],[74,1],[322,1],[323,1],[324,1],[50,1],[349,1],[350,1],[325,1],[328,1],[347,1],[348,1],[338,1],[337,1],[335,1],[330,1],[343,1],[341,1],[345,1],[329,1],[342,1],[346,1],[331,1],[332,1],[344,1],[326,1],[333,1],[334,1],[336,1],[340,1],[351,1],[339,1],[327,1],[364,1],[363,1],[358,1],[360,1],[359,1],[352,1],[353,1],[355,1],[357,1],[361,1],[362,1],[354,1],[356,1],[78,1],[365,1],[366,1],[223,1],[168,1],[226,1],[48,1],[89,1],[87,1],[88,1],[62,1],[271,1],[185,1],[195,1],[186,1],[187,1],[196,1],[213,1],[261,1],[155,1],[218,1],[217,1],[221,1],[220,1],[169,1],[170,1],[270,1],[274,1],[277,1],[179,1],[178,1],[199,1],[206,1],[182,1],[214,1],[215,1],[210,1],[209,1],[173,1],[172,1],[207,1],[200,1],[208,1],[211,1],[188,1],[201,1],[183,1],[205,1],[204,1],[184,1],[198,1],[197,1],[189,1],[190,1],[192,1],[191,1],[193,1],[194,1],[176,1],[94,1],[174,1],[171,1],[216,1],[219,1],[203,1],[202,1],[181,1],[180,1],[177,1],[275,1],[278,1],[95,1],[262,1],[156,1],[222,1],[212,1],[63,1],[64,1],[65,1],[69,1],[70,1],[68,1],[67,1],[71,1],[319,1],[90,1],[82,1],[66,1],[2,1],[3,1],[4,1],[5,1],[6,1],[7,1],[8,1],[9,1],[81,1],[85,1],[84,1],[83,1],[79,1],[80,1],[101,1],[160,1],[256,1],[60,1],[92,1],[257,1],[162,1],[163,1],[166,1],[157,1],[93,1],[167,1],[244,1],[165,1],[158,1],[236,1],[237,1],[250,1],[239,1],[259,1],[251,1],[258,1],[240,1],[241,1],[242,1],[243,1],[100,1],[246,1],[247,1],[248,1],[159,1],[96,1],[260,1],[265,1],[266,1],[164,1],[249,1],[252,1],[253,1],[255,1],[254,1],[99,1],[97,1],[267,1],[268,1],[263,1],[98,1],[269,1],[273,1],[276,1],[279,1],[284,1],[285,1],[281,1],[286,1],[287,1],[282,1],[283,1],[288,1],[272,1],[232,1],[229,1],[225,1],[227,1],[224,1],[230,1],[231,1],[292,1],[293,1],[280,1],[289,1],[367,1],[264,1],[294,1],[290,1],[234,1],[245,1],[235,1],[291,1]]},"version":"4.5.5"} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index c77bc3889..000000000 --- a/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -botasaurus -botasaurus_server -dateutils -lxml -regex \ No newline at end of file diff --git a/run.py b/run.py deleted file mode 100644 index c9d80698d..000000000 --- a/run.py +++ /dev/null @@ -1,5 +0,0 @@ -import backend.scrapers -from botasaurus_server.run import run - -if __name__ == "__main__": - run() diff --git a/screenshots/110007659.png b/screenshots/110007659.png deleted file mode 100644 index 31a7bc418..000000000 Binary files a/screenshots/110007659.png and /dev/null differ diff --git a/screenshots/11330822.png b/screenshots/11330822.png deleted file mode 100644 index d2bf0aae9..000000000 Binary files a/screenshots/11330822.png and /dev/null differ diff --git a/screenshots/12696875.png b/screenshots/12696875.png deleted file mode 100644 index 10350c1d8..000000000 Binary files a/screenshots/12696875.png and /dev/null differ diff --git a/screenshots/140355018.jpeg b/screenshots/140355018.jpeg deleted file mode 100644 index 0f673bdce..000000000 Binary files a/screenshots/140355018.jpeg and /dev/null differ diff --git a/screenshots/140389998.png b/screenshots/140389998.png deleted file mode 100644 index ec1457ce4..000000000 Binary files a/screenshots/140389998.png and /dev/null differ diff --git a/screenshots/20030930.png b/screenshots/20030930.png deleted file mode 100644 index 70029f27f..000000000 Binary files a/screenshots/20030930.png and /dev/null differ diff --git a/screenshots/23493776.png b/screenshots/23493776.png deleted file mode 100644 index 3455566da..000000000 Binary files a/screenshots/23493776.png and /dev/null differ diff --git a/screenshots/24499228.png b/screenshots/24499228.png deleted file mode 100644 index 27dcaf670..000000000 Binary files a/screenshots/24499228.png and /dev/null differ diff --git a/screenshots/29509374.png b/screenshots/29509374.png deleted file mode 100644 index ade3cf2d9..000000000 Binary files a/screenshots/29509374.png and /dev/null differ diff --git a/screenshots/31059433.png b/screenshots/31059433.png deleted file mode 100644 index b5662abf0..000000000 Binary files a/screenshots/31059433.png and /dev/null differ diff --git a/screenshots/47897781.jpeg b/screenshots/47897781.jpeg deleted file mode 100644 index 4e08a2436..000000000 Binary files a/screenshots/47897781.jpeg and /dev/null differ diff --git a/screenshots/80034759.jpeg b/screenshots/80034759.jpeg deleted file mode 100644 index dfc34e217..000000000 Binary files a/screenshots/80034759.jpeg and /dev/null differ diff --git a/screenshots/api-integration-page.png b/screenshots/api-integration-page.png index 26248e37c..6e3ce2064 100644 Binary files a/screenshots/api-integration-page.png and b/screenshots/api-integration-page.png differ diff --git a/screenshots/api-key-omkar.png b/screenshots/api-key-omkar.png new file mode 100644 index 000000000..4fc3232c1 Binary files /dev/null and b/screenshots/api-key-omkar.png differ diff --git a/screenshots/character-fix.gif b/screenshots/character-fix.gif new file mode 100644 index 000000000..a695187fb Binary files /dev/null and b/screenshots/character-fix.gif differ diff --git a/screenshots/confirm-refund-request.png b/screenshots/confirm-refund-request.png new file mode 100644 index 000000000..81bb17c42 Binary files /dev/null and b/screenshots/confirm-refund-request.png differ diff --git a/screenshots/contacts-websites.png b/screenshots/contacts-websites.png new file mode 100644 index 000000000..d7972cc72 Binary files /dev/null and b/screenshots/contacts-websites.png differ diff --git a/screenshots/customers.png b/screenshots/customers.png deleted file mode 100644 index 2e6294850..000000000 Binary files a/screenshots/customers.png and /dev/null differ diff --git a/screenshots/demo.gif b/screenshots/demo.gif index b4a1d41fa..3292df57f 100644 Binary files a/screenshots/demo.gif and b/screenshots/demo.gif differ diff --git a/screenshots/instructions.png b/screenshots/instructions.png new file mode 100644 index 000000000..9fddf8299 Binary files /dev/null and b/screenshots/instructions.png differ diff --git a/screenshots/interested-websites.png b/screenshots/interested-websites.png new file mode 100644 index 000000000..8788ab4a2 Binary files /dev/null and b/screenshots/interested-websites.png differ diff --git a/screenshots/mac-sleep.png b/screenshots/mac-sleep.png new file mode 100644 index 000000000..2346c3a35 Binary files /dev/null and b/screenshots/mac-sleep.png differ diff --git a/screenshots/paypal-secure.png b/screenshots/paypal-secure.png new file mode 100644 index 000000000..ab7e25a62 Binary files /dev/null and b/screenshots/paypal-secure.png differ diff --git a/screenshots/people-new.png b/screenshots/people-new.png new file mode 100644 index 000000000..65a6591cf Binary files /dev/null and b/screenshots/people-new.png differ diff --git a/screenshots/people.png b/screenshots/people.png new file mode 100644 index 000000000..da45256b9 Binary files /dev/null and b/screenshots/people.png differ diff --git a/screenshots/pricing.png b/screenshots/pricing.png new file mode 100644 index 000000000..ae09354c0 Binary files /dev/null and b/screenshots/pricing.png differ diff --git a/screenshots/purchase-success.png b/screenshots/purchase-success.png new file mode 100644 index 000000000..bb563eab1 Binary files /dev/null and b/screenshots/purchase-success.png differ diff --git a/screenshots/request-refund-button.png b/screenshots/request-refund-button.png new file mode 100644 index 000000000..6af81e996 Binary files /dev/null and b/screenshots/request-refund-button.png differ diff --git a/screenshots/signup.png b/screenshots/signup.png new file mode 100644 index 000000000..a31373764 Binary files /dev/null and b/screenshots/signup.png differ diff --git a/screenshots/social-section.png b/screenshots/social-section.png index 93570b441..2621a87ab 100644 Binary files a/screenshots/social-section.png and b/screenshots/social-section.png differ diff --git a/screenshots/star-us.png b/screenshots/star-us.png new file mode 100644 index 000000000..646d7b733 Binary files /dev/null and b/screenshots/star-us.png differ diff --git a/screenshots/transactions-page.png b/screenshots/transactions-page.png new file mode 100644 index 000000000..28d5a2ad8 Binary files /dev/null and b/screenshots/transactions-page.png differ diff --git a/screenshots/uncheck-english.png b/screenshots/uncheck-english.png new file mode 100644 index 000000000..4a9a81be9 Binary files /dev/null and b/screenshots/uncheck-english.png differ diff --git a/screenshots/website-contacts-scraper-button.png b/screenshots/website-contacts-scraper-button.png new file mode 100644 index 000000000..91bfbfd85 Binary files /dev/null and b/screenshots/website-contacts-scraper-button.png differ diff --git a/screenshots/website-contacts-scraper.png b/screenshots/website-contacts-scraper.png new file mode 100644 index 000000000..04f9dbe15 Binary files /dev/null and b/screenshots/website-contacts-scraper.png differ diff --git a/screenshots/windows-sleep.png b/screenshots/windows-sleep.png new file mode 100644 index 000000000..6a033ac6b Binary files /dev/null and b/screenshots/windows-sleep.png differ diff --git a/scripts/create-ip.sh b/scripts/create-ip.sh deleted file mode 100644 index 03f5be748..000000000 --- a/scripts/create-ip.sh +++ /dev/null @@ -1,2 +0,0 @@ -python3 -m pip install bota -python3 -m bota create-ip --name gmaps \ No newline at end of file diff --git a/scripts/delete-ip.sh b/scripts/delete-ip.sh deleted file mode 100644 index 6fc327711..000000000 --- a/scripts/delete-ip.sh +++ /dev/null @@ -1,2 +0,0 @@ -python3 -m pip install bota -python3 -m bota delete-ip --name gmaps --force \ No newline at end of file diff --git a/scripts/install-scraper.sh b/scripts/install-scraper.sh deleted file mode 100644 index 82c3f16f8..000000000 --- a/scripts/install-scraper.sh +++ /dev/null @@ -1,3 +0,0 @@ -sudo apt install -y python3-pip -python3 -m pip install bota -python3 -m bota install-scraper --repo-url https://github.com/omkarcloud/google-maps-scraper \ No newline at end of file diff --git a/src/__init__.py b/src/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/extract_data.py b/src/extract_data.py deleted file mode 100644 index 897bec4cc..000000000 --- a/src/extract_data.py +++ /dev/null @@ -1,816 +0,0 @@ -import re as rex -import json -from datetime import datetime -from src.scraper_utils import create_search_link -from urllib.parse import urlparse, urlunparse - -def write_temp_json(data): - from botasaurus import bt - bt.write_temp_json(data) - -def toiso(date): - return date.isoformat() - - -def extract_path_from_link(link): - if isinstance(link, str): - parsed = urlparse(link) - return str( - urlunparse( - ("", "", parsed.path, "", "", "") - ) - ) - - -def get_can_claim(data): - - link = safe_get(data, 6, 226, 0) - if isinstance(link, str): - path = extract_path_from_link(link) - if path and path.rstrip("/").endswith("setup/create"): - return True - - text = safe_get(data, 6, 49, 1) - if isinstance(text, str) and ( - text.lower().startswith("claim") or " claim" in text.lower() - ): - return True - - return False - - -def convert_timestamp_to_iso_date(timestamp): - # Convert from microseconds to milliseconds - milliseconds = int(timestamp/1000) - # Create a new Date object - date = datetime.utcfromtimestamp(milliseconds) - # Return the date in the specified format - return toiso(date) - - -def clean_link(link): - if link is not None: - # Remove everything starting from "&opi" - opi_index = link.find("&opi") - if opi_index != -1: - link = link[:opi_index] - - # Remove "/url?q=" if it's at the start of the link - if link.startswith("/url?q="): - link = link[len("/url?q=") :] - - return link - - -def safe_get(data, *keys): - for key in keys: - try: - data = data[key] - except (IndexError, TypeError, KeyError): - return None - return data - - -def get_categories(data): - return safe_get(data, 6, 13) - - -def get_thumbnail(data): - return safe_get(data, 6, 72, 0, 1, 6, 0) - - -def get_place_id(data): - return safe_get(data, 6, 78) - - -def get_description(data): - return safe_get(data, 6, 154, 0, 0) or safe_get(data, 6, 32, 1, 1) - - -def get_open_state(data): - return safe_get(data, 6, 34, 4, 4) - - -def get_plus_code(data): - return safe_get(data, 6, 183, 2, 2, 0) - - -def get_gps_coordinates(data): - return {"latitude": safe_get(data, 6, 9, 2), "longitude": safe_get(data, 6, 9, 3)} - - -def get_images(data): - images = safe_get(data, 6, 171, 0) or [] - ls = [] - for element in images: - title = element[2] - thumbnail = safe_get(element, 3, 0, 6, 0) - if thumbnail: - ls.append({"about": title, "link": thumbnail}) - return ls - - -def extract_questions(data): - images = safe_get(data, 6, 126) or [] - ls = [] - for element in images: - question_data = safe_get(element, 0, 0) - answer_data = safe_get(element, 0, 1) - - if question_data is None or answer_data is None: - continue - - question = safe_get(question_data, 2) - answer = safe_get(answer_data, 0, 2) - # bt.write_temp_json( question) - - new_var = safe_get(question_data, -1) / 1000 - - question_date = ( - convert_timestamp_to_iso_date(new_var) - if safe_get(question_data, -1) - else None - ) - question_ago = safe_get(question_data, 7) - asked_by = { - "name": safe_get(question_data, 1, 0, 4), - "link": safe_get(question_data, 1, 0, 5), - } - - new_var1 = safe_get(answer_data, 0, -1) / 1000 - answer_date = ( - convert_timestamp_to_iso_date(new_var1) - if safe_get(answer_data, 0, -1) - else None - ) - answer_ago = safe_get(answer_data, 0, 7) - - answered_by_name = safe_get(answer_data, 0, 1, 0, 4) - answered_by_link = safe_get(answer_data, 0, 1, 0, 5) - - if answered_by_name and answered_by_link: - answered_by = { - "name": answered_by_name, - "link": answered_by_link, - } - else: - ownerd = get_owner(data) - answered_by = { - "name": ownerd.get("name", None), - "link": ownerd.get("link", None), - } - - ls.append( - { - "question": question, - "answer": answer, - "question_date": question_date, - "question_ago": question_ago, - "asked_by": asked_by, - "answer_date": answer_date, - "answer_ago": answer_ago, - "answered_by": answered_by, - } - ) - if len(ls) <= 1: - return safe_get(ls, 0) - else: - raise Exception("More than one question found") - - -def get_hl_from_link_competitors(link): - # Regular expression to find the 'hl' parameter in the URL - match = rex.search(r"[?&]hl=([^&]+)", link) - - # If found, return the value, otherwise return 'en' - return match.group(1) if match else None - - -def competitor_sorting_key(item): - key = "reviews" - value = item.get(key) - - # Handle None separately - if value is None: - return (0,) # A tuple with a single element to ensure type consistency - - # Return a tuple with type indicator and value - return (1, value) if isinstance(value, int) else (2, value) - - -def extract_competitors(data, link): - images = safe_get(data, 6, 99, 0, 0, 1) or [] - ls = [] - hl = get_hl_from_link_competitors(link) - for element in images: - dt = safe_get(element, 1) - - if not dt: - continue - - name = safe_get(dt, 11) - - lat = safe_get(dt, 9, -2) - long = safe_get(dt, 9, -1) - - link = create_search_link(name, hl, f"{lat},{long}", None) - - reviews = safe_get(dt, 4, -1) - rating = safe_get(dt, 4, -2) - main_category = safe_get(dt, -1) - - ls.append( - { - "name": name, - "link": link, - "reviews": reviews, - "rating": rating, - "main_category": main_category, - } - ) - - sorted_data = sorted(ls, key=competitor_sorting_key, reverse=True) - - return sorted_data - - -def reorder_popular_times_from_monday_to_sunday(data): - def sorting_bool_false(item): - return item[0] - - sorted_data = sorted(data, key=sorting_bool_false) - return sorted_data - - -def extract_time_data(data): - ls = [] - - for el in data: - hour_of_day = el[0] - time_label = el[4] - popularity_percentage = el[1] - popularity_description = el[2] if el[2] else "Idle" - - ls.append( - { - "hour_of_day": hour_of_day, - "time_label": time_label, - "popularity_percentage": popularity_percentage, - "popularity_description": popularity_description, - } - ) - - return ls - - -def extract_popular_times(data): - images = safe_get(data, 6, 84, 0) or [] - - if not images: - return "Not Present" - - ls = reorder_popular_times_from_monday_to_sunday(images) - rs = {} - tms = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] - - for index, dtt in enumerate(ls): - cureentdata = dtt[1] - date_id = dtt[0] - if not cureentdata: - continue - - day = tms[date_id - 1] - rs[day] = extract_time_data(cureentdata) - - return rs - - -def get_reservations(data): - images = safe_get(data, 6, 46) or [] - ls = [] - for element in images: - link, source = element[0], element[1] - ls.append({"link": clean_link(link), "source": source}) - return ls - - -def get_order_online_link(data): - images = safe_get(data, 6, 75, 0, 1, 2) or safe_get(data, 6, 75, 0, 0, 2) or [] - ls = [] - for element in images: - source, link = safe_get(element, 0, 0), safe_get(element, 1, 2, 0) - ls.append({"link": clean_link(link), "source": source}) - return ls - - -def get_hours(data): - images = safe_get(data, 6, 34, 1) or [] - ls = [] - for element in images: - day, times = element[0], element[1] - ls.append({"day": day, "times": times}) - return ls - - -def get_review_keywords(data): - images = safe_get(data, 6, 153, 0) or [] - ls = [] - for element in images: - keyword, count = element[1], element[3][4] - ls.append({"keyword": keyword, "count": count}) - return ls - - -def get_options(data): - return [ - {"name": x[1], "enabled": (safe_get(x, 2, 1, 0, 0) or x[4][0]) != 0} - for x in data - ] - - -def get_about(data): - rvs = safe_get(data, 6, 100, 1) or [] - ls = [] - for element in rvs: - id, name, options = element[0], element[1], get_options(element[2] or []) - ls.append({"id": id, "name": name, "options": options}) - return ls - - -def get_menu(data): - link = safe_get(data, 6, 38, 0) - source = safe_get(data, 6, 38, 1) - - if link or source: - return {"link": clean_link(link), "source": source} - - -def get_review_images(data): - ls = [] - for x in data: - ls.append(safe_get(x, 1,6,0)) - return ls - - -def extract_google_maps_contributor_url(input_url): - if input_url is not None: - # Define a regular expression pattern to match the desired URL - pattern = r"https://www\.google\.com/maps/contrib/\d+" - - # Use re.search to find the first match in the input_url - match = rex.search(pattern, input_url) - - if match: - # Extract the matched URL - contributor_url = match.group(0) - - # Add "/reviews?entry=ttu" to the end of the URL - contributor_url += "/reviews?entry=ttu" - - return contributor_url - else: - return None - - -def generate_google_reviews_url(placeid, query, authuser, hl, gl): - base_url = "https://search.google.com/local/reviews" - params = {"placeid": placeid, "q": query, "authuser": authuser, "hl": hl, "gl": gl} - query_string = "&".join(f"{key}={value}" for key, value in params.items()) - full_url = f"{base_url}?{query_string}" - return full_url - - -def get_user_reviews(data): - rvs = safe_get(data, 6, 175, 9, 0, 0) or [] - ls = [] - - - for element in rvs: - element = element[0] - # todo when - when, rating, description = ( - safe_get(element,1, 6), - safe_get(element,2, 0, 0), - safe_get(element, 2, 15, 0, 0), - ) - # ChdDSUhNMG9nS0VJQ0FnSUNKeHJUYzJnRRAB - images = get_review_images(safe_get(element, 2, 2) or []) - review_id = element[0] - - # 2, 15, 1, 0 - review_translated_text = safe_get(element, 2, 15, 1, 0) - #v 3 14 0 1 - response_from_owner_translated_text = safe_get(element, 3 ,14, 1, 0) or None - #v 3 14 0 0 - response_from_owner_text = safe_get(element, 3 ,14, 0, 0) or None - - published_at_date = safe_get(element, 1,2) or safe_get(element, 1,3) or None - if published_at_date: - published_at_date = convert_timestamp_to_iso_date(published_at_date/1000) - - - response_from_owner_ago = safe_get(element, 3, 3) or safe_get(element, 3, 4) or None - response_from_owner_date = ( - safe_get(element, 3,1) or safe_get(element, 3,2) or None - ) - - if response_from_owner_date: - response_from_owner_date = convert_timestamp_to_iso_date( - response_from_owner_date/1000 - ) - - - - total_number_of_reviews_by_reviewer = safe_get(element, 1,4, 0, 1) - total_number_of_photos_by_reviewer = safe_get(element, 1,4, 0, 2) - review_likes_count = safe_get(element, 4,1) - - is_local_guide = safe_get(element, 1, 4, 0, 12,0) - # Flaky in nature works only for english language - if is_local_guide is not None: - is_local_guide = "local " in is_local_guide.lower() - else: - is_local_guide = False - - item = { - "review_id": review_id, - "rating": rating, - "review_text": description, - "published_at": when, - "published_at_date": published_at_date, - "response_from_owner_text": response_from_owner_text, - "response_from_owner_ago": response_from_owner_ago, - "response_from_owner_date": response_from_owner_date, - "review_likes_count": review_likes_count, - "total_number_of_reviews_by_reviewer": total_number_of_reviews_by_reviewer, - "total_number_of_photos_by_reviewer": total_number_of_photos_by_reviewer, - "is_local_guide": is_local_guide, - "review_translated_text": review_translated_text, - "response_from_owner_translated_text": response_from_owner_translated_text, - "review_photos": images, - } - ls.append( - item, - ) - return ls - - -def get_owner(data): - name = safe_get(data, 6, 57, 1) - id = safe_get(data, 6, 57, 2) - link = f"https://www.google.com/maps/contrib/{id}" if id else None - return {"id": id, "name": name, "link": clean_link(link) if link else None} - # if id else {'name': name} - - -def get_complete_address(data): - ward = safe_get(data, 6, 183, 1, 0) - street = safe_get(data, 6, 183, 1, 1) - city = safe_get(data, 6, 183, 1, 3) - postal_code = safe_get(data, 6, 183, 1, 4) - state = safe_get(data, 6, 183, 1, 5) - country_code = safe_get(data, 6, 183, 1, 6) - - result = { - "ward": ward, - "street": street, - "city": city, - "postal_code": postal_code, - "state": state, - "country_code": country_code, - } - return result - - -def get_time_zone(data): - return safe_get(data, 6, 30) - - -def get_reviews_link(data): - return clean_link(safe_get(data, 6, 4, 3, 0)) - - -def get_rating(data): - return safe_get(data, 6, 4, 7) or 0 - - -def get_reviews(data): - return safe_get(data, 6, 4, 8) or 0 - - -def get_phone(data): - return safe_get(data, 6, 178, 0, 0) - - -def get_price_range(data): - rs = safe_get(data, 6, 4, 2) - - if rs is not None: - return len(rs) * "$" - - -def get_title(data): - return safe_get(data, 6, 11) - - -def get_address(data): - return safe_get(data, 6, 39) or safe_get(data, 6, 37,0,0,17,0) - - -def get_website(data): - return clean_link(safe_get(data, 6, 7, 0)) - - -def get_main_category(data): - return safe_get(data, 6, 13, 0) - - -def get_cid(data): - return safe_get(data, 25, 3, 0, 13, 0, 0, 1) - - -def get_data_id(data): - return safe_get(data, 6, 10) - - -def get_reviews_per_rating(data): - return {i: safe_get(data, 6, 175, 3, i - 1) for i in range(1, 6)} - - -def parse(data): - # Assuming 'input_string' is provided to the function in some way - input_string = json.loads(data)[3][6] # Replace with actual input - substring_to_remove = ")]}'" - - modified_string = input_string - if input_string.startswith(substring_to_remove): - modified_string = input_string[len(substring_to_remove) :] - - return json.loads(modified_string) - - -def get_hl_from_link(link): - # Regular expression to find the 'hl' parameter in the URL - match = rex.search(r"[?&]hl=([^&]+)", link) - - # If found, return the value, otherwise return 'en' - return match.group(1) if match else "en" - - -def extract_business_name(url): - # Regular expression to match the pattern in the URL - match = rex.search(r"maps/place/([^/]+)", url) - if match: - return match.group(1) - return None - - -def reorder_hours_list(hours_list): - # Get the current weekday (0 for Monday, 1 for Tuesday, etc.) - today_weekday = datetime.today().weekday() - ls = [] - if today_weekday == 0: - ls = [0, 1, 2, 3, 4, 5, 6] - if today_weekday == 1: - ls = [6, 0, 1, 2, 3, 4, 5] - if today_weekday == 2: - ls = [5, 6, 0, 1, 2, 3, 4] - if today_weekday == 3: - ls = [4, 5, 6, 0, 1, 2, 3] - if today_weekday == 4: - ls = [3, 4, 5, 6, 0, 1, 2] - if today_weekday == 5: - ls = [2, 3, 4, 5, 6, 0, 1] - if today_weekday == 6: - ls = [1, 2, 3, 4, 5, 6, 0] - - rs = [] - - for i in ls: - rs.append(hours_list[i]) - return rs - - -def find_close_days(schedule): - """ - Finds days that are closed based on the provided schedule. - - :param schedule: A list of dictionaries with 'day' and 'times' keys. - :return: A list of days that are closed. - """ - closed_days = [] - number_pattern = rex.compile(r"\d") - - for day_info in schedule: - # Check if 'times' is empty or contains strings like 'closed' or 'not available' - times = day_info["times"] - times_str = "".join(times) - if not number_pattern.search(times_str): - closed_days.append(day_info["day"]) - - return closed_days if closed_days else "Open All Days" - - -def find_most_common_element(ls): - if not ls: - return None # Handle empty list case - - # Dictionary to count occurrences of each element - element_count = {} - for element in ls: - if element in element_count: - element_count[element] += 1 - else: - element_count[element] = 1 - - # Find the most common element - max_count = max(element_count.values()) - common_elements = [k for k, v in element_count.items() if v == max_count] - - # Return the first element if all occur equally, else return the most common one - return common_elements[0] - - -def extract_work_day_time(schedule): - """ - Finds days that are closed based on the provided schedule. - - :param schedule: A list of dictionaries with 'day' and 'times' keys. - :return: A list of days that are closed. - """ - days = [] - number_pattern = rex.compile(r"\d") - - for day_info in schedule: - # Check if 'times' is empty or contains strings like 'closed' or 'not available' - times = day_info["times"] - times_str = ", ".join(times) - if number_pattern.search(times_str): - days.append(times_str) - - return find_most_common_element(days) - - -def extract_most_popular_times(data): - if isinstance(data, dict): - # Initialize a dictionary to store total popularity, count, and time labels for each hour - hour_popularity = { - hour: {"total_popularity": 0, "count": 0, "time_label": ""} - for hour in range(24) - } - - # Iterate over each day and hour to sum up popularity, count occurrences, and store time labels - for day, hours in data.items(): - for hour_data in hours: - hour = hour_data["hour_of_day"] - hour_popularity[hour]["total_popularity"] += hour_data[ - "popularity_percentage" - ] - hour_popularity[hour]["count"] += 1 - hour_popularity[hour]["time_label"] = hour_data[ - "time_label" - ] # Storing the time label - - # Calculate the average popularity for each hour - average_popularity = [] - for hour, values in hour_popularity.items(): - if values["count"]> 0: - avg_pop = values["total_popularity"] / values["count"] - average_popularity.append( - { - "hour_of_day": hour, - "average_popularity": avg_pop, - "time_label": values["time_label"], - } - ) - - # Sort by average popularity in descending order - sorted_avg_popularity = sorted( - average_popularity, key=lambda x: x["average_popularity"], reverse=True - ) - - # Get the top 3 most popular times - top_3 = sorted_avg_popularity[:3] - - return top_3 - - else: - # Return data as it is if it's not a dictionary - return data - - -def parse_extract_possible_map_link(data): - # Assuming 'input_string' is provided to the function in some way - loaded = json.loads(data) - - input_string = safe_get(loaded, 3, -1) # Replace with actual input - substring_to_remove = ")]}'" - - modified_string = input_string - if input_string.startswith(substring_to_remove): - modified_string = input_string[len(substring_to_remove) :] - - return json.loads(modified_string) - - -def perform_extract_possible_map_link(input_str): - data = parse_extract_possible_map_link(input_str) - return safe_get(data, 6, 27) or safe_get(data, 0, 1, 0, 14, 27) - - -def extract_data(input_str, link): - data = parse(input_str) - - categories = get_categories(data) - place_id = get_place_id(data) - order_online_links = get_order_online_link(data) - thumbnail = get_thumbnail(data) - coordinates = get_gps_coordinates(data) - images = get_images(data) - description = get_description(data) - status = get_open_state(data) - plus_code = get_plus_code(data) - reservations = get_reservations(data) - menu = get_menu(data) - owner = get_owner(data) - time_zone = get_time_zone(data) - complete_address = get_complete_address(data) - reviews_link = get_reviews_link(data) - if reviews_link is None: - gl = complete_address["country_code"] - hl = get_hl_from_link(link) - query = extract_business_name(link) - reviews_link = generate_google_reviews_url(place_id, query, 0, hl, gl) - - price_range = get_price_range(data) - reviews_per_rating = get_reviews_per_rating(data) - cid = get_cid(data) - data_id = get_data_id(data) - about = get_about(data) - title = get_title(data) - - hours = get_hours(data) - if hours: - hours = reorder_hours_list(hours) - else: - hours = [] - - rating = get_rating(data) - reviews = get_reviews(data) - phone = get_phone(data) - address = get_address(data) - website = get_website(data) - main_category = get_main_category(data) - - review_keywords = get_review_keywords(data) - - first_question = extract_questions(data) - - competitors = extract_competitors(data, link) - popular_times = extract_popular_times(data) - most_popular_times = extract_most_popular_times(popular_times) - is_claimed = get_can_claim(data) - user_reviews = get_user_reviews(data) - - # from botasaurus import bt - # bt.write_temp_json(data) - return { - "place_id": place_id, - "name": title, - "description": description, - "reviews": reviews, - "competitors": competitors, - "website": website, - "can_claim": is_claimed, - "owner": owner, - "featured_image": thumbnail, - "main_category": main_category, - "categories": categories, - "rating": rating, - "workday_timing": extract_work_day_time(hours), - "closed_on": find_close_days(hours), - "phone": phone, - "address": address, - "review_keywords": review_keywords, - "link": link, - "status": status, - "price_range": price_range, - "reviews_per_rating": reviews_per_rating, - "featured_question": first_question, - "reviews_link": reviews_link, - "coordinates": coordinates, - "plus_code": plus_code, - "detailed_address": complete_address, - "time_zone": time_zone, - "cid": cid, - "data_id": data_id, - "menu": menu, - "reservations": reservations, - "order_online_links": order_online_links, - "about": about, - "images": images, - "hours": hours, - "most_popular_times": most_popular_times, - "popular_times": popular_times, - "featured_reviews": user_reviews, - } diff --git a/src/gmaps.py b/src/gmaps.py deleted file mode 100644 index 87fe843d4..000000000 --- a/src/gmaps.py +++ /dev/null @@ -1,310 +0,0 @@ -from src import scraper -from botasaurus import bt -from botasaurus.string_utils import ht -from botasaurus.request import request - -from src.sort_filter import filter_places, sort_dict_by_keys - -from .social_scraper import FAILED_DUE_TO_CREDITS_EXHAUSTED, FAILED_DUE_TO_NOT_SUBSCRIBED, FAILED_DUE_TO_UNKNOWN_ERROR, scrape_social - -def create_place_data(query, max, lang, geo_coordinates, zoom, links): - place_data = { - "query": query, - "max": max, - "lang": lang, - "geo_coordinates": geo_coordinates, - "zoom": zoom, - "links":links - } - return place_data - - -def create_social_scrape_data(places, key): - social_scrape_data = [] - - for place in places: - if place.get('website'): - social_data = { - "place_id": place["place_id"], - "website": place["website"], - "key":key, - } - social_scrape_data.append(social_data) - - return social_scrape_data - - -def clean_social(social_details): - success, credits_exhausted, not_subscribed, unknown_error = [], [], [], [] - - for detail in social_details: - if detail.get("error") is None: - success.append(detail) - elif detail["error"] == FAILED_DUE_TO_CREDITS_EXHAUSTED: - credits_exhausted.append(detail) - elif detail["error"] == FAILED_DUE_TO_NOT_SUBSCRIBED: - not_subscribed.append(detail) - elif detail["error"] == FAILED_DUE_TO_UNKNOWN_ERROR: - unknown_error.append(detail) - - return success, credits_exhausted, not_subscribed, unknown_error - -def print_social_errors(credits_exhausted, not_subscribed, unknown_error): - # print(credits_exhausted) - if credits_exhausted: - print(f"Could not get social details for {len(credits_exhausted)} places due to credit exhaustion. Please consider upgrading your plan by visiting https://rapidapi.com/Chetan11dev/api/website-social-scraper-api/pricing to continue scraping social details.") - - if not_subscribed: - print(f"Could not get social details for {len(not_subscribed)} places as you are not subscribed to Website Social Scraper. Please subscribe to a free plan by visiting https://rapidapi.com/Chetan11dev/api/website-social-scraper-api/pricing to scrape social details.") - - if unknown_error: - print(f"Could not get social details for {len(unknown_error)} places due to Unknown Error.") - -def get_credits_exhausted_data(): - msg = "Could not get social detail due to credit exhaustion. Please consider upgrading your plan by visiting https://rapidapi.com/Chetan11dev/api/website-social-scraper-api/pricing to continue scraping social details." - EMPTY_SOCIAL_DATA = { - 'emails': [msg], - 'phones': [msg], - 'linkedin': msg, - 'twitter': msg, - 'facebook': msg, - 'youtube': msg, - 'instagram': msg, - 'tiktok': msg, - 'github': msg, - 'snapchat': msg, - 'pinterest': msg, - } - return EMPTY_SOCIAL_DATA - -def get_not_subscribed_data(): - msg = "Could not get social detail as you are not subscribed to Website Social Scraper. Please subscribe to a free plan by visiting https://rapidapi.com/Chetan11dev/api/website-social-scraper-api/pricing to scrape social details." - - EMPTY_SOCIAL_DATA = { - 'emails': [msg], - 'phones': [msg], - 'linkedin': msg, - 'twitter': msg, - 'facebook': msg, - 'youtube': msg, - 'instagram': msg, - 'tiktok': msg, - 'github': msg, - 'snapchat': msg, - 'pinterest': msg, - } - return EMPTY_SOCIAL_DATA - - -def get_unknown_error_data(): - msg = "Could not get social detail due to an unknown error." - - EMPTY_SOCIAL_DATA = { - 'emails': [msg], - 'phones': [msg], - 'linkedin': msg, - 'twitter': msg, - 'facebook': msg, - 'youtube': msg, - 'instagram': msg, - 'tiktok': msg, - 'github': msg, - 'snapchat': msg, - 'pinterest': msg, - - } - return EMPTY_SOCIAL_DATA - -def get_null_data(): - msg = None - - EMPTY_SOCIAL_DATA = { - 'emails': [], - 'phones': [], - 'linkedin': msg, - 'twitter': msg, - 'facebook': msg, - 'youtube': msg, - 'instagram': msg, - 'tiktok': msg, - 'github': msg, - 'snapchat': msg, - 'pinterest': msg, - } - return EMPTY_SOCIAL_DATA -def get_empty_data(msg = "Provide API Key"): - - EMPTY_SOCIAL_DATA = { - 'emails': [msg], - 'phones': [msg], - 'linkedin': msg, - 'twitter': msg, - 'facebook': msg, - 'youtube': msg, - 'instagram': msg, - 'tiktok': msg, - 'github': msg, - 'snapchat': msg, - 'pinterest': msg, - } - return EMPTY_SOCIAL_DATA - -def merge_credits_exhausted(places, social_details): - for place in places: - found_social_detail = next((detail for detail in social_details if detail['place_id'] == place['place_id']), None) - if found_social_detail: - place.update(get_credits_exhausted_data()) - - return places - - -def merge_not_subscribed(places, social_details): - for place in places: - found_social_detail = next((detail for detail in social_details if detail['place_id'] == place['place_id']), None) - if found_social_detail: - place.update(get_not_subscribed_data()) - - return places - - -def merge_unknown(places, social_details): - for place in places: - found_social_detail = next((detail for detail in social_details if detail['place_id'] == place['place_id']), None) - if found_social_detail: - place.update(get_unknown_error_data()) - - return places - -def merge_social(places, social_details, should_scrape_socials): - for place in places: - found_social_detail = next((detail for detail in social_details if detail['place_id'] == place['place_id']), None) - if found_social_detail: - place.update(found_social_detail['data']) - else: - if place.get("website") is not None: - if should_scrape_socials: - place.update(get_empty_data("Failed to get social details. Please check the logs for more information.")) - else: - place.update(get_empty_data()) - else: - place.update(get_null_data()) - - return places - -printed = False -def print_rvs_message(hl): - global printed - if not printed: - pass - # if "en" not in hl: - # REMOVE CAN BE ADDED TO README LATER OR MAYBE FIXED? - # print("You have choes to scrape detailed reviews by using scrape_reviews, the published_at_date, response_from_owner_date is only provided in English Language. So published_at_date, response_from_owner_date will be null." ) - printed = True - -def create_reviews_data(places, reviews_max, reviews_sort, lang): - reviews_data = [] - - chosen_lang = lang if lang else "en" - - print_rvs_message(chosen_lang) - - for place in places: - n_reviews=place["reviews"] - if reviews_max is None: - max_r = n_reviews - else: - max_r = min(reviews_max, n_reviews) - review_data = { - "place_id": place["place_id"], - "link": place["link"], - "max": max_r, - "reviews_sort": reviews_sort, - "lang": chosen_lang, - } - reviews_data.append(review_data) - - return reviews_data - -def merge_reviews(places, reviews): - for place in places: - # Find the reviews for the current place based on place_id - found_review = next((review for review in reviews if review['place_id'] == place['place_id']), None) - - # Add the 'reviews' from the found review to the place, or an empty list if no review is found - place['detailed_reviews'] = found_review['reviews'] if found_review else [] - - return places - - - -def process_result(key, scrape_reviews, reviews_max, reviews_sort, lang, should_scrape_socials,places_obj): - places = places_obj["places"] - query = places_obj["query"] - - cleaned_places = places - - # 2. Scrape Emails - if should_scrape_socials: - places_with_websites = filter_places(cleaned_places, {"has_website": True}) - social_data = create_social_scrape_data(places_with_websites, key) - social_details = bt.remove_nones(scrape_social(social_data, )) - success, credits_exhausted, not_subscribed, unknown_error = clean_social(social_details) - print_social_errors(credits_exhausted, not_subscribed, unknown_error) - cleaned_places = merge_social(cleaned_places, success, should_scrape_socials) - cleaned_places = merge_credits_exhausted(cleaned_places, credits_exhausted) - cleaned_places = merge_not_subscribed(cleaned_places, not_subscribed) - cleaned_places = merge_unknown(cleaned_places, unknown_error) - else: - cleaned_places = merge_social(cleaned_places, [], should_scrape_socials) - - # 3. Scrape Reviews - if scrape_reviews: - placed_with_reviews = filter_places(cleaned_places, {"min_reviews": 1}) - reviews_data = create_reviews_data(placed_with_reviews, reviews_max, reviews_sort, lang) - reviews_details = scraper.scrape_reviews(reviews_data,) - # print_social_errors - cleaned_places = merge_reviews(cleaned_places, reviews_details) - else: - cleaned_places = merge_reviews(cleaned_places, []) - - result_item = {"query": query, "places": cleaned_places} - return result_item - - -def merge_places(places): - merged_places = [] - for place_group in places: - merged_places.extend(place_group['places']) - return merged_places - - -@request() -def get_places(_, data): - - key = data['api_key'] - lang = data['lang'] - max_results = data['max_results'] - scrape_reviews = data['enable_reviews_extraction'] - reviews_max = data['max_reviews'] - reviews_sort = data['reviews_sort'] - geo_coordinates = data['coordinates'] - zoom = data['zoom_level'] - query = data['query'] - links = data.get('links') - - place_data = create_place_data(query, max_results, lang, geo_coordinates, zoom, links) - places_obj = scraper.scrape_places(place_data,) - should_scrape_socials = key - result_item = process_result(key, scrape_reviews, reviews_max, reviews_sort, lang, should_scrape_socials, places_obj) - - pc = result_item["places"] - all_fs = ['place_id', 'name', 'description', 'is_spending_on_ads', 'reviews', 'competitors', 'website', 'can_claim', 'emails', 'phones', 'linkedin', 'twitter', 'facebook', 'youtube', 'instagram', 'pinterest', 'github', 'snapchat', 'tiktok', 'owner', 'featured_image', 'main_category', 'categories', 'rating', 'workday_timing', 'closed_on', 'phone', 'address', 'review_keywords', 'link', 'status', 'price_range', 'reviews_per_rating', 'featured_question', 'reviews_link', 'coordinates', 'plus_code', 'detailed_address', 'time_zone', 'cid', 'data_id', 'about', 'images', 'hours', 'most_popular_times', 'popular_times', 'menu', 'reservations', 'order_online_links', 'featured_reviews', 'detailed_reviews'] - pc = [sort_dict_by_keys(x, all_fs) for x in pc] - fs = ["place_id","name","link","main_category","categories","rating","reviews","address", "featured_reviews", "detailed_reviews" , - "emails", "phones" , "linkedin" , "twitter" , "facebook" , "youtube" , "instagram" , "pinterest" , "github" , "snapchat" , "tiktok" , 'featured_reviews', 'detailed_reviews' - ] - - final_result = ht(pc , fs) - - # fiels sorting is necessary as well - return final_result diff --git a/src/reviews_scraper.py b/src/reviews_scraper.py deleted file mode 100644 index efb7b9d62..000000000 --- a/src/reviews_scraper.py +++ /dev/null @@ -1,628 +0,0 @@ -from botasaurus import bt -import requests -import traceback -from datetime import datetime -import time -import math -import urllib.parse -from lxml import html -from bs4 import BeautifulSoup, Tag -import regex as re -import re as rex -from .time_utils import parse_relative_date - -default_request_interval = 0.2 -default_n_retries = 10 -default_retry_time = 30 - -sort_by_enum = { - "most_relevant": "qualityScore", # the most relevant reviews - "newest": "newestFirst", # the most recent reviews - "highest_rating": "ratingHigh", # the highest rating reviews - "lowest_rating": "ratingLow", # the lowest rating reviews -} - - - -review_default_result = { - "response_text_date":None, - "text_date":None, - "translated_text": "", # review text if exists - "translated_response_text": "", # review text if exists - "token": "", # pagination token - "review_id": "", # review unique id - "retrieval_date": "", - "rating": 0, # float usually 1-5 - "rating_max": 0, # float usually 5 - "relative_date": "", # string containing the localized relative date - "likes": -1, # review likes if exists - "other_ratings": "", # other ratings such as rooms, service, placing, etc - "trip_type_travel_group": "", - "user_name": "", - "user_is_local_guide": None, - "user_reviews": "", # total number of reviews made by the user - "user_photos": "", # total number of photos added by the user - "user_url": "", - "text": "", # review text if exists - "response_text": "", # owner response text if exists - "response_relative_date": "", # string containing the localized relative date - "errors": [], # list of errors parsing review -} - -metadata_default = { - "name": "", # hotel name in hotels manual input - "feature_id": "", # hotel unique id - "retrieval_date": "", - "place_name": "", # Place name extracted from response - "address": "", - "overall_rating": 0, # float usually 1-5 - "n_reviews": -1, # number of reviews of hotel - "topics": "", # topics separated by number of reviews - "url": "", # hotel url -} - - - -def extract_google_maps_contributor_url(input_url): - # Define a regular expression pattern to match the desired URL - pattern = r'https://www\.google\.com/maps/contrib/\d+' - - # Use re.search to find the first match in the input_url - match = rex.search(pattern, input_url) - - if match: - # Extract the matched URL - contributor_url = match.group(0) - - # Add "/reviews?entry=ttu" to the end of the URL - contributor_url += '/reviews?entry=ttu' - - return contributor_url - else: - return None - -def extract_reviews_and_photos(text): - # Regular expression pattern to extract numbers that may represent reviews and photos - pattern = r'\d+' - - # Find all matches of numbers in the text - matches = re.findall(pattern, text) - - # Initialize variables to store the number of reviews and photos - num_reviews = 0 - num_photos = 0 - - # Determine the number of reviews and photos based on the matches - if len(matches)>= 1: - num_reviews = int(matches[0]) - if len(matches)>= 2: - num_photos = int(matches[1]) - - # Return the extracted numbers as a tuple - return (num_reviews, num_photos) - -class GoogleMapsAPIScraper: - def __init__( - self, - request_interval: float = default_request_interval, - n_retries: int = default_n_retries, - retry_time: float = default_retry_time, - ): - - self.request_interval = request_interval - self.n_retries = n_retries - self.retry_time = retry_time - self._reset_logger_filter() - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_value, tb): - self._reset_logger_filter() - if exc_type is not None: - traceback.print_exception(exc_type, exc_value, tb) - - return True - - def _reset_logger_filter(self, url_name=""): - pass - - def _ts(self) -> str: - """Returns timestamp formatted as string safe for file naming""" - return datetime.now().strftime("%Y-%m-%d_%H-%M-%S_%f") - - def _parse_url_to_feature_id(self, url: str) -> str: - return re.findall("0[xX][0-9a-fA-F]+:0[xX][0-9a-fA-F]+", url)[0] - - def _parse_sort_by(self, sort_by: str) -> int: - """Default to newest""" - return sort_by_enum.get(sort_by, 1) - - def _decode_response(self, response) -> str: - """Decodes response bytes in unicode escape encoding""" - try: - response_text = response.text - except UnicodeDecodeError as e: - tb = re.sub(r"\s", " ", traceback.format_exc()) # Corrected - response_text = response.content.decode( - encoding="unicode_escape", errors="replace" - ) - if response_text is None or response_text == "": - raise Exception( - "Response text is none. Try request again." - f"Response: {response} Status: {response.status_code}" - ) - return response_text - - def _cut_response_text(self, text: str) -> str: - """Cut response text to remove css and js from extremities""" - idx_first_div = text.find("" + text + "" - - def _format_response_text(self, response_text: str): - """Transforms text into soup and extract list of reviews""" - response_soup = reviews_soup = review_count = next_token = None - try: - # Send page to soup and trees - response_soup = BeautifulSoup(response_text, "lxml") - tree = html.document_fromstring(response_text) - # bt.write_html(response_text , "fff.html") - # Encontrando número de reviews e token de próxima página - metadata_node = tree.xpath("//*[@data-google-review-count]")[0] - review_count = int(metadata_node.attrib["data-google-review-count"]) - next_token = metadata_node.attrib["data-next-page-token"] - - # Iterando sobre texto de cada review - # reviews_tree = tree.xpath('//*[contains(@class, "gws-localreviews__google-review")]') - - reviews_soup = response_soup.find_all(True, class_="gws-localreviews__google-review") - - # reviews_soup = [ - # response_soup.find("div", dict(r.attrib)) for r in reviews_tree - # ] - except Exception as e: - tb = re.sub(r"\s", " ", traceback.format_exc()) # Corrected - - if next_token is None: - next_token = self._get_response_token(response_text) - - return response_text, response_soup, reviews_soup, review_count, next_token - - def _get_response_token(self, response_text: str) -> str: - """Searches for token in response text using regex, in case other methods fail""" - match = re.search(r'(data-next-page-token\s*=\s*")([\w=]*)', response_text) # Corrected - if match: - return match.groups()[1] - - - def _get_request( - self, - feature_id: str, - async_: str = "", - hl: str = "", - sort_by_id: int = "", - associated_topic: str = "", - token: str = "", - ): - """Makes and formats get request in google's api""" - query = f"https://www.google.com/async/reviewSort?authuser=0&hl={hl}&yv=3&cs=1&async=feature_id:{feature_id},review_source:All%20reviews,sort_by:{sort_by_id},is_owner:false,filter_text:,associated_topic:,next_page_token:{token},_pms:s,_fmt:pc" - # query = ( - # "https://www.google.com/async/reviewDialog?" - # f"hl={hl}&" - # f"async={async_}" - # f"feature_id:{feature_id}," - # f"sort_by:{sort_by_id}," - # f"next_page_token:{token}," - # f"associated_topic:{associated_topic}," - # f"_fmt:pc" - # ) - # Make request - response = requests.get(query) - response.raise_for_status() - # Decode response - response_text = self._decode_response(response) - - # Cut response to remove css - response_text = self._cut_response_text(response_text) - # bt.write_html(response_text , "fff.html") - # Format response into list of reviews - return self._format_response_text(response_text) - - def _parse_place( - self, - response: BeautifulSoup, - ) -> dict: - """Parse place html""" - metadata = metadata_default.copy() - return metadata - # Parse place_name - try: - metadata["place_name"] = response.find(True, class_="P5Bobd").text - except Exception as e: - pass - - - # Parse address - try: - metadata["address"] = response.find(True, class_="T6pBCe").text - except Exception as e: - pass - - - # Parse overall_rating - try: - rating_text = response.find(True, class_="Aq14fc").text.replace(",", ".") - metadata["overall_rating"] = float(rating_text) - except Exception as e: - pass - - - # Parse n_reviews - try: - n_reviews_text = response.find(True, class_="z5jxId").text - n_reviews_text = re.sub("[.]|,| reviews| comentários", "", n_reviews_text) - metadata["n_reviews"] = int(n_reviews_text) - except Exception as e: - pass - - - # Parse topics - try: - topics = response.find("localreviews-place-topics") - s = " ".join([s for s in topics.stripped_strings]) - metadata["topics"] = re.sub(r"\s+", " ", s) # Corrected - except Exception as e: - pass - - metadata["retrieval_date"] = str(datetime.now()) - - return metadata - - def _parse_review_text(self, text_block) -> str: - """Parse review text html, removing unwanted characters""" - text = "" - for e, s in zip(text_block.contents, text_block.stripped_strings): - if isinstance(e, Tag) and e.has_attr( - "class" - ): # and e.attrs["class"] in ["review-snippet","k8MTF",]: - break - text += s + " " - - text = re.sub(r"\s", " ", text) # Corrected - text = re.sub("'|\"", "", text) - text = text.strip() - return text - - def _handle_review_exception(self, result, review, name) -> dict: - # Error log - tb = re.sub(r"\s", " ", traceback.format_exc()) # Corrected - msg = f"review {name}: {tb}" - - # Appending to line - tb = re.sub("['\"]", " ", tb) - result["errors"].append(tb) - # Saving file - with open( - f"errors/review_{name}_{self._ts()}.html", "w", encoding="utf-8" - ) as f: - f.writelines(str(review) + "\n\n" + msg) - return result - - def _handle_place_exception(self, response_text, name, n) -> dict: - # Error log - tb = re.sub(r"\s", " ", traceback.format_exc()) # Corrected - msg = f"place {name} request {n}: {tb}" - - # Saving file - new_var = f"output/place_{name}_request_{n}_{self._ts()}.html" - print(new_var) - with open( - new_var, "w", encoding="utf-8" - ) as f: - f.writelines(str(response_text) + "\n\n" + msg) - - - def _parse_review(self, review: Tag, hl) -> dict: - result = review_default_result.copy() - - # Make timestamp - result["retrieval_date"] = str(datetime.now()) - - # Parse text - try: - # Find text block - text_block = review.find(True, class_="review-full-text") - if not text_block: - text_block = review.find(True, {"data-expandable-section": True}) - # Extract text - if text_block: - result["text"] = self._parse_review_text(text_block) - except Exception as e: - self._handle_review_exception(result, review, "text") - try: - # Find text block - translated_text = review.find_all(True, class_="review-full-text") - if not translated_text: - translated_text = review.find_all(True, {"data-expandable-section": True}) - # Extract text - # print(text_block) - if len(translated_text)> 1: - result["translated_text"] = self._parse_review_text(translated_text[1]) - # print("aaaaaa", result["translated_text"]) - except Exception as e: - self._handle_review_exception(result, review, "translated_text") - - # Parse review rating - try: - rating_text = review.find(True, class_="lTi8oc z3HNkc").get("aria-label") - rating_text = re.sub(",", ".", rating_text) - rating = re.findall("[0-9]+[.][0-9]*", rating_text) - result["rating"] = float(rating[0]) - result["rating_max"] = None - - except Exception as e: - self._handle_review_exception(result, review, "rating") - - # Parse other ratings - try: - other_ratings = review.find(True, class_="k8MTF") - if other_ratings: - s = " ".join([s for s in other_ratings.stripped_strings]) - result["other_ratings"] = re.sub(r"\s+", " ", s) - except Exception as e: - self._handle_review_exception(result, review, "other_ratings") - - # Parse relative date - try: - result["relative_date"] = review.find(True, class_="dehysf lTi8oc").text - except Exception as e: - self._handle_review_exception(result, review, "relative_date") - - # Parse user name - try: - result["user_name"] = review.find(True, class_="TSUbDb").text - except Exception as e: - self._handle_review_exception(result, review, "user_name") - - # Parse user metadata - try: - user_node = review.find(True, class_="Msppse") - if user_node: - result["user_url"] = user_node.get("href") - result["user_is_local_guide"] = ( - True if user_node.find(True, class_="QV3IV") else False - ) - fixed_text = user_node.text.replace(",", "").replace(".", "") - user_reviews,user_photos = extract_reviews_and_photos(fixed_text) - result["user_reviews"] = user_reviews - result["user_photos"] = user_photos - - # print(text) - # user_reviews = re.findall( - # "[Uuma0-9.,]+(?= comentário| review)", user_node.text - # ) - # user_photos = re.findall("[Uuma0-9.,]+(?= foto| photo)", user_node.text) - # if len(user_reviews)> 0: - # if len(user_photos)> 0: - except Exception as e: - self._handle_review_exception(result, review, "user_data") - - # Parse review id - try: - # result["review_id"] = review.find(True, {"data-ri": True}).get("data-ri") - review_id = review.find(True, class_="RvU3D").get("href") - result["review_id"] = re.findall("(?<=postid=).*?(?=&)", review_id)[0] - except Exception as e: - self._handle_review_exception(result, review, "review_id") - - # Parse review likes - try: - review_likes = review.find(True, jsname="CMh1ye") - if review_likes: - result["likes"] = int(review_likes.text) - except Exception as e: - self._handle_review_exception(result, review, "likes") - - # Parse review response - try: - response = review.find(True, class_="d6SCIc") - if response: - result["response_text"] = self._parse_review_text(response) - response_date = review.find(True, class_="pi8uOe") - if response_date: - result["response_relative_date"] = response_date.text - except Exception as e: - self._handle_review_exception(result, review, "response") - - try: - response = review.find_all(True, class_="d6SCIc") - if response: - result["translated_response_text"] = self._parse_review_text(response[1]) - except Exception as e: - self._handle_review_exception(result, review, "response") - - # Parse trip_type_travel_group - try: - trip_type_travel_group = review.find(True, class_="PV7e7") - if trip_type_travel_group: - s = " ".join([s for s in trip_type_travel_group.stripped_strings]) - result["trip_type_travel_group"] = re.sub(r"\s+", " ", s) # Corrected - except Exception as e: - self._handle_review_exception(result, review, "trip_type_travel_group") - - if "en" in hl: - if result['relative_date']: - try: - result["text_date"]= parse_relative_date(result['relative_date'], result['retrieval_date']) - except Exception as e: - print(traceback.format_exc()) - result["text_date"] = None - - if result['response_relative_date']: - try: - result["response_text_date"]= parse_relative_date(result['response_relative_date'], result['retrieval_date']) - except Exception as e: - print(traceback.format_exc()) - result["response_text_date"] = None - - if result["user_url"]: - result["user_url"] = extract_google_maps_contributor_url(result["user_url"]) - - if not result["translated_text"]: - result["translated_text"] = None - - if not result["translated_response_text"]: - result["translated_response_text"] = None - - if not result["user_reviews"]: - result["user_reviews"] = None - - if not result["user_photos"]: - result["user_photos"] = None - - - return result - - def scrape_reviews( - self, - url: str, - n_reviews: int, - hl: str = "en", - sort_by: str = "", - token: str = "", - ): - """Scrape specified amount of reviews of a place, appending results in csv""" - url_name = re.findall("(?<=place/).*?(?=/)", url)[0] - url_name = urllib.parse.unquote_plus(url_name) - self._reset_logger_filter(url_name) - - - feature_id = self._parse_url_to_feature_id(url) - sort_by_id = self._parse_sort_by(sort_by) - - results = [] - j = 0 - - n_requests = math.ceil((n_reviews) / 10) - for i in range(n_requests): - - n = self.n_retries - while n> 0: - next_token = None - try: - response_text = "" - - ( - response_text, - response_soup, - reviews_soup, - review_count, - next_token, - ) = self._get_request( - feature_id, - hl=hl, - sort_by_id=sort_by_id, - token=token, - ) - - assert isinstance(reviews_soup, list) - break - except Exception as e: - # traceback.print_exc() - n -= 1 - self._handle_place_exception(response_text, url_name, i) - if n == 0 and next_token is None: - - raise e - elif n == 0: - - break - else: - - time.sleep(self.retry_time) - token = next_token - if n == 0: - continue - - try: - # print("reviews_soup", len(reviews_soup)) - for review in reviews_soup: - # - result = self._parse_review(review, hl) - result["token"] = token - - - results.append(result) - # - j += 1 - except Exception as e: - traceback.print_exc() - tb = re.sub(r"\s", " ", traceback.format_exc()) - - - if review_count < 10 or token == "": - - break - - # Waiting so google wont block this scraper - time.sleep(self.request_interval) - - - if n_reviews is not None and n_reviews>=1 : - return results[:n_reviews] - return results - - def scrape_place( - self, - url: str, - writer, - file, - name, - hl: str = "", - ): - """Scrape place metadata, writing to csv""" - url_name = re.findall("(?<=place/).*?(?=/)", url)[0] - url_name = urllib.parse.unquote_plus(url_name) - self._reset_logger_filter(url_name) - - - feature_id = self._parse_url_to_feature_id(url) - - - _, response_soup, _, _, _ = self._get_request( - feature_id, - hl=hl, - ) - metadata = self._parse_place(response=response_soup) - metadata["feature_id"] = feature_id - metadata["url"] = url - metadata["name"] = name - - writer.writerow(metadata.values()) - file.flush() - - return metadata - -if __name__ == "__main__": - try: - with GoogleMapsAPIScraper() as scraper: - response_text, response_soup, reviews_soup, review_count, next_token = scraper._format_response_text(bt.read_html("fff")) - rs = [] - # for review in reviews_soup[:1]: - for review in reviews_soup: - result = scraper._parse_review(review, "es") - rs.append(result) - - bt.write_json(rs, "temp") - except Exception as e: - print(f"An error occurred: {e}") \ No newline at end of file diff --git a/src/scraper.py b/src/scraper.py deleted file mode 100644 index bebff9eb1..000000000 --- a/src/scraper.py +++ /dev/null @@ -1,363 +0,0 @@ -import traceback -from botasaurus import cl, bt -from botasaurus.cache import DontCache -from src.extract_data import extract_data, perform_extract_possible_map_link -from src.scraper_utils import create_search_link, perform_visit -from src.utils import unique_strings -from .reviews_scraper import GoogleMapsAPIScraper -from time import sleep, time -from botasaurus.browser import Driver, browser, AsyncQueueResult, Wait, DetachedElementException -from botasaurus.request import request - - -def is_errors_instance(instances, error): - for i in range(len(instances)): - ins = instances[i] - if isinstance(error, ins): - return True, i - return False, -1 - - -def istuple(el): - return type(el) is tuple - -def retry_if_is_error(func, instances=None, retries=3, wait_time=None, raise_exception=True, on_failed_after_retry_exhausted=None): - tries = 0 - errors_only_instances = list( - map(lambda el: el[0] if istuple(el) else el, instances)) - - while tries < retries: - tries += 1 - try: - created_result = func() - return created_result - except Exception as e: - is_valid_error, index = is_errors_instance( - errors_only_instances, e) - - if not is_valid_error: - raise e - if raise_exception: - traceback.print_exc() - - if istuple(instances[index]): - instances[index][1]() - - if tries == retries: - if on_failed_after_retry_exhausted is not None: - on_failed_after_retry_exhausted(e) - if raise_exception: - raise e - - print('Retrying') - - if wait_time is not None: - sleep(wait_time) - -def process_reviews(reviews): - processed_reviews = [] - - for review in reviews: - # Convert user_photos and user_reviews to integers, handling None and commas - user_photos = review.get("user_photos") - number_of_photos_by_reviewer = user_photos - # int(user_photos.replace(",", "").replace(".", "")) if user_photos else 0 - - user_reviews = review.get("user_reviews") - number_of_reviews_by_reviewer = user_reviews - # int(user_reviews.replace(",", "").replace(".", "")) if user_reviews else 0 - - lk = review.get("likes") - processed_review = { - "review_id": review.get("review_id"), - "rating": int(review.get("rating")), - "review_text": review.get("text"), - "published_at": review.get("relative_date"), - "published_at_date": review.get("text_date"), - "response_from_owner_text": review.get("response_text"), - "response_from_owner_ago": review.get("response_relative_date"), - "response_from_owner_date": review.get("response_text_date"), - "review_likes_count": 0 if lk <= -1 else lk, - "total_number_of_reviews_by_reviewer": number_of_reviews_by_reviewer, - "total_number_of_photos_by_reviewer": number_of_photos_by_reviewer, - "is_local_guide": review.get("user_is_local_guide"), - "review_translated_text": review.get("translated_text"), - "response_from_owner_translated_text": review.get("translated_response_text"), - # "extracted_at": review.get("retrieval_date") - } - processed_reviews.append(processed_review) - - return processed_reviews - - -@request( - - close_on_crash=True, - output=None, - -) -def scrape_reviews(requests, data): - place_id = data["place_id"] - link = data["link"] - - max_r = data["max"] - - reviews_sort = data["reviews_sort"] - lang = data["lang"] - - processed = [] - with GoogleMapsAPIScraper() as scraper: - - result = scraper.scrape_reviews( - link, max_r, lang, sort_by=reviews_sort - ) - processed = process_reviews(result, ) - - return {"place_id":place_id, "reviews": processed} - - - -@request( - parallel=5, - async_queue=True, - - close_on_crash=True, - output=None, - - # TODO: IMPLEMENT AND UNCOMMENT - max_retry=5, - retry_wait=5, - # request_interval=0.2, {ADD} -) -def scrape_place(requests, link, metadata): - cookies = metadata["cookies"] - os = metadata["os"] - user_agent = metadata["user_agent"] - try: - html = requests.get(link,cookies=cookies, - browser='chrome', - os=os, user_agent=user_agent, timeout=12,).text - # Splitting HTML to get the part after 'window.APP_INITIALIZATION_STATE=' - initialization_state_part = html.split(';window.APP_INITIALIZATION_STATE=')[1] - - # Further splitting to isolate the APP_INITIALIZATION_STATE content - app_initialization_state = initialization_state_part.split(';window.APP_FLAGS')[0] - - # Extracting data from the APP_INITIALIZATION_STATE - data = extract_data(app_initialization_state, link) - # data['link'] = link - - data['is_spending_on_ads'] = False - cleaned = data - - return cleaned - except Exception as e: - raise - -def extract_possible_map_link(html): - try: - # Splitting HTML to get the part after 'window.APP_INITIALIZATION_STATE=' - initialization_state_part = html.split(';window.APP_INITIALIZATION_STATE=')[1] - - # Further splitting to isolate the APP_INITIALIZATION_STATE content - app_initialization_state = initialization_state_part.split(';window.APP_FLAGS')[0] - # Extracting data from the APP_INITIALIZATION_STATE - link = perform_extract_possible_map_link(app_initialization_state,) - # print(link) - if link and cl.extract_path_from_link(link).startswith("/maps/place"): - return link - except: - return None - -def merge_sponsored_links(places, sponsored_links): - for place in places: - place['is_spending_on_ads'] = place['link'] in sponsored_links - - return places - -def get_lang(data): - return data['lang'] - -class StuckInGmapsException(Exception): - pass - - - -@browser( - lang=get_lang, - close_on_crash=True, - max_retry = 3, - headless=True, - output=None, -) -def scrape_places(driver:Driver, data): - # This fixes consent Issues in Countries like Spain - max_results = data['max'] - - scrape_place_obj: AsyncQueueResult = scrape_place() - - sponsored_links = None - def get_sponsored_links(): - nonlocal sponsored_links - if sponsored_links is None: - sponsored_links = driver.run_js('''function get_sponsored_links() { - try { - - // Get all elements with the "Sponsored" text in the h1 tag. - const sponsoredLinks = [...document.querySelectorAll('.kpih0e.f8ia3c.uvopNe')] - - // Extract the parent
elements of the sponsored links. - const sponsoredDivs = sponsoredLinks.map(link => link.closest('.Nv2PK')); - - // Extract the links (href) from the sponsored tags. - const sponsoredLinksList = sponsoredDivs.map(div => div.querySelector('a').href); - - return sponsoredLinksList - } catch (error) { - return [] - } -} - -return get_sponsored_links()''') - return sponsored_links - - - - def put_links(): - start_time = time() - - WAIT_TIME = 40 # WAIT 40 SECONDS - - metad = {"cookies":driver.get_cookies_dict(), "os": bt.get_os(), "user_agent" : driver.user_agent} - if data['links']: - scrape_place_obj.put(data['links'], metadata = metad) - return - while True: - el = driver.select( - '[role="feed"]', Wait.LONG) - if el is None: - if driver.is_in_page("/maps/search/"): - link = extract_possible_map_link(driver.page_source) - if link: - rst = [link] - scrape_place_obj.put(rst, metadata = metad) - rst = [] - elif driver.is_in_page("/maps/place/"): - rst = [driver.current_url] - scrape_place_obj.put(rst, metadata = metad) - return - else: - el.scroll_to_bottom() - - links = None - - if max_results is None: - links = driver.get_all_links( - '[role="feed"]> div> div> a', wait=Wait.LONG) - else: - links = unique_strings(driver.get_all_links( - '[role="feed"]> div> div> a', wait=Wait.LONG))[:max_results] - - - - scrape_place_obj.put(links, metadata = metad) - - if max_results is not None and len(links)>= max_results: - return - - # TODO: If Proxy is Given Wait for None, and only use wait to Make it Faster, Example Code - # end_el_wait = bt.Wait.SHORT if driver.config.is_retry else None - - end_el_wait = Wait.SHORT - end_el = driver.select( - "p.fontBodyMedium> span> span", end_el_wait) - - if end_el is not None: - return - elapsed_time = time() - start_time - - if elapsed_time> WAIT_TIME : - print('Google Maps was stuck in scrolling. Retrying after a minute.') - sleep(63) - raise StuckInGmapsException() - # we increased speed so occurence if higher than - # - add random waits - # - 3 retries - - if driver.can_scroll_further('[role="feed"]'): - start_time = time() - else: - sleep_time = 0.1 - sleep(sleep_time) - - search_link = create_search_link(data['query'], data['lang'], data['geo_coordinates'], data['zoom']) - - perform_visit(driver, search_link) - - - STALE_RETRIES = 5 - # TODO - # I need to ask to restart browser - # use proxy addition - failed_to_scroll = False - def on_failed_after_retry_exhausted(e): - nonlocal failed_to_scroll - failed_to_scroll = True - print('Failed to scroll after 5 retries. Skipping.') - -# print('''Google has silently blocked IP. Kindly follow these Steps to change IP. -# # If using Wifi: -# # - Turn Router off and on -# # If using Mobile Data -# # - Connect your PC to the Internet via a Mobile Hotspot. -# # - Toggle airplane mode off and on on your mobile device. This will assign you a new IP address. -# # - Turn the hotspot back on. -# # ''') - try: - retry_if_is_error(put_links, [DetachedElementException], STALE_RETRIES, raise_exception=False - # , on_failed_after_retry_exhausted=on_failed_after_retry_exhausted - ) - # todo remove check later - if driver.config.is_retry: - print("This time, Google Maps did not get stuck while scrolling and successfully scrolled to the end.") - - except StuckInGmapsException as e: - if driver.config.is_last_retry: - on_failed_after_retry_exhausted(e) - else: - raise e - - - - - places = scrape_place_obj.get() - - hasnone = False - for place in places: - if place is None: - hasnone = True - break - - places = bt.remove_nones(places) - - - sponsored_links = [] if data['links'] else get_sponsored_links() - places = merge_sponsored_links(places, sponsored_links) - - - result = {"query": data['query'], "places": places} - - if failed_to_scroll: - return DontCache(result) - - if hasnone: - return DontCache(result) - - return result - -# python -m src.scraper -if __name__ == "__main__": - # scrape_places({'query': 'Restaurant in delhi', 'max': 1, 'lang': None, 'geo_coordinates': '', 'zoom': 14, 'links':[]}) - # scrape_places({'query': 'Restaurant in delhi', 'max': 1, 'lang': None, 'geo_coordinates': '', 'zoom': 14, 'links':[]}) - print(scrape_places({'query': 'Web Developers in Bangalore', 'max': 1, 'lang': 'hi', 'geo_coordinates': '', 'zoom': 14, 'links':[]})) - # print(scrape_place(["https://www.google.com/maps/place/Hisn+Yakka/@38.6089019,-1.1214893,17z/data=!3m1!4b1!4m6!3m5!1s0xd63fd22e0c22e1f:0xc2d606310f68bc26!8m2!3d38.6089019!4d-1.1214893!16s%2Fg%2F11p06xtf82?authuser=0&entry=ttu"] , metadata={}))b \ No newline at end of file diff --git a/src/scraper_utils.py b/src/scraper_utils.py deleted file mode 100644 index 716872c43..000000000 --- a/src/scraper_utils.py +++ /dev/null @@ -1,59 +0,0 @@ -import urllib.parse - -def perform_visit(driver, link:str): - def visit_gmap_with_consent(): - driver.google_get(link, accept_google_cookies=True) - - - def visit_gmap_simple(): - driver.get_via_this_page(link) - - - if driver.config.is_new: - visit_gmap_with_consent() - else: - visit_gmap_simple() - -def remove_spaces(input_string): - # Use str.replace() to replace spaces with an empty string - result_string = input_string.replace(" ", "") - return result_string - -def create_search_link(query: str, lang, geo_coordinates, zoom): - # Check for invalid combination of geo_coordinates and zoom - if geo_coordinates is None and zoom is not None: - raise ValueError("geo_coordinates must be provided along with zoom") - - # URL encoding the query - endpoint = urllib.parse.quote_plus(query) - - # Basic parameters - params = { - 'authuser': '0', - 'hl': lang, - 'entry': 'ttu', - - } if lang is not None else { - 'authuser': '0', - 'entry': 'ttu', - - } - - - # Constructing the geo-coordinates string - geo_str = "" - if geo_coordinates is not None: - geo_coordinates = remove_spaces(geo_coordinates) - if zoom is not None: - geo_str = f'/@{geo_coordinates},{zoom}z' - else: - geo_str = f'/@{geo_coordinates}' - - # Constructing the final URL - url = f'https://www.google.com/maps/search/{endpoint}' - if geo_str: - url += geo_str - url += f'?{urllib.parse.urlencode(params)}' - - return url - diff --git a/src/social_scraper.py b/src/social_scraper.py deleted file mode 100644 index beb525a1d..000000000 --- a/src/social_scraper.py +++ /dev/null @@ -1,106 +0,0 @@ -from botasaurus.request import request as rq -from botasaurus.local_storage import LocalStorage -from botasaurus.cache import DontCache -import requests -from time import sleep - -FAILED_DUE_TO_CREDITS_EXHAUSTED = "FAILED_DUE_TO_CREDITS_EXHAUSTED" -FAILED_DUE_TO_NOT_SUBSCRIBED = "FAILED_DUE_TO_NOT_SUBSCRIBED" -FAILED_DUE_TO_UNKNOWN_ERROR = "FAILED_DUE_TO_UNKNOWN_ERROR" - -def update_credits(): - credits_used = LocalStorage.get_item("credits_used", 0) - LocalStorage.set_item("credits_used", credits_used + 1) - -def do_request(data, retry_count=3): - - place_id = data["place_id"] - website = data["website"] - key = data["key"] - - if retry_count == 0: - print(f"Failed to get Social details for {website}, after 3 retries") - return DontCache(None) - - url = "https://website-social-scraper-api.p.rapidapi.com/contacts/" - querystring = {"website": website} - headers = { - "X-RapidAPI-Key": key, - "X-RapidAPI-Host": "website-social-scraper-api.p.rapidapi.com" - } - - - response = requests.get(url, headers=headers, params=querystring) - response_data = response.json() - if response.status_code == 200: - update_credits() - - final = response_data - # .get('data', [None])[0] - - if "pinterest" not in final: - final["pinterest"] = None - - - - return { - "place_id": place_id, - "data": final, - "error": None - } - else: - message = response_data.get("message", "") - if "exceeded the MONTHLY quota" in message: - return DontCache({ - "place_id": place_id, - "data": None, - "error":FAILED_DUE_TO_CREDITS_EXHAUSTED - }) - elif "exceeded the rate limit per second for your plan" in message or "many requests" in message: - sleep(2) - return do_request(data, retry_count - 1) - elif "You are not subscribed to this API." in message: - - return DontCache({ - "place_id": place_id, - "data": None, - "error": FAILED_DUE_TO_NOT_SUBSCRIBED - }) - - print(f"Error: {response.status_code}", response_data) - return DontCache({ - "place_id": place_id, - "data": None, - "error":FAILED_DUE_TO_UNKNOWN_ERROR - }) - - -@rq( - close_on_crash=True, - create_error_logs= False, - cache=True, - output=None, - ) -def perform_scrape_social(reqs, data): - return do_request(data) - -@rq( - close_on_crash=True, - create_error_logs= False, - cache=True, - output=None, - ) -def perform_scrape_social_pro(reqs, data): - return do_request(data) - -def is_free(): - FREE_CREDITS_PLUS_10 = 60 - credits_used = LocalStorage.get_item("credits_used", 0) - return credits_used < FREE_CREDITS_PLUS_10 - -def scrape_social(social_data): - free = is_free() - if free: - return perform_scrape_social(social_data ) - else: - return perform_scrape_social_pro(social_data ) diff --git a/src/sort_filter.py b/src/sort_filter.py deleted file mode 100644 index 3393484ee..000000000 --- a/src/sort_filter.py +++ /dev/null @@ -1,83 +0,0 @@ -from src.utils import kebab_case, unicode_to_ascii - - -def list_contains_string(string_list, target_string): - target_string_lower = kebab_case(unicode_to_ascii(target_string)).lower() # Convert target string to lowercase - for item in string_list: - if target_string_lower == kebab_case(unicode_to_ascii(item)).lower(): # Compare in a case-insensitive manner - return True - return False - -def sort_dict_by_keys(dictionary, keys): - new_dict = {} - - try: - for key in keys: - new_dict[key] = dictionary[key] - except: - raise Exception("Failed to sort dict by keys") - return new_dict - -def filter_places(ls, filter_data): - def fn(i): - - web_site = i.get("website") - has_website = filter_data.get("has_website") - if has_website is not None: - if (has_website is False and web_site is not None): - return False - - if (has_website is True and web_site is None): - return False - min_rating = filter_data.get("min_rating") - max_rating = filter_data.get("max_rating") - min_reviews = filter_data.get("min_reviews") - max_reviews = filter_data.get("max_reviews") - has_phone = filter_data.get("has_phone") - has_can_claim = filter_data.get("can_claim") - category_in = filter_data.get("category_in") - - rating = i.get('rating') - reviews = i.get('reviews') - can_claim = i.get("can_claim") - - phone = i.get("phone") - main_category = i.get("main_category") - - if category_in : - if not main_category: - return False - - if (not list_contains_string(category_in, main_category)): - return False - - if min_rating is not None and (rating == '' or rating is None or rating < min_rating): - return False - - if max_rating is not None and (rating == '' or rating is None or rating> max_rating): - return False - - if min_reviews is not None and (reviews == '' or reviews is None or reviews < min_reviews): - return False - - if max_reviews is not None and (reviews == '' or reviews is None or reviews> max_reviews): - return False - - if has_can_claim is not None: - if (has_can_claim is False and can_claim is True): - return False - - if (has_can_claim is True and can_claim is False): - return False - - if has_phone is not None: - if (has_phone is True and (phone is None or phone == '')): - return False - - if (has_phone is False and (not (phone is None or phone == ''))): - return False - - return True - - return list(filter(fn, ls)) - diff --git a/src/time_utils.py b/src/time_utils.py deleted file mode 100644 index d001c41d9..000000000 --- a/src/time_utils.py +++ /dev/null @@ -1,90 +0,0 @@ -from unidecode import unidecode -import regex as re -from dateutils import relativedelta -from datetime import datetime - - -relative_date_maps = { - "pt-br": { - "one_regex": r"^uma?", - "ago_regex": r"\s*atrás$", # Corrected regex for "atrás" - "time_unit": { - "ano": "years", - "anos": "years", - "mes": "months", - "meses": "months", - "semana": "weeks", - "semanas": "weeks", - "dia": "days", - "dias": "days", - "hora": "hours", - "horas": "hours", - "minuto": "minutes", - "minutos": "minutes", - "segundo": "seconds", - "segundos": "seconds", - }, - }, - "en": { - "one_regex": r"^a", - "ago_regex": r"\s*ago$", # Corrected regex for "ago" - "time_unit": { - "year": "years", - "years": "years", - "month": "months", - "months": "months", - "week": "weeks", - "weeks": "weeks", - "day": "days", - "days": "days", - "hour": "hours", - "hours": "hours", - "minute": "minutes", - "minutes": "minutes", - "second": "seconds", - "seconds": "seconds", - }, - }, -} - - - -translated_text_maps = { - "pt-br": { - "flag": "Tradução do Google", - "regex": r"\(Tradução do Google\)|\(Original\).*?$", - }, - "en": { - "flag": "Translated by Google", - "regex": r"\(Translated by Google\)|\(Original\).*?$", - }, -} - - -def parse_relative_date(relative_date, retrieval_date, hl="en"): - """Transforma data relativa do google maps em datetime""" - if (not isinstance(relative_date, str)) or relative_date == "": - return None - # Normaliza texto - unidecoded_text = unidecode(relative_date).lower().strip() - text = unidecoded_text - # Transforma {"um","uma"} no número 1 - - text = re.sub(relative_date_maps[hl]["one_regex"], "1", text) - # Remove terminação "atrás" - - text = re.sub(relative_date_maps[hl]["ago_regex"], "", text) - - number, time_unit = text.split(" ") - - try: - number = float(number) - except: - if "an" in unidecoded_text: - number = 1 - else: - raise - kwargs = {relative_date_maps[hl]["time_unit"][time_unit]: number} - - review_date = datetime.strptime(retrieval_date, '%Y-%m-%d %H:%M:%S.%f') - relativedelta(**kwargs) - return str(review_date) diff --git a/src/utils.py b/src/utils.py deleted file mode 100644 index 1fa59aab2..000000000 --- a/src/utils.py +++ /dev/null @@ -1,20 +0,0 @@ -from unidecode import unidecode -from casefy import kebabcase - -def unicode_to_ascii(text): - """ - Convert unicode text to ASCII, replacing special characters. - """ - - if text is None: - return None - - # Replacing 'ë' with 'e' and return the ASCII text - return unidecode(text).replace("ë", "e") - -def kebab_case(s): - return kebabcase(s) - -def unique_strings(lst): - # Use a set to remove duplicates, then convert back to a list - return list(dict.fromkeys(lst))