Change log: https://roxy-wi.org/changelog.py#6_1_2
pull/328/head
Pavel Loginov 2022-07-15 21:55:54 +03:00
parent 2e060eb801
commit 11aa182599
60 changed files with 1072 additions and 735 deletions

View File

@ -192,6 +192,197 @@ def default_values():
except Exception as e:
print(str(e))
data_source = [
{'param': 'aws', 'name': 'AWS', 'optgroup': 'aws', 'section': 'provider', 'provider': 'aws', 'image': '/inc/images/provisioning/providers/aws.svg'},
{'param': 'do', 'name': 'DigitalOcearn', 'optgroup': 'do', 'section': 'provider', 'provider': 'do', 'image': '/inc/images/provisioning/providers/do.svg'},
{'param': 'gcore', 'name': 'G-Core Labs', 'optgroup': 'gcore', 'section': 'provider', 'provider': 'gcore', 'image': '/inc/images/provisioning/providers/gcore.svg'},
{'param': 'us-east-1', 'name': 'N. Virginia', 'optgroup': 'US East', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': 'us-east-2', 'name': 'Ohio', 'optgroup': 'US East', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': 'us-west-1', 'name': 'N. California', 'optgroup': 'US West', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': 'us-west-2', 'name': 'Oregon', 'optgroup': 'US West', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': 'af-south-1', 'name': 'Cape Town', 'optgroup': 'Africa', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/za.svg'},
{'param': 'ap-east-1', 'name': 'Hong Kong', 'optgroup': 'Asia Pacific', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/hk.svg'},
{'param': 'ap-south-1', 'name': 'Mumbai', 'optgroup': 'Asia Pacific', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/in.svg'},
{'param': 'ap-northeast-2', 'name': 'Seoul', 'optgroup': 'Asia Pacific', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/kr.svg'},
{'param': 'ap-southeast-1', 'name': 'Singapore', 'optgroup': 'Asia Pacific', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/sg.svg'},
{'param': 'ap-southeast-2', 'name': 'Sydney', 'optgroup': 'Asia Pacific', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/au.svg'},
{'param': 'ap-northeast-1', 'name': 'Tokyo', 'optgroup': 'Asia Pacific', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/jp.svg'},
{'param': 'ca-central-1', 'name': 'Central', 'optgroup': 'Canada', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/ca.svg'},
{'param': 'eu-central-1', 'name': 'Frankfurt', 'optgroup': 'Europe', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/de.svg'},
{'param': 'eu-west-1', 'name': 'Ireland', 'optgroup': 'Europe', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/ie.svg'},
{'param': 'eu-west-2', 'name': 'London', 'optgroup': 'Europe', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/gb.svg'},
{'param': 'eu-south-1', 'name': 'Milan', 'optgroup': 'Europe', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/fr.svg'},
{'param': 'eu-west-3', 'name': 'Paris', 'optgroup': 'Europe', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/fr.svg'},
{'param': 'eu-north-1', 'name': 'Stockholm', 'optgroup': 'Europe', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/se.svg'},
{'param': 'me-south-1', 'name': 'Bahrain', 'optgroup': 'Middle East', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/bh.svg'},
{'param': 'sa-east-1', 'name': 'São Paulo', 'optgroup': 'South America', 'section': 'region', 'provider': 'aws', 'image': '/inc/images/provisioning/flags/br.svg'},
{'param': 'nyc1', 'name': 'New York 1', 'optgroup': 'USA', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': 'nyc2', 'name': 'New York 2', 'optgroup': 'USA', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': 'nyc3', 'name': 'New York 3', 'optgroup': 'USA', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': 'sfo1', 'name': 'San Francisco 1', 'optgroup': 'USA', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': 'sfo2', 'name': 'San Francisco 2', 'optgroup': 'USA', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': 'sfo3', 'name': 'San Francisco 3', 'optgroup': 'USA', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': 'tor1', 'name': 'Toronto 1', 'optgroup': 'Canada', 'section': 'region', 'provider': 'do',
'image': '/inc/images/provisioning/flags/ca.svg'},
{'param': 'ams2', 'name': 'Amsterdam 2', 'optgroup': 'Europe', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/nl.svg'},
{'param': 'ams3', 'name': 'Amsterdam 3', 'optgroup': 'Europe', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/nl.svg'},
{'param': 'fra1', 'name': 'Frankfurt 1', 'optgroup': 'Europe', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/de.svg'},
{'param': 'lon1', 'name': 'London 1', 'optgroup': 'Europe', 'section': 'region', 'provider': 'do',
'image': '/inc/images/provisioning/flags/gb.svg'},
{'param': 'sgp1', 'name': 'Singapore 1', 'optgroup': 'Asia', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/sg.svg'},
{'param': 'blr1', 'name': 'Bangalore 1', 'optgroup': 'Asia', 'section': 'region', 'provider': 'do', 'image': '/inc/images/provisioning/flags/bh.svg'},
{'param': '68', 'name': 'Chicago', 'optgroup': 'Americas', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': '14', 'name': 'Manassas', 'optgroup': 'Americas', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': '35', 'name': 'Santa-Clara', 'optgroup': 'Americas', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/us.svg'},
{'param': '64', 'name': 'Hong-Kong', 'optgroup': 'Asia-Pacific', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/hk.svg'},
{'param': '18', 'name': 'Singapore', 'optgroup': 'Asia-Pacific', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/sg.svg'},
{'param': '88', 'name': 'Sydney', 'optgroup': 'Asia-Pacific', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/au.svg'},
{'param': '29', 'name': 'Tokyo', 'optgroup': 'Asia-Pacific', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/jp.svg'},
{'param': '46', 'name': 'Almaty', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/kz.svg'},
{'param': '26', 'name': 'Amsterdam', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore',
'image': '/inc/images/provisioning/flags/nl.svg'},
{'param': '26', 'name': 'Amsterdam', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore',
'image': '/inc/images/provisioning/flags/nl.svg'},
{'param': '38', 'name': 'Frankfurt', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore',
'image': '/inc/images/provisioning/flags/de.svg'},
{'param': '50', 'name': 'Istanbul', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore',
'image': '/inc/images/provisioning/flags/tr.svg'},
{'param': '84', 'name': 'Johannesburg', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/za.svg'},
{'param': '6', 'name': 'Luxembourg', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/lu.svg'},
{'param': '76', 'name': 'Luxembourg-2', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/lu.svg'},
{'param': '56', 'name': 'Paris', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/fr.svg'},
{'param': '80', 'name': 'Warsaw', 'optgroup': 'EMEA', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/pl.svg'},
{'param': '22', 'name': 'Khabarovsk', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/ru.svg'},
{'param': '10', 'name': 'Moscow', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/ru.svg'},
{'param': '42', 'name': 'Saint Petersburg', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/ru.svg'},
{'param': '60', 'name': 'Yekaterinburg', 'optgroup': 'Russia and CIS', 'section': 'region', 'provider': 'gcore', 'image': '/inc/images/provisioning/flags/ru.svg'},
{'param': 'ubuntu-18-04', 'name': 'Ubuntu 18.04', 'optgroup': 'Ubuntu', 'section': 'image',
'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-20-04', 'name': 'Ubuntu 20.04', 'optgroup': 'Ubuntu', 'section': 'image',
'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-20-14', 'name': 'Ubuntu 20.14', 'optgroup': 'Ubuntu', 'section': 'image',
'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-22-04', 'name': 'Ubuntu 22.04', 'optgroup': 'Ubuntu', 'section': 'image',
'provider': 'aws', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'centos-7', 'name': 'CentOS 7', 'optgroup': 'CentOS', 'section': 'image',
'provider': 'aws', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'centos-8', 'name': 'CentOS 8', 'optgroup': 'CentOS', 'section': 'image',
'provider': 'aws', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'centos-9', 'name': 'CentOS 9', 'optgroup': 'CentOS', 'section': 'image',
'provider': 'aws', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'debian-9', 'name': 'Debian 9', 'optgroup': 'Debian', 'section': 'image', 'provider': 'aws',
'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'debian-10', 'name': 'Debian 10', 'optgroup': 'Debian', 'section': 'image', 'provider': 'aws',
'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'debian-11', 'name': 'Debian 11', 'optgroup': 'Debian', 'section': 'image', 'provider': 'aws',
'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'amazon-2_lts', 'name': 'Amazon Linux 2', 'optgroup': 'Amazon Linux', 'section': 'image', 'provider': 'aws',
'image': '/inc/images/provisioning/providers/aws.svg'},
{'param': 'ubuntu-18-04-x64', 'name': 'Ubuntu 18.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-20-04-x64', 'name': 'Ubuntu 20.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-20-14-x64', 'name': 'Ubuntu 20.14', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-22-04-x64', 'name': 'Ubuntu 22.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'centos-7-x64', 'name': 'CentOS 7', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'centos-stream-8-x64', 'name': 'CentOS 8 Stream', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'centos-stream-9-x64', 'name': 'CentOS 9 Stream', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'rockylinux-8-4-x64', 'name': 'RockyLinux 8.4', 'optgroup': 'RockyLinux', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/rocky-linux.svg'},
{'param': 'rockylinux-8-x64', 'name': 'RockyLinux 8.5', 'optgroup': 'RockyLinux', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/rocky-linux.svg'},
{'param': 'debian-9-x64', 'name': 'Debian 9', 'optgroup': 'Debian', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'debian-10-x64', 'name': 'Debian 10', 'optgroup': 'Debian', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'debian-11-x64', 'name': 'Debian 11', 'optgroup': 'Debian', 'section': 'image', 'provider': 'do', 'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'ubuntu-18.04-x64', 'name': 'Ubuntu 18.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-20.04-x64', 'name': 'Ubuntu 20.04', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-20.10-x64', 'name': 'Ubuntu 20.10', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'ubuntu-22.04-x64', 'name': 'Ubuntu 22.02', 'optgroup': 'Ubuntu', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/ubuntu.svg'},
{'param': 'centos-7-1811-x64-qcow2', 'name': 'CentOS 7.6', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'centos-7-2003-x64-qcow2', 'name': 'CentOS 7.8', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'centos8-stream-0210-x64', 'name': 'CentOS 8.4', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'centos9-stream-0330-x64', 'name': 'CentOS 9', 'optgroup': 'CentOS', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/centos.svg'},
{'param': 'fedora-33-x64-qcow2', 'name': 'Fedora 33', 'optgroup': 'Fedora', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/fedora.svg'},
{'param': 'fedora-34-x64-qcow2', 'name': 'Fedora 34', 'optgroup': 'Fedora', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/fedora.svg'},
{'param': 'fedora-35-x64-qcow2', 'name': 'Fedora 35', 'optgroup': 'Fedora', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/fedora.svg'},
{'param': 'debian-9.7-x64-qcow2', 'name': 'Debian 9.7', 'optgroup': 'Debian', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'debian-10.1-x64-qcow2', 'name': 'Debian 10.1', 'optgroup': 'Debian', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'debian-10.3-x64-qcow2', 'name': 'Debian 10.3', 'optgroup': 'Debian', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'debian-11.generic-x64-qcow2', 'name': 'Debian 11', 'optgroup': 'Debian', 'section': 'image', 'provider': 'gcore',
'image': '/inc/images/provisioning/oss/debian.svg'},
{'param': 'windows-server-2019', 'name': 'Windows 2019', 'optgroup': 'Windows', 'section': 'image',
'provider': 'gcore', 'image': '/inc/images/provisioning/oss/windows.svg'},
{'param': 'windows-server-2022', 'name': 'Windows 2022', 'optgroup': 'Windows', 'section': 'image',
'provider': 'gcore', 'image': '/inc/images/provisioning/oss/windows.svg'},
{'param': 'sles15-SP2', 'name': 'SLES 15-SP2', 'optgroup': 'SUSE', 'section': 'image', 'provider': 'gcore', 'image': '/inc/images/provisioning/oss/suse.svg'},
{'param': 's-1vcpu-1gb', 'name': 's-1vcpu-1gb', 'optgroup': 'Base', 'section': 'size', 'provider': 'do'},
{'param': 's-2vcpu-2gb', 'name': 's-2vcpu-2gb', 'optgroup': 'Base', 'section': 'size', 'provider': 'do'},
{'param': 's-2vcpu-4gb', 'name': 's-2vcpu-4gb', 'optgroup': 'Base', 'section': 'size', 'provider': 'do'},
{'param': 's-4vcpu-8gb', 'name': 's-4vcpu-8gb', 'optgroup': 'Base', 'section': 'size', 'provider': 'do'},
{'param': 's-8vcpu-16gb', 'name': 's-8vcpu-16gb', 'optgroup': 'Base', 'section': 'size', 'provider': 'do'},
{'param': 's-1vcpu-1gb-intel', 'name': 's-1vcpu-1gb-intel', 'optgroup': 'Premium Intel', 'section': 'size', 'provider': 'do'},
{'param': 's-2vcpu-2gb-intel', 'name': 's-2vcpu-2gb-intel', 'optgroup': 'Premium Intel', 'section': 'size', 'provider': 'do'},
{'param': 's-2vcpu-4gb-intel', 'name': 's-2vcpu-4gb-intel', 'optgroup': 'Premium Intel', 'section': 'size', 'provider': 'do'},
{'param': 's-4vcpu-8gb-intel', 'name': 's-4vcpu-8gb-intel', 'optgroup': 'Premium Intel', 'section': 'size', 'provider': 'do'},
{'param': 's-8vcpu-16gb-intel', 'name': 's-8vcpu-16gb-intel', 'optgroup': 'Premium Intel', 'section': 'size', 'provider': 'do'},
{'param': 's-1vcpu-1gb-amd', 'name': 's-1vcpu-1gb-amd', 'optgroup': 'Premium AMD', 'section': 'size',
'provider': 'do'},
{'param': 's-2vcpu-2gb-amd', 'name': 's-2vcpu-2gb-amd', 'optgroup': 'Premium AMD', 'section': 'size',
'provider': 'do'},
{'param': 's-2vcpu-4gb-amd', 'name': 's-2vcpu-4gb-amd', 'optgroup': 'Premium AMD', 'section': 'size',
'provider': 'do'},
{'param': 's-4vcpu-8gb-amd', 'name': 's-4vcpu-8gb-amd', 'optgroup': 'Premium AMD', 'section': 'size',
'provider': 'do'},
{'param': 's-8vcpu-16gb-amd', 'name': 's-8vcpu-16gb-amd', 'optgroup': 'Premium AMD', 'section': 'size', 'provider': 'do'},
{'param': 'g-2vcpu-8gb', 'name': 'g-2vcpu-8gb', 'optgroup': 'General Purpose', 'section': 'size', 'provider': 'do'},
{'param': 'g-4vcpu-16gb', 'name': 'g-4vcpu-16gb', 'optgroup': 'General Purpose', 'section': 'size', 'provider': 'do'},
{'param': 'g-8vcpu-32gb', 'name': 'g-8vcpu-32gb', 'optgroup': 'General Purpose', 'section': 'size', 'provider': 'do'},
{'param': 'g-32vcpu-128gb', 'name': 'g-32vcpu-128gb', 'optgroup': 'General Purpose', 'section': 'size', 'provider': 'do'},
{'param': 'g-40vcpu-160gb', 'name': 'g-40vcpu-160gb', 'optgroup': 'General Purpose', 'section': 'size', 'provider': 'do'},
{'param': 'c-4-8gib', 'name': 'c-4-8gib', 'optgroup': 'CPU-Optimized', 'section': 'size', 'provider': 'do'},
{'param': 'c-8-16gib', 'name': 'c-8-16gib', 'optgroup': 'CPU-Optimized', 'section': 'size', 'provider': 'do'},
{'param': 'c-16-32gib', 'name': 'c-16-32gib', 'optgroup': 'CPU-Optimized', 'section': 'size', 'provider': 'do'},
{'param': 'c-32-64gib', 'name': 'c-32-64gib', 'optgroup': 'CPU-Optimized', 'section': 'size', 'provider': 'do'},
{'param': 'm-2vcpu-16gb', 'name': 'm-2vcpu-16gb', 'optgroup': 'Memory-Optimized', 'section': 'size', 'provider': 'do'},
{'param': 'm-4vcpu-32gb', 'name': 'm-4vcpu-32gb', 'optgroup': 'Memory-Optimized', 'section': 'size', 'provider': 'do'},
{'param': 'm-8vcpu-64gb', 'name': 'm-8vcpu-64gb', 'optgroup': 'Memory-Optimized', 'section': 'size', 'provider': 'do'},
{'param': 'm-16vcpu-128gb', 'name': 'm-16vcpu-128gb', 'optgroup': 'Memory-Optimized', 'section': 'size', 'provider': 'do'},
{'param': 'm-24vcpu-192gb', 'name': 'm-24vcpu-192gb', 'optgroup': 'Memory-Optimized', 'section': 'size', 'provider': 'do'},
{'param': 'm-32vcpu-256gb', 'name': 'm-32vcpu-256gb', 'optgroup': 'Memory-Optimized', 'section': 'size', 'provider': 'do'},
{'param': 'm-32vcpu-256gb', 'name': 'm-32vcpu-256gb', 'optgroup': 'Memory-Optimized', 'section': 'size', 'provider': 'do'},
{'param': 'g1-standard-1-2', 'name': 'g1-standard-1-2', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-standard-2-4', 'name': 'g1-standard-2-4', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-standard-2-8', 'name': 'g1-standard-2-8', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-standard-4-8', 'name': 'g1-standard-4-8', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-standard-4-16', 'name': 'g1-standard-4-16', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-standard-8-16', 'name': 'g1-standard-8-16', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-standard-8-32', 'name': 'g1-standard-8-32', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-standard-16-32', 'name': 'g1-standard-16-32', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-standard-16-64', 'name': 'g1-standard-16-64', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-standard-32-64', 'name': 'g1-standard-32-64', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-standard-32-128', 'name': 'g1-standard-32-128', 'optgroup': 'Standard', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-cpu-2-2', 'name': 'g1-cpu-2-2', 'optgroup': 'vCPU', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-cpu-4-4', 'name': 'g1-cpu-4-4', 'optgroup': 'vCPU', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-cpu-8-8', 'name': 'g1-cpu-8-8', 'optgroup': 'vCPU', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-cpu-16-16', 'name': 'g1-cpu-16-16', 'optgroup': 'vCPU', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-cpu-32-32', 'name': 'g1-cpu-32-32', 'optgroup': 'vCPU', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-memory-4-32', 'name': 'g1-memory-4-32', 'optgroup': 'Memory', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-memory-8-64', 'name': 'g1-memory-8-64', 'optgroup': 'Memory', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-memory-16-128', 'name': 'g1-memory-16-128', 'optgroup': 'Memory', 'section': 'size', 'provider': 'gcore'},
{'param': 'g1-memory-32-256', 'name': 'g1-memory-32-256', 'optgroup': 'Memory', 'section': 'size', 'provider': 'gcore'},
{'param': 'gp2', 'name': 'gp2', 'optgroup': 'General Purpose SSD', 'section': 'volume_type', 'provider': 'aws'},
{'param': 'gp3', 'name': 'gp3', 'optgroup': 'General Purpose SSD', 'section': 'volume_type', 'provider': 'aws'},
{'param': 'standard', 'name': 'standard', 'optgroup': 'Magnetic', 'section': 'volume_type', 'provider': 'aws'},
{'param': 'io1', 'name': 'io1', 'optgroup': 'Provisioned IOPS SSD', 'section': 'volume_type', 'provider': 'aws'},
{'param': 'io2', 'name': 'io2', 'optgroup': 'Provisioned IOPS SSD', 'section': 'volume_type', 'provider': 'aws'},
{'param': 'sc1', 'name': 'sc1', 'optgroup': 'Cold HDD', 'section': 'volume_type', 'provider': 'aws'},
{'param': 'st1', 'name': 'st1', 'optgroup': 'Throughput Optimized HDD', 'section': 'volume_type', 'provider': 'aws'},
{'param': 'standard', 'name': 'standard', 'optgroup': 'Standard network SSD', 'section': 'volume_type', 'provider': 'gcore'},
{'param': 'ssd_hiiops', 'name': 'ssd_hiiops', 'optgroup': 'High IOPS SSD', 'section': 'volume_type', 'provider': 'gcore'},
{'param': 'cold', 'name': 'cold', 'optgroup': 'HDD disk', 'section': 'volume_type', 'provider': 'gcore'},
]
try:
ProvisionParam.insert_many(data_source).on_conflict_ignore().execute()
except Exception as e:
print(str(e))
data_source = [
{'code': 'RW', 'name': 'Rwanda'},
{'code': 'SO', 'name': 'Somalia'},
@ -744,7 +935,7 @@ def update_db_v_6_1_0(**kwargs):
def update_ver():
query = Version.update(version='6.1.1.0')
query = Version.update(version='6.1.2.0')
try:
query.execute()
except Exception:

View File

@ -337,6 +337,20 @@ class ProvidersCreds(BaseModel):
table_name = 'providers_creds'
class ProvisionParam(BaseModel):
id = AutoField()
param = CharField()
name = CharField()
optgroup = CharField()
section = CharField()
provider = CharField()
image = CharField(null=True)
class Meta:
table_name = 'provision_param'
constraints = [SQL('UNIQUE (param, section, provider)')]
class ProvisionedServers(BaseModel):
id = AutoField()
region = CharField()
@ -542,4 +556,4 @@ def create_tables():
Setting, Cred, Backup, Metrics, WafMetrics, Version, Option, SavedServer, Waf, ActionHistory,
PortScannerSettings, PortScannerPorts, PortScannerHistory, ProvidersCreds, ServiceSetting,
ProvisionedServers, MetricsHttpStatus, SMON, WafRules, Alerts, GeoipCodes, NginxMetrics,
SystemInfo, Services, UserName, GitSetting, CheckerSetting, ApacheMetrics])
SystemInfo, Services, UserName, GitSetting, CheckerSetting, ApacheMetrics, ProvisionParam])

View File

@ -30,6 +30,10 @@ def is_ip_or_dns(server_from_request: str) -> str:
return ''
form = cgi.FieldStorage()
serv = is_ip_or_dns(form.getvalue('serv'))
def checkAjaxInput(ajax_input: str) -> str:
pattern = re.compile('[&;|$`]')
if pattern.search(ajax_input):
@ -40,10 +44,6 @@ def checkAjaxInput(ajax_input: str) -> str:
return quote(ajax_input)
form = cgi.FieldStorage()
serv = is_ip_or_dns(form.getvalue('serv'))
def get_config_var(sec, var):
from configparser import ConfigParser, ExtendedInterpolation
try:
@ -1042,12 +1042,16 @@ def upload_and_restart(server_ip, cfg, **kwargs):
logging(server_ip, 'A new config file has been uploaded', login=login, keep_history=1, service=service)
except Exception as e:
logging('localhost', str(e), haproxywi=1)
# If master then save version of config in a new way
# If master then save version of config in a new way
if not kwargs.get('slave'):
from pathlib import Path
diff = ''
old_cfg = kwargs.get('oldcfg')
if old_cfg is None:
path = Path(old_cfg)
if not path.is_file():
old_cfg = tmp_file + '.old'
try:
get_config(server_ip, old_cfg, service=service, config_file_name=config_path)

View File

@ -19,6 +19,7 @@ form = funct.form
serv = funct.is_ip_or_dns(form.getvalue('serv'))
service = form.getvalue('service')
autorefresh = 0
servers_waf = ()
title = "HAProxy servers overview"
cmd = "ps ax |grep -e 'keep_alive.py' |grep -v grep |wc -l"
keep_alive, stderr = funct.subprocess_execute(cmd)
@ -67,6 +68,7 @@ else:
servers = sql.select_servers(server=serv)
autorefresh = 1
server_id = sql.select_server_id_by_ip(serv)
servers_waf = sql.select_waf_servers_metrics(user_id.value)
service_settings = sql.select_docker_service_settings(server_id, service)
else:
servers = sql.get_dick_permit(virt=1, haproxy=1)
@ -204,6 +206,7 @@ except Exception as e:
template = template.render(
h2=1, autorefresh=autorefresh, title=title, role=role, user=user, servers=servers_with_status1,
keep_alive=''.join(keep_alive), serv=serv, service=service, services=services, user_services=user_services,
service_settings=service_settings, user_status=user_status, user_plan=user_plan, token=token
service_settings=service_settings, user_status=user_status, user_plan=user_plan, servers_waf=servers_waf,
token=token
)
print(template)

View File

@ -25,12 +25,13 @@ try:
else:
is_terraform = True
params = sql.select_provisioning_params()
except Exception as e:
print(str(e))
rendered_template = template.render(
title="Servers provisioning", role=role, user=user, groups=groups, user_group=user_group,
servers=sql.select_provisioned_servers(), providers=sql.select_providers(user_group),
is_terraform=is_terraform, user_services=user_services, token=token
is_terraform=is_terraform, user_services=user_services, token=token, params=params
)
print(rendered_template)

View File

@ -1,5 +1,8 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import traceback
import sys
import funct
from db_model import *
@ -8,6 +11,11 @@ mysql_enable = funct.get_config_var('mysql', 'enable')
def out_error(error):
error = str(error)
exc_type, exc_obj, exc_tb = sys.exc_info()
file_name = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
stk = traceback.extract_tb(exc_tb, 1)
function_name = stk[0][2]
error = error + ' in function: ' + function_name + ' in file: ' + file_name
print('error: ' + error)
if 'database is locked' not in error:
try:
@ -351,7 +359,6 @@ def select_users(**kwargs):
(
User.last_login_date >= funct.get_data('regular', timedelta_minutes_minus=15)
), 0)], 1).alias('last_login')).order_by(User.user_id)
try:
query_res = query.execute()
except Exception as e:
@ -463,6 +470,7 @@ def get_hostname_by_server_ip(server_ip):
hostname = Server.get(Server.ip == server_ip)
except Exception as e:
return out_error(e)
# pass
else:
return hostname.hostname
@ -1297,120 +1305,6 @@ def select_waf_servers_metrics(uuid):
return query_res
def select_waf_metrics(serv, **kwargs):
cursor = conn.cursor()
if mysql_enable == '1':
if kwargs.get('time_range') == '60':
date_from = "and date > now() - INTERVAL 60 minute group by `date` div 100"
elif kwargs.get('time_range') == '180':
date_from = "and date > now() - INTERVAL 180 minute group by `date` div 200"
elif kwargs.get('time_range') == '360':
date_from = "and date > now() - INTERVAL 360 minute group by `date` div 300"
elif kwargs.get('time_range') == '720':
date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500"
else:
date_from = "and date > now() - INTERVAL 30 minute"
sql = """ select * from waf_metrics where serv = '{serv}' {date_from} order by `date` desc limit 60 """.format(
serv=serv, date_from=date_from)
else:
if kwargs.get('time_range') == '60':
date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0"
elif kwargs.get('time_range') == '180':
date_from = "and date > datetime('now', '-180 minutes', 'localtime') and rowid % 5 = 0"
elif kwargs.get('time_range') == '360':
date_from = "and date > datetime('now', '-360 minutes', 'localtime') and rowid % 7 = 0"
elif kwargs.get('time_range') == '720':
date_from = "and date > datetime('now', '-720 minutes', 'localtime') and rowid % 9 = 0"
else:
date_from = "and date > datetime('now', '-30 minutes', 'localtime')"
sql = """ select * from (select * from waf_metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(
serv=serv, date_from=date_from)
try:
cursor.execute(sql)
except Exception as e:
out_error(e)
else:
return cursor.fetchall()
def select_nginx_metrics(serv, **kwargs):
cursor = conn.cursor()
if mysql_enable == '1':
if kwargs.get('time_range') == '60':
date_from = "and date > now() - INTERVAL 60 minute group by `date` div 100"
elif kwargs.get('time_range') == '180':
date_from = "and date > now() - INTERVAL 180 minute group by `date` div 200"
elif kwargs.get('time_range') == '360':
date_from = "and date > now() - INTERVAL 360 minute group by `date` div 300"
elif kwargs.get('time_range') == '720':
date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500"
else:
date_from = "and date > now() - INTERVAL 30 minute"
sql = """ select * from nginx_metrics where serv = '{serv}' {date_from} order by `date` desc limit 60 """.format(
serv=serv, date_from=date_from)
else:
if kwargs.get('time_range') == '60':
date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0"
elif kwargs.get('time_range') == '180':
date_from = "and date > datetime('now', '-180 minutes', 'localtime') and rowid % 5 = 0"
elif kwargs.get('time_range') == '360':
date_from = "and date > datetime('now', '-360 minutes', 'localtime') and rowid % 7 = 0"
elif kwargs.get('time_range') == '720':
date_from = "and date > datetime('now', '-720 minutes', 'localtime') and rowid % 9 = 0"
else:
date_from = "and date > datetime('now', '-30 minutes', 'localtime')"
sql = """ select * from (select * from nginx_metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(
serv=serv, date_from=date_from)
try:
cursor.execute(sql)
except Exception as e:
out_error(e)
else:
return cursor.fetchall()
def select_apache_metrics(serv, **kwargs):
cursor = conn.cursor()
if mysql_enable == '1':
if kwargs.get('time_range') == '60':
date_from = "and date > now() - INTERVAL 60 minute group by `date` div 100"
elif kwargs.get('time_range') == '180':
date_from = "and date > now() - INTERVAL 180 minute group by `date` div 200"
elif kwargs.get('time_range') == '360':
date_from = "and date > now() - INTERVAL 360 minute group by `date` div 300"
elif kwargs.get('time_range') == '720':
date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500"
else:
date_from = "and date > now() - INTERVAL 30 minute"
sql = """ select * from apache_metrics where serv = '{serv}' {date_from} order by `date` desc limit 60 """.format(
serv=serv, date_from=date_from)
else:
if kwargs.get('time_range') == '60':
date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0"
elif kwargs.get('time_range') == '180':
date_from = "and date > datetime('now', '-180 minutes', 'localtime') and rowid % 5 = 0"
elif kwargs.get('time_range') == '360':
date_from = "and date > datetime('now', '-360 minutes', 'localtime') and rowid % 7 = 0"
elif kwargs.get('time_range') == '720':
date_from = "and date > datetime('now', '-720 minutes', 'localtime') and rowid % 9 = 0"
else:
date_from = "and date > datetime('now', '-30 minutes', 'localtime')"
sql = """ select * from (select * from apache_metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(
serv=serv, date_from=date_from)
try:
cursor.execute(sql)
except Exception as e:
out_error(e)
else:
return cursor.fetchall()
def insert_waf_metrics_enable(serv, enable):
try:
server_id = Server.get(Server.ip == serv).server_id
@ -1598,9 +1492,16 @@ def delete_apache_metrics():
out_error(e)
def select_metrics(serv, **kwargs):
def select_metrics(serv, service, **kwargs):
cursor = conn.cursor()
if service in ('nginx', 'apache', 'waf'):
metrics_table = '{}_metrics'.format(service)
elif service == 'http_metrics':
metrics_table = 'metrics_http_status'
else:
metrics_table = 'metrics'
if mysql_enable == '1':
if kwargs.get('time_range') == '60':
date_from = "and date > now() - INTERVAL 60 minute group by `date` div 100"
@ -1612,8 +1513,8 @@ def select_metrics(serv, **kwargs):
date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500"
else:
date_from = "and date > now() - INTERVAL 30 minute"
sql = """ select * from metrics where serv = '{serv}' {date_from} order by `date` asc """.format(
serv=serv, date_from=date_from
sql = """ select * from {metrics_table} where serv = '{serv}' {date_from} order by `date` asc """.format(
metrics_table=metrics_table, serv=serv, date_from=date_from
)
else:
if kwargs.get('time_range') == '60':
@ -1627,47 +1528,8 @@ def select_metrics(serv, **kwargs):
else:
date_from = "and date > datetime('now', '-30 minutes', 'localtime')"
sql = """ select * from (select * from metrics where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(
serv=serv, date_from=date_from)
try:
cursor.execute(sql)
except Exception as e:
out_error(e)
else:
return cursor.fetchall()
def select_metrics_http(serv, **kwargs):
cursor = conn.cursor()
if mysql_enable == '1':
if kwargs.get('time_range') == '60':
date_from = "and date > now() - INTERVAL 60 minute group by `date` div 100"
elif kwargs.get('time_range') == '180':
date_from = "and date > now() - INTERVAL 180 minute group by `date` div 200"
elif kwargs.get('time_range') == '360':
date_from = "and date > now() - INTERVAL 360 minute group by `date` div 300"
elif kwargs.get('time_range') == '720':
date_from = "and date > now() - INTERVAL 720 minute group by `date` div 500"
else:
date_from = "and date > now() - INTERVAL 30 minute"
sql = """ select * from metrics_http_status where serv = '{serv}' {date_from} order by `date` desc """.format(
serv=serv, date_from=date_from)
else:
if kwargs.get('time_range') == '60':
date_from = "and date > datetime('now', '-60 minutes', 'localtime') and rowid % 2 = 0"
elif kwargs.get('time_range') == '180':
date_from = "and date > datetime('now', '-180 minutes', 'localtime') and rowid % 5 = 0"
elif kwargs.get('time_range') == '360':
date_from = "and date > datetime('now', '-360 minutes', 'localtime') and rowid % 7 = 0"
elif kwargs.get('time_range') == '720':
date_from = "and date > datetime('now', '-720 minutes', 'localtime') and rowid % 9 = 0"
else:
date_from = "and date > datetime('now', '-30 minutes', 'localtime')"
sql = """ select * from (select * from metrics_http_status where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(
serv=serv, date_from=date_from)
sql = """ select * from (select * from {metrics_table} where serv = '{serv}' {date_from} order by `date`) order by `date` """.format(
metrics_table=metrics_table, serv=serv, date_from=date_from)
try:
cursor.execute(sql)
@ -2652,7 +2514,7 @@ def insert_port_scanner_port(serv, user_group_id, port, service_name):
def select_ports(serv):
cursor = conn.cursor()
sql = """select port from port_scanner_ports where serv = '%s' """ % serv
sql = """select port from port_scanner_ports where serv = '%s' """ % serv
try:
cursor.execute(sql)
@ -2772,24 +2634,22 @@ def add_provider_gcore(provider_name, provider_group, provider_user, provider_pa
def select_providers(user_group, **kwargs):
cursor = conn.cursor()
if user_group == 1:
user_group = ''
if kwargs.get('key'):
user_group += " where key = '%s' " % kwargs.get('key')
query = ProvidersCreds.select()
else:
user_group = "where `group` = '%s'" % user_group
if kwargs.get('key'):
user_group += " and key = '%s' " % kwargs.get('key')
sql = """ select * from providers_creds %s""" % user_group
query = ProvidersCreds.select().where(
(ProvidersCreds.key == kwargs.get('key'))
& (ProvidersCreds.group == user_group)
)
else:
query = ProvidersCreds.select().where(ProvidersCreds.group == user_group)
try:
cursor.execute(sql)
query_res = query.execute()
except Exception as e:
out_error(e)
else:
return cursor.fetchall()
return query_res
def delete_provider(provider_id):
@ -3542,6 +3402,7 @@ def select_checker_settings_for_server(service_id: int, server_id: int):
def insert_new_checker_setting_for_server(server_ip: str) -> None:
server_id = ()
try:
server_id = Server.get(Server.ip == server_ip).server_id
except Exception as e:
@ -3597,3 +3458,15 @@ def update_service_checker_settings(
return False
else:
return True
def select_provisioning_params():
query = ProvisionParam.select()
try:
query_res = query.execute()
except Exception as e:
out_error(e)
return
else:
return query_res

View File

@ -1,18 +1,18 @@
{% if versions is defined %}
{% set current_ver = versions.0 %}
{% set new_ver = versions.1 %}
{% set current_ver_without_dots = versions.2 %}
{% set new_ver_without_dots = versions.3 %}
{% endif %}
{% if new_ver_without_dots is defined and current_ver_without_dots is defined and new_ver is defined and new_ver_without_dots is defined %}
{%- if versions is defined -%}
{%- set current_ver = versions.0 -%}
{%- set new_ver = versions.1 %}
{%- set current_ver_without_dots = versions.2 %}
{%- set new_ver_without_dots = versions.3 %}
{%- endif -%}
{%- if new_ver_without_dots is defined and current_ver_without_dots is defined and new_ver is defined and new_ver_without_dots is defined -%}
<a style="color: #000; cursor: pointer;">
{% if new_ver_without_dots > current_ver_without_dots and new_ver != "Sorry cannot get current version" %}
<span id="show-updates-button" class="new-version-exists">v{{current_ver}} </span>
{%- if new_ver_without_dots > current_ver_without_dots and new_ver != "Sorry cannot get current version" %}
<span id="show-updates-button" class="new-version-exists">v{{current_ver}}</span>
<script defer src="/inc/fontawesome.min.js"></script>
{% else %}
{%- else %}
<a href="/app/users.py#updatehapwi" title="Update center" style="color: black;">v{{current_ver}}</a>
{% endif %}
{%- endif %}
</a>
{% else %}
{%- else %}
<a href="/app/users.py#updatehapwi" title="Update center" style="color: black;">v{{current_ver}}</a>
{% endif %}
{% endif -%}

View File

@ -1,7 +1,6 @@
{% from 'include/input_macros.html' import input, select, checkbox %}
{% from 'include/provisioning/variables.html' import aws_regions, aws_oss, aws_volume_type %}
{% from 'include/provisioning/variables.html' import generate_opt_options, get_nice_name %}
{% for s in server %}
{% set region_name = [] %}
<div id="aws_edit" style="display: none; padding: 0 2px 0 0; margin-left: 1px; margin-right: -4px;">
<table class="overview provisioning_table">
{% include 'include/tr_validate_tips.html' %}
@ -29,10 +28,10 @@
<select id="aws_edit_id_provider">
{% for p in providers %}
{% if p.2 == 'aws' %}
{% if s.provider_id|int() == p.0|int() %}
<option value="{{ p.0 }}" selected>{{ p.1 }}</option>
{% if s.provider_id|int() == p.id|int() %}
<option value="{{ p.id }}" selected>{{ p.name }}</option>
{% else %}
<option value="{{ p.0 }}">{{ p.1 }}</option>
<option value="{{ p.id }}">{{ p.name }}</option>
{% endif %}
{% endif %}
{% endfor %}
@ -44,13 +43,9 @@
Region
</td>
<td>
{% for key, value in aws_regions.items() %}
{% if s.region|int() == key|int() %}
{% do region_name.append(value) %}
{% endif %}
{% endfor %}
<span id="aws_edit_region" style="display: none;">{{s.region}}</span>
{{region_name.0}}
{% set id = 'aws_edit_region-'+s.id|string() %}
{{get_nice_name(id, s.region, 'aws', 'region', params)}}
</td>
</tr>
<tr>
@ -76,7 +71,7 @@
<span class="need-field">*</span>
</td>
<td>
{{ select('aws_edit_oss', values=aws_oss, first=s.os, disabled='false') }}
{{ generate_opt_options('aws_edit_oss', 'aws', 'image', params, first=s.os) }}
</td>
</tr>
<tr>
@ -86,7 +81,7 @@
</td>
<td>
{{input('aws_edit_ssh_name', size='26', value=s.ssh_key_name)}}
<div class="tooltip tooltipTop tooltipTd">SSH key must exists in region where instance create</div>
<div class="tooltip tooltipTop tooltipTd">The SSH key must exist in the region where the instance is being edited</div>
</td>
</tr>
<tr>
@ -109,15 +104,7 @@
<span class="need-field">*</span>
</td>
<td>
<select id="aws_edit_volume_type">
{% for key, value in aws_volume_type.items() %}
{% if s.volume_type == key %}
<option value="{{key}}" selected>{{value}}</option>
{% else %}
<option value="{{key}}">{{value}}</option>
{% endif %}
{% endfor %}
</select>
{{ generate_opt_options('aws_edit_volume_type', 'aws', 'volume_type', params, first=s.volume_type) }}
</td>
</tr>
<tr>
@ -166,7 +153,7 @@
<td class="padding20" style="padding-bottom: 25px;padding-top: 25px;">Firewall</td>
<td>
{{checkbox('aws_edit_firewall', checked=checked)}}
<div class="tooltip tooltipTop tooltipTd">Roxy-WI will create Security group and open 22, 443, 1999, 8085, 8086 ports. Otherwise all ports will be closed</div>
<div class="tooltip tooltipTop tooltipTd">Roxy-WI will create Security group and open 22, 443, 1999, 8085, 8086 ports. Otherwise, all ports will be closed</div>
</td>
</tr>
<tr>
@ -176,4 +163,4 @@
</tr>
</table>
</div>
{% endfor %}
{% endfor %}

View File

@ -1,5 +1,5 @@
{% from 'include/input_macros.html' import input, select, checkbox %}
{% from 'include/provisioning/variables.html' import do_regions, do_oss %}
{% from 'include/provisioning/variables.html' import get_nice_name, generate_opt_options %}
{% for s in server %}
{% set region_name = [] %}
<div id="do_edit" style="display: none; padding: 0 2px 0 0; margin-left: 1px; margin-right: -4px;">
@ -28,11 +28,11 @@
<td>
<select id="do_edit_id_provider">
{% for p in providers %}
{% if p.2 == 'do' %}
{% if s.provider_id|int() == p.0|int() %}
<option value="{{ p.0 }}" selected>{{ p.1 }}</option>
{% if p.type == 'do' %}
{% if s.provider_id|int() == p.id|int() %}
<option value="{{ p.id }}" selected>{{ p.name }}</option>
{% else %}
<option value="{{ p.0 }}">{{ p.1 }}</option>
<option value="{{ p.id }}">{{ p.name }}</option>
{% endif %}
{% endif %}
{% endfor %}
@ -44,13 +44,9 @@
Region
</td>
<td>
{% for key, value in do_regions.items() %}
{% if s.region|int() == key|int() %}
{% do region_name.append(value) %}
{% endif %}
{% endfor %}
{% set id = 'do_edit_regions-' + id|string() %}
{{ get_nice_name(id, 'do', 'region', params) }}
<span id="do_edit_regions" style="display: none;">{{s.region}}</span>
{{region_name.0}}
</td>
</tr>
<tr>
@ -63,7 +59,7 @@
Size
<span class="need-field">*</span>
</td>
<td>{{input('do_edit_size', size='30', value=s.instance_type)}}</td>
<td>{{ generate_opt_options('do_edit_size', 'do', 'size', params, first=s.instance_type) }}</td>
</tr>
<tr>
<td class="padding20">
@ -71,7 +67,7 @@
<span class="need-field">*</span>
</td>
<td>
{{ select('do_edit_oss', values=do_oss, first=s.os, disabled='false') }}
{{ generate_opt_options('do_edit_oss', 'do', 'image', params, first=s.os) }}
</td>
</tr>
<tr>
@ -81,12 +77,12 @@
</td>
<td>
<select id="do_edit_ssh_choose">
{% if s.ssh_key_name is not none %}
{% if s.ssh_key_name != none %}
<option value="ssh_name" selected>Set SSH key name</option>
{% else %}
<option value="ssh_name">Set SSH key name</option>
{% endif %}
{% if s.ssh_ids is not none %}
{% if s.ssh_ids != none %}
<option value="ssh_ids" selected>Set SSH key ids</option>
{% else %}
<option value="ssh_ids">Set SSH key ids</option>
@ -94,7 +90,7 @@
</select>
</td>
</tr>
<tr id="do_edit_ssh_ids_tr" {% if s.ssh_ids is none %}style="display: none;"{% endif %}>
<tr id="do_edit_ssh_ids_tr" {% if s.ssh_ids == none %}style="display: none;"{% endif %}>
<td class="padding20 padding-top20">
SSH key ids
<span class="need-field">*</span>
@ -116,7 +112,7 @@
</tr>
<tr>
{% set checked='checked' %}
{% if s.monitoring == 'false' %}
{% if s.monitoring == 0 %}
{% set checked='' %}
{% endif %}
<td class="padding20">Monitoring</td>
@ -126,7 +122,7 @@
</tr>
<tr>
{% set checked='checked' %}
{% if s.backup == 'false' %}
{% if s.backup == 0 %}
{% set checked='' %}
{% endif %}
<td class="padding20">Backup</td>
@ -141,7 +137,7 @@
</tr>
<tr>
{% set checked='checked' %}
{% if s.private_networking == 'false' %}
{% if s.private_networking == 0 %}
{% set checked='' %}
{% endif %}
<td class="padding20">Private IP</td>
@ -151,7 +147,7 @@
</tr>
<tr>
{% set checked='checked' %}
{% if s.floating_ip == 'false' %}
{% if s.floating_ip == 0 %}
{% set checked='' %}
{% endif %}
<td class="padding20">Floating Ip</td>
@ -161,7 +157,7 @@
</tr>
<tr>
{% set checked='checked' %}
{% if s.firewall == 'false' %}
{% if s.firewall == 0 %}
{% set checked='' %}
{% endif %}
<td class="padding20" style="padding-bottom: 25px;padding-top: 25px;">Firewall</td>
@ -190,4 +186,4 @@
});
</script>
</div>
{% endfor %}
{% endfor %}

View File

@ -1,7 +1,8 @@
{% from 'include/input_macros.html' import input, select, checkbox %}
{% from 'include/provisioning/variables.html' import gcore_regions, gcore_volume_type %}
{% from 'include/provisioning/variables.html' import generate_opt_options, get_nice_name %}
{% for s in server %}
{% set region_name = [] %}
{% set os_nice_name = [] %}
<div id="gcore_edit" style="display: none; padding: 0 2px 0 0; margin-left: 1px; margin-right: -4px;">
<table class="overview provisioning_table">
{% include 'include/tr_validate_tips.html' %}
@ -28,11 +29,11 @@
<td>
<select id="gcore_edit_id_provider">
{% for p in providers %}
{% if p.2 == 'gcore' %}
{% if s.provider_id|int() == p.0|int() %}
<option value="{{ p.0 }}" selected>{{ p.1 }}</option>
{% if p.type == 'gcore' %}
{% if s.provider_id|int() == p.id|int() %}
<option value="{{ p.id }}" selected>{{ p.name }}</option>
{% else %}
<option value="{{ p.0 }}">{{ p.1 }}</option>
<option value="{{ p.id }}">{{ p.name }}</option>
{% endif %}
{% endif %}
{% endfor %}
@ -44,13 +45,9 @@
Region
</td>
<td>
{% for key, value in gcore_regions.items() %}
{% if s.region|int() == key|int() %}
{% do region_name.append(value) %}
{% endif %}
{% endfor %}
<span id="gcore_edit_region" style="display: none;">{{s.region}}</span>
{{region_name.0}}
{% set id = 'gcore_edit_region-'+s.id|string() %}
{{get_nice_name(id, s.region, 'gcore', 'region', params)}}
</td>
</tr>
<tr>
@ -72,7 +69,7 @@
<span class="need-field">*</span>
</td>
<td>
{{input('gcore_edit_size', size='26', value=s.instance_type)}}
{{ generate_opt_options('gcore_edit_size', 'gcore', 'size', params, first=s.instance_type) }}
</td>
</tr>
<tr>
@ -81,12 +78,9 @@
<span class="need-field">*</span>
</td>
<td>
{% set oss = dict() %}
{% set oss = {"centos-7-1811-x64-qcow2": "Centos 7", "centos8-1911-x64": "Centos 8", "sles15-SP2": "SLES 15-SP2", "fedora-32-x64-qcow2": "Fedora 32", "fedora-33-x64-qcow2": "Fedora 33",
"fedora-coreos-32-x64": "Fedora CoreOS 32", "ubuntu-16.04-x64": "Ubuntu 16.04", "ubuntu-18.04-x64": "Ubuntu 18.04",
"ubuntu-20.04-x64": "Ubuntu 20.04", "ubuntu-20.10-x64": "Ubuntu 20.10", "debian-9.7-x64-qcow2": "Debian 9.7",
"debian-10.1-x64-qcow2": "Debian 10.1", "debian-10.3-x64-qcow2": "Debian 10.3"} %}
{{ select('gcore_edit_oss', values=oss, first=s.os, disabled='false') }}
<span id="gcore_edit_oss" style="display: none;">{{s.os}}</span>
{% set id = 'gcore_edit_oss-'+s.id|string() %}
{{get_nice_name(id, s.os, 'gcore', 'image', params)}}
</td>
</tr>
<tr>
@ -96,7 +90,7 @@
</td>
<td>
{{input('gcore_edit_ssh_name', size='26', value=s.ssh_key_name)}}
<div class="tooltip tooltipTop tooltipTd">SSH key must exists in region where instance edit</div>
<div class="tooltip tooltipTop tooltipTd">The SSH key must exist in the region where the instance is being edited</div>
</td>
</tr>
<tr>
@ -119,15 +113,7 @@
<span class="need-field">*</span>
</td>
<td>
<select id="gcore_edit_volume_type">
{% for key, value in gcore_volume_type.items() %}
{% if s.volume_type == key %}
<option value="{{key}}" selected>{{value}}</option>
{% else %}
<option value="{{key}}">{{value}}</option>
{% endif %}
{% endfor %}
</select>
{{ generate_opt_options('gcore_edit_volume_type', 'gcore', 'volume_type', params, first=s.volume_type) }}
</td>
</tr>
<tr>
@ -150,12 +136,12 @@
<td class="padding20">Network Type</td>
<td>
<select id="gcore_edit_network_type">
{% if s.public_ip == 'external' %}
{% if s.public_ip == 1 %}
<option value="external" selected>External IP</option>
{% else %}
<option value="external">External IP</option>
{% endif %}
{% if s.public_ip == 'any_subnet' %}
{% if s.public_ip == 0 %}
<option value="any_subnet" selected>Custom network</option>
{% set style = 'display: table-row;' %}
{% else %}
@ -192,7 +178,7 @@
</div>
<script>
$( function() {
$('select').selectmenu();
// $('select').selectmenu();
$('#gcore_edit_network_type').on('selectmenuchange', function (){
if ($('#gcore_edit_network_type option:selected').val() == 'any_subnet') {
$('#gcore_edit_any_subnet').show();
@ -201,44 +187,5 @@ $( function() {
}
});
});
function refreshOss() {
var newOptions = {
"centos-7-gcore": "Centos 7"
};
if ($('#gcore_edit_region').text() == '6' || $('#gcore_edit_region').text() == '14') {
var newOptions = {
"centos-7-gcore": "Centos 7"
};
} else if ($('#gcore_edit_region').text() == '10') {
var newOptions = {
"centos-7-gcore": "Centos 7",
"sles15-SP2": "SLES 15-SP2"
};
} else if ($('#gcore_edit_region').text() == '18' || $('#gcore_edit_region').text() == '22') {
var newOptions = {
"centos-7-1811-x64-qcow2": "Centos 7",
"centos8-1911-x64": "Centos 8",
"sles15-SP2": "SLES 15-SP2",
"fedora-32-x64-qcow2": "Fedora 32",
"fedora-33-x64-qcow2": "Fedora 33",
"fedora-coreos-32-x64": "Fedora CoreOS 32",
"ubuntu-16.04-x64": "Ubuntu 16.04",
"ubuntu-18.04-x64": "Ubuntu 18.04",
"ubuntu-20.04-x64": "Ubuntu 20.04",
"ubuntu-20.10-x64": "Ubuntu 20.10",
"debian-9.7-x64-qcow2": "Debian 9.7",
"debian-10.1-x64-qcow2": "Debian 10.1",
"debian-10.3-x64-qcow2": "Debian 10.3"
};
}
var $el = $("#gcore_edit_oss");
$el.empty();
$.each(newOptions, function(key,value) {
$el.append($("<option></option>")
.attr("value", key).text(value));
});
$el.selectmenu("refresh");
}
refreshOss();
</script>
{% endfor %}
{% endfor %}

View File

@ -1,16 +1,16 @@
{% from 'include/provisioning/variables.html' import get_nice_name %}
{% for p in providers %}
<tr id="provider-{{p.0}}" class="{{ loop.cycle('odd', 'even') }} {% if adding %}newprovider{% endif %}">
<td class="padding10 first-collumn"><span id="provider-name-{{p.0}}">{{p.1}}</span></td>
<tr id="provider-{{p.id}}" class="{{ loop.cycle('odd', 'even') }} {% if adding %}newprovider{% endif %}">
<td class="padding10 first-collumn"><span id="provider-name-{{p.id}}">{{p.name}}</span></td>
<td style="width: 10%">
<span id="provider-type-{{p.0}}">
{% if p.2 == 'do' %}
DigitalOcean
<span id="provider-type-{{p.id}}">
{% set id = "provider-type-nice-" + id|string() %}
{{ get_nice_name(id, p.type, p.type, 'provider', params) }}
{% if p.type == 'do' %}
{% set onclickEditAction = 'editDoProvider' %}
{% elif p.2 == 'aws' %}
AWS
{% elif p.type == 'aws' %}
{% set onclickEditAction = 'editAwsProvider' %}
{% elif p.2 == 'gcore' %}
G-Core Labs
{% elif p.type == 'gcore' %}
{% set onclickEditAction = 'editGcoreProvider' %}
{% endif %}
</span>
@ -20,25 +20,25 @@
{% for g in groups %}
{% if adding %}
{% if user_group|int() == g.group_id|int() %}
<span id="provider-group-{{p.0}}">{{ g.name }}</span>
<span id="provider-group-{{p.id}}">{{ g.name }}</span>
{% endif %}
{% else %}
{% if p.3|int() == g.group_id|int() %}
<span id="provider-group-{{p.0}}">{{ g.name }}</span>
{% if p.group|int() == g.group_id|int() %}
<span id="provider-group-{{p.id}}">{{ g.name }}</span>
{% endif %}
{% endif %}
{% endfor %}
</td>
{% else %}
<span id="provider-group-{{p.0}}" style="display: none;">user_group</span>
<span id="provider-group-{{p.id}}" style="display: none;">user_group</span>
{% endif %}
<td id="provider-created-date-{{p.0}}" style="width: 15%">{{p.6}}</td>
<td id="provider-edited-date-{{p.0}}" style="width: 100%">{{p.7}}</td>
<td id="provider-created-date-{{p.id}}" style="width: 15%">{{p.create_date}}</td>
<td id="provider-edited-date-{{p.id}}" style="width: 100%">{{p.edit_date}}</td>
<td>
<a class="edit" onclick="{{onclickEditAction}}({{p.0}})" title="Edit provider {{p.1}}" style="cursor: pointer;"></a>
<a class="edit" onclick="{{onclickEditAction}}({{p.id}})" title="Edit provider {{p.name}}" style="cursor: pointer;"></a>
</td>
<td>
<a class="delete" onclick="confirmDeleteProvider({{p.0}})" title="Delete provider {{p.1}}" style="cursor: pointer;"></a>
<a class="delete" onclick="confirmDeleteProvider({{p.id}})" title="Delete provider {{p.name}}" style="cursor: pointer;"></a>
</td>
</tr>
{% endfor %}
{% endfor %}

View File

@ -1,32 +1,13 @@
{% from 'include/provisioning/variables.html' import gcore_regions, do_regions, aws_regions %}
{% from 'include/provisioning/variables.html' import get_nice_name %}
{% from 'include/input_macros.html' import copy_to_clipboard %}
{% for s in servers %}
{% set region_name = [] %}
{% if s.type == 'do' %}
{% set provider_full_name = 'DigitalOcean' %}
{% set onclickEditAction = 'editDoServer' %}
{% for key, value in do_regions.items() %}
{% if s.region|int() == key|int() %}
{% do region_name.append(value) %}
{% endif %}
{% endfor %}
{% if s.type == 'do' %}
{% set onclickEditAction = 'editDoServer' %}
{% elif s.type == 'aws' %}
{% set provider_full_name = 'AWS' %}
{% set onclickEditAction = 'editAwsServer' %}
{% for key, value in aws_regions.items() %}
{% if s.region|int() == key|int() %}
{% do region_name.append(value) %}
{% endif %}
{% endfor %}
{% elif s.type == 'gcore' %}
{% set provider_full_name = 'G-Core Labs' %}
{% set onclickEditAction = 'editGcoreServer' %}
{% for key, value in gcore_regions.items() %}
{% if s.region|int() == key|int() %}
{% do region_name.append(value) %}
{% endif %}
{% endfor %}
{% endif %}
{% endif %}
<tr id="server-{{s.id}}" class="{{ loop.cycle('odd', 'even') }} {% if adding %}newserver{% endif %}">
<td class="padding10 first-collumn">
<span id="server-name-{{s.id}}">{{s.name}}</span>
@ -36,9 +17,9 @@
</td>
<td style="width: 10%">
{% for p in providers %}
{% if p.0|int() == s.provider_id|int() %}
<span>{{ p.1 }}</span>
<span id="server-provider-{{s.id}}" style="display: none;">{{p.0}}</span>
{% if p.id|int() == s.provider_id|int() %}
<span>{{ p.name }}</span>
<span id="server-provider-{{s.id}}" style="display: none;">{{p.id}}</span>
{% endif %}
{% endfor %}
</td>
@ -46,31 +27,33 @@
<td style="width: 5%">
{% for g in groups %}
{% if adding %}
{% if user_group|int() == g.group_id|int() %}
{{ g.name }}
<span id="server-group-{{s.id}}" style="display: none;">{{ g.group_id }}</span>
{% endif %}
{% if user_group|int() == g.group_id|int() %}
{{ g.name }}
<span id="server-group-{{s.id}}" style="display: none;">{{ g.group_id }}</span>
{% endif %}
{% else %}
{% if s.group_id|int() == g.group_id|int() %}
{{ g.name }}
<span id="server-group-{{s.id}}" style="display: none;">{{ g.group_id }}</span>
{% endif %}
{% if s.group_id|int() == g.group_id|int() %}
{{ g.name }}
<span id="server-group-{{s.id}}" style="display: none;">{{ g.group_id }}</span>
{% endif %}
{% endif %}
{% endfor %}
</td>
{% else %}
<span id="server-group-{{s.id}}" style="display: none;">{{user_group}}</span>
{% endif %}
<td style="width: 10%">
{{provider_full_name}}
{% if role != 1 %}
<span id="server-group-{{s.id}}" style="display: none;">{{user_group}}</span>
{% endif %}
{{get_nice_name(id, s.type, s.type, 'provider', params)}}
<span id="server-cloud-{{s.id}}" style="display: none;">{{s.type}}</span>
</td>
<td style="width: 10%">
{{region_name.0}}
{% set id = "server-region-" + s.id|string() %}
{{get_nice_name(id, s.region, s.type, 'region', params)}}
</td>
<td style="width: 10%">
{% set id = "server-os-" + s.id|string() %}
{{ copy_to_clipboard(id=id, value=s.os) }}
{{get_nice_name(id, s.os, s.type, 'image', params)}}
</td>
<td style="width: 15%">
{% set id = "server-ip-" + s.id|string() %}
@ -98,4 +81,4 @@
<a class="delete" onclick="confirmDeleteProvisionedServer({{s.id}})" title="Delete server {{s.name}}" style="cursor: pointer;"></a>
</td>
</tr>
{% endfor %}
{% endfor %}

View File

@ -178,7 +178,6 @@
</nav>
</div>
</div>
<div id="cover"></div>
<div class="container">
{% if h2 %}
<h2>

View File

@ -62,17 +62,23 @@
function showMetrics() {
{% if service == 'haproxy' %}
{% for s in servers %}
{% if s.8.0.9 %}
getChartData(server_ip)
getHttpChartData(server_ip)
getWafChartData(server_ip)
{% endif %}
{% endfor %}
{% endif %}
showOverviewServer('{{s.1}}', server_ip, '{{s.0}}', '{{service}}');
{% if service == 'nginx' %}
showNginxConnections(server_ip)
getNginxChartData(server_ip)
{% if s.8.0.21 %}
getNginxChartData(server_ip)
{% endif %}
{% elif service == 'apache' %}
getApacheChartData(server_ip)
{% if s.8.0.27 %}
getApacheChartData(server_ip)
{% endif %}
{% elif service == 'haproxy' %}
showBytes(server_ip)
{% endif %}
@ -307,39 +313,47 @@
{% endfor %}
</div>
{% if serv %}
{% if service in ('haproxy', 'nginx', 'apache') %}
<div style="clear: both; width: 97%;">
<div style="padding-left: 25px;float: left;margin-top: -15px;">
<b>Time range:</b>
<select title="Choose time range" id="time-range">
<option value="30">30 minutes</option>
<option value="60">1 hour</option>
<option value="180">3 hours</option>
<option value="360">6 hours</option>
<option value="720">12 hours</option>
</select>
</div>
<div id="refresh" style="text-align: right;margin-right: 3%;" title="Refresh metrics" onclick="showMetrics()">
<span class="refresh"></span>
</div>
</div>
{% endif %}
{% for s in servers %}
{% if service == 'haproxy' %}
{% if service in ('haproxy', 'nginx', 'apache') %}
{% if (service == 'haproxy' and s.8.0.9)
or (service == 'nginx' and s.8.0.21)
or (service == 'apache' and s.8.0.27) %}
<div style="clear: both; width: 97%;">
<div style="padding-left: 25px;float: left;margin-top: -15px;">
<b>Time range:</b>
<select title="Choose time range" id="time-range">
<option value="30">30 minutes</option>
<option value="60">1 hour</option>
<option value="180">3 hours</option>
<option value="360">6 hours</option>
<option value="720">12 hours</option>
</select>
</div>
<div id="refresh" style="text-align: right;margin-right: 3%;" title="Refresh metrics" onclick="showMetrics()">
<span class="refresh"></span>
</div>
</div>
{% endif %}
{% endif %}
{% if service == 'haproxy' and s.8.0.9 %}
<div id="server_metrics_div" class="chart-container_overview">
<canvas id="{{s.2}}" role="img"></canvas>
</div>
<div class="chart-container_overview http_metrics_div">
<canvas id="http_{{s.2}}" role="img"></canvas>
</div>
{% for waf_server in servers_waf %}
{% if waf_server.server.ip == s.2 %}
<div id="waf_metrics_div" class="chart-container_overview">
<canvas id="s_{{s.2}}" role="img"></canvas>
<canvas id="waf_{{s.2}}" role="img"></canvas>
</div>
{% elif service == 'nginx' %}
{% endif %}
{% endfor %}
{% elif service == 'nginx' and s.8.0.21 %}
<div id="nginx_metrics_div" class="chart-container" style="display: block; width: 90%; height: 300px;">
<canvas id="nginx_{{s.2}}" role="img"></canvas>
</div>
{% elif service == 'apache' %}
{% elif service == 'apache' and s.8.0.27 %}
<div id="apache_metrics_div" class="chart-container" style="display: block; width: 90%; height: 300px;">
<canvas id="apache_{{s.2}}" role="img"></canvas>
</div>

View File

@ -1,4 +1,4 @@
{% from 'include/provisioning/variables.html' import gcore_regions, do_regions, aws_regions, aws_oss, do_oss, aws_volume_type, gcore_volume_type %}
{% from 'include/provisioning/variables.html' import generate_opt_options %}
<div id="do_create" style="display: none; padding: 0 2px 0 0; margin-left: 1px; margin-right: -4px;">
<table class="overview provisioning_table">
{% include 'include/tr_validate_tips.html' %}
@ -42,8 +42,8 @@
<td>
<select id="do_create_provider">
{% for p in providers %}
{% if p.2 == 'do' %}
<option value="{{ p.0 }}">{{ p.1 }}</option>
{% if p.type == 'do' %}
<option value="{{ p.id }}">{{ p.name }}</option>
{% endif %}
{% endfor %}
</select>
@ -55,7 +55,7 @@
<span class="need-field">*</span>
</td>
<td>
{{ select('do_create_regions', values=do_regions) }}
{{ generate_opt_options('do_create_regions', 'do', 'region', params) }}
<div class="tooltip tooltipTop tooltipTd">Not all regions may be active</div>
</td>
</tr>
@ -70,39 +70,7 @@
<span class="need-field">*</span>
</td>
<td>
<select id="do_create_size" required="required">
<optgroup label="Basic">
<option value="s-1vcpu-1gb">s-1vcpu-1gb</option>
<option value="s-1vcpu-2gb">s-1vcpu-2gb</option>
<option value="s-2vcpu-2gb">s-2vcpu-2gb</option>
<option value="s-2vcpu-4gb">s-2vcpu-4gb</option>
<option value="s-4vcpu-8gb">s-4vcpu-8gb</option>
<option value="s-8vcpu-16gb">s-8vcpu-16gb</option>
</optgroup>
<optgroup label="General Purpose">
<option value="g-2vcpu-8gb">g-2vcpu-8gb</option>
<option value="g-4vcpu-16gb">g-4vcpu-16gb</option>
<option value="g-8vcpu-32gb">g-8vcpu-32gb</option>
<option value="g-16vcpu-64gb">g-16vcpu-64gb</option>
<option value="g-32vcpu-128gb">g-32vcpu-128gb</option>
<option value="g-40vcpu-160gb">g-40vcpu-160gb</option>
</optgroup>
<optgroup label="CPU-Optimized">
<option value="c-2-4gib">c-2-4gib</option>
<option value="c-4-8gib">c-4-8gib</option>
<option value="c-8-16gib">c-8-16gib</option>
<option value="c-16-32gib">c-16-32gib</option>
<option value="c-32-64gib">c-32-64gib</option>
</optgroup>
<optgroup label="Memory-Optimized">
<option value="m-2vcpu-16gb">m-2vcpu-16gb</option>
<option value="m-4vcpu-32gb">m-4vcpu-32gb</option>
<option value="m-8vcpu-64gb">m-8vcpu-64gb</option>
<option value="m-16vcpu-128gb">m-16vcpu-128gb</option>
<option value="m-24vcpu-192gb">m-24vcpu-192gb</option>
<option value="m-32vcpu-256gb">m-32vcpu-256gb</option>
</optgroup>
</select>
{{ generate_opt_options('do_create_size', 'do', 'size', params) }}
{{input('do_create_size_text', size='26', style='display: none')}}
<a class="link" id="do-instance-enter">Enter manually</a>
<a class="link" id="do-instance-enter-select" style="display: none; margin-left: 27px;">Change to select</a>
@ -114,7 +82,7 @@
<span class="need-field">*</span>
</td>
<td>
{{ select('do_create_oss', values=do_oss) }}
{{ generate_opt_options('do_create_oss', 'do', 'image', params) }}
</td>
</tr>
<tr>
@ -223,8 +191,8 @@
<td>
<select id="aws_create_provider">
{% for p in providers %}
{% if p.2 == 'aws' %}
<option value="{{ p.0 }}">{{ p.1 }}</option>
{% if p.type == 'aws' %}
<option value="{{ p.id }}">{{ p.name }}</option>
{% endif %}
{% endfor %}
</select>
@ -236,7 +204,7 @@
<span class="need-field">*</span>
</td>
<td>
{{ select('aws_create_regions', values=aws_regions) }}
{{ generate_opt_options('aws_create_regions', 'aws', 'region', params) }}
<div class="tooltip tooltipTop tooltipTd">Not all regions may be active</div>
</td>
</tr>
@ -263,7 +231,7 @@
<span class="need-field">*</span>
</td>
<td>
{{ select('aws_create_oss', values=aws_oss) }}
{{ generate_opt_options('aws_create_oss', 'aws', 'image', params) }}
</td>
</tr>
<tr>
@ -296,7 +264,7 @@
<span class="need-field">*</span>
</td>
<td>
{{ select('aws_create_volume_type', values=aws_volume_type) }}
{{ generate_opt_options('aws_create_volume_type', 'aws', 'volume_type', params) }}
</td>
</tr>
<tr>
@ -325,7 +293,7 @@
<td class="padding20" style="padding-bottom: 25px;padding-top: 25px;">Firewall</td>
<td>
{{checkbox('aws_create_firewall', checked='checked')}}
<div class="tooltip tooltipTop tooltipTd">Roxy-WI will create Security group and open 22, 443, 1999, 8085, 8086 ports. Otherwise all ports will be closed</div>
<div class="tooltip tooltipTop tooltipTd">Roxy-WI will create Security group and open 22, 443, 1999, 8085, 8086 ports. Otherwise, all ports will be closed</div>
</td>
</tr>
</table>
@ -373,8 +341,8 @@
<td>
<select id="gcore_create_provider">
{% for p in providers %}
{% if p.2 == 'gcore' %}
<option value="{{ p.0 }}">{{ p.1 }}</option>
{% if p.type == 'gcore' %}
<option value="{{ p.id }}">{{ p.name }}</option>
{% endif %}
{% endfor %}
</select>
@ -386,7 +354,7 @@
<span class="need-field">*</span>
</td>
<td>
{{ select('gcore_create_regions', values=gcore_regions) }}
{{ generate_opt_options('gcore_create_regions', 'gcore', 'region', params) }}
</td>
</tr>
<tr>
@ -409,36 +377,8 @@
<span class="need-field">*</span>
</td>
<td>
<select id="gcore_create_size" required="required">
<optgroup label="Standard">
<option value="g1-standard-1-2">g1-standard-1-2</option>
<option value="g1-standard-2-4">g1-standard-2-4</option>
<option value="g1-standard-2-8">g1-standard-2-8</option>
<option value="g1-standard-4-8">g1-standard-4-8</option>
<option value="g1-standard-4-16">g1-standard-4-16</option>
<option value="g1-standard-8-16">g1-standard-8-16</option>
<option value="g1-standard-8-32">g1-standard-8-32</option>
<option value="g1-standard-16-32">g1-standard-16-32</option>
<option value="g1-standard-16-64">g1-standard-16-64</option>
<option value="g1-standard-32-64">g1-standard-32-64</option>
<option value="g1-standard-32-128">g1-standard-32-128</option>
</optgroup>
<optgroup label="vCPU">
<option value="g1-cpu-2-2">g1-cpu-2-2</option>
<option value="g1-cpu-4-4">g1-cpu-4-4</option>
<option value="g1-cpu-8-8">g1-cpu-8-8</option>
<option value="g1-cpu-16-16">g1-cpu-16-16</option>
<option value="g1-cpu-32-32">g1-cpu-32-32</option>
</optgroup>
<optgroup label="Memory">
<option value="g1-memory-2-16">g1-memory-2-16</option>
<option value="g1-memory-4-32">g1-memory-4-32</option>
<option value="g1-memory-8-64">g1-memory-8-64</option>
<option value="g1-memory-16-128">g1-memory-16-128</option>
<option value="g1-memory-32-256">g1-memory-32-256</option>
</optgroup>
</select>
{{input('gcore_create_size_text', size='26', style='display: none')}}
{{ generate_opt_options('gcore_create_size', 'gcore', 'size', params) }}
{{ input('gcore_create_size_text', size='26', style='display: none') }}
<a class="link" id="gcore-instance-enter">Enter manually</a>
<a class="link" id="gcore-instance-enter-select" style="display: none; margin-left: 27px;">Change to select</a>
</td>
@ -449,9 +389,7 @@
<span class="need-field">*</span>
</td>
<td>
{% set oss = dict() %}
{% set oss = {'centos-7-gcore':'Centos 7'} %}
{{ select('gcore_create_oss', values=oss) }}
{{ generate_opt_options('gcore_create_oss', 'gcore', 'image', params) }}
</td>
</tr>
<tr>
@ -484,7 +422,7 @@
<span class="need-field">*</span>
</td>
<td>
{{ select('gcore_create_volume_type', values=gcore_volume_type) }}
{{ generate_opt_options('gcore_create_volume_type', 'gcore', 'volume_type', params) }}
</td>
</tr>
<tr>
@ -553,4 +491,4 @@
<div class="progress-bar-striped">
<div id="editing-progress" style="width: 0%;"></div>
</div>
</div>
</div>

View File

@ -1,10 +1,9 @@
{% set providers_for_choose = dict() %}
{% set providers_for_choose = {'aws':'AWS','do':'DigitalOcean', 'gcore':'G-Core Labs'} %}
{% from 'include/provisioning/variables.html' import generate_opt_options %}
<div id="add_providers_choosing" style="display: none;">
{{ select('add_select_providers', values=providers_for_choose) }}
{{ generate_opt_options('add_select_providers', 'all', 'provider', params, optgroup=false) }}
</div>
<div id="create_providers_choosing" style="display: none;">
{{ select('create_select_providers', values=providers_for_choose) }}
{{ generate_opt_options('create_select_providers', 'all', 'provider', params, optgroup=false) }}
</div>
<div id="aws_provider" style="display: none; padding: 0 2px 0 0; margin-left: 1px; margin-right: -4px;">
<table class="overview">
@ -210,4 +209,4 @@
<td>{{input('gcore_edit_provider_password', required='required', type='password', size='30')}}</td>
</tr>
</table>
</div>
</div>

View File

@ -1,21 +1,98 @@
{% set gcore_regions = {'6':'Luxembourg','10':'Moscow','14':'Manassas', '18':'Singapore','22':'Khabarovsk'} %}
{% set aws_regions = {'us-east-1':'US East (N. Virginia)','us-east-2':'US East (Ohio)','us-west-1':'US West (N. California)',
'us-west-2':'US West (Oregon)','af-south-1':'Africa (Cape Town)','ap-east-1':'Asia Pacific (Hong Kong)',
'ap-south-1':'Asia Pacific (Mumbai)','ap-northeast-2':'Asia Pacific (Seoul)','ap-southeast-1':'Asia Pacific (Singapore)',
'ap-southeast-2':'Asia Pacific (Sydney)','ap-northeast-1':'Asia Pacific (Tokyo)','ca-central-1':'Canada (Central)',
'eu-central-1':'Europe (Frankfurt)', 'eu-west-1':'Europe (Ireland)', 'eu-west-2':'Europe (London)',
'eu-south-1':'Europe (Milan)', 'eu-west-3':'Europe (Paris)', 'eu-north-1':'Europe (Stockholm)',
'me-south-1':'Middle East (Bahrain)', 'sa-east-1':'South America (São Paulo)'} %}
{% set do_regions = {'nyc1':'New York 1','nyc2':'New York 2','nyc3':'New York 3', 'ams1':'Amsterdam 1','ams2':'Amsterdam 2',
'ams3':'Amsterdam 3', 'sfo1':'San Francisco 1','sfo2':'San Francisco 2','sfo3':'San Francisco 3',
'sgp1':'Singapore 1','lon1':'London 1','fra1':'Frankfurt 1','tor1':'Toronto 1', 'blr1':'Bangalore 1'} %}
{% from 'include/input_macros.html' import copy_to_clipboard %}
{% set aws_oss = {'centos-7':'Centos 7 x64','ubuntu-18.04':'Ubuntu 18.04 x64','ubuntu-18.10':'Ubuntu 18.10 x64',
'debian-10':'Debian 10 x86','debian-9':'Debian 9 x86','rhel-7':'RHEL 7 x86','rhel-8':'RHEL 8 x86',
'amazon-2_lts':'Amazon Linux 2 x86'} %}
{% set do_oss = {'centos-7-x64':'Centos 7 x64', 'centos-8-x64':'Centos 8 x64','ubuntu-18-04-x64':'Ubuntu 18.04 x64',
'ubuntu-20-04-x64':'Ubuntu 20.04 x64', 'ubuntu-20-10-x64':'Ubuntu 20.10 x64','debian-10-x64':'Debian 10 x86',
'debian-9-x64':'Debian 9 x86'} %}
{%- macro generate_opt_options(id, provider, param_section, params, name='', required='', first='', class='', selected='', disabled='true', optgroup=true) -%}
{% if name == '' %}
{% set name = id %}
{% endif %}
{% if disabled == 'true' %}
{% set disabled = 'disabled' %}
{% else %}
{% set disabled = '' %}
{% endif %}
{% set section = namespace(section='') %}
<select id="{{id}}" name="{{name}}" {{required}}>
{% for p in params %}
{% if (p.provider == provider and p.section == param_section) or (provider == 'all' and p.section == param_section) %}
{% if optgroup %}
{% if section.section|string() != p.optgroup|string() %}
<optgroup label="{{p.optgroup}}">
{% endif %}
{% endif %}
{% set section.section = p.optgroup %}
{% if first == value %}
<option value="{{p.param}}" selected data-class="avatar" data-style="background-image: url(&apos;{{p.image}}&apos;)">{{p.name}}</option>
{% else %}
<option value="{{p.param}}" data-class="avatar" data-style="background-image: url(&apos;{{p.image}}&apos;)">{{p.name}}</option>
{% endif %}
{% endif %}
{% endfor %}
</select>
<script>
$( function() {
$('#{{id}}').selectmenu('destroy');
$.widget( "custom.iconselectmenu", $.ui.selectmenu, {
_renderItem: function( ul, item ) {
var li = $( "<li>" ),
wrapper = $( "<div>", { text: item.label } );
{% set aws_volume_type = {'gp2':'gp2', 'gp3':'gp3', 'standard':'standard', 'io1':'io1', 'io2':'io2', 'sc1':'sc1', 'st1':'st1'} %}
{% set gcore_volume_type = {'standard':'standard', 'ssd_hiiops':'ssd_hiiops', 'cold':'cold', 'ultra':'ultra'} %}
if ( item.disabled ) {
li.addClass( "ui-state-disabled" );
}
$( "<span>", {
style: item.element.attr( "data-style" ),
"class": "ui-icon " + item.element.attr( "data-class" )
}).appendTo( wrapper );
return li.append( wrapper ).appendTo( ul );
}
});
$( "#{{id}}" )
.iconselectmenu()
.iconselectmenu( "menuWidget")
.addClass( "ui-menu-icons avatar" );
} );
</script>
<style>
/* select with custom icons */
.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item-wrapper {
padding: 0.5em 0 0.5em 3em;
}
/* select with CSS avatar icons */
option.avatar {
background-repeat: no-repeat !important;
padding-left: 20px;
}
.avatar .ui-icon {
background-position: left top;
height: 15px;
width: 23px;
top: -0.1em;
}
</style>
{%- endmacro %}
{%- macro get_nice_name(id, value, provider, section, params) -%}
{% for p in params %}
{% if p.section == section and p.provider == provider and p.param == value %}
<span style="background-image: url('{{p.image}}')" class="avatar ui-icon"></span>
{{ copy_to_clipboard(id=id, value=p.param, show=p.name) }}
{% endif %}
{% endfor %}
<style>
/* select with custom icons */
.ui-selectmenu-menu .ui-menu.customicons .ui-menu-item-wrapper {
padding: 0.5em 0 0.5em 3em;
}
/* select with CSS avatar icons */
option.avatar {
background-repeat: no-repeat !important;
padding-left: 20px;
}
.avatar .ui-icon {
background-position: left top;
height: 15px;
width: 23px;
top: -0.1em;
}
</style>
{%- endmacro %}

View File

@ -140,7 +140,7 @@
data: frm.serialize(),
type: frm.attr('method'),
success: function( data ) {
data = data.replace(/\n/g, "<br>");
data = data.replace('\n', "<br>");
if (data.indexOf('error: ') != '-1' || data.indexOf('Fatal') != '-1' || data.indexOf('Error(s)') != '-1') {
$('#ajax-nettools').html('<div class="ping_pre">'+data+'</div>');
} else if (data.indexOf('warning: ') != '-1') {
@ -174,7 +174,7 @@
data: frm.serialize(),
type: frm.attr('method'),
success: function( data ) {
data = data.replace(/\n/g, "<br>");
data = data.replace('\n', "<br>");
if (data.indexOf('error: ') != '-1' || data.indexOf('Fatal') != '-1' || data.indexOf('Error(s)') != '-1') {
toastr.clear();
toastr.error(data);
@ -205,7 +205,7 @@
data: frm.serialize() + "&nettools_action=" + $(this).val(),
type: frm.attr('method'),
success: function( data ) {
data = data.replace(/\n/g, "<br>");
data = data.replace('\n', "<br>");
if (data.indexOf('error: ') != '-1' || data.indexOf('Fatal') != '-1' || data.indexOf('Error(s)') != '-1') {
toastr.clear();
toastr.error(data);

View File

@ -19,6 +19,8 @@
<h3>You have not installed Terraform. Read <a href="https://www.terraform.io/downloads.html"
title="Download Terraform" target="_blank">here</a> how to install Terraform</h3>
</center>
{% elif servers|length == 0 %}
{% include 'include/getstarted.html' %}
{% else %}
<table class="overview" id="ajax-provisioning">
<thead>
@ -71,4 +73,4 @@
{% include 'include/provisioning/creating_dialogs.html' %}
{% include 'include/provisioning/providers_dialogs.html' %}
<script src="/inc/provisioning.js"></script>
{% endblock %}
{% endblock %}

View File

@ -19,8 +19,9 @@
<option value="{{ select.2 }}">{{ select.1 }}</option>
{% endif %}
{% endfor %}
</select>
</select>
<a class="ui-button ui-widget ui-corner-all" id="show" title="Show stats" onclick="{{ onclick }}">Show</a>
{% if service != 'nginx' and service != 'apache' %}
<div id="stats_filter">
<div id="stats_filter_text">Filter:</div>
{{ checkbox('stats_active', title='Show active servers', desc='Active', checked='checked') }}
@ -32,13 +33,12 @@
{{ checkbox('stats_frontends', title='Show frontends servers', desc='Frontends', checked='checked') }}
{{ checkbox('stats_backends', title='Show backends servers', desc='Backends', checked='checked') }}
</div>
{% elif service == 'nginx' %}
<br /><br />
{% endif %}
</form>
<div id="ajax" style="margin-left: 5px; margin-right: 5px;"></div>
<div id="notice" style="padding-left: 15px; font-size: 25px;">
Select a server
<br />
</div>
<script>
if (cur_url[1]) {
showStats();
@ -60,16 +60,18 @@
$('table.tbl th.pxname').css('width', '100%');
$('a.px:link').css('color', '#fff');
$('td').css('font-size', '11');
$('h1').css('display', 'none');
$('td').css('border-color', '#ddd');
$('td').css('padding', '3px');
$('th').css('padding-top', '4px');
$('th').css('padding-bottom', '4px');
$('th').css('border-color', '#ddd');
$('h1').next().css('display', 'none');
$('h1').next().next().css('display', 'none');
$('h1').next().next().next().css('display', 'none');
$('h1').next().next().next().next().css('display', 'none');
if ($('#service').val() != 'apache') {
$('h1').css('display', 'none');
$('th').css('border-color', '#ddd');
$('h1').next().css('display', 'none');
$('h1').next().next().css('display', 'none');
$('h1').next().next().next().css('display', 'none');
$('h1').next().next().next().next().css('display', 'none');
}
$('body').css('font-family', '-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol');
$( "select" ).selectmenu();
$('#stats_filter').show();

View File

@ -77,7 +77,7 @@
var hostnamea = []
{% for s in servers_all %}
{% if s.15|int() == 1 %}
ip.push("{{s[2]}}");
ip.push("{{ s[2] }}");
var host = "{{s[2]}}";
host = host.replace(/\./g, '\\.');
hostnamea.push(host);
@ -126,16 +126,19 @@
</div>
{% for s in servers %}
<div class="chart-container">
<canvas id="s_{{s.ip}}" role="img"></canvas>
<canvas id="waf_{{s.server.ip}}" role="img"></canvas>
</div>
{% endfor %}
<div id="dialog-confirm" style="display: none;">
<p><span class="ui-icon ui-icon-alert" style="float:left; margin:3px 12px 20px 0;"></span>Are you sure?</p>
<p><span class="ui-icon ui-icon-alert" style="float:left; margin:3px 12px 20px 0;"></span>Are you sure?</p>
</div>
{% for s in servers %}
{{s.ip}}
{% endfor %}
<script>
function showWafMetrics() {
{% for s in servers %}
getWafChartData('{{s.ip}}');
getWafChartData('{{s.server.ip}}');
{% endfor %}
}
showWafMetrics();
@ -146,7 +149,7 @@
let metrics = new Promise(
(resolve, reject) => {
{% for s in servers %}
getWafChartData('{{s.ip}}')
getWafChartData('{{s.server.ip}}')
{% endfor %}
});
metrics.then();

View File

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-au" viewBox="0 0 640 480">
<path fill="#00008B" d="M0 0h640v480H0z"/>
<path fill="#fff" d="m37.5 0 122 90.5L281 0h39v31l-120 89.5 120 89V240h-40l-120-89.5L40.5 240H0v-30l119.5-89L0 32V0z"/>
<path fill="red" d="M212 140.5 320 220v20l-135.5-99.5zm-92 10 3 17.5-96 72H0zM320 0v1.5l-124.5 94 1-22L295 0zM0 0l119.5 88h-30L0 21z"/>
<path fill="#fff" d="M120.5 0v240h80V0h-80ZM0 80v80h320V80H0Z"/>
<path fill="red" d="M0 96.5v48h320v-48zM136.5 0v240h48V0z"/>
<path fill="#fff" d="m527 396.7-20.5 2.6 2.2 20.5-14.8-14.4-14.7 14.5 2-20.5-20.5-2.4 17.3-11.2-10.9-17.5 19.6 6.5 6.9-19.5 7.1 19.4 19.5-6.7-10.7 17.6 17.4 11.1Zm-3.7-117.2 2.7-13-9.8-9 13.2-1.5 5.5-12.1 5.5 12.1 13.2 1.5-9.8 9 2.7 13-11.6-6.6-11.6 6.6Zm-104.1-60-20.3 2.2 1.8 20.3-14.4-14.5-14.8 14.1 2.4-20.3-20.2-2.7 17.3-10.8-10.5-17.5 19.3 6.8L387 178l6.7 19.3 19.4-6.3-10.9 17.3 17.1 11.2ZM623 186.7l-20.9 2.7 2.3 20.9-15.1-14.7-15 14.8 2.1-21-20.9-2.4 17.7-11.5-11.1-17.9 20 6.7 7-19.8 7.2 19.8 19.9-6.9-11 18 17.8 11.3Zm-96.1-83.5-20.7 2.3 1.9 20.8-14.7-14.8-15.1 14.4 2.4-20.7-20.7-2.8 17.7-11L467 73.5l19.7 6.9 7.3-19.5 6.8 19.7 19.8-6.5-11.1 17.6 17.4 11.5ZM234 385.7l-45.8 5.4 4.6 45.9-32.8-32.4-33 32.2 4.9-45.9-45.8-5.8 38.9-24.8-24-39.4 43.6 15 15.8-43.4 15.5 43.5 43.7-14.7-24.3 39.2 38.8 25.1Z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-bh" viewBox="0 0 640 480">
<path fill="#fff" d="M0 0h640v480H0"/>
<path fill="#ce1126" d="M640 0H96l110.7 48L96 96l110.7 48L96 192l110.7 48L96 288l110.7 48L96 384l110.7 48L96 480h544"/>
</svg>

After

Width:  |  Height:  |  Size: 252 B

View File

@ -0,0 +1,45 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-br" viewBox="0 0 640 480">
<g stroke-width="1pt">
<path fill="#229e45" fill-rule="evenodd" d="M0 0h640v480H0z"/>
<path fill="#f8e509" fill-rule="evenodd" d="m321.4 436 301.5-195.7L319.6 44 17.1 240.7 321.4 436z"/>
<path fill="#2b49a3" fill-rule="evenodd" d="M452.8 240c0 70.3-57.1 127.3-127.6 127.3A127.4 127.4 0 1 1 452.8 240z"/>
<path fill="#ffffef" fill-rule="evenodd" d="m283.3 316.3-4-2.3-4 2 .9-4.5-3.2-3.4 4.5-.5 2.2-4 1.9 4.2 4.4.8-3.3 3m86 26.3-3.9-2.3-4 2 .8-4.5-3.1-3.3 4.5-.5 2.1-4.1 2 4.2 4.4.8-3.4 3.1m-36.2-30-3.4-2-3.5 1.8.8-3.9-2.8-2.9 4-.4 1.8-3.6 1.6 3.7 3.9.7-3 2.7m87-8.5-3.4-2-3.5 1.8.8-3.9-2.7-2.8 3.9-.4 1.8-3.5 1.6 3.6 3.8.7-2.9 2.6m-87.3-22-4-2.2-4 2 .8-4.6-3.1-3.3 4.5-.5 2.1-4.1 2 4.2 4.4.8-3.4 3.2m-104.6-35-4-2.2-4 2 1-4.6-3.3-3.3 4.6-.5 2-4.1 2 4.2 4.4.8-3.3 3.1m13.3 57.2-4-2.3-4 2 .9-4.5-3.2-3.3 4.5-.6 2.1-4 2 4.2 4.4.8-3.3 3.1m132-67.3-3.6-2-3.6 1.8.8-4-2.8-3 4-.5 1.9-3.6 1.7 3.8 4 .7-3 2.7m-6.7 38.3-2.7-1.6-2.9 1.4.6-3.2-2.2-2.3 3.2-.4 1.5-2.8 1.3 3 3 .5-2.2 2.2m-142.2 50.4-2.7-1.5-2.7 1.3.6-3-2.1-2.2 3-.4 1.4-2.7 1.3 2.8 3 .6-2.3 2M419 299.8l-2.2-1.1-2.2 1 .5-2.3-1.7-1.6 2.4-.3 1.2-2 1 2 2.5.5-1.9 1.5"/>
<path fill="#ffffef" fill-rule="evenodd" d="m219.3 287.6-2.7-1.5-2.7 1.3.6-3-2.1-2.2 3-.4 1.4-2.7 1.3 2.8 3 .6-2.3 2"/>
<path fill="#ffffef" fill-rule="evenodd" d="m219.3 287.6-2.7-1.5-2.7 1.3.6-3-2.1-2.2 3-.4 1.4-2.7 1.3 2.8 3 .6-2.3 2m42.3 3-2.6-1.4-2.7 1.3.6-3-2.1-2.2 3-.4 1.4-2.7 1.3 2.8 3 .5-2.3 2.1m-4.8 17-2.6-1.5-2.7 1.4.6-3-2.1-2.3 3-.4 1.4-2.7 1.3 2.8 3 .6-2.3 2m87.4-22.2-2.6-1.6-2.8 1.4.6-3-2-2.3 3-.3 1.4-2.7 1.2 2.8 3 .5-2.2 2.1m-25.1 3-2.7-1.5-2.7 1.4.6-3-2-2.3 3-.3 1.4-2.8 1.2 2.9 3 .5-2.2 2.1m-68.8-5.8-1.7-1-1.7.8.4-1.9-1.3-1.4 1.9-.2.8-1.7.8 1.8 1.9.3-1.4 1.3m167.8 45.4-2.6-1.5-2.7 1.4.6-3-2.1-2.3 3-.4 1.4-2.7 1.3 2.8 3 .6-2.3 2m-20.8 6-2.2-1.4-2.3 1.2.5-2.6-1.7-1.8 2.5-.3 1.2-2.3 1 2.4 2.5.4-1.9 1.8m10.4 2.3-2-1.2-2.1 1 .4-2.3-1.6-1.7 2.3-.3 1.1-2 1 2 2.3.5-1.7 1.6m29.1-22.8-2-1-2 1 .5-2.3-1.6-1.7 2.3-.3 1-2 1 2.1 2.1.4-1.6 1.6m-38.8 41.8-2.5-1.4-2.7 1.2.6-2.8-2-2 3-.3 1.3-2.5 1.2 2.6 3 .5-2.3 1.9m.6 14.2-2.4-1.4-2.4 1.3.6-2.8-1.9-2 2.7-.4 1.2-2.5 1.1 2.6 2.7.5-2 2m-19-23.1-1.9-1.2-2 1 .4-2.2-1.5-1.7 2.2-.2 1-2 1 2 2.2.4-1.6 1.6m-17.8 2.3-2-1.2-2 1 .5-2.2-1.6-1.7 2.3-.2 1-2 1 2 2.1.4-1.6 1.6m-30.4-24.6-2-1.1-2 1 .5-2.3-1.6-1.6 2.2-.3 1-2 1 2 2.2.5-1.6 1.5m3.7 57-1.6-.9-1.8.9.4-2-1.3-1.4 1.9-.2.9-1.7.8 1.8 1.9.3-1.4 1.3m-46.2-86.6-4-2.3-4 2 .9-4.5-3.2-3.3 4.5-.6 2.2-4 1.9 4.2 4.4.8-3.3 3.1"/>
<path fill="#fff" fill-rule="evenodd" d="M444.4 285.8a124.6 124.6 0 0 0 5.8-19.8c-67.8-59.5-143.3-90-238.7-83.7a124.5 124.5 0 0 0-8.5 20.9c113-10.8 196 39.2 241.4 82.6z"/>
<path fill="#309e3a" d="m414 252.4 2.3 1.3a3.4 3.4 0 0 0-.3 2.2 3 3 0 0 0 1.4 1.7c.7.5 1.4.8 2 .7.6 0 1-.3 1.3-.7a1.3 1.3 0 0 0 .2-.9 2.3 2.3 0 0 0-.5-1c-.2-.3-.7-1-1.5-1.8a7.7 7.7 0 0 1-1.8-3 3.7 3.7 0 0 1 2-4.4 3.8 3.8 0 0 1 2.3-.2 7 7 0 0 1 2.6 1.2c1.4 1 2.3 2 2.6 3.2a4.1 4.1 0 0 1-.6 3.3l-2.4-1.5c.3-.6.4-1.2.2-1.7-.1-.5-.5-1-1.2-1.4a3.2 3.2 0 0 0-1.8-.7 1 1 0 0 0-.9.5c-.2.3-.2.6-.1 1s.6 1.2 1.6 2.2c1 1 1.6 1.9 2 2.5a3.9 3.9 0 0 1-.3 4.2 4.1 4.1 0 0 1-1.9 1.5 4 4 0 0 1-2.4.3c-.9-.2-1.8-.6-2.8-1.3-1.5-1-2.4-2.1-2.7-3.3a5.4 5.4 0 0 1 .6-4zm-11.6-7.6 2.5 1.3a3.4 3.4 0 0 0-.2 2.2 3 3 0 0 0 1.4 1.6c.8.5 1.4.7 2 .6.6 0 1-.3 1.3-.8a1.3 1.3 0 0 0 .2-.8c0-.3-.2-.7-.5-1a34.6 34.6 0 0 0-1.6-1.8c-1.1-1.1-1.8-2-2-2.8a3.7 3.7 0 0 1 .4-3.1 3.6 3.6 0 0 1 1.6-1.4 3.8 3.8 0 0 1 2.2-.3 7 7 0 0 1 2.6 1c1.5 1 2.4 2 2.7 3.1a4.1 4.1 0 0 1-.4 3.4l-2.5-1.4c.3-.7.4-1.2.2-1.7s-.6-1-1.3-1.4a3.2 3.2 0 0 0-1.9-.6 1 1 0 0 0-.8.5c-.2.3-.2.6-.1 1s.7 1.2 1.7 2.2c1 1 1.7 1.8 2 2.4a3.9 3.9 0 0 1 0 4.2 4.2 4.2 0 0 1-1.8 1.6 4 4 0 0 1-2.4.3 8 8 0 0 1-2.9-1.1 6 6 0 0 1-2.8-3.2 5.4 5.4 0 0 1 .4-4zm-14.2-3.8 7.3-12 8.8 5.5-1.2 2-6.4-4-1.6 2.7 6 3.7-1.3 2-6-3.7-2 3.3 6.7 4-1.2 2-9-5.5zm-20.7-17 1.1-2 5.4 2.7-2.5 5c-.8.2-1.8.3-3 .2a9.4 9.4 0 0 1-3.3-1 7.7 7.7 0 0 1-3-2.6 6 6 0 0 1-1-3.5 8.6 8.6 0 0 1 1-3.7 8 8 0 0 1 2.6-3 6.2 6.2 0 0 1 3.6-1.1c1 0 2 .3 3.2 1 1.6.7 2.6 1.7 3.1 2.8a5 5 0 0 1 .3 3.5l-2.7-.8a3 3 0 0 0-.2-2c-.3-.6-.8-1-1.6-1.4a3.8 3.8 0 0 0-3.1-.3c-1 .3-1.9 1.2-2.6 2.6-.7 1.4-1 2.7-.7 3.8a3.7 3.7 0 0 0 2 2.4c.5.3 1.1.5 1.7.5a6 6 0 0 0 1.8 0l.8-1.6-2.9-1.5zm-90.2-22.3 2-14 4.2.7 1.1 9.8 3.9-9 4.2.6-2 13.8-2.7-.4 1.7-10.9-4.4 10.5-2.7-.4-1.1-11.3-1.6 11-2.6-.4zm-14.1-1.7 1.3-14 10.3 1-.2 2.4-7.5-.7-.3 3 7 .7-.3 2.4-7-.7-.3 3.8 7.8.7-.2 2.4-10.6-1z"/>
<g stroke-opacity=".5">
<path fill="#309e3a" d="M216.5 191.3c0-1.5.3-2.6.7-3.6a6.7 6.7 0 0 1 1.4-1.9 5.4 5.4 0 0 1 1.8-1.2c1-.3 2-.5 3-.5 2.1 0 3.7.8 5 2a7.4 7.4 0 0 1 1.6 5.5c0 2.2-.7 4-2 5.3a6.5 6.5 0 0 1-5 1.7 6.6 6.6 0 0 1-4.8-2 7.3 7.3 0 0 1-1.7-5.3z"/>
<path fill="#f7ffff" d="M219.4 191.3c0 1.5.3 2.7 1 3.6.7.8 1.6 1.3 2.8 1.3a3.5 3.5 0 0 0 2.8-1.1c.7-.8 1-2 1.1-3.7 0-1.6-.2-2.8-1-3.6a3.5 3.5 0 0 0-2.7-1.3 3.6 3.6 0 0 0-2.8 1.2c-.8.8-1.1 2-1.2 3.6z"/>
</g>
<g stroke-opacity=".5">
<path fill="#309e3a" d="m233 198.5.2-14h6c1.5 0 2.5.2 3.2.5.7.2 1.2.7 1.6 1.3s.6 1.4.6 2.3a3.8 3.8 0 0 1-1 2.6 4.5 4.5 0 0 1-2.7 1.2l1.5 1.2c.4.4.9 1.2 1.5 2.3l1.7 2.8h-3.4l-2-3.2-1.4-2a2.1 2.1 0 0 0-.9-.6 5 5 0 0 0-1.4-.2h-.6v5.8H233z"/>
<path fill="#fff" d="M236 190.5h2c1.4 0 2.3 0 2.6-.2.3 0 .6-.3.8-.5s.3-.7.3-1c0-.6-.1-1-.4-1.2-.2-.3-.6-.5-1-.6h-2l-2.3-.1v3.5z"/>
</g>
<g stroke-opacity=".5">
<path fill="#309e3a" d="m249 185.2 5.2.3c1.1 0 2 .1 2.6.3a4.7 4.7 0 0 1 2 1.4 6 6 0 0 1 1.2 2.4c.3.9.4 2 .3 3.3a9.3 9.3 0 0 1-.5 3c-.4 1-1 1.8-1.7 2.4a5 5 0 0 1-2 1c-.6.2-1.5.2-2.5.2l-5.3-.3.7-14z"/>
<path fill="#fff" d="m251.7 187.7-.5 9.3h3.8c.5 0 .9-.2 1.2-.5.3-.3.6-.7.8-1.3.2-.6.4-1.5.4-2.6l-.1-2.5a3.2 3.2 0 0 0-.8-1.4 2.7 2.7 0 0 0-1.2-.7 13 13 0 0 0-2.3-.3h-1.3z"/>
</g>
<g stroke-opacity=".5">
<path fill="#309e3a" d="m317.6 210.2 3.3-13.6 4.4 1 3.2 1c.7.4 1.3 1 1.6 1.9.4.8.4 1.7.2 2.8-.2.8-.5 1.5-1 2a3.9 3.9 0 0 1-3 1.4c-.7 0-1.7-.2-3-.5l-1.7-.5-1.2 5.2-2.8-.7z"/>
<path fill="#fff" d="m323 199.6-.8 3.8 1.5.4c1 .2 1.8.4 2.2.3a1.9 1.9 0 0 0 1.6-1.5c0-.5 0-.9-.2-1.3a2 2 0 0 0-1-.9l-1.9-.5-1.3-.3z"/>
</g>
<g stroke-opacity=".5">
<path fill="#309e3a" d="m330.6 214.1 4.7-13.2 5.5 2c1.5.5 2.4 1 3 1.4.5.5.9 1 1 1.8s.2 1.5 0 2.3c-.4 1-1 1.7-1.8 2.2-.8.4-1.8.5-3 .3.4.5.8 1 1 1.6l.8 2.7.6 3.1-3.1-1.1-1-3.6a19.5 19.5 0 0 0-.7-2.4 2.1 2.1 0 0 0-.6-.8c-.2-.3-.6-.5-1.3-.7l-.5-.2-2 5.6-2.6-1z"/>
<path fill="#fff" d="m336 207.4 1.9.7c1.3.5 2.1.7 2.5.7.3 0 .6 0 .9-.3.3-.2.5-.5.6-.9.2-.4.2-.8 0-1.2a1.7 1.7 0 0 0-.8-.9l-2-.7-2-.7-1.2 3.3z"/>
</g>
<g stroke-opacity=".5">
<path fill="#309e3a" d="M347 213.6a9 9 0 0 1 1.7-3.2 6.6 6.6 0 0 1 1.8-1.5 6 6 0 0 1 2-.7c1 0 2 0 3.1.4a6.5 6.5 0 0 1 4.2 3.3c.8 1.6.8 3.5.2 5.7a7.4 7.4 0 0 1-3.4 4.5c-1.5.9-3.3 1-5.2.4a6.6 6.6 0 0 1-4.2-3.3 7.3 7.3 0 0 1-.2-5.6z"/>
<path fill="#fff" d="M349.8 214.4c-.4 1.5-.5 2.8 0 3.8s1.2 1.6 2.3 2c1 .3 2 .2 3-.4 1-.5 1.6-1.6 2.1-3.2.5-1.5.5-2.7 0-3.7a3.5 3.5 0 0 0-2.2-2 3.6 3.6 0 0 0-3 .3c-1 .6-1.7 1.6-2.2 3.2z"/>
</g>
<g stroke-opacity=".5">
<path fill="#309e3a" d="m374.3 233.1 6.4-12.4 5.3 2.7a10 10 0 0 1 2.7 1.9c.5.5.8 1.1.8 1.9s0 1.5-.4 2.2a3.8 3.8 0 0 1-2 2c-1 .2-2 .2-3.1-.2.4.6.6 1.2.8 1.7.2.6.3 1.5.4 2.8l.2 3.2-3-1.5-.4-3.7a20 20 0 0 0-.3-2.5 2 2 0 0 0-.5-1l-1.2-.7-.5-.3-2.7 5.2-2.5-1.3z"/>
<path fill="#fff" d="m380.5 227.2 1.9 1c1.2.6 2 1 2.3 1 .3 0 .7 0 1-.2.3-.1.5-.4.7-.8.2-.4.3-.8.2-1.2a2 2 0 0 0-.7-1 23.7 23.7 0 0 0-1.8-1l-2-1-1.6 3.2z"/>
</g>
<g stroke-opacity=".5">
<path fill="#309e3a" d="M426.1 258.7a8.9 8.9 0 0 1 2.5-2.6 6.6 6.6 0 0 1 2.2-.9 5.5 5.5 0 0 1 2.2 0c1 .2 1.9.6 2.8 1.2a6.6 6.6 0 0 1 3 4.4c.3 1.7-.2 3.6-1.4 5.5a7.3 7.3 0 0 1-4.5 3.3 6.5 6.5 0 0 1-5.2-1.1 6.6 6.6 0 0 1-3-4.4c-.3-1.8.2-3.6 1.4-5.4z"/>
<path fill="#fff" d="M428.6 260.3c-1 1.3-1.3 2.5-1.1 3.6a3.6 3.6 0 0 0 1.6 2.5c1 .7 2 .9 3 .6 1-.3 2-1 2.9-2.4.9-1.4 1.3-2.6 1.1-3.6-.1-1-.7-1.9-1.6-2.6s-2-.8-3-.5c-1 .2-2 1-3 2.4z"/>
</g>
<path fill="#309e3a" d="m301.8 204.5 2.3-9.8 7.2 1.7-.3 1.6-5.3-1.2-.5 2.2 4.9 1.1-.4 1.7-4.9-1.2-.6 2.7 5.5 1.3-.4 1.6-7.5-1.7z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-ca" viewBox="0 0 640 480">
<path fill="#fff" d="M150.1 0h339.7v480H150z"/>
<path fill="#d52b1e" d="M-19.7 0h169.8v480H-19.7zm509.5 0h169.8v480H489.9zM201 232l-13.3 4.4 61.4 54c4.7 13.7-1.6 17.8-5.6 25l66.6-8.4-1.6 67 13.9-.3-3.1-66.6 66.7 8c-4.1-8.7-7.8-13.3-4-27.2l61.3-51-10.7-4c-8.8-6.8 3.8-32.6 5.6-48.9 0 0-35.7 12.3-38 5.8l-9.2-17.5-32.6 35.8c-3.5.9-5-.5-5.9-3.5l15-74.8-23.8 13.4c-2 .9-4 .1-5.2-2.2l-23-46-23.6 47.8c-1.8 1.7-3.6 1.9-5 .7L264 130.8l13.7 74.1c-1.1 3-3.7 3.8-6.7 2.2l-31.2-35.3c-4 6.5-6.8 17.1-12.2 19.5-5.4 2.3-23.5-4.5-35.6-7 4.2 14.8 17 39.6 9 47.7z"/>
</svg>

After

Width:  |  Height:  |  Size: 643 B

View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-de" viewBox="0 0 640 480">
<path fill="#ffce00" d="M0 320h640v160H0z"/>
<path d="M0 0h640v160H0z"/>
<path fill="#d00" d="M0 160h640v160H0z"/>
</svg>

After

Width:  |  Height:  |  Size: 210 B

View File

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-fr" viewBox="0 0 640 480">
<g fill-rule="evenodd" stroke-width="1pt">
<path fill="#fff" d="M0 0h640v480H0z"/>
<path fill="#002654" d="M0 0h213.3v480H0z"/>
<path fill="#ce1126" d="M426.7 0H640v480H426.7z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 289 B

View File

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-gb" viewBox="0 0 640 480">
<path fill="#012169" d="M0 0h640v480H0z"/>
<path fill="#FFF" d="m75 0 244 181L562 0h78v62L400 241l240 178v61h-80L320 301 81 480H0v-60l239-178L0 64V0h75z"/>
<path fill="#C8102E" d="m424 281 216 159v40L369 281h55zm-184 20 6 35L54 480H0l240-179zM640 0v3L391 191l2-44L590 0h50zM0 0l239 176h-60L0 42V0z"/>
<path fill="#FFF" d="M241 0v480h160V0H241zM0 160v160h640V160H0z"/>
<path fill="#C8102E" d="M0 193v96h640v-96H0zM273 0v480h96V0h-96z"/>
</svg>

After

Width:  |  Height:  |  Size: 535 B

View File

@ -0,0 +1,30 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-hk" viewBox="0 0 640 480">
<defs>
<clipPath id="a">
<path fill-opacity=".7" d="M-89 0h682.6v512H-89z"/>
</clipPath>
</defs>
<g clip-path="url(#a)" transform="translate(83.5) scale(.94)">
<path fill="#ba0000" fill-rule="evenodd" d="M618 512h-731.4V0H618z"/>
<path fill="#fff" fill-rule="evenodd" d="M241.9 247.8s-51.6-22.2-44.2-79.8c7.1-27.7 19.8-46.6 42.7-56.9 10.8-3.3 21.8-4.8 33-5.7-3 2.8-5.4 5.6-6.7 9-2.4 6.4-.6 12.4 2.7 18.5 4.1 7 6.6 14.2 7.4 23.6a36.6 36.6 0 0 1-14.6 33.7c-6.6 5.1-14.4 6.9-20.8 12.7-5 4.8-8 9.7-9 18.1-.2 16.1 4.1 18.4 9.5 26.8z"/>
<path fill="#ba0000" fill-rule="evenodd" stroke="#000" stroke-width="2.1" d="M232 164.5v-.3"/>
<path fill="none" stroke="#ba0000" stroke-width="2.1" d="M235.3 241.8c-20-17.7-18.3-62.4-3-77.3"/>
<path fill="#ba0000" fill-rule="evenodd" d="m244.6 154.5 3.3 5.5-6-2.5-4.7 5 .8-6.5-6-2.5 6.5-1.5.8-6.4 3.3 5.5 6.6-1.5"/>
<path fill="#fff" fill-rule="evenodd" d="M246.3 244s6-55.9 63.3-65.7c28.6-1.2 50.4 5.3 67 24.3 6.3 9.3 10.9 19.4 15 29.8-3.5-2-6.8-3.5-10.6-3.7-6.7-.5-12 3-16.8 7.9a53.2 53.2 0 0 1-20.4 14 36.6 36.6 0 0 1-36.5-4c-6.8-4.9-10.8-11.8-18.2-16.2a28.2 28.2 0 0 0-20-3.4c-15.5 4.6-16.3 9.4-22.8 17z"/>
<path fill="#ba0000" fill-rule="evenodd" stroke="#000" stroke-width="2.1" d="M323 210.2h.3"/>
<path fill="none" stroke="#ba0000" stroke-width="2.1" d="M250 236c11.2-24.4 54.4-35.8 73.1-25.6"/>
<path fill="#ba0000" fill-rule="evenodd" d="M336.3 219.3 332 224l.6-6.5-6-3 6.3-1 .6-6.7 3.4 6 6.4-1.2-4.3 4.7 3.3 6"/>
<path fill="#fff" fill-rule="evenodd" d="M250.1 248s55-12 82.4 39.3c10.3 26.7 11 49.4-1.7 71.1-6.8 9-15 16.5-23.5 23.8.8-4 1.1-7.6.1-11.2-1.6-6.6-6.6-10.5-12.8-13.5a53.1 53.1 0 0 1-19.8-15 36.6 36.6 0 0 1-7.7-35.8c2.4-8 7.7-14 9.5-22.4a28 28 0 0 0-3.1-20c-9.3-13.2-14.1-12.5-23.4-16.3z"/>
<path fill="#ba0000" fill-rule="evenodd" stroke="#000" stroke-width="2.1" d="m306.5 310.1.2.2"/>
<path fill="none" stroke="#ba0000" stroke-width="2.1" d="M259 249c26.6 2.9 51.1 40.2 47.4 61.3"/>
<path fill="#ba0000" fill-rule="evenodd" d="m302.1 325.6-5.9-2.6 6.5-1.5.8-6.7 3.1 5.7 6.5-1.5-4.5 5 3 5.7-5.8-2.6-4.5 5.1"/>
<path fill="#fff" fill-rule="evenodd" d="M248.9 253.7s26.9 49.4-14.5 90c-22.8 17.4-44.4 24.5-68.8 18.4-10.5-4-20-9.7-29.5-15.9 4-.3 7.7-1 10.9-3 5.8-3.4 8.1-9.3 9.3-16a53 53 0 0 1 8.8-23.3 36.6 36.6 0 0 1 32.2-17.5c8.4.1 15.6 3.6 24.2 3 6.9-.9 12.3-2.8 18.4-8.8 10-12.5 8-17 9-27z"/>
<path fill="#ba0000" fill-rule="evenodd" stroke="#000" stroke-width="2.1" d="m205.1 325.3-.1.2"/>
<path fill="none" stroke="#ba0000" stroke-width="2.1" d="M250.3 262.4c4.9 26.4-24.1 60.5-45.4 62.7"/>
<path fill="#ba0000" fill-rule="evenodd" d="m189 325.4.9-6.4 3.3 5.7 6.6-1-4.6 4.6 3.3 5.7-6.1-2.9-4.6 4.6.8-6.4-6.1-2.9"/>
<path fill="#fff" fill-rule="evenodd" d="M242.8 252.6S205.2 294.4 153 269c-24-15.7-37.8-33.8-40.1-58.8.3-11.3 2.4-22.1 5.1-33 1.7 3.6 3.6 6.8 6.5 9.2 5.1 4.3 11.5 4.5 18.3 3.4a52 52 0 0 1 24.7.6 36.6 36.6 0 0 1 27.3 24.6c2.7 7.9 1.8 15.9 5.3 23.8 3 6.2 6.6 10.6 14.3 14.4 15.2 5.3 18.7 1.9 28.4-.5z"/>
<path fill="#ba0000" fill-rule="evenodd" stroke="#000" stroke-width="2.1" d="m160.7 235.2-.2-.1"/>
<path fill="none" stroke="#ba0000" stroke-width="2.1" d="M235 256.9c-23.2 13.3-65-2.7-74.2-22"/>
<path fill="#ba0000" fill-rule="evenodd" d="m155.3 220 6.3-1.3-4.3 5 3.1 5.9-5.8-2.8-4.3 5 .7-6.8-5.9-2.8 6.3-1.3.7-6.8"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-ie" viewBox="0 0 640 480">
<g fill-rule="evenodd" stroke-width="1pt">
<path fill="#fff" d="M0 0h640v480H0z"/>
<path fill="#009A49" d="M0 0h213.3v480H0z"/>
<path fill="#FF7900" d="M426.7 0H640v480H426.7z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 289 B

View File

@ -0,0 +1,25 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="flag-icons-in" viewBox="0 0 640 480">
<path fill="#f93" d="M0 0h640v160H0z"/>
<path fill="#fff" d="M0 160h640v160H0z"/>
<path fill="#128807" d="M0 320h640v160H0z"/>
<g transform="matrix(3.2 0 0 3.2 320 240)">
<circle r="20" fill="#008"/>
<circle r="17.5" fill="#fff"/>
<circle r="3.5" fill="#008"/>
<g id="d">
<g id="c">
<g id="b">
<g id="a" fill="#008">
<circle r=".9" transform="rotate(7.5 -8.8 133.5)"/>
<path d="M0 17.5.6 7 0 2l-.6 5L0 17.5z"/>
</g>
<use xlink:href="#a" width="100%" height="100%" transform="rotate(15)"/>
</g>
<use xlink:href="#b" width="100%" height="100%" transform="rotate(30)"/>
</g>
<use xlink:href="#c" width="100%" height="100%" transform="rotate(60)"/>
</g>
<use xlink:href="#d" width="100%" height="100%" transform="rotate(120)"/>
<use xlink:href="#d" width="100%" height="100%" transform="rotate(-120)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-jp" viewBox="0 0 640 480">
<defs>
<clipPath id="a">
<path fill-opacity=".7" d="M-88 32h640v480H-88z"/>
</clipPath>
</defs>
<g fill-rule="evenodd" stroke-width="1pt" clip-path="url(#a)" transform="translate(88 -32)">
<path fill="#fff" d="M-128 32h720v480h-720z"/>
<circle cx="523.1" cy="344.1" r="194.9" fill="#d30000" transform="translate(-168.4 8.6) scale(.76554)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 465 B

View File

@ -0,0 +1,61 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="flag-icons-kh" viewBox="0 0 640 480">
<path fill="#032ea1" d="M0 0h640v480H0z"/>
<path fill="#e00025" d="M0 120h640v240H0z"/>
<g fill="#fff" stroke="#000" transform="matrix(1.2 0 0 1.2 85.6 -522)">
<g stroke-linejoin="bevel">
<path d="M139 623.5h113.8v43.8H139z"/>
<path d="M247 647.6h3.5v16.5H247zm-108-8.1h113.8v5H139zm0-7h113.8v4.6H139z"/>
<path stroke-width=".9" d="M139 625.7h113.8v4.3H139z"/>
<path d="M169 647.6h3.6v16.5H169zm49 0h3.6v16.5H218zm-78 0h3.5v16.5H140zm7 0h3.5v16.5H147zm7.5 0h3.5v16.5h-3.5zm7.5 0h3.5v16.5H162zm62.8 0h3.6v16.5h-3.6zm7.5 0h3.6v16.5h-3.6zm7.5 0h3.6v16.5h-3.6z"/>
<path stroke-linejoin="miter" d="M94.5 669.5a9.3 9.3 0 0 0 4.4-5.3H292a9.3 9.3 0 0 0 4.4 5.3z"/>
</g>
<path d="M193 556.8s-.1-4.1 2.3-4.2c2.3 0 2.2 4.2 2.2 4.2zm-12.5 54.5v-5.5c0-2.8-2.8-3-2.8-5 0 0-.4-3 .4-4.4 1.1 4 3 3.3 3 1.6 0-1.4-1-2.8-3.3-6.3-.8-1.1-.3-4.6.7-5.9.4 3 .9 4.5 2.2 4.5.8 0 1.4-.5 1.4-2 0-2-1.3-3-2-4.8a5 5 0 0 1 1.1-5.3c.5 3 .4 4.2 1.7 4.2 2.7-.9 0-4.8-.6-5.8-.6-1.1 1-3.4 1-3.4.8 2.7 1 2.9 2 2.6 1.2-.3 1-2-.4-3.4-.9-1-.8-2.3.2-3.3 1 1.9 2.2 1.8 2.3.6l-.8-4.4H204l-.9 4.3c-.2 1.2 1.4 1.5 2.4-.5 1 1 1.1 2.4.2 3.3-1.4 1.4-1.6 3.1-.4 3.4 1 .3 1.2 0 2-2.6 0 0 1.5 1.5 1 3.4-.6 1-3.3 5-.6 5.8 1.3 0 1.2-1.2 1.7-4.2a5 5 0 0 1 1 5.3c-.6 1.8-2 2.8-2 4.8 0 1.5.7 2 1.5 2 1.3 0 1.8-1.4 2.2-4.5 1 1.3 1.5 4.8.7 6-2.3 3.4-3.4 4.8-3.4 6.2 0 1.7 2 2.4 3-1.6.9 1.4.5 4.4.5 4.4 0 2-2.7 2.2-2.8 5v5.5zm7.2-46-.4-3.1h15.9l-.4 3.1zm1-3.2-.2-2.5H202l-.3 2.5zm2.3-2.6-.3-2.6h9l-.1 2.6zm33 110c-2-.7-5-2.9-5-5v-24.3l2.6-3.4H169l2.5 3.4v24.3c0 2.1-2 4.3-4 5z"/>
<path stroke-linejoin="bevel" d="M178.2 647.6h3.6v16.5h-3.6zm30.4 0h3.6v16.5h-3.6z"/>
<path d="M168 609.2v27.6h54v-27.6a4.2 4.2 0 0 0-2.6 2.8v11.8h-48.7V612s-.6-2-2.8-2.8z"/>
<path d="M214.6 669.5c-1.8-.7-5.6-2.9-5.6-5v-27.2c.4-1.5 2.4-2.4 3.7-3.4H177c1.7 1 3.6 1.7 4.3 3.4v27.2c0 2.1-3 4.3-4.8 5z"/>
<path d="M219.4 634.2v-19.6h-4.9v-1.9h-38.8v2h-5v19.5zM207 669.5c-1.8-.7-4.3-2.9-4.3-5v-23.2l1.4-2.1h-17.7l1.5 2v23.3c0 2.1-2.6 4.3-4.3 5z"/>
<path d="M190.7 639.2h9v30.3h-9z"/>
<path stroke-linejoin="bevel" d="M204.4 632.5c0-2 5.8-2.1 8.8-3.8h-36c3 1.7 8.7 1.8 8.7 3.8l1.2 3.9 15 .6z"/>
<path d="M211.4 611.3c0-4.9.2-6.7 1.7-6.7V620c-3.7 1.4-6.3 6-6.3 6h-23.2s-2.6-4.6-6.3-6v-15.5c1.8 0 1.8 2 1.8 6.7zm1.7-2c0-5.6 4.9-6.2 4.9-6.2v5c-1.9-.1-2.8 1.6-2.8 4 0 2.5 1.5 2.5 1.5 2.5v14.2h-3.6z"/>
<path d="M177.3 609.3c0-5.6-4.9-6.2-4.9-6.2v5c1.9-.1 2.8 1.6 2.8 4 0 2.5-1.5 2.5-1.5 2.5v14.2h3.6z"/>
<g fill="none" stroke-width=".8">
<path d="M186.8 570.6H204m-19.2 5.4h21m-23 6.5h24.9m-27 7.9h29.5m-30.2 9h30.4"/>
<path stroke-width="1" d="M170.8 629h48.6m-33.2 0h18v6.6h-18z"/>
</g>
<path d="M184 614.2c3 3.6 2.6 9.7 2.6 13.3H204c0-3.6-.4-9.7 2.6-13.3zm9.7-41-2.4-1.3v-3.5c1 .3 2 .4 2.2 2 .3-2.3 1-2.1 1.9-3 1 .9 1.5.7 1.9 3 0-1.6 1.2-1.7 2.1-2v3.5l-2.3 1.2z"/>
<path d="m193.5 578.9-4-2.8V573c1.5.3 3 .5 3.2 2.2.4-2.5 1.3-3.7 2.7-4.7 1.3 1 2.2 2.2 2.7 4.7.1-1.7 1.7-1.9 3-2.2v3.2l-3.9 2.7z"/>
<path d="m193.2 587.8-4.5-4v-4.7c1.6.4 3.4.6 3.6 3.1.5-3.5 1.5-5.4 3-6.8 1.6 1.4 2.6 3.3 3.2 6.8.2-2.5 2-2.7 3.6-3.1v4.7l-4.6 4zm8.4 5.3-4 5.7h-4.7l-4.1-5.7zm-15.2 9.5c2 1.1 2.8 3.4 3 7.6H201c.2-4.2 1-6.5 3-7.6z"/>
<path stroke-linejoin="bevel" d="M204.2 593v-5.6a5.2 5.2 0 0 0-3.8 3.3c0-2-2.5-6.3-5.2-8.5-2.7 2.4-5.3 6.4-5.2 8.4-.5-1.5-1.8-2.7-3.8-3.2v5.7z"/>
<path stroke-linejoin="bevel" d="M205 602.6V597c-2.1.6-3.5 1.7-4.1 3.3 0-2-2.7-6.3-5.7-8.5-3 2.5-5.8 6.4-5.7 8.5-.5-1.5-2-2.7-4.1-3.3v5.7z"/>
<path stroke-linejoin="bevel" d="M207.4 614.3v-6.6a9.6 9.6 0 0 0-5.1 3.8c0-3.5-4-9-7.1-10.7-3.2 1.8-7.1 7.4-7.1 10.7a9.7 9.7 0 0 0-5.2-3.8v6.6z"/>
<path stroke-linejoin="bevel" d="M206 629v-6.8c-2.4.9-3 3.1-3.8 4.7.3-6.9-3.8-14.2-7-16.1-3.2 1.9-7.4 9.4-7 16-.8-1.4-1.5-3.7-3.8-4.6v6.7z"/>
<path d="M204.4 639.2v-6.8c-2.5.6-2.6 1.5-3.4 3 .3-4.1-2.6-8.8-5.8-10.6-3.2 1.8-6 6.5-5.8 10.6-.8-1.5-.9-2.4-3.4-3v6.8z"/>
<g id="a">
<path d="M99 664.2v-20.4c-.7-2.6-3-5-4.6-5.4v-18l3.7 2 4.3 18.9v23z"/>
<path d="M99 664.3v-20.5c-.7-2.6-3-5-4.6-5.4v-19.2c2.5 0 3.7 3.2 3.7 3.2l4.3 18.9v22.9z"/>
<path d="M96.3 669.5c1.7-.7 4.2-2.9 4.2-5v-25.6l-1.2-2H143l-1.7 2v25.6a6 6 0 0 0 3.4 5z"/>
<path d="M135.8 669.5c-1.7-.7-4.2-2.9-4.2-5v-24.3l3.6-3.4h-29.6l3.6 3.4v24.3c0 2.1-2.5 4.3-4.2 5z"/>
<path d="M131.7 669.5c-1.7-.7-4.3-2.9-4.3-5v-22l2.4-3.3H111l2.4 3.3v22c0 2.1-2.5 4.3-4.3 5z"/>
<path d="M116 639.2h8.9v30.4h-9z"/>
<path stroke-linejoin="bevel" d="M103.7 647.6h3.6v16.5h-3.6zm30.8 0h3.5v16.5h-3.6zm-33.9-27.8h4.4v17h-4.4zm0-3.2h4.3v3.2h-4.3zm35.6 6.9h6.1v13h-6.1z"/>
<path d="M104.9 636.6v-29c1.2 0 1.4 4.3 4.2 4.3 1.5 0 1.4-1.8.5-3.2-.7-1.3-1.6-3-.4-6.3.9 2.5 3.1 3.3 2.7 1.8-.7-2.7-2.8-3.2-1.2-7.3.5 3.4 2.7 3.3 2.2 1.3-.6-2.3-1.9-3.3-.3-6.5.9 3.7 2 3.5 2 1.2 0-3.4 0-7 4.2-8.3 0 0 .3-3 1.9-3 1.5 0 1.8 3 1.8 3 4.3 1.3 4.2 5 4.2 8.3 0 2.3 1.1 2.5 2-1.2 1.6 3.2.3 4.2-.3 6.5-.5 2 1.7 2.1 2.2-1.3 1.6 4.1-.5 4.6-1.2 7.3-.4 1.5 1.8.7 2.7-1.8 1.2 3.3.3 5-.4 6.3-.8 1.4-1 3.2.5 3.2 2.8 0 3-4.2 4.2-4.2v28.9zM98 614.7v22.1h2.5v-22.1c-.9-.5-1.7-.5-2.5 0z"/>
<path d="M98.2 629c3.1 1.6 6.2 3.5 7 7.8h-7zm43.2-6.6v14.4h2v-14.4c-.6-.3-1.5-.4-2 0z"/>
<path d="M143.4 629c-3.1 1.5-6.2 3.3-7 7.7h7zm-20.6-33.7 1.8-1.5v-2c-.6 0-1 .3-1.5 1a5 5 0 0 0-2.5-3 5 5 0 0 0-2.6 2.9c-.5-.7-.8-.8-1.5-1v2l1.8 1.6z"/>
<path d="m123.8 600.2.8-1.9v-2.5c-.6 0-1 .3-1.5 1a5 5 0 0 0-2.5-3 5 5 0 0 0-2.6 2.9c-.5-.7-.8-.8-1.5-.9v2.5l.8 1.9z"/>
<path d="m124 606.8 2.6-3.3v-3.2c-1 0-1.5.5-2.2 1.6-.7-2.3-2-2.7-3.8-3.8-1.9 1-3.2 1.5-3.8 3.7-.8-1.1-1.3-1.4-2.3-1.5v3.2l2.7 3.3z"/>
<path d="M124.7 613.3s3.2-2.7 3.3-4.2v-3.5c-1.2.1-2.3.4-3.2 1.9-.8-2.9-2-3.7-4.2-5-2.3 1.3-3.5 2.1-4.2 5-1-1.5-2-1.8-3.3-2v3.6a15 15 0 0 0 3.3 4.2z"/>
<path d="M126 625.3s4.4-4.7 4.5-6.6v-5.4c-1.6.2-3.2 1.3-4.4 3.6-1-4.5-2.6-7.6-5.5-9.8-3 2.2-4.6 5.3-5.6 9.8-1.2-2.3-2.7-3.4-4.3-3.6v5.4c.3 1.9 4.4 6.6 4.4 6.6z"/>
<path d="M126 632.4s3.7-3.7 4.5-5.3v-5.4c-1.6.2-3.2 1.3-4.4 3.5a14 14 0 0 0-5.5-9.2c-3 2.2-4.6 4.7-5.6 9.2-1.2-2.2-2.7-3.3-4.3-3.5v5.4c1 1.6 4.4 5.3 4.4 5.3z"/>
<path d="M127.5 636.6c-1-4.7-2-8.2-7.1-11.7-5.2 3.5-6.1 7-7.2 11.7z"/>
<path d="M130.2 639.2v-6.8c-2.4 1-4.5 2.3-5.3 3.8-.8-3.8-2.5-5.4-4.6-7.7-2.1 2.3-3.5 4-4.4 7.7-.8-1.5-2.9-2.9-5.2-3.8v6.8z"/>
</g>
<use xlink:href="#a" width="100%" height="100%" transform="matrix(-1 0 0 1 390.7 0)"/>
<path d="M72.7 694.3H318v12.5H72.7zm-6.5 12.5h258.3v12.5H66.2zm19.4-31.3H305v8.1H85.6z"/>
<path d="M79.2 683.6h232.4v10.6H79.2zm10.2-14.3h212v6.2h-212z"/>
<path d="M112.4 669.3h16v50h-16z"/>
<path d="M116 669.3h8.9v50h-9zm71 0h16v50h-16z"/>
<path d="M190.7 669.3h9v50h-9zm71.5 0h16v50h-16z"/>
<path d="M265.7 669.3h9v50h-9z"/>
<path fill="none" d="M99 664.2h193M115.8 713h9.2m-9.2-6.3h9.2m-9.2-6.2h9.2m-9.2-6.3h9.2m-9.2-6.2h9.2m-9.2-6.3h9.2m-9.2-6.2h9.2m65.8 37.5h8.6m-8.6-6.3h8.6m-8.6-6.2h8.6m-8.6-6.3h8.6m-8.6-6.2h8.6m-8.6-6.3h8.6m-8.6-6.2h8.6m66.2 37.5h9.2m-9.2-6.3h9.2m-9.2-6.2h9.2m-9.2-6.3h9.2m-9.2-6.2h9.2m-9.2-6.3h9.2m-9.2-6.2h9.2"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@ -0,0 +1,24 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="flag-icons-kr" viewBox="0 0 640 480">
<defs>
<clipPath id="a">
<path fill-opacity=".7" d="M-95.8-.4h682.7v512H-95.8z"/>
</clipPath>
</defs>
<g fill-rule="evenodd" clip-path="url(#a)" transform="translate(89.8 .4) scale(.9375)">
<path fill="#fff" d="M-95.8-.4H587v512H-95.8Z"/>
<g transform="rotate(-56.3 361.6 -101.3) scale(10.66667)">
<g id="c">
<path id="b" d="M-6-26H6v2H-6Zm0 3H6v2H-6Zm0 3H6v2H-6Z"/>
<use xlink:href="#b" width="100%" height="100%" y="44"/>
</g>
<path stroke="#fff" d="M0 17v10"/>
<path fill="#cd2e3a" d="M0-12a12 12 0 0 1 0 24Z"/>
<path fill="#0047a0" d="M0-12a12 12 0 0 0 0 24A6 6 0 0 0 0 0Z"/>
<circle cy="-6" r="6" fill="#cd2e3a"/>
</g>
<g transform="rotate(-123.7 191.2 62.2) scale(10.66667)">
<use xlink:href="#c" width="100%" height="100%"/>
<path stroke="#fff" d="M0-23.5v3M0 17v3.5m0 3v3"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,23 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-kz" viewBox="0 0 640 480">
<g fill-rule="evenodd">
<path fill="#00abc2" d="M0 0h640v480H0z"/>
<g fill="#ffec2d">
<path d="M60.2 467c3.3 3.2 2.2 8.5 11.3 7.8 13.8 0 14.2-8.4 14.2-14.3S65 446.4 64 437.7c-1-8.7 4.8-11 9.6-11 4.7 0 8 2.7 8 5.1S79.4 435 76 435s1.5-1.7-1.4-3-4.8 2-4.8 4c0 2.2 7.2 2.8 12 1.3 1 4.7 1.4 5-5.3 13 4.8-3.1 5.2-3.8 10.5-2-5.3-4.6-1.3-13.8-1.2-16.1s-1-5.1-3-6.5c-3.9-3.5-12.2-3.7-17.2-1.4-7.3 3.2-7.7 12.8-5.8 16L80 460.7c1.4 2.4 2 9.2-6.6 9.5-9 .7-12.2-11.6-13.8-15.7-2.1 4.5-4.5 16.8-13.6 16.1-8.6-.3-10.2-7-8.8-9.5l20.7-21c2-3.2 1.6-12.8-5.7-16-5-2.3-13.3-2-17.1 1.4-2.2 1.4-3.4 4.1-3.2 6.5s4.1 11.5-1.1 16c5.2-1.7 5.7-1 10.5 2-6.7-7.9-6.2-8.2-5.3-13 4.8 1.6 12 1 12-1.1s-2-5.6-4.9-4.2c-2.8 1.4 2 3.1-1.4 3.1-3.3 0-5.7-.7-5.7-3s3.3-5.3 8.1-5.3 10.5 2.4 9.5 11.1-22 18.1-22 24c0 6 1.4 13.1 15.2 13.1 9 .7 10.1-4.6 13.4-7.8z"/>
<path d="M59.1 343.3c3.3-3.2 6-12.6 15-12 13.8 0 19 7.7 19 13.6 0 5.9-28 54-29 62.7-1 8.7 4.8 11.1 9.5 11.1 4.8 0 8.1-2.7 8.1-5.2s-2.4-3-5.7-3 1.4 1.7-1.4 3-4.8-2-4.8-4.1c0-2.1 7.2-2.8 12-1.2.9-4.7 1.3-5-5.3-13 4.8 3 5.2 3.8 10.5 2-5.3 4.6-1.4 13.7-1.2 16s-1 5.2-3.1 6.6c-3.8 3.5-12.2 3.6-17.2 1.4-7.2-3.3-7.6-12.8-5.7-16L87 346.6c1.5-2.4-2.3-10.4-10.9-10.7-9-.7-12.1 8.8-13.7 12.9l12.3-1s.5 2 0 3.2a110 110 0 0 0-12.3 1.6l-.5 6.2h6l-.4 2.8s-5.1-.4-5.6 0c-.5.3-1 6.2-1 6.2s-1 .4-2 .4-2-.4-2-.4-.4-5.9-.9-6.2c-.5-.4-5.6 0-5.6 0l-.5-2.8H56l-.5-6.2s-6-1.2-12.3-1.6c-.4-1.2 0-3.1 0-3.1l12.3.9c-1.6-4.1-4.7-13.6-13.7-13-8.6.4-12.4 8.4-11 10.8L58 405.2c1.9 3.1 1.5 12.7-5.7 16-5 2.2-13.4 2-17.2-1.4-2.1-1.4-3.3-4.2-3.1-6.5s4-11.6-1.2-16c5.3 1.7 5.8 1 10.5-2.1-6.6 8-6.2 8.3-5.2 13 4.7-1.6 11.9-1 11.9 1.2 0 2-2 5.5-4.8 4.1-2.8-1.4 2-3-1.4-3-3.3 0-5.7.6-5.7 3s3.3 5.2 8 5.2 10.5-2.4 9.6-11c-1-8.7-29-57-29-62.8 0-6 5.2-13.5 19-13.5 9-.7 12.3 8.7 15.5 11.9z"/>
<path d="M59.1 319.4c3.3 3.2 6 12.6 15 12 13.8 0 19-7.7 19-13.6 0-5.9-28-54-29-62.7-1-8.7 4.8-11.1 9.5-11.1 4.8 0 8.1 2.7 8.1 5.2s-2.4 3-5.7 3 1.4-1.6-1.4-3-4.8 2-4.8 4.1c0 2.1 7.2 2.8 12 1.2.9 4.7 1.3 5-5.3 13 4.8-3 5.2-3.8 10.5-2-5.3-4.6-1.4-13.7-1.2-16s-1-5.2-3.1-6.6c-3.8-3.4-12.2-3.6-17.2-1.4-7.2 3.3-7.6 12.8-5.7 16L87 316c1.5 2.4-2.3 10.4-10.9 10.7-9 .7-12.1-8.8-13.7-12.9l12.3 1s.5-2 0-3.2a110 110 0 0 1-12.3-1.6l-.5-6.2h6l-.4-2.8s-5.1.4-5.6 0c-.5-.3-1-6.2-1-6.2s-1-.4-2-.4-2 .4-2 .4-.4 5.9-.9 6.2c-.5.4-5.6 0-5.6 0l-.5 2.8H56l-.5 6.2s-6 1.2-12.3 1.6c-.4 1.2 0 3.1 0 3.1l12.3-.9c-1.6 4.1-4.7 13.6-13.7 13-8.6-.4-12.4-8.4-11-10.8L58 257.5c1.9-3.2 1.5-12.7-5.7-16-5-2.2-13.4-2-17.2 1.4-2.1 1.4-3.3 4.2-3.1 6.5s4 11.5-1.2 16c5.3-1.7 5.8-1 10.5 2.1-6.6-8-6.2-8.3-5.2-13 4.7 1.6 11.9 1 11.9-1.2 0-2-2-5.5-4.8-4.1-2.8 1.4 2 3-1.4 3-3.3 0-5.7-.6-5.7-3s3.3-5.2 8-5.2 10.5 2.4 9.6 11c-1 8.7-29 57-29 62.8 0 6 5.2 13.5 19 13.5 9 .7 12.3-8.7 15.5-11.9z"/>
<path d="M59.1 160.6c3.3-3.2 6-12.6 15-12 13.8 0 19 7.7 19 13.6 0 5.9-28 54-29 62.8-1 8.6 4.8 11 9.5 11 4.8 0 8.1-2.7 8.1-5.1s-2.4-3.2-5.7-3.2 1.4 1.8-1.4 3.2-4.8-2.1-4.8-4.2c0-2 7.2-2.8 12-1.2.9-4.7 1.3-5-5.3-13 4.8 3.1 5.2 3.8 10.5 2-5.3 4.6-1.4 13.8-1.2 16s-1 5.2-3.1 6.6c-3.8 3.5-12.2 3.6-17.2 1.4-7.2-3.3-7.6-12.8-5.7-16L87 164c1.5-2.4-2.3-10.4-10.9-10.7-9-.7-12.1 8.8-13.7 12.9l12.3-1s.5 2 0 3.2c-6.4.4-12.3 1.6-12.3 1.6l-.5 6.2h6l-.4 2.8s-5.1-.3-5.6 0-1 6.3-1 6.3-1 .3-2 .3-2-.3-2-.3-.4-6-.9-6.3c-.5-.3-5.6 0-5.6 0l-.5-2.8H56l-.5-6.2s-6-1.2-12.3-1.6c-.4-1.2 0-3.1 0-3.1l12.3.9c-1.6-4.1-4.7-13.6-13.7-13-8.6.4-12.4 8.4-11 10.8L58 222.5c1.9 3.2 1.5 12.7-5.7 16-5 2.2-13.4 2-17.2-1.4-2.1-1.4-3.3-4.2-3.1-6.5s4-11.5-1.2-16c5.3 1.7 5.8 1 10.5-2.1-6.6 8-6.2 8.3-5.2 13 4.7-1.6 11.9-.9 11.9 1.2 0 2-2 5.5-4.8 4.1-2.8-1.3 2-3-1.4-3-3.3 0-5.7.6-5.7 3s3.3 5.2 8 5.2 10.5-2.4 9.6-11c-1-8.7-29-56.9-29-62.8 0-5.9 5.2-13.5 19-13.5 9-.7 12.3 8.7 15.5 12z"/>
<path d="M59.1 136.7c3.3 3.2 6 12.7 15 12 13.8 0 19-7.7 19-13.6 0-5.9-28-54-29-62.7-1-8.7 4.8-11.1 9.5-11.1 4.8 0 8.1 2.8 8.1 5.2s-2.4 3.1-5.7 3.1 1.4-1.7-1.4-3.1-4.8 2-4.8 4.1c0 2.1 7.2 2.8 12 1.2.9 4.7 1.3 5-5.3 13 4.8-3 5.2-3.8 10.5-2-5.3-4.5-1.4-13.7-1.2-16s-1-5.2-3.1-6.6c-3.8-3.4-12.2-3.6-17.2-1.3-7.2 3.2-7.6 12.8-5.7 15.9L87 133.4c1.5 2.4-2.3 10.4-10.9 10.8-9 .6-12.1-8.8-13.7-13l12.3 1s.5-2 0-3.2a111.5 111.5 0 0 1-12.3-1.5l-.5-6.3h6l-.4-2.8s-5.1.4-5.6 0c-.5-.3-1-6.2-1-6.2s-1-.4-2-.4-2 .4-2 .4-.4 5.9-.9 6.2c-.5.4-5.6 0-5.6 0l-.5 2.8H56l-.5 6.3s-6 1.1-12.3 1.5c-.4 1.3 0 3.2 0 3.2l12.3-1c-1.6 4.2-4.7 13.6-13.7 13-8.6-.4-12.4-8.4-11-10.8L58 74.8c1.9-3.1 1.5-12.7-5.7-16-5-2.2-13.4-2-17.2 1.4-2.1 1.4-3.3 4.2-3.1 6.5s4 11.6-1.2 16c5.3-1.7 5.8-1 10.5 2.1-6.6-8-6.2-8.3-5.2-13 4.8 1.6 11.9 1 11.9-1.2 0-2-2-5.5-4.8-4.1-2.8 1.4 2 3.1-1.4 3.1-3.3 0-5.7-.7-5.7-3.1s3.3-5.2 8-5.2 10.6 2.4 9.6 11c-1 8.7-29 57-29 62.8 0 6 5.2 13.6 19 13.6 9 .7 12.3-8.8 15.5-12z"/>
<path d="M60.2 13c3.3-3.2 2.2-8.5 11.3-7.8 13.8 0 14.2 8.4 14.2 14.3S65 33.6 64 42.3c-1 8.7 4.8 11 9.6 11 4.7 0 8-2.7 8-5.1S79.4 45 76 45s1.5 1.7-1.4 3-4.8-2-4.8-4c0-2.2 7.2-2.9 12-1.3 1-4.7 1.4-5-5.3-13 4.8 3.1 5.2 3.8 10.5 2-5.3 4.6-1.3 13.8-1.2 16.1s-1 5.1-3 6.5c-4 3.7-12.3 3.7-17.3 1.5-7.3-3.2-7.7-12.8-5.8-16L80 19.3c1.4-2.4 2-9.2-6.6-9.5-9-.7-12.2 11.6-13.8 15.7C57.5 21 55.1 8.6 46 9.3c-8.6.3-10.2 7-8.8 9.5l20.7 21c2 3.2 1.6 12.8-5.7 16-5 2.3-13.3 2.1-17.1-1.4-2.2-1.4-3.4-4.1-3.2-6.5s4.1-11.5-1.1-16c5.2 1.7 5.7 1 10.4-2-6.6 7.9-6.1 8.2-5.2 13 4.8-1.6 12-1 12 1.1s-2 5.6-4.9 4.2c-2.8-1.4 2-3.1-1.4-3.1-3.3 0-5.7.7-5.7 3s3.3 5.3 8.1 5.3 10.5-2.4 9.5-11.1-22-18.1-22-24c0-6 1.4-13.1 15.2-13.1 9-.7 10.1 4.6 13.4 7.8z"/>
</g>
<g fill="#ffec2d" transform="translate(-194.7 8.3) scale(1.0673)">
<rect width="170.2" height="161.3" x="425.9" y="104.5" rx="85.1" ry="80.7"/>
<path d="M507 56.4c-.8 0-4.6 26.8-6 32.8-1.4 13.5 18 13 14.8-.5L507 56.3zm6.8 259.8c.7 0 6.5-26.5 8.4-32.4 2.3-13.3-17.1-14-15-.4l6.6 32.8zM378.2 184.6c0 .7 27.9 6.3 34.1 8.1 14 2.3 15-16 .6-14l-34.7 6zm271.7 3.2c0-.7-28.2-5.3-34.5-6.9-14.1-1.7-14.2 16.6 0 14.1l34.5-7.2zM406.8 99.6c-.5.5 17.9 21.3 21.6 26.4 9.6 10 22.3-4 9.6-10.8l-31.2-15.5zm211.1 171c.5-.5-19.7-19.7-23.9-24.4-10.5-9.2-21.8 5.7-8.6 11.5l32.5 13zm-169-200c-.6.3 8 26.1 9.4 32.2 4.8 12.7 22.2 4.4 13.2-6.5L449 70.6zM572 303c.7-.3-6-26.6-6.9-32.7-3.9-13-21.8-6-13.7 5.6l20.7 27zm30.3-214.4c-.6-.5-22.8 16.6-28.2 20-10.7 9 3.8 21.2 11.2 9.3l17-29.3zm-183 193.7c.5.5 24-15 29.6-18.1 11.3-8.2-2.2-21.4-10.5-10l-19 28.1zm-35-144.1c-.3.6 24 14.7 29.3 18.4 12.5 6.5 19.8-10.5 5.5-13.2l-34.8-5.2zM638 236.6c.3-.6-23-16.3-28-20.3-12-7.4-20.5 9.1-6.4 12.7l34.4 7.6zM557.4 63.7c-.7-.2-14.6 23.4-18.3 28.5a7.8 7.8 0 0 0 14 4.7l4.3-33.2zM463.5 308c.7.3 16.3-22.4 20.3-27.3 7.3-11.6-10.4-19-13.7-5.6l-6.6 32.9zM386 238.7c.3.6 28-6 34.5-7 13.6-3.8 6-20.6-6-12.8L386 238.7zM638.1 136c-.2-.6-28.3 4.1-34.8 4.7-14 2.9-7.5 20.2 5 13.2l29.8-17.9z"/>
<path d="M534.6 58.1c-.7-.1-10.1 25.4-12.9 31-4.1 13 15 16.2 14.7 2.4L534.7 58zM486.1 314c.7.2 12-24.7 15.2-30.2 5-12.6-13.8-17-14.5-3.3L486 314zm-9.7-253.4c-.7.2 1.9 27.2 1.9 33.4 1.9 13.3 20.6 8.7 14.4-3.7l-16.3-29.7zm68 251.9c.7-.1 0-27.2.5-33.4-.9-13.5-20-10.1-14.6 2.7l14 30.7zM428.2 83c-.6.4 12.7 24.3 15.2 30 7.2 11.7 22.7.7 11.8-8.6l-27-21.4zM593 290.9c.6-.4-11-25.2-13-31-6.3-12.1-22.5-2.1-12.4 7.8l25.4 23.2zM393 116.6c-.4.6 21.1 18.4 25.6 23 11.1 8.4 21.4-7.2 7.8-12.1L393 116.6zm234.2 139.7c.4-.6-19.7-19.8-23.9-24.6-10.4-9.1-21.8 5.8-8.6 11.6l32.5 13zm-249.6-97.8c-.2.7 26.3 10.8 32.1 13.7 13.4 4.5 17.7-13.4 3.1-13.8l-35.2.1zM645 216.3c.3-.6-25.4-12.4-31-15.7-13-5.4-18.7 12.2-4.2 13.6l35.2 2.1zM376.7 210c.1.6 28.7.2 35.2.7 14.2-.7 10.8-18.8-2.8-13.9L376.7 210zm270.2-45c0-.7-28.6-2.2-35-3.1-14.3-.2-12.2 18.1 1.7 14l33.3-11zm-245.7 98.4c.4.6 26-11.6 32-13.9 12.4-6.5 1-21.4-8.9-11.3l-23.1 25.2zm222.3-152.3c-.4-.6-26.7 9.9-33 11.8-12.9 5.7-2.6 21.3 8 11.9l25-23.7zM442.8 298.8c.6.3 18.9-20.5 23.5-24.9 8.7-10.7-8-20-12.9-7l-10.6 31.9zM582.5 75c-.5-.4-20.3 19.1-25.2 23.2-9.4 10.1 6.6 20.5 12.4 7.9L582.4 75z"/>
<g transform="matrix(2.1824 0 0 2.0629 -405 -272.6)">
<path d="M360.1 247.9c.7 2.5.8 16.5 14.9 30 14 13.4 38 16.4 38 16.4s.1 1.9-1.6 2c-1.7.2-9.9-1.5-14-2.8-4-1.2-7.6-3.4-8-3.3-.5.2-1.3 1.6-2.5 1.4s-7-6.2-9.6-7.8a80.6 80.6 0 0 1-13.7-15.3c-2.8-4.5-3.5-7.5-4.4-7.5s-4.2 2.2-4.2 2.2-3-4.5-5.6-11.7c-2.7-7.2-2.4-11.4-1.8-11.7.7-.3.7 5.3 2.7 10.4 2 5.2 4.8 6.8 4.8 6.8s-1.8-2.7-3.2-9.4-2-13.2-1-15.2 1.9-2.6 2-2.5c.2.2-1.7 3.1-.4 10.8s4.8 14.2 5.6 13.9c.8-.3-.5-1.9-1-6.4s.5-7.3 1.6-7.7c.5-.4 1.3 5 1.4 7.4zm-9.8 12.8c-2.7-2.5-6.9-11.2-7.8-10.8-1 .5 6.8 13 7 14 .2 1.2 1.9 4.6.6 4.1s-10.6-10.3-9.5-8.4 8.1 10.5 7.7 11-5.8-4.8-6-4.1c-.1.6 5.3 5.8 5.2 6.4s-3.5-3.3-3.5-2.5 3.5 4.7 3.5 5.3-3-2.8-2-1c.9 2 3.5 3.7 3.4 4.3s-2.2-.8-2.2-.5c0 .3 3.9 1.7 4.8 2.8 1 1.1 7.4 8.5 12.2 12.2s18.6 10.2 19.6 10.2c.9 0 2.3-2 2-2.8-.3-.8-13.8-5.4-17.5-8.8-3.8-3.4-13-11.6-13.8-12-.7-.5-2.8-.3-2.8-.8s2.7.3 2.5 0c-.1-.3-3.7-1.9-3.6-2.2.2-.3 2.5.6 2.5.3s-4.2-2.6-4-3.1c.1-.5 3.1 1.4 3.1 1 0-.2-4-3-3.9-3.5.1-.5 3.1 2.2 3 1.6s-2.4-4-2.4-4.4c0-.5 3.6 3.4 4 2.6.2-.7-1.3-7.2-1.2-7.3s2.7 1.4 3.1.5c.5-1-1.8-2.3-4-4.1zm46.1 49.2c-1.9.3-2.8-.4-1.7-2 1.5 0 5.5-1.3 6.9-1.9s2.9-1.4 4.1-2.5c1.2-1.3 2 .7 1.3 1.8-.5.7-2.8 2-4.5 2.7-2.5.8-4.7 2-6.1 1.9zm12.5-5.1c-1.3-1.4-.2-2.4 1.7-3.5 2.8-1.5 2-3.6 5.6-5.3 1.6-1 24-10 31.3-14.8s27.8-20.3 33.3-31c5.4-10.6 2.8-11.4 3.6-11.8.7-.5 1.5 1.5 1.4 3.9-.2 2.3-2 9.3-1.4 10s8.2-5.5 11.4-13 5.6-15.3 7.1-15.3c1.6 0-2.6 12.8-5.3 17.8-2.6 5-5.7 7.5-5 8.6.8 1 8.6-5.5 11.3-10.3 2.6-4.9 5.1-9.2 5.6-8.3a34 34 0 0 1-6.7 16.1c-4.2 4.8-9.2 8.3-8.4 9 .7.8 6.4 1.6 12.3-2.4 6-4.1 6.6-10 7.3-9.7.8.3-.7 8.4-6.4 13.4s-13.2 5.5-13 6.6c.4 1 16.3-4.6 16-3.3-.3 1.2-20.6 9.2-20.8 10 0 .6 3.5.8 9-.5 5.4-1.2 10.6-5.5 11.3-4.5.2 1.4-3.9 4.8-10.1 6.4-6.3 1.6-9.4 3.7-9.6 4.2-.1.5 11.2-1.4 11.2-.8s-14.8 3.5-14.9 4.3c-.2.7 14-2.9 13.8-2-.4.7-19.3 6.3-19.1 6.6.1.4 15.8-3.4 15.5-2.8-.4.7-26.4 8-26.6 8.5-.2.4 23-5.2 22.8-4.7s-12 3.4-12 3.7c0 .3 9.5-1.5 9.3-1-.1.4-24 6.5-24.5 7.4-.5 1 12.4-2.5 12.2-.7s-27.7 11-27.8 9.3c-.2-1.7 16.7-6 16.6-6.5-.2-.5-9.7 1-9.9.1-.1-1 6.3-3 5.8-3.4-.5-.5-5.3 1.4-4.9.3.5-1.1 9.6-5.3 9.4-5.6-.1-.3-3.3 1-3 0 .4-1.1 19.7-6.7 19.4-7.4-.3-.6-8.9 1.4-9.7 1.6-.3-.6 12-5.2 11.8-6-.4-.7-6.6 2.7-7 1.8-.2-1 10.9-5.3 10.2-6s-5.7 1.8-6.4 1.1 10.5-8.4 8.8-8.6c-1.7-.1-3.8 2.4-4 .8.2-2 8.7-5.3 6.8-6.9-3-.9-13.1.7-17.3 3.2s-18.2 16.4-21.6 18.6c-3.4 2.1-15 7-17.2 8-3.4 1.2-4 3-7.5 4.8-6.3 1.7-6.2 3.6-9.2 4.7-1.1.3-12.4 5.7-12.5 5.3zm-15.8 7c-1.9 1-3.6 3.4-2.5 4.4.6 1.2 2.5-2.7 4-2.5l8 .4c4.3.3 6.4-.9 8.8-.7s7.7-1.3 10.2-1.3 3 .3 3.2-.8c.3-1-7.8-.3-11.4-.4-3.6-.2-8.1.7-10.8.7-2.5-.1-6.8-.9-9.5.2z"/>
<rect width="3.4" height="3" x="401.7" y="309.1" rx="1.7" ry="1.5"/>
<path d="M445 307.7c1.7-.3 6.3 1.3 9.5 2 5.8 2.3 16.6 1.2 16.6 2.3s-.7 2.4-3.2 2.6-8.8-1-8.6-1 5 2.3 3.6 2.9-5.5-1.3-6.2-.8 3.8 1.4 3 1.7c-.6.3-3.7-.4-4.7-.3-1 .2.8 1.3-.4 1.7-1.2.5-3.2-.6-4-.3-.9.3 1.8 2 .6 2.2-1.2.2-4-.8-5.6-1-1.6 0 1.5 1.6.5 1.8-1 .1-3.8-1.3-4.5-1.3s0 2-1 2-2.2-1.7-2.8-1.7 0 2-1 2-1.4-2.1-2.2-2c-1 .2 0 2.7-1.4 2.5-1.3-.1-1.5-2.6-2.6-2.5-1 .2.2 2.5-.8 2.5s-1.2-2.3-2.2-2.5c-1-.1-.6 2.2-1.2 2.2s-1.2-2.2-1.6-2.2c-.3 0 0 2.2-1.2 2s-1.2-2.4-1.5-2.3c-.4.2-.4 1.8-1.2 1.8s-.9-1.6-1.2-1.4c-.4.1-1.6 2.1-2.4 1.8-.9-.3.2-1.9-.2-1.9s-1.4 1.1-2 1 0-1.4-.2-1.4-1.7.8-2.4.8-2.6 1-3.1.1c-.5-1 1.3-1 1.7-1.9.3-.9-1-3.6.4-4.5 1.3-1 5.6 1.3 12-.3 11.6-3.1 20.6-6.7 21.5-6.6z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-lu" viewBox="0 0 640 480">
<path fill="#00a1de" d="M0 240h640v240H0z"/>
<path fill="#ed2939" d="M0 0h640v240H0z"/>
<path fill="#fff" d="M0 160h640v160H0z"/>
</svg>

After

Width:  |  Height:  |  Size: 225 B

View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-nl" viewBox="0 0 640 480">
<path fill="#21468b" d="M0 0h640v480H0z"/>
<path fill="#fff" d="M0 0h640v320H0z"/>
<path fill="#ae1c28" d="M0 0h640v160H0z"/>
</svg>

After

Width:  |  Height:  |  Size: 221 B

View File

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-pl" viewBox="0 0 640 480">
<g fill-rule="evenodd">
<path fill="#fff" d="M640 480H0V0h640z"/>
<path fill="#dc143c" d="M640 480H0V240h640z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 219 B

View File

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-ru" viewBox="0 0 640 480">
<g fill-rule="evenodd" stroke-width="1pt">
<path fill="#fff" d="M0 0h640v480H0z"/>
<path fill="#0039a6" d="M0 160h640v320H0z"/>
<path fill="#d52b1e" d="M0 320h640v160H0z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 283 B

View File

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-se" viewBox="0 0 640 480">
<path fill="#005293" d="M0 0h640v480H0z"/>
<path fill="#fecb00" d="M176 0v192H0v96h176v192h96V288h368v-96H272V0h-96z"/>
</svg>

After

Width:  |  Height:  |  Size: 213 B

View File

@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-sg" viewBox="0 0 640 480">
<defs>
<clipPath id="a">
<path fill-opacity=".7" d="M0 0h640v480H0z"/>
</clipPath>
</defs>
<g fill-rule="evenodd" clip-path="url(#a)">
<path fill="#fff" d="M-20 0h720v480H-20z"/>
<path fill="#df0000" d="M-20 0h720v240H-20z"/>
<path fill="#fff" d="M146 40.2a84.4 84.4 0 0 0 .8 165.2 86 86 0 0 1-106.6-59 86 86 0 0 1 59-106c16-4.6 30.8-4.7 46.9-.2z"/>
<path fill="#fff" d="m133 110 4.9 15-13-9.2-12.8 9.4 4.7-15.2-12.8-9.3 15.9-.2 5-15 5 15h15.8zm17.5 52 5 15.1-13-9.2-12.9 9.3 4.8-15.1-12.8-9.4 15.9-.1 4.9-15.1 5 15h16zm58.5-.4 4.9 15.2-13-9.3-12.8 9.3 4.7-15.1-12.8-9.3 15.9-.2 5-15 5 15h15.8zm17.4-51.6 4.9 15.1-13-9.2-12.8 9.3 4.8-15.1-12.9-9.4 16-.1 4.8-15.1 5 15h16zm-46.3-34.3 5 15.2-13-9.3-12.9 9.4 4.8-15.2-12.8-9.4 15.8-.1 5-15.1 5 15h16z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 883 B

View File

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-tr" viewBox="0 0 640 480">
<g fill-rule="evenodd">
<path fill="#e30a17" d="M0 0h640v480H0z"/>
<path fill="#fff" d="M407 247.5c0 66.2-54.6 119.9-122 119.9s-122-53.7-122-120 54.6-119.8 122-119.8 122 53.7 122 119.9z"/>
<path fill="#e30a17" d="M413 247.5c0 53-43.6 95.9-97.5 95.9s-97.6-43-97.6-96 43.7-95.8 97.6-95.8 97.6 42.9 97.6 95.9z"/>
<path fill="#fff" d="m430.7 191.5-1 44.3-41.3 11.2 40.8 14.5-1 40.7 26.5-31.8 40.2 14-23.2-34.1 28.3-33.9-43.5 12-25.8-37z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 550 B

View File

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-ua" viewBox="0 0 640 480">
<g fill-rule="evenodd" stroke-width="1pt">
<path fill="gold" d="M0 0h640v480H0z"/>
<path fill="#0057b8" d="M0 0h640v240H0z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 232 B

View File

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-us" viewBox="0 0 640 480">
<g fill-rule="evenodd">
<g stroke-width="1pt">
<path fill="#bd3d44" d="M0 0h912v37H0zm0 73.9h912v37H0zm0 73.8h912v37H0zm0 73.8h912v37H0zm0 74h912v36.8H0zm0 73.7h912v37H0zM0 443h912V480H0z"/>
<path fill="#fff" d="M0 37h912v36.9H0zm0 73.8h912v36.9H0zm0 73.8h912v37H0zm0 73.9h912v37H0zm0 73.8h912v37H0zm0 73.8h912v37H0z"/>
</g>
<path fill="#192f5d" d="M0 0h364.8v258.5H0z"/>
<path fill="#fff" d="m30.4 11 3.4 10.3h10.6l-8.6 6.3 3.3 10.3-8.7-6.4-8.6 6.3L25 27.6l-8.7-6.3h10.9zm60.8 0 3.3 10.3h10.8l-8.7 6.3 3.2 10.3-8.6-6.4-8.7 6.3 3.3-10.2-8.6-6.3h10.6zm60.8 0 3.3 10.3H166l-8.6 6.3 3.3 10.3-8.7-6.4-8.7 6.3 3.3-10.2-8.7-6.3h10.8zm60.8 0 3.3 10.3h10.8l-8.7 6.3 3.3 10.3-8.7-6.4-8.7 6.3 3.4-10.2-8.8-6.3h10.7zm60.8 0 3.3 10.3h10.7l-8.6 6.3 3.3 10.3-8.7-6.4-8.7 6.3 3.3-10.2-8.6-6.3h10.7zm60.8 0 3.3 10.3h10.8l-8.8 6.3 3.4 10.3-8.7-6.4-8.7 6.3 3.4-10.2-8.8-6.3h10.8zM60.8 37l3.3 10.2H75l-8.7 6.2 3.2 10.3-8.5-6.3-8.7 6.3 3.1-10.3-8.4-6.2h10.7zm60.8 0 3.4 10.2h10.7l-8.8 6.2 3.4 10.3-8.7-6.3-8.7 6.3 3.3-10.3-8.7-6.2h10.8zm60.8 0 3.3 10.2h10.8l-8.7 6.2 3.3 10.3-8.7-6.3-8.7 6.3 3.3-10.3-8.6-6.2H179zm60.8 0 3.4 10.2h10.7l-8.8 6.2 3.4 10.3-8.7-6.3-8.6 6.3 3.2-10.3-8.7-6.2H240zm60.8 0 3.3 10.2h10.8l-8.7 6.2 3.3 10.3-8.7-6.3-8.7 6.3 3.3-10.3-8.6-6.2h10.7zM30.4 62.6l3.4 10.4h10.6l-8.6 6.3 3.3 10.2-8.7-6.3-8.6 6.3L25 79.3 16.3 73h10.9zm60.8 0L94.5 73h10.8l-8.7 6.3 3.2 10.2-8.6-6.3-8.7 6.3 3.3-10.3-8.6-6.3h10.6zm60.8 0 3.3 10.3H166l-8.6 6.3 3.3 10.2-8.7-6.3-8.7 6.3 3.3-10.3-8.7-6.3h10.8zm60.8 0 3.3 10.3h10.8l-8.7 6.3 3.3 10.2-8.7-6.3-8.7 6.3 3.4-10.3-8.8-6.3h10.7zm60.8 0 3.3 10.3h10.7l-8.6 6.3 3.3 10.2-8.7-6.3-8.7 6.3 3.3-10.3-8.6-6.3h10.7zm60.8 0 3.3 10.3h10.8l-8.8 6.3 3.4 10.2-8.7-6.3-8.7 6.3 3.4-10.3-8.8-6.3h10.8zM60.8 88.6l3.3 10.2H75l-8.7 6.3 3.3 10.3-8.7-6.4-8.7 6.3 3.3-10.2-8.6-6.3h10.7zm60.8 0 3.4 10.2h10.7l-8.8 6.3 3.4 10.3-8.7-6.4-8.7 6.3 3.3-10.2-8.7-6.3h10.8zm60.8 0 3.3 10.2h10.8l-8.7 6.3 3.3 10.3-8.7-6.4-8.7 6.3 3.3-10.2-8.6-6.3H179zm60.8 0 3.4 10.2h10.7l-8.7 6.3 3.3 10.3-8.7-6.4-8.6 6.3 3.2-10.2-8.7-6.3H240zm60.8 0 3.3 10.2h10.8l-8.7 6.3 3.3 10.3-8.7-6.4-8.7 6.3 3.3-10.2-8.6-6.3h10.7zM30.4 114.5l3.4 10.2h10.6l-8.6 6.3 3.3 10.3-8.7-6.4-8.6 6.3L25 131l-8.7-6.3h10.9zm60.8 0 3.3 10.2h10.8l-8.7 6.3 3.2 10.2-8.6-6.3-8.7 6.3 3.3-10.2-8.6-6.3h10.6zm60.8 0 3.3 10.2H166l-8.6 6.3 3.3 10.3-8.7-6.4-8.7 6.3 3.3-10.2-8.7-6.3h10.8zm60.8 0 3.3 10.2h10.8l-8.7 6.3 3.3 10.3-8.7-6.4-8.7 6.3 3.4-10.2-8.8-6.3h10.7zm60.8 0 3.3 10.2h10.7L279 131l3.3 10.3-8.7-6.4-8.7 6.3 3.3-10.2-8.6-6.3h10.7zm60.8 0 3.3 10.2h10.8l-8.8 6.3 3.4 10.3-8.7-6.4-8.7 6.3L329 131l-8.8-6.3h10.8zM60.8 140.3l3.3 10.3H75l-8.7 6.2 3.3 10.3-8.7-6.4-8.7 6.4 3.3-10.3-8.6-6.3h10.7zm60.8 0 3.4 10.3h10.7l-8.8 6.2 3.4 10.3-8.7-6.4-8.7 6.4 3.3-10.3-8.7-6.3h10.8zm60.8 0 3.3 10.3h10.8l-8.7 6.2 3.3 10.3-8.7-6.4-8.7 6.4 3.3-10.3-8.6-6.3H179zm60.8 0 3.4 10.3h10.7l-8.7 6.2 3.3 10.3-8.7-6.4-8.6 6.4 3.2-10.3-8.7-6.3H240zm60.8 0 3.3 10.3h10.8l-8.7 6.2 3.3 10.3-8.7-6.4-8.7 6.4 3.3-10.3-8.6-6.3h10.7zM30.4 166.1l3.4 10.3h10.6l-8.6 6.3 3.3 10.1-8.7-6.2-8.6 6.2 3.2-10.2-8.7-6.3h10.9zm60.8 0 3.3 10.3h10.8l-8.7 6.3 3.3 10.1-8.7-6.2-8.7 6.2 3.4-10.2-8.7-6.3h10.6zm60.8 0 3.3 10.3H166l-8.6 6.3 3.3 10.1-8.7-6.2-8.7 6.2 3.3-10.2-8.7-6.3h10.8zm60.8 0 3.3 10.3h10.8l-8.7 6.3 3.3 10.1-8.7-6.2-8.7 6.2 3.4-10.2-8.8-6.3h10.7zm60.8 0 3.3 10.3h10.7l-8.6 6.3 3.3 10.1-8.7-6.2-8.7 6.2 3.3-10.2-8.6-6.3h10.7zm60.8 0 3.3 10.3h10.8l-8.8 6.3 3.4 10.1-8.7-6.2-8.7 6.2 3.4-10.2-8.8-6.3h10.8zM60.8 192l3.3 10.2H75l-8.7 6.3 3.3 10.3-8.7-6.4-8.7 6.3 3.3-10.2-8.6-6.3h10.7zm60.8 0 3.4 10.2h10.7l-8.8 6.3 3.4 10.3-8.7-6.4-8.7 6.3 3.3-10.2-8.7-6.3h10.8zm60.8 0 3.3 10.2h10.8l-8.7 6.3 3.3 10.3-8.7-6.4-8.7 6.3 3.3-10.2-8.6-6.3H179zm60.8 0 3.4 10.2h10.7l-8.7 6.3 3.3 10.3-8.7-6.4-8.6 6.3 3.2-10.2-8.7-6.3H240zm60.8 0 3.3 10.2h10.8l-8.7 6.3 3.3 10.3-8.7-6.4-8.7 6.3 3.3-10.2-8.6-6.3h10.7zM30.4 217.9l3.4 10.2h10.6l-8.6 6.3 3.3 10.2-8.7-6.3-8.6 6.3 3.2-10.3-8.7-6.3h10.9zm60.8 0 3.3 10.2h10.8l-8.7 6.3 3.3 10.2-8.7-6.3-8.7 6.3 3.4-10.3-8.7-6.3h10.6zm60.8 0 3.3 10.2H166l-8.4 6.3 3.3 10.2-8.7-6.3-8.7 6.3 3.3-10.3-8.7-6.3h10.8zm60.8 0 3.3 10.2h10.8l-8.7 6.3 3.3 10.2-8.7-6.3-8.7 6.3 3.4-10.3-8.8-6.3h10.7zm60.8 0 3.3 10.2h10.7l-8.6 6.3 3.3 10.2-8.7-6.3-8.7 6.3 3.3-10.3-8.6-6.3h10.7zm60.8 0 3.3 10.2h10.8l-8.8 6.3 3.4 10.2-8.7-6.3-8.7 6.3 3.4-10.3-8.8-6.3h10.8z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-za" viewBox="0 0 640 480">
<defs>
<clipPath id="a">
<path fill-opacity=".7" d="M-71.9 0h682.7v512H-71.9z"/>
</clipPath>
</defs>
<g clip-path="url(#a)" transform="translate(67.4) scale(.93748)">
<g fill-rule="evenodd" stroke-width="1pt">
<path d="M-71.9 407.8V104.4L154 256.1-72 407.8z"/>
<path fill="#00c" d="m82.2 512.1 253.6-170.6H696V512H82.2z"/>
<path fill="red" d="M66 0h630v170.8H335.7S69.3-1.7 66 0z"/>
<path fill="#fc0" d="M-71.9 64v40.4L154 256-72 407.8v40.3l284.5-192L-72 64z"/>
<path fill="#093" d="M-71.9 64V0h95l301.2 204h371.8v104.2H324.3L23 512h-94.9v-63.9l284.4-192L-71.8 64z"/>
<path fill="#fff" d="M23 0h59.2l253.6 170.7H696V204H324.3L23 .1zm0 512.1h59.2l253.6-170.6H696v-33.2H324.3L23 512z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 850 B

BIN
inc/images/provisioning/oss/.DS_Store vendored Normal file

Binary file not shown.

View File

@ -0,0 +1 @@
<svg width="15" height="15" viewBox="0.038 0.038 25.514 25.514" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid"><path d="m10.786 11.864 0.922 0.918 -0.922 0.917H4.29v3.057L0.329 12.782l3.961 -3.907v2.99h6.496Zm2.855 -7.807H21.535v7.893H13.642V4.057Z" fill="#932279"/><path d="m13.727 10.786 -0.917 0.922 -0.917 -0.922V4.29h-3.058L12.81 0.329l3.907 3.961h-2.99v6.496Zm-0.085 2.855H21.535V21.535H13.642V13.642Z" fill="#EFA724"/><path d="m14.806 13.727 -0.922 -0.917 0.922 -0.917h6.496v-3.058l3.962 3.975 -3.962 3.907v-2.99h-6.496Zm-10.748 -0.085h7.893V21.535H4.057V13.642Z" fill="#262577"/><path d="m11.864 14.806 0.917 -0.922 0.918 0.922v6.496h3.057l-3.975 3.961 -3.907 -3.961h2.99v-6.496ZM4.057 4.057h7.893v7.893H4.057V4.057Z" fill="#9CCD2A"/><path d="M3.775 3.775h8.457v8.457H3.775V3.775Zm0.563 7.893H11.667V4.34H4.34v7.328ZM13.359 3.775h8.457v8.457H13.359V3.775Zm0.563 7.893h7.328V4.34H13.923v7.328Zm-0.563 1.692h8.457v8.457H13.359V13.36Zm0.563 7.893h7.328V13.925H13.923v7.328ZM3.775 13.36h8.457v8.457H3.775V13.36Zm0.563 7.893H11.667V13.925H4.34v7.328Z" fill="#FFF"/><path d="M6.02 18.775 0.04 12.796l5.978 -5.979 5.98 5.98 -5.98 5.98ZM0.837 12.796l5.182 5.182 5.182 -5.182 -5.182 -5.182 -5.182 5.182Zm11.96 -0.797 -5.98 -5.979L12.796 0.038l5.98 5.98 -5.98 5.98ZM7.613 6.02l5.182 5.182 5.182 -5.182 -5.182 -5.182 -5.182 5.182Zm11.96 12.757 -5.98 -5.98 5.98 -5.98 5.98 5.98 -5.98 5.98Zm-5.182 -5.98 5.182 5.182 5.182 -5.182 -5.182 -5.182 -5.182 5.182Zm-1.595 12.757 -5.98 -5.981 5.98 -5.98 5.98 5.98 -5.98 5.98Zm-5.183 -5.981 5.182 5.182 5.182 -5.182 -5.182 -5.182 -5.182 5.182Z" fill="#FFF"/></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1 @@
<svg width="15" height="18.574" viewBox="0 0 15 18.574" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid"><g fill="#A80030"><path d="M8.953 9.81c-.308.004.058.159.46.22a4.06 4.06 0 0 0 .301-.259c-.25.061-.505.063-.761.039m1.651-.412c.183-.252.317-.529.364-.816-.041.205-.152.381-.256.567-.575.362-.054-.215 0-.435-.619.779-.085.467-.108.684m.61-1.586c.037-.554-.109-.379-.158-.167.057.03.102.39.158.167M7.786.24c.164.029.355.052.328.091.18-.04.221-.076-.328-.091m.328.091-.116.024.108-.01.008-.014"/><path d="M13.234 8.022c.019.498-.145.739-.293 1.167l-.266.133c-.217.422.021.268-.135.604-.339.302-1.03.945-1.252 1.004-.161-.004.11-.191.145-.264-.455.312-.365.469-1.06.658l-.021-.045c-1.715.807-4.097-.792-4.066-2.974-.018.139-.052.104-.09.16-.089-1.123.518-2.25 1.542-2.711 1.001-.495 2.175-.292 2.892.377-.394-.517-1.178-1.064-2.107-1.012-.911.014-1.762.593-2.046 1.221-.467.293-.521 1.131-.724 1.285-.274 2.009.514 2.878 1.847 3.899.21.141.059.163.087.27a3.614 3.614 0 0 1-1.181-.903c.177.259.368.511.614.708-.417-.141-.975-1.011-1.138-1.047.72 1.289 2.92 2.26 4.072 1.778-.533.02-1.21.011-1.809-.21-.252-.13-.594-.398-.533-.448 1.572.587 3.196.445 4.557-.646.346-.269.724-.728.833-.734-.165.247.028.119-.098.337.345-.556-.15-.226.356-.96l.187.258c-.069-.462.573-1.023.508-1.753.148-.223.165.241.008.754.217-.57.057-.661.113-1.131.06.158.14.326.18.492-.141-.55.145-.927.216-1.247-.07-.031-.218.244-.252-.407.005-.282.079-.148.107-.218-.055-.031-.201-.248-.29-.663.065-.098.172.253.259.267-.056-.33-.153-.582-.156-.835-.256-.534-.091.071-.298-.229-.271-.847.226-.197.259-.582.412.597.647 1.521.754 1.904a7.809 7.809 0 0 0-.377-1.357c.125.053-.201-.96.162-.289-.388-1.43-1.663-2.766-2.836-3.393.144.131.325.296.26.322-.583-.348-.481-.375-.564-.521-.475-.194-.506.015-.821 0C9.883.566 9.711.617 8.887.319l.037.175c-.593-.197-.691.075-1.332.001-.039-.031.205-.11.407-.14-.574.076-.547-.113-1.108.021.138-.097.284-.161.432-.244-.468.029-1.117.273-.917.051-.762.34-2.117.818-2.878 1.531l-.024-.16c-.348.419-1.519 1.249-1.612 1.791l-.094.022c-.181.307-.298.655-.442.971-.237.404-.348.155-.314.219-.466.945-.698 1.74-.898 2.391.143.214.003 1.284.057 2.14-.234 4.23 2.969 8.337 6.47 9.285.513.183 1.276.176 1.925.195-.766-.219-.865-.116-1.611-.376-.538-.254-.656-.543-1.037-.874l.151.267c-.748-.265-.435-.327-1.043-.52l.161-.21c-.242-.019-.642-.409-.751-.625l-.265.011c-.318-.393-.488-.676-.476-.896l-.085.153c-.097-.167-1.172-1.474-.615-1.17-.103-.094-.241-.154-.39-.425l.113-.13c-.268-.345-.493-.787-.476-.935.143.194.242.23.341.263-.678-1.681-.716-.093-1.229-1.711l.108-.009c-.083-.125-.133-.261-.2-.395l.047-.471c-.488-.564-.136-2.398-.066-3.404.049-.409.407-.844.68-1.527l-.166-.029c.317-.553 1.812-2.223 2.504-2.137.336-.422-.066-.002-.132-.108.737-.762.969-.539 1.466-.676.536-.318-.46.124-.206-.121.927-.237.657-.539 1.866-.659.128.073-.296.112-.402.207.772-.378 2.444-.292 3.53.209 1.26.589 2.675 2.33 2.731 3.967l.064.017c-.033.651.099 1.404-.129 2.096l.155-.328"/><path d="m5.595 10.232-.043.216c.202.275.362.572.62.787-.185-.363-.323-.512-.577-1.003m.478-.018c-.107-.119-.171-.261-.241-.403.067.249.206.464.335.682l-.094-.279m8.458-1.839-.045.113a5.485 5.485 0 0 1-.536 1.712c.303-.57.499-1.193.581-1.825M7.847.092C8.055.016 8.358.05 8.579 0c-.287.024-.574.039-.856.075l.124.017M.544 3.975c.048.444-.334.616.084.324.225-.505-.087-.14-.084-.324M.052 6.029c.097-.296.114-.473.151-.644-.267.34-.123.413-.151.644"/></g></svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -0,0 +1 @@
<svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid"><path d="M15 7.5a7.5 7.5 0 0 0-15-.005v5.804A1.705 1.705 0 0 0 1.705 15h5.797A7.5 7.5 0 0 0 15 7.5" fill="#294172"/><path d="M9.702 1.776a3.522 3.522 0 0 0-3.518 3.518v1.867h-1.86a3.522 3.522 0 0 0-3.518 3.518 3.522 3.522 0 0 0 3.518 3.519 3.522 3.522 0 0 0 3.518-3.518V8.812h1.859a3.522 3.522 0 0 0 3.518-3.518 3.522 3.522 0 0 0-3.518-3.518ZM6.197 10.68a1.875 1.875 0 0 1-1.873 1.872 1.874 1.874 0 0 1-1.872-1.872 1.875 1.875 0 0 1 1.872-1.873h1.86v.005h.013v1.868Zm3.505-3.513H7.843v-.005H7.83V5.294a1.875 1.875 0 0 1 1.872-1.873 1.875 1.875 0 0 1 1.873 1.873 1.875 1.875 0 0 1-1.873 1.872Z" fill="#3C6EB4"/><path d="M10.48 1.882a2.812 2.812 0 0 0-.778-.104 3.52 3.52 0 0 0-3.52 3.52v1.866H4.707a.82.82 0 1 0-.008 1.638H5.92c.145 0 .262.117.262.262v1.614a1.859 1.859 0 0 1-1.858 1.855c-.347 0-.433-.046-.67-.046-.498 0-.832.334-.832.792.001.38.325.706.724.811.273.071.483.104.777.104a3.52 3.52 0 0 0 3.52-3.52V8.808h1.474a.822.822 0 0 0 .831-.82.817.817 0 0 0-.822-.819H8.107a.263.263 0 0 1-.263-.262V5.295A1.859 1.859 0 0 1 9.702 3.44c.348 0 .433.046.67.046.498 0 .831-.334.831-.792 0-.38-.325-.706-.723-.811" fill="#FFF"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1 @@
<svg width="23" height="5.054" viewBox="0 0 23 5.054" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M4.316 3.153a1.894 1.894 0 1 0-3.14.703l1.923-1.922.474.475.743.744Zm-.345.602-.872-.872-1.366 1.366a1.893 1.893 0 0 0 2.238-.494Z" fill="#10B981"/><path d="M5.589 3.514v-1.99h.972c.1 0 .192.015.276.046a.62.62 0 0 1 .218.127.548.548 0 0 1 .142.194.604.604 0 0 1-.056.585.637.637 0 0 1-.282.22l.441.818h-.461l-.39-.762h-.448v.762h-.412Zm.935-1.634h-.523v.533h.523a.32.32 0 0 0 .221-.073.244.244 0 0 0 .086-.193.246.246 0 0 0-.086-.194.32.32 0 0 0-.221-.073Zm.815.895a.757.757 0 0 1 .226-.546.814.814 0 0 1 .873-.165c.097.04.181.095.25.165a.742.742 0 0 1 .231.546.758.758 0 0 1-.231.546.8.8 0 0 1-.56.221.808.808 0 0 1-.563-.221.793.793 0 0 1-.167-.242.773.773 0 0 1-.059-.304Zm.789.43c.114 0 .21-.042.29-.126a.421.421 0 0 0 .12-.304.422.422 0 0 0-.12-.306.381.381 0 0 0-.29-.126.383.383 0 0 0-.29.126.426.426 0 0 0-.119.306c0 .12.04.221.119.304.08.084.177.126.29.126Zm1.767-.003a.438.438 0 0 0 .184-.04.522.522 0 0 0 .168-.126l.233.242a.831.831 0 0 1-.273.197.814.814 0 0 1-.329.067.794.794 0 0 1-.555-.221.781.781 0 0 1-.163-.242.773.773 0 0 1-.058-.304.756.756 0 0 1 .468-.711.836.836 0 0 1 .645.012.744.744 0 0 1 .276.193l-.239.253a.537.537 0 0 0-.17-.133.423.423 0 0 0-.197-.046.367.367 0 0 0-.283.126.43.43 0 0 0-.114.306c0 .121.039.223.117.304.08.081.176.123.29.123Zm.788.312v-1.99l.389-.086v1.221l.64-.626h.44l-.693.679.736.802h-.497l-.626-.676v.676h-.389Zm2.044.068.023-.054-.577-1.495h.429l.367 1.009.42-1.009h.422l-.683 1.598c-.076.178-.164.305-.265.38a.625.625 0 0 1-.392.114 1.08 1.08 0 0 1-.174-.017v-.334c.02.003.039.006.06.007a.837.837 0 0 0 .077.003.3.3 0 0 0 .176-.05.351.351 0 0 0 .117-.152Zm1.858-.068v-1.99h.218v1.794h1.187v.196h-1.405Zm1.78-1.697a.136.136 0 0 1-.099-.043.136.136 0 0 1-.042-.1c0-.039.014-.072.042-.099a.139.139 0 0 1 .099-.042c.04 0 .074.014.1.042a.13.13 0 0 1 .043.099.133.133 0 0 1-.043.1.129.129 0 0 1-.1.043Zm.106.273v1.424h-.21V2.09h.21Zm.359 1.424V2.09h.21v.167a.531.531 0 0 1 .196-.144.609.609 0 0 1 .253-.052c.161 0 .293.052.396.155a.531.531 0 0 1 .153.397v.901h-.207v-.858a.408.408 0 0 0-.109-.299.385.385 0 0 0-.29-.111.464.464 0 0 0-.23.057.444.444 0 0 0-.162.163v1.048h-.21Zm1.748-1.424v.859c0 .124.037.223.109.299.07.073.168.11.29.11a.434.434 0 0 0 .392-.222V2.09h.21v1.424h-.21v-.165a.534.534 0 0 1-.196.145.616.616 0 0 1-.252.048.54.54 0 0 1-.397-.153.534.534 0 0 1-.153-.397V2.09h.207Zm1.193 1.424.561-.734-.532-.69h.25l.403.535.405-.535h.241l-.526.688.562.736h-.249l-.434-.579-.442.579h-.239Zm1.552-1.508v-.309h-.103v-.059h.103v-.12l.069-.018v.138h.142v.059h-.142v.292c0 .024.004.043.016.055.011.011.03.015.056.015a.175.175 0 0 0 .035-.003.107.107 0 0 0 .034-.009v.061a.146.146 0 0 1-.04.01c-.016.003-.029.003-.043.003a.137.137 0 0 1-.095-.03c-.022-.019-.032-.047-.032-.085Zm.286.107v-.475h.071v.052a.178.178 0 0 1 .139-.062.167.167 0 0 1 .149.086.188.188 0 0 1 .071-.064.198.198 0 0 1 .092-.022c.052 0 .093.017.125.051a.182.182 0 0 1 .049.133v.301h-.069v-.287c0-.041-.01-.075-.033-.099a.113.113 0 0 0-.089-.037.128.128 0 0 0-.072.02.152.152 0 0 0-.054.058l.002.021c.001.007.003.014.003.023v.301h-.069v-.287a.148.148 0 0 0-.034-.099.114.114 0 0 0-.089-.037.131.131 0 0 0-.069.018.127.127 0 0 0-.052.051v.354h-.071Z" fill="#000"/></svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 1.157 1.157"><g fill-rule="evenodd" clip-rule="evenodd"><path fill="#fff" d="M0 0h1.157v1.157H0V0z"/><path d="M.095.868c.002.061.047.087.103.087.048 0 .097-.022.097-.077A.065.065 0 0 0 .247.816 1.313 1.313 0 0 1 .176.797C.159.793.147.783.147.766c0-.025.025-.032.045-.032.029 0 .05.012.053.043h.042C.287.726.245.699.193.699c-.044 0-.09.023-.09.072 0 .025.012.051.055.062.034.009.055.014.073.02.01.003.021.011.021.03C.252.901.237.92.2.92.165.92.138.905.138.867H.095zM.532.772H.493v.103C.493.903.482.923.45.923.428.923.415.912.415.881V.772H.376v.113c0 .046.02.069.067.069a.058.058 0 0 0 .05-.029h.001v.024h.038V.772zm.082.096c.001.061.047.087.102.087.049 0 .098-.022.098-.077A.065.065 0 0 0 .766.816 1.101 1.101 0 0 1 .695.797C.678.793.666.783.666.766c0-.025.025-.032.045-.032.029 0 .051.012.053.043h.043C.807.726.764.699.713.699.669.699.624.722.624.771c0 .025.012.051.054.062.034.009.056.014.074.02.01.003.02.011.02.03C.772.901.758.92.72.92.686.92.659.905.659.867H.616zM.9.95h.179V.914H.944V.842h.123V.807H.944V.743h.133V.706H.9v.245z" fill="#0c0e0f"/><path d="M.059.602.06.605c.019.051.055.072.115.068C.216.669.233.644.224.602L.172.601C.171.615.164.627.148.629H.146a.05.05 0 0 1-.04-.027L.058.601zm.068 0c.005.006.011.01.02.01a.01.01 0 0 0 .008-.01L.127.601zm.211 0c0 .009 0 .023.019.023.025 0 .025-.012.027-.022L.338.602zm.102 0c0 .017.003.023.018.025.019.002.023-.01.024-.016l.002-.01H.44zm.28 0c.003.01.003.027.027.025C.762.625.763.612.761.602H.72zm.098 0C.826.621.836.626.85.623.859.62.862.616.86.602H.818z" fill="#9dc14e"/><path d="M.053.527a.166.166 0 0 0 .006.074h.048A.066.066 0 0 1 .104.553L.105.551A.07.07 0 0 1 .124.526H.053zm.28 0L.338.6l.001.002h.046V.601C.386.551.386.544.388.527H.333zm.109 0C.443.53.442.535.441.539v.063L.485.601C.489.574.488.564.492.54L.494.526H.442zm.257 0 .02.072.002.003h.041L.761.593.752.53.751.527H.699zm.096 0 .017.058.006.016v.001H.86L.856.583S.842.548.85.528H.795zm-.64.075A.02.02 0 0 0 .153.589C.143.591.137.575.148.572.164.567.174.585.172.603L.224.602.221.59C.205.559.188.541.169.535l-.01.003C.143.541.129.543.12.56.116.578.118.593.128.602h.028z" fill="#9dc14e"/><path d="M.091.427a.248.248 0 0 0-.038.1h.07A.217.217 0 0 1 .157.515C.165.498.185.481.216.468.274.453.323.465.333.519v.008h.055L.389.52C.394.494.442.486.443.527h.052C.498.507.51.499.56.507c.034.01.055.005.101.001.033-.007.031.001.038.017L.7.527h.052C.748.504.768.461.795.524l.001.003h.055C.854.518.861.512.874.513.882.511.891.51.893.504.87.494.857.483.811.447.802.44.813.426.821.433c.058.045.073.06.125.073a.161.161 0 0 0 .152-.08h-.029a.31.31 0 0 1-.074.012.175.175 0 0 1-.042-.007.235.235 0 0 0-.014-.005H.091z" fill="#9dc14e"/><path d="M.938.427C.922.421.904.412.887.41.873.408.877.392.886.392.92.397.96.423.994.424c.048-.001.082-.016.112-.028C1.09.339 1.019.277.959.294.867.239.848.236.737.212A.88.88 0 0 0 .39.23C.311.257.251.272.147.362a.301.301 0 0 0-.055.066h.847zm.159 0 .006-.012c-.011.004-.022.009-.035.012h.029zM.989.307c.028 0 .055.021.055.048 0 .028-.028.047-.055.047S.943.379.943.351c0-.027.018-.044.046-.044zm.004.012a.036.036 0 0 0-.037.036c0 .019.016.035.037.035S1.03.374 1.03.355A.036.036 0 0 0 .993.319zm.003.012c.014 0 .02.01.02.023S1.009.377.995.377C.982.377.968.369.968.355c0-.013.015-.024.028-.024zM.993.345a.01.01 0 0 0-.01.01c0 .006.004.011.01.011s.011-.005.011-.011c0-.005-.005-.01-.011-.01z" fill="#9dc14e"/><path d="M.252.639h.824v.027H.242s.01-.01.01-.027z" fill="#0c0e0f"/></g></svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -0,0 +1 @@
<svg id="Livello_1" data-name="Livello 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 178.36 183.21"><defs><style>.cls-1{fill:#ffb516;}.cls-2{fill:#fe6309;}.cls-3{fill:#d70000;}</style></defs><title>Ubuntu_Linux_logo</title><path class="cls-1" d="M208.94,319.38a44.2,44.2,0,0,1,17-34.86l-15.8-25.28a74.15,74.15,0,0,0-27.9,39.28,26.64,26.64,0,0,1,.8,44.29A74.2,74.2,0,0,0,210.76,380l14.68-26.11A44.21,44.21,0,0,1,208.94,319.38Z" transform="translate(-148.68 -229.83)"/><path class="cls-2" d="M187,320.93a19.15,19.15,0,1,1-19.15-19.15A19.15,19.15,0,0,1,187,320.93Z" transform="translate(-148.68 -229.83)"/><path class="cls-3" d="M294.58,367.26a26.52,26.52,0,0,1,12.34,3A73.66,73.66,0,0,0,327,324.53L297.28,324a44.3,44.3,0,0,1-61.9,36L220.59,385.8a73.63,73.63,0,0,0,32.64,7.58,74.44,74.44,0,0,0,14.8-1.49A26.62,26.62,0,0,1,294.58,367.26Z" transform="translate(-148.68 -229.83)"/><path class="cls-1" d="M313.74,393.89a19.16,19.16,0,1,1-19.16-19.16A19.15,19.15,0,0,1,313.74,393.89Z" transform="translate(-148.68 -229.83)"/><path class="cls-2" d="M309,270.72A26.63,26.63,0,0,1,267,249c0-.77,0-1.54.1-2.3a74.94,74.94,0,0,0-13.82-1.29,73.67,73.67,0,0,0-32.94,7.72L235,279a44.3,44.3,0,0,1,62.2,35.22l29.76-.9A73.6,73.6,0,0,0,309,270.72Z" transform="translate(-148.68 -229.83)"/><path class="cls-3" d="M312.74,249a19.16,19.16,0,1,1-19.16-19.15A19.16,19.16,0,0,1,312.74,249Z" transform="translate(-148.68 -229.83)"/></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 88 88"><path d="m0 12.402 35.687-4.8602.0156 34.423-35.67.20313zm35.67 33.529.0277 34.453-35.67-4.9041-.002-29.78zm4.3261-39.025 47.318-6.906v41.527l-47.318.37565zm47.329 39.349-.0111 41.34-47.318-6.6784-.0663-34.739z" fill="#00adef"/></svg>

After

Width:  |  Height:  |  Size: 294 B

View File

@ -0,0 +1 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 304 182" style="enable-background:new 0 0 304 182" xml:space="preserve"><style>.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#f90}</style><path d="M86.4 66.4c0 3.7.4 6.7 1.1 8.9.8 2.2 1.8 4.6 3.2 7.2.5.8.7 1.6.7 2.3 0 1-.6 2-1.9 3L83.2 92c-.9.6-1.8.9-2.6.9-1 0-2-.5-3-1.4-1.4-1.5-2.6-3.1-3.6-4.7-1-1.7-2-3.6-3.1-5.9-7.8 9.2-17.6 13.8-29.4 13.8-8.4 0-15.1-2.4-20-7.2-4.9-4.8-7.4-11.2-7.4-19.2 0-8.5 3-15.4 9.1-20.6 6.1-5.2 14.2-7.8 24.5-7.8 3.4 0 6.9.3 10.6.8 3.7.5 7.5 1.3 11.5 2.2v-7.3c0-7.6-1.6-12.9-4.7-16-3.2-3.1-8.6-4.6-16.3-4.6-3.5 0-7.1.4-10.8 1.3-3.7.9-7.3 2-10.8 3.4-1.6.7-2.8 1.1-3.5 1.3-.7.2-1.2.3-1.6.3-1.4 0-2.1-1-2.1-3.1v-4.9c0-1.6.2-2.8.7-3.5.5-.7 1.4-1.4 2.8-2.1 3.5-1.8 7.7-3.3 12.6-4.5C41 1.9 46.2 1.3 51.7 1.3c11.9 0 20.6 2.7 26.2 8.1 5.5 5.4 8.3 13.6 8.3 24.6v32.4zM45.8 81.6c3.3 0 6.7-.6 10.3-1.8 3.6-1.2 6.8-3.4 9.5-6.4 1.6-1.9 2.8-4 3.4-6.4.6-2.4 1-5.3 1-8.7v-4.2c-2.9-.7-6-1.3-9.2-1.7-3.2-.4-6.3-.6-9.4-.6-6.7 0-11.6 1.3-14.9 4-3.3 2.7-4.9 6.5-4.9 11.5 0 4.7 1.2 8.2 3.7 10.6 2.4 2.5 5.9 3.7 10.5 3.7zm80.3 10.8c-1.8 0-3-.3-3.8-1-.8-.6-1.5-2-2.1-3.9L96.7 10.2c-.6-2-.9-3.3-.9-4 0-1.6.8-2.5 2.4-2.5h9.8c1.9 0 3.2.3 3.9 1 .8.6 1.4 2 2 3.9l16.8 66.2 15.6-66.2c.5-2 1.1-3.3 1.9-3.9.8-.6 2.2-1 4-1h8c1.9 0 3.2.3 4 1 .8.6 1.5 2 1.9 3.9l15.8 67 17.3-67c.6-2 1.3-3.3 2-3.9.8-.6 2.1-1 3.9-1h9.3c1.6 0 2.5.8 2.5 2.5 0 .5-.1 1-.2 1.6-.1.6-.3 1.4-.7 2.5l-24.1 77.3c-.6 2-1.3 3.3-2.1 3.9-.8.6-2.1 1-3.8 1h-8.6c-1.9 0-3.2-.3-4-1-.8-.7-1.5-2-1.9-4L156 23l-15.4 64.4c-.5 2-1.1 3.3-1.9 4-.8.7-2.2 1-4 1h-8.6zm128.5 2.7c-5.2 0-10.4-.6-15.4-1.8-5-1.2-8.9-2.5-11.5-4-1.6-.9-2.7-1.9-3.1-2.8-.4-.9-.6-1.9-.6-2.8v-5.1c0-2.1.8-3.1 2.3-3.1.6 0 1.2.1 1.8.3.6.2 1.5.6 2.5 1 3.4 1.5 7.1 2.7 11 3.5 4 .8 7.9 1.2 11.9 1.2 6.3 0 11.2-1.1 14.6-3.3 3.4-2.2 5.2-5.4 5.2-9.5 0-2.8-.9-5.1-2.7-7-1.8-1.9-5.2-3.6-10.1-5.2L246 52c-7.3-2.3-12.7-5.7-16-10.2-3.3-4.4-5-9.3-5-14.5 0-4.2.9-7.9 2.7-11.1 1.8-3.2 4.2-6 7.2-8.2 3-2.3 6.4-4 10.4-5.2 4-1.2 8.2-1.7 12.6-1.7 2.2 0 4.5.1 6.7.4 2.3.3 4.4.7 6.5 1.1 2 .5 3.9 1 5.7 1.6 1.8.6 3.2 1.2 4.2 1.8 1.4.8 2.4 1.6 3 2.5.6.8.9 1.9.9 3.3v4.7c0 2.1-.8 3.2-2.3 3.2-.8 0-2.1-.4-3.8-1.2-5.7-2.6-12.1-3.9-19.2-3.9-5.7 0-10.2.9-13.3 2.8-3.1 1.9-4.7 4.8-4.7 8.9 0 2.8 1 5.2 3 7.1 2 1.9 5.7 3.8 11 5.5l14.2 4.5c7.2 2.3 12.4 5.5 15.5 9.6 3.1 4.1 4.6 8.8 4.6 14 0 4.3-.9 8.2-2.6 11.6-1.8 3.4-4.2 6.4-7.3 8.8-3.1 2.5-6.8 4.3-11.1 5.6-4.5 1.4-9.2 2.1-14.3 2.1z" style="fill:#252f3e"/><path class="st1" d="M273.5 143.7c-32.9 24.3-80.7 37.2-121.8 37.2-57.6 0-109.5-21.3-148.7-56.7-3.1-2.8-.3-6.6 3.4-4.4 42.4 24.6 94.7 39.5 148.8 39.5 36.5 0 76.6-7.6 113.5-23.2 5.5-2.5 10.2 3.6 4.8 7.6z"/><path class="st1" d="M287.2 128.1c-4.2-5.4-27.8-2.6-38.5-1.3-3.2.4-3.7-2.4-.8-4.5 18.8-13.2 49.7-9.4 53.3-5 3.6 4.5-1 35.4-18.6 50.2-2.7 2.3-5.3 1.1-4.1-1.9 4-9.9 12.9-32.2 8.7-37.5z"/></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 354 354" style="enable-background:new 0 0 354 354;" xml:space="preserve">
<style type="text/css">
.st0{fill:#0080FF;}
.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#0080FF;}
</style>
<g id="XMLID_229_">
<g id="XMLID_690_">
<g id="XMLID_691_">
<g>
<g id="XMLID_44_">
<g id="XMLID_48_">
<path id="XMLID_49_" class="st0" d="M177,221.5l0-34.2c36.2,0,64.3-35.9,50.4-74C222.3,99.3,211,88,196.9,82.9
c-38.1-13.8-74,14.2-74,50.4c0,0,0,0,0,0l-34.1,0c0-57.7,55.8-102.7,116.3-83.8c26.4,8.3,47.5,29.3,55.7,55.7
C279.7,165.7,234.7,221.5,177,221.5z"/>
</g>
<polygon id="XMLID_47_" class="st1" points="177.1,187.5 143,187.5 143,153.4 143,153.4 177.1,153.4 177.1,153.4 "/>
<polygon id="XMLID_46_" class="st1" points="143,213.6 116.9,213.6 116.9,213.6 116.9,187.5 143,187.5 143,213.6 "/>
<path id="XMLID_45_" class="st1" d="M116.9,187.5H95c0,0,0,0,0,0v-21.9c0,0,0,0,0,0h21.9c0,0,0,0,0,0V187.5z"/>
</g>
</g>
</g>
</g>
<g id="XMLID_234_">
<path id="XMLID_677_" class="st0" d="M31.2,256.1c-4.4-3.1-10-4.6-16.4-4.6H0.8V296h14.1c6.4,0,12-1.6,16.4-4.9
c2.4-1.7,4.3-4.1,5.7-7.1c1.3-3,2-6.6,2-10.5c0-3.9-0.7-7.4-2-10.4C35.6,260.1,33.7,257.7,31.2,256.1z M9,259h4.4
c4.9,0,8.9,1,12,2.9c3.4,2.1,5.1,6,5.1,11.6c0,5.8-1.7,9.9-5.1,12.1h0c-2.9,1.9-6.9,2.9-11.9,2.9H9V259z"/>
<path id="XMLID_676_" class="st0" d="M48.7,250.9c-1.4,0-2.5,0.5-3.5,1.4c-0.9,0.9-1.4,2-1.4,3.4c0,1.4,0.5,2.5,1.4,3.5
c0.9,0.9,2.1,1.4,3.5,1.4c1.3,0,2.5-0.5,3.5-1.4c0.9-0.9,1.4-2.1,1.4-3.5c0-1.4-0.5-2.5-1.4-3.4C51.2,251.4,50,250.9,48.7,250.9z"
/>
<rect id="XMLID_675_" x="44.7" y="264.6" class="st0" width="7.9" height="31.4"/>
<path id="XMLID_670_" class="st0" d="M81.3,267.2c-2.4-2.1-5-3.4-7.9-3.4c-4.4,0-8,1.5-10.8,4.5c-2.8,2.9-4.3,6.7-4.3,11.3
c0,4.4,1.4,8.2,4.2,11.2c2.8,2.9,6.5,4.4,10.8,4.4c3,0,5.7-0.8,7.8-2.5v0.7c0,2.6-0.7,4.6-2.1,6c-1.4,1.4-3.3,2.1-5.7,2.1
c-3.6,0-5.9-1.4-8.7-5.2l-5.4,5.2l0.1,0.2c1.2,1.6,2.9,3.2,5.3,4.7c2.3,1.5,5.3,2.3,8.8,2.3c4.7,0,8.5-1.4,11.3-4.3
c2.8-2.9,4.2-6.7,4.2-11.4v-28.5h-7.8V267.2z M79.2,285.8c-1.4,1.6-3.2,2.3-5.4,2.3c-2.3,0-4-0.8-5.4-2.3c-1.4-1.6-2-3.6-2-6.1
c0-2.6,0.7-4.6,2-6.2c1.3-1.6,3.2-2.3,5.4-2.3c2.3,0,4,0.8,5.4,2.3c1.4,1.6,2.1,3.7,2.1,6.2C81.3,282.2,80.6,284.2,79.2,285.8z"/>
<rect id="XMLID_668_" x="95.8" y="264.6" class="st0" width="7.9" height="31.4"/>
<path id="XMLID_660_" class="st0" d="M99.8,250.9c-1.4,0-2.5,0.5-3.5,1.4c-0.9,0.9-1.4,2-1.4,3.4c0,1.4,0.5,2.5,1.4,3.5
c0.9,0.9,2.1,1.4,3.5,1.4c1.3,0,2.5-0.5,3.5-1.4c0.9-0.9,1.4-2.1,1.4-3.5c0-1.4-0.5-2.5-1.4-3.4
C102.3,251.4,101.2,250.9,99.8,250.9z"/>
<path id="XMLID_652_" class="st0" d="M121,256.1h-7.8v8.5h-4.5v7.2h4.5v13c0,4.1,0.8,7,2.4,8.7c1.6,1.7,4.5,2.5,8.5,2.5
c1.3,0,2.6,0,3.8-0.1l0.4,0v-7.2l-2.7,0.1c-1.9,0-3.1-0.3-3.7-1c-0.6-0.7-0.9-2.1-0.9-4.2v-11.9h7.4v-7.2H121V256.1z"/>
<rect id="XMLID_642_" x="165.4" y="251.4" class="st0" width="7.9" height="44.6"/>
<path id="XMLID_448_" class="st0" d="M253.1,284.8c-1.4,1.6-2.9,3-4,3.7v0c-1.1,0.7-2.5,1.1-4.1,1.1c-2.3,0-4.2-0.8-5.7-2.6
c-1.5-1.7-2.3-4-2.3-6.6c0-2.7,0.8-4.9,2.3-6.6c1.5-1.7,3.4-2.6,5.7-2.6c2.5,0,5.2,1.6,7.5,4.3l5.2-5l0,0
c-3.4-4.4-7.7-6.5-12.9-6.5c-4.3,0-8.1,1.6-11.2,4.7c-3.1,3.1-4.6,7-4.6,11.7s1.6,8.6,4.6,11.7c3.1,3.1,6.8,4.7,11.2,4.7
c5.7,0,10.3-2.5,13.5-7L253.1,284.8z"/>
<path id="XMLID_445_" class="st0" d="M285.6,269c-1.1-1.6-2.6-2.8-4.5-3.7c-1.9-0.9-4.1-1.4-6.5-1.4c-4.4,0-8,1.6-10.7,4.8
c-2.6,3.2-4,7.1-4,11.8c0,4.8,1.5,8.7,4.3,11.7c2.9,3,6.7,4.5,11.4,4.5c5.3,0,9.7-2.2,13-6.4l0.2-0.2l-5.2-5l0,0
c-0.5,0.6-1.2,1.2-1.8,1.8c-0.8,0.7-1.5,1.3-2.3,1.7c-1.2,0.6-2.5,0.9-4,0.9c-2.2,0-4-0.6-5.4-1.9c-1.3-1.2-2.1-2.8-2.3-4.8h20.9
l0.1-2.9c0-2-0.3-4-0.8-5.8C287.5,272.3,286.7,270.6,285.6,269z M268.3,276.4c0.4-1.5,1.1-2.8,2.1-3.7c1.1-1.1,2.5-1.6,4.1-1.6
c1.9,0,3.4,0.5,4.4,1.6c0.9,1,1.5,2.2,1.6,3.7H268.3z"/>
<path id="XMLID_442_" class="st0" d="M315.9,267L315.9,267c-2.4-2-5.7-3.1-9.8-3.1c-2.6,0-5.1,0.6-7.3,1.7c-2.1,1-4.1,2.8-5.4,5
l0.1,0.1l5.1,4.8c2.1-3.3,4.4-4.5,7.5-4.5c1.7,0,3,0.4,4.1,1.3c1,0.9,1.6,2,1.6,3.4v1.5c-2-0.6-3.9-0.9-5.8-0.9
c-3.9,0-7.1,0.9-9.5,2.7c-2.4,1.8-3.6,4.5-3.6,7.9c0,3,1,5.3,3.1,7.1c2.1,1.7,4.6,2.6,7.6,2.6c3,0,5.8-1.2,8.4-3.3v2.6h7.8v-20.2
C319.5,272,318.3,269,315.9,267z M301.9,284c0.9-0.6,2.2-0.9,3.8-0.9c1.9,0,3.9,0.4,6,1.1v3.1c-1.7,1.6-4,2.4-6.8,2.4
c-1.4,0-2.4-0.3-3.2-0.9c-0.7-0.6-1.1-1.3-1.1-2.3C300.6,285.4,301,284.6,301.9,284z"/>
<path id="XMLID_393_" class="st0" d="M349.9,267.6c-2.2-2.5-5.3-3.7-9.2-3.7c-3.1,0-5.7,0.9-7.6,2.7v-1.9h-7.7V296h7.9v-17.3
c0-2.4,0.6-4.3,1.7-5.6c1.1-1.3,2.6-2,4.7-2c1.8,0,3.1,0.6,4.1,1.8c1,1.2,1.5,2.9,1.5,4.9V296h7.9v-18.2
C353.2,273.5,352.1,270,349.9,267.6z"/>
<path id="XMLID_320_" class="st0" d="M155.5,267L155.5,267c-2.4-2-5.7-3.1-9.8-3.1c-2.6,0-5.1,0.6-7.3,1.7c-2.1,1-4.1,2.8-5.4,5
l0.1,0.1l5.1,4.8c2.1-3.3,4.4-4.5,7.5-4.5c1.7,0,3,0.4,4.1,1.3c1,0.9,1.6,2,1.6,3.4v1.5c-2-0.6-3.9-0.9-5.8-0.9
c-3.9,0-7.1,0.9-9.5,2.7c-2.4,1.8-3.6,4.5-3.6,7.9c0,3,1,5.3,3.1,7.1c2.1,1.7,4.6,2.6,7.6,2.6c3,0,5.8-1.2,8.4-3.3v2.6h7.8v-20.2
C159.1,272,157.9,269,155.5,267z M141.5,284c0.9-0.6,2.2-0.9,3.8-0.9c1.9,0,3.9,0.4,6,1.1v3.1c-1.7,1.6-4,2.4-6.8,2.4
c-1.4,0-2.4-0.3-3.2-0.9c-0.7-0.6-1.1-1.3-1.1-2.3C140.2,285.4,140.6,284.6,141.5,284z"/>
<path id="XMLID_235_" class="st0" d="M202,296.7c-12.7,0-23-10.3-23-23s10.3-23,23-23s23,10.3,23,23S214.7,296.7,202,296.7z
M202,258.8c-8.2,0-14.9,6.7-14.9,14.9s6.7,14.9,14.9,14.9s14.9-6.7,14.9-14.9S210.2,258.8,202,258.8z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15"><g fill="#818181" fill-rule="evenodd"><path fill="#231F20" d="M7.515 0c1.683 0 3.311.569 4.628 1.619l.39.307-.345.351-1.332 1.337a5.105 5.105 0 0 1 1.534 2.342h2.591V7.59l-.005.01c-.059 4.134-3.449 7.441-7.569 7.381-4.121-.06-7.417-3.461-7.358-7.6C.109 3.287 3.434 0 7.515 0z"/><path fill="#FF4713" d="M10.855 3.609a5.105 5.105 0 0 1 1.534 2.342H9.512l-.128.128-2.181 2.193-.755.757h5.127a4.335 4.335 0 0 1-5.595 2.54 4.36 4.36 0 0 1-2.531-5.614 4.335 4.335 0 0 1 6.567-2.024l.301.213.262-.263.276-.272z"/><path fill="#FFF" d="m10.505 3.332 1.367-1.371a7.012 7.012 0 0 0-9.869 1.158 7.063 7.063 0 0 0 1.154 9.901 7.013 7.013 0 0 0 9.869-1.153 7.068 7.068 0 0 0 1.515-4.332V6.401H9.7L7.519 8.589h4.653a4.782 4.782 0 0 1-5.748 3.574c-2.571-.604-4.164-3.188-3.563-5.768a4.778 4.778 0 0 1 7.407-2.826l.237-.237z"/></g></svg>

After

Width:  |  Height:  |  Size: 904 B

View File

@ -218,12 +218,16 @@ function getWafChartData(server) {
data.push(result.chartData.curr_con);
data.push(result.chartData.server);
var labels = result.chartData.labels;
renderWafChart(data, labels, server);
renderServiceChart(data, labels, server, 'waf');
}
});
}
function renderWafChart(data, labels, server) {
var ctx = 's_'+server
function renderServiceChart(data, labels, server, service) {
var ctx = service + '_' + server;
var addinional_title = '';
if (service == 'waf') {
addinional_title = 'WAF '
}
var myChart = new Chart(ctx, {
type: 'line',
data: {
@ -244,7 +248,7 @@ function renderWafChart(data, labels, server) {
maintainAspectRatio: false,
title: {
display: true,
text: "WAF "+data[1],
text: addinional_title + data[1],
fontSize: 20,
padding: 0,
},
@ -294,67 +298,10 @@ function getNginxChartData(server) {
data.push(result.chartData.curr_con);
data.push(result.chartData.server);
var labels = result.chartData.labels;
renderNginxChart(data, labels, server);
renderServiceChart(data, labels, server, 'nginx');
}
});
}
function renderNginxChart(data, labels, server) {
var ctx = 'nginx_'+server
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: labels.split(','),
datasets: [
{
parsing: false,
normalized: true,
label: 'Connections',
data: data[0].split(','),
borderColor: 'rgba(75, 192, 192, 1)',
backgroundColor: 'rgba(75, 192, 192, 0.2)',
}
]
},
options: {
animation: false,
maintainAspectRatio: false,
title: {
display: true,
text: data[1],
fontSize: 20,
padding: 0,
},
scales: {
yAxes: [{
ticks: {
beginAtZero: true,
}
}],
xAxes: [{
ticks: {
major: {
enabled: true,
fontStyle: 'bold'
},
source: 'data',
autoSkip: true,
autoSkipPadding: 45,
maxRotation: 0
}
}]
},
legend: {
display: true,
labels: {
fontColor: 'rgb(255, 99, 132)',
defaultFontSize: '10',
defaultFontFamily: 'BlinkMacSystemFont'
},
}
}
});
charts.push(myChart);
}
function getApacheChartData(server) {
$.ajax({
url: "options.py",
@ -370,69 +317,10 @@ function getApacheChartData(server) {
data.push(result.chartData.curr_con);
data.push(result.chartData.server);
var labels = result.chartData.labels;
renderApacheChart(data, labels, server);
renderServiceChart(data, labels, server, 'apache');
}
});
}
function renderApacheChart(data, labels, server) {
var ctx = 'apache_'+server
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: labels.split(','),
datasets: [
{
parsing: false,
normalized: true,
label: 'Connections',
data: data[0].split(','),
borderColor: 'rgba(75, 192, 192, 1)',
backgroundColor: 'rgba(75, 192, 192, 0.2)',
}
]
},
options: {
animation: false,
maintainAspectRatio: false,
title: {
display: true,
text: data[1],
fontSize: 20,
padding: 0,
},
scales: {
yAxes: [{
ticks: {
beginAtZero: true,
}
}],
xAxes: [{
ticks: {
major: {
enabled: true,
fontStyle: 'bold'
},
source: 'data',
autoSkip: true,
autoSkipPadding: 45,
maxRotation: 0
}
}]
},
legend: {
display: true,
labels: {
fontColor: 'rgb(255, 99, 132)',
defaultFontSize: '10',
defaultFontFamily: 'BlinkMacSystemFont'
},
}
}
});
charts.push(myChart);
}
$("#secIntervals").css("display", "none");
function loadMetrics() {
$.ajax({
url: "options.py",

View File

@ -21,41 +21,6 @@ $( function() {
$('#gcore_any_subnet').hide();
}
});
$('#gcore_create_regions').on('selectmenuchange', function (){
if ($('#gcore_create_regions option:selected').val() == '6' || $('#gcore_create_regions option:selected').val() == '14') {
var newOptions = {
"centos-7-gcore": "Centos 7"
};
} else if ($('#gcore_create_regions option:selected').val() == '10') {
var newOptions = {
"centos-7-gcore": "Centos 7",
"sles15-SP2": "SLES 15-SP2"
};
} else if ($('#gcore_create_regions option:selected').val() == '18' || $('#gcore_create_regions option:selected').val() == '22') {
var newOptions = {
"centos-7-1811-x64-qcow2": "Centos 7",
"centos8-1911-x64": "Centos 8",
"sles15-SP2": "SLES 15-SP2",
"fedora-32-x64-qcow2": "Fedora 32",
"fedora-33-x64-qcow2": "Fedora 33",
"fedora-coreos-32-x64": "Fedora CoreOS 32",
"ubuntu-16.04-x64": "Ubuntu 16.04",
"ubuntu-18.04-x64": "Ubuntu 18.04",
"ubuntu-20.04-x64": "Ubuntu 20.04",
"ubuntu-20.10-x64": "Ubuntu 20.10",
"debian-9.7-x64-qcow2": "Debian 9.7",
"debian-10.1-x64-qcow2": "Debian 10.1",
"debian-10.3-x64-qcow2": "Debian 10.3"
};
}
var $el = $("#gcore_create_oss");
$el.empty();
$.each(newOptions, function(key,value) {
$el.append($("<option></option>")
.attr("value", key).text(value));
});
$el.selectmenu("refresh");
});
$('#gcore-instance-enter').on('click', function() {
$('#gcore_create_size').css('display', 'none');
$('#gcore-instance-enter').css('display', 'none');
@ -459,20 +424,20 @@ function awsValidateServer() {
} );
}
function awsWorkspaceServer() {
var aws_create_floating_net = 'false';
var aws_create_firewall = 'false';
var aws_create_public_ip = 'false';
var aws_create_delete_on_termination = 'false';
var aws_create_floating_net = 0;
var aws_create_firewall = 0;
var aws_create_public_ip = 0;
var aws_create_delete_on_termination = 0;
if ($('#aws_create_firewall').is(':checked')) {
aws_create_firewall = 'true';
aws_create_firewall = 1;
}
if ($('#aws_create_delete_on_termination').is(':checked')) {
aws_create_delete_on_termination = 'true';
aws_create_delete_on_termination = 1;
}
if ($('#aws_create_public_ip option:selected').val() == 'public') {
aws_create_public_ip = 'true';
aws_create_public_ip = 1;
} else if ($('#aws_create_public_ip option:selected').val() == 'elastic') {
aws_create_floating_net = 'true';
aws_create_floating_net = 1;
}
$.ajax( {
url: "options.py",
@ -630,20 +595,20 @@ function awsEditValidateServer(server_id) {
} );
}
function awsEditWorkspaceServer(server_id) {
var aws_edit_floating_net = 'false';
var aws_editing_firewall = 'false';
var aws_edit_public_ip = 'false';
var aws_edit_delete_on_termination = 'false';
var aws_edit_floating_net = 0;
var aws_editing_firewall = 0;
var aws_edit_public_ip = 0;
var aws_edit_delete_on_termination = 0;
if ($('#aws_edit_firewall').is(':checked')) {
aws_editing_firewall = 'true';
aws_editing_firewall = 1;
}
if ($('#aws_edit_delete_on_termination').is(':checked')) {
aws_edit_delete_on_termination = 'true';
aws_edit_delete_on_termination = 1;
}
if ($('#aws_edit_public_ip option:selected').val() == 'public') {
aws_edit_public_ip = 'true';
aws_edit_public_ip = 1;
} else if ($('#aws_edit_public_ip option:selected').val() == 'elastic') {
aws_edit_floating_net = 'true';
aws_edit_floating_net = 1;
}
$.ajax( {
url: "options.py",
@ -1473,25 +1438,25 @@ function doEditValidateServer(server_id) {
} );
}
function doEditWorkspaceServer(server_id) {
var do_edit_private_net = 'false';
var do_edit_floating_net = 'false';
var do_edit_monitoring = 'false';
var do_edit_backup = 'false';
var do_edit_firewall = 'false';
var do_edit_private_net = 0;
var do_edit_floating_net = 0;
var do_edit_monitoring = 0;
var do_edit_backup = 0;
var do_edit_firewall = 0;
if ($('#do_edit_private_networking').is(':checked')) {
do_edit_private_net = 'true';
do_edit_private_net = 1;
}
if ($('#do_edit_floating_ip').is(':checked')) {
do_edit_floating_net = 'true';
do_edit_floating_net = 1;
}
if ($('#do_edit_monitoring').is(':checked')) {
do_edit_monitoring = 'true';
do_edit_monitoring = 1;
}
if ($('#do_edit_backup').is(':checked')) {
do_edit_backup = 'true';
do_edit_backup = 1;
}
if ($('#do_edit_firewall').is(':checked')) {
do_edit_firewall = 'true';
do_edit_firewall = 1;
}
$.ajax({
url: "options.py",
@ -1550,9 +1515,10 @@ function doEditProvisiningServer(server_id) {
$('#edited-mess').html('Server has been changed. IPs are: ' + data);
$('#edited-mess').show();
$('#sever-status-'+server_id).text('Created');
$('#sever-size-'+server_id).text($('#aws_edit_size').val());
$('#sever-os-'+server_id).text($('#aws_edit_oss').val());
$('#sever-size-'+server_id).text($('#do_edit_size').val());
$('#sever-os-'+server_id).text($('#do_edit_oss').val());
$('#server-'+server_id).css('background-color', '#fff');
$('#sever-status-'+server_id).css('color', 'var(--green-color)');
$('#server-ip-'+server_id).text(data);
}
}
@ -1630,25 +1596,25 @@ function doValidateServer() {
} );
}
function doWorkspaceServer() {
var do_create_private_net = 'false';
var do_create_floating_net = 'false';
var do_create_monitoring = 'false';
var do_create_backup = 'false';
var do_create_firewall = 'false';
var do_create_private_net = 0;
var do_create_floating_net = 0;
var do_create_monitoring = 0;
var do_create_backup = 0;
var do_create_firewall = 0;
if ($('#do_create_private_net').is(':checked')) {
do_create_private_net = 'true';
do_create_private_net = 1;
}
if ($('#do_create_floating_net').is(':checked')) {
do_create_floating_net = 'true';
do_create_floating_net = 1;
}
if ($('#do_create_monitoring').is(':checked')) {
do_create_monitoring = 'true';
do_create_monitoring = 1;
}
if ($('#do_create_backup').is(':checked')) {
do_create_backup = 'true';
do_create_backup = 1;
}
if ($('#do_create_backup').is(':checked')) {
do_create_firewall = 'true';
do_create_firewall = 1;
}
$.ajax({
url: "options.py",
@ -1793,13 +1759,13 @@ function gcoreValidateServer() {
} );
}
function gcoreWorkspaceServer() {
var gcore_create_firewall = 'false';
var gcore_create_delete_on_termination = 'false';
var gcore_create_firewall = 0;
var gcore_create_delete_on_termination = 0;
if ($('#gcore_create_firewall').is(':checked')) {
gcore_create_firewall = 'true';
gcore_create_firewall = 1;
}
if ($('#gcore_create_delete_on_termination').is(':checked')) {
gcore_create_delete_on_termination = 'true';
gcore_create_delete_on_termination = 1;
}
$.ajax( {
url: "options.py",
@ -1862,7 +1828,7 @@ function gcoreProvisiningServer() {
$('#sever-status-'+server_id).text('Created');
$('#sever-status-'+server_id).css('color', 'var(--green-color)');
$('#server-ip-'+server_id).text(data[0]);
$('#server-name-'+server_id).text(gcoreprovisining+'('+data[1]+')');
// $('#server-name-'+server_id).text(gcoreprovisining+'('+data[1]+')');
add_gcore_button_after_server_created();
}
}
@ -1925,7 +1891,7 @@ function gcoreEditingVarsServer(server_id, dialog_id) {
gcore_edit_regions: $('#gcore_edit_region').text(),
gcore_edit_project: $('#gcore_edit_project_name').text(),
gcore_edit_size: $('#gcore_edit_size').val(),
gcore_edit_oss: $('#gcore_edit_oss').val(),
gcore_edit_oss: $('#gcore_edit_oss').text(),
gcore_edit_ssh_name: $('#gcore_edit_ssh_name').val(),
gcore_edit_volume_size: $('#gcore_edit_volume_size').val(),
gcore_edit_volume_type: $('#gcore_edit_volume_type').val(),
@ -1972,13 +1938,13 @@ function gcoreEditValidateServer(server_id) {
} );
}
function gcoreEditWorkspaceServer(server_id) {
var gcore_edit_firewall = 'false';
var gcore_edit_delete_on_termination = 'false';
var gcore_edit_firewall = 0;
var gcore_edit_delete_on_termination = 0;
if ($('#gcore_edit_firewall').is(':checked')) {
gcore_edit_firewall = 'true';
gcore_edit_firewall = 1;
}
if ($('#gcore_edit_delete_on_termination').is(':checked')) {
gcore_edit_delete_on_termination = 'true';
gcore_edit_delete_on_termination = 1;
}
$.ajax( {
url: "options.py",
@ -1989,7 +1955,7 @@ function gcoreEditWorkspaceServer(server_id) {
gcore_edit_regions: $('#gcore_edit_region').text(),
gcore_edit_project: $('#gcore_edit_project_name').text(),
gcore_edit_size: $('#gcore_edit_size').val(),
gcore_edit_oss: $('#gcore_edit_oss').val(),
gcore_edit_oss: $('#gcore_edit_oss').text(),
gcore_edit_ssh_name: $('#gcore_edit_ssh_name').val(),
gcore_edit_volume_size: $('#gcore_edit_volume_size').val(),
gcore_edit_volume_type: $('#gcore_edit_volume_type').val(),
@ -2042,11 +2008,11 @@ function gcoreEditProvisiningServer(server_id, dialog_id) {
$('#edited-mess').show();
$('#sever-status-'+server_id).text('Created');
$('#sever-size-'+server_id).text($('#gcore_edit_size').val());
$('#sever-os-'+server_id).text($('#gcore_edit_oss').val());
$('#sever-os-'+server_id).text($('#gcore_edit_oss').text());
$('#server-'+server_id).css('background-color', '#fff');
$('#sever-status-'+server_id).css('color', 'var(--green-color)');
$('#server-ip-'+server_id).text(data[0]);
$('#server-name-'+server_id).text(gcoreeditgprovisining+'('+data[1]+')');
// $('#server-name-'+server_id).text(gcoreeditgprovisining+'('+data[1]+')');
}
}
} );

View File

@ -1453,7 +1453,9 @@ function returnNiceCheckingConfig(data) {
data = data.replaceAll('nginx: configuration file /etc/nginx/nginx.conf test is successful', '');
data = data.replaceAll('Syntax OK', '');
output = data.split('<br>')
var alerts = []
var alerts = [];
var alert_warning = '';
var alert_error = '';
alerts.push(output[0] + '\n' + output[1]);
try {
for (var i = 0; i < output.length; i++) {
@ -1468,15 +1470,19 @@ function returnNiceCheckingConfig(data) {
}
alerts.forEach((element) => {
if (element.indexOf('error: ') != '-1' || element.indexOf('Fatal') != '-1' || element.indexOf('Error') != '-1' || element.indexOf('failed ') != '-1' || element.indexOf('emerg] ') != '-1' || element.indexOf('Syntax error ') != '-1') {
toastr.error('<pre style="padding: 0; margin: 0;">' + element + '</pre>');
toastr.info('Config not applied');
alert_error = alert_error + element
return
} else {
toastr.success('<b>Configuration file is valid</b>');
}
if (element.indexOf('[WARNING]') != '-1' || element.indexOf('[ALER]') != '-1' || element.indexOf('[warn]') != '-1') {
element = removeEmptyLines(element);
toastr.warning('<pre style="padding: 0; margin: 0;">' + element + '</pre>')
alert_warning = alert_warning + element;
}
})
if (alert_error != '') {
toastr.error('<pre style="padding: 0; margin: 0;">' + alert_error + '</pre>');
toastr.info('Config not applied');
} else if (alert_warning != '') {
toastr.warning('<pre style="padding: 0; margin: 0;">' + alert_warning + '</pre>');
toastr.success('<b>Configuration file is valid</b>');
}
}

View File

@ -1,6 +1,11 @@
<!DOCTYPE HTML>
<html>
<head>
<script>
window.onload = function() {
$('#cover').hide('fast');
};
</script>
<meta charset="utf-8">
<title>Roxy-WI</title>
<link href="/inc/images/favicon/favicon.ico" rel="icon" type="image/png" />
@ -29,7 +34,6 @@
<script src="/inc/jquery-3.6.0.min.js"></script>
<script src="/inc/jquery-ui.min.js"></script>
<script src="/inc/nprogress.js"></script>
<script src="/inc/script.js"></script>
<script defer src="/inc/fa-solid.min.js"></script>
<script defer src="/inc/fontawesome.min.js"></script>
<link href="/inc/awesome.css" rel="stylesheet">
@ -46,12 +50,29 @@
<script src="/inc/provisioning.js"></script>
<link href="/inc/select2.css" rel="stylesheet" />
<script src="/inc/select2.js"></script>
<script src="/inc/reconnecting-websocket.js"></script>
<link href="/inc/table.css" rel="stylesheet" type="text/css">
<script type="text/javascript" charset="utf8" src="/inc/dataTables.min.js"></script>
<script src="/inc/js.cookie.min.js"></script>
<script src="/inc/script.js"></script>
<meta http-equiv="refresh" content="0; url=/app/overview.py" />
</head>
<body style="background-color: #239dee;">
<style>
#cover {
position: absolute;
display: none;
top:0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0,0,0,.1);
z-index: 500;
}
</style>
<script>
$( function() {
NProgress.start();
NProgress.start({showSpinner: true});
$('#cover').fadeIn('fast');
});
</script>