From 5b5908f6400b6a3fdc2c37aae8eda68b4210d928 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Thu, 26 May 2022 12:36:27 +0200 Subject: [PATCH 001/121] feat(session): post UpdatePlan notification when a subscription currentPlan is changed --- IVPNClient/Managers/SessionManager.swift | 4 ++++ IVPNClient/Utilities/Extensions/NotificationName+Ext.swift | 1 + 2 files changed, 5 insertions(+) diff --git a/IVPNClient/Managers/SessionManager.swift b/IVPNClient/Managers/SessionManager.swift index 8a47b3544..101d675c8 100644 --- a/IVPNClient/Managers/SessionManager.swift +++ b/IVPNClient/Managers/SessionManager.swift @@ -122,6 +122,10 @@ class SessionManager { ApiService.shared.request(request) { (result: Result) in switch result { case .success(let model): + if Application.shared.serviceStatus.currentPlan != model.serviceStatus.currentPlan { + NotificationCenter.default.post(name: Notification.Name.UpdatePlan, object: nil) + } + Application.shared.serviceStatus = model.serviceStatus if model.serviceActive { diff --git a/IVPNClient/Utilities/Extensions/NotificationName+Ext.swift b/IVPNClient/Utilities/Extensions/NotificationName+Ext.swift index 7f6ea2bcc..512b9b5f8 100644 --- a/IVPNClient/Utilities/Extensions/NotificationName+Ext.swift +++ b/IVPNClient/Utilities/Extensions/NotificationName+Ext.swift @@ -56,5 +56,6 @@ extension Notification.Name { public static let AntiTrackerUpdated = Notification.Name("antiTrackerUpdatedUpdated") public static let CustomDNSUpdated = Notification.Name("customDNSUpdatedUpdated") public static let EvaluateReconnect = Notification.Name("evaluateReconnect") + public static let UpdatePlan = Notification.Name("updatePlan") } From e7758ef84f34fa039e1f1e67147a4d4a2f9e7915 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Thu, 26 May 2022 12:59:43 +0200 Subject: [PATCH 002/121] feat(session): add updatePlan handler in ControlPanelViewController --- .../ControlPanel/ControlPanelViewController.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift b/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift index 7b82348c0..ede3cf0f6 100644 --- a/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift +++ b/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift @@ -350,6 +350,7 @@ class ControlPanelViewController: UITableViewController { NotificationCenter.default.addObserver(self, selector: #selector(protocolSelected), name: Notification.Name.ProtocolSelected, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(reloadView), name: Notification.Name.AntiTrackerUpdated, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(evaluateReconnectHandler), name: Notification.Name.EvaluateReconnect, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(updatePlan), name: Notification.Name.UpdatePlan, object: nil) } // MARK: - Private methods - @@ -430,4 +431,13 @@ class ControlPanelViewController: UITableViewController { evaluateReconnect(sender: controlPanelView) } + @objc private func updatePlan() { + if Application.shared.serviceStatus.isEnabled(capability: .multihop) { + return + } + + UserDefaults.shared.set(false, forKey: UserDefaults.Key.isMultiHop) + Application.shared.settings.updateSelectedServerForMultiHop(isEnabled: false) + } + } From b0847017bed028175b7d6d808fbf3ceaecbb92f6 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Thu, 2 Jun 2022 12:39:17 +0200 Subject: [PATCH 003/121] feat(session): add alert in planUpdate method --- IVPNClient/Managers/SessionManager.swift | 2 +- .../ControlPanelViewController.swift | 21 ++++++++++++++----- .../Extensions/NotificationName+Ext.swift | 2 +- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/IVPNClient/Managers/SessionManager.swift b/IVPNClient/Managers/SessionManager.swift index 101d675c8..ad62c90cb 100644 --- a/IVPNClient/Managers/SessionManager.swift +++ b/IVPNClient/Managers/SessionManager.swift @@ -123,7 +123,7 @@ class SessionManager { switch result { case .success(let model): if Application.shared.serviceStatus.currentPlan != model.serviceStatus.currentPlan { - NotificationCenter.default.post(name: Notification.Name.UpdatePlan, object: nil) + NotificationCenter.default.post(name: Notification.Name.PlanUpdate, object: nil) } Application.shared.serviceStatus = model.serviceStatus diff --git a/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift b/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift index ede3cf0f6..49bd496eb 100644 --- a/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift +++ b/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift @@ -350,7 +350,7 @@ class ControlPanelViewController: UITableViewController { NotificationCenter.default.addObserver(self, selector: #selector(protocolSelected), name: Notification.Name.ProtocolSelected, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(reloadView), name: Notification.Name.AntiTrackerUpdated, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(evaluateReconnectHandler), name: Notification.Name.EvaluateReconnect, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(updatePlan), name: Notification.Name.UpdatePlan, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(planUpdate), name: Notification.Name.PlanUpdate, object: nil) } // MARK: - Private methods - @@ -431,13 +431,24 @@ class ControlPanelViewController: UITableViewController { evaluateReconnect(sender: controlPanelView) } - @objc private func updatePlan() { - if Application.shared.serviceStatus.isEnabled(capability: .multihop) { + @objc private func planUpdate() { + let isMultiHopEnabled = Application.shared.serviceStatus.isEnabled(capability: .multihop) + if isMultiHopEnabled { return } - UserDefaults.shared.set(false, forKey: UserDefaults.Key.isMultiHop) - Application.shared.settings.updateSelectedServerForMultiHop(isEnabled: false) + UserDefaults.shared.set(isMultiHopEnabled, forKey: UserDefaults.Key.isMultiHop) + Application.shared.settings.updateSelectedServerForMultiHop(isEnabled: isMultiHopEnabled) + updateControlPanel() + + if Application.shared.connectionManager.status == .connected { + showActionAlert(title: "", message: "Active VPN connection is using Pro plan features (MultiHop) and will be disconnected.", action: "Reconnect with SingleHop", cancel: "OK", cancelHandler: { _ in + Application.shared.connectionManager.disconnect() + + }, actionHandler: { _ in + Application.shared.connectionManager.reconnect() + }) + } } } diff --git a/IVPNClient/Utilities/Extensions/NotificationName+Ext.swift b/IVPNClient/Utilities/Extensions/NotificationName+Ext.swift index 512b9b5f8..397d6b1d2 100644 --- a/IVPNClient/Utilities/Extensions/NotificationName+Ext.swift +++ b/IVPNClient/Utilities/Extensions/NotificationName+Ext.swift @@ -56,6 +56,6 @@ extension Notification.Name { public static let AntiTrackerUpdated = Notification.Name("antiTrackerUpdatedUpdated") public static let CustomDNSUpdated = Notification.Name("customDNSUpdatedUpdated") public static let EvaluateReconnect = Notification.Name("evaluateReconnect") - public static let UpdatePlan = Notification.Name("updatePlan") + public static let PlanUpdate = Notification.Name("planUpdate") } From 43f95c4de4d0500b28ac4dd71a59c9ec2d5eebf5 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Thu, 2 Jun 2022 12:42:30 +0200 Subject: [PATCH 004/121] feat(session): update getSessionStatus method --- IVPNClient/Managers/SessionManager.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/IVPNClient/Managers/SessionManager.swift b/IVPNClient/Managers/SessionManager.swift index ad62c90cb..7d38b584b 100644 --- a/IVPNClient/Managers/SessionManager.swift +++ b/IVPNClient/Managers/SessionManager.swift @@ -123,6 +123,7 @@ class SessionManager { switch result { case .success(let model): if Application.shared.serviceStatus.currentPlan != model.serviceStatus.currentPlan { + Application.shared.serviceStatus = model.serviceStatus NotificationCenter.default.post(name: Notification.Name.PlanUpdate, object: nil) } From 7cbe85993e375ae0d33e82f2aade947233f1ad90 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Thu, 2 Jun 2022 13:29:37 +0200 Subject: [PATCH 005/121] feat(session): update evaluatePlanUpdate method --- IVPNClient/Managers/SessionManager.swift | 6 +-- .../ControlPanelViewController.swift | 41 +++++++++++-------- .../Extensions/NotificationName+Ext.swift | 2 +- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/IVPNClient/Managers/SessionManager.swift b/IVPNClient/Managers/SessionManager.swift index 7d38b584b..6b2806e82 100644 --- a/IVPNClient/Managers/SessionManager.swift +++ b/IVPNClient/Managers/SessionManager.swift @@ -122,12 +122,8 @@ class SessionManager { ApiService.shared.request(request) { (result: Result) in switch result { case .success(let model): - if Application.shared.serviceStatus.currentPlan != model.serviceStatus.currentPlan { - Application.shared.serviceStatus = model.serviceStatus - NotificationCenter.default.post(name: Notification.Name.PlanUpdate, object: nil) - } - Application.shared.serviceStatus = model.serviceStatus + NotificationCenter.default.post(name: Notification.Name.EvaluatePlanUpdate, object: nil) if model.serviceActive { self.delegate?.sessionStatusSuccess() diff --git a/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift b/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift index 49bd496eb..4b5f53c36 100644 --- a/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift +++ b/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift @@ -350,7 +350,7 @@ class ControlPanelViewController: UITableViewController { NotificationCenter.default.addObserver(self, selector: #selector(protocolSelected), name: Notification.Name.ProtocolSelected, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(reloadView), name: Notification.Name.AntiTrackerUpdated, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(evaluateReconnectHandler), name: Notification.Name.EvaluateReconnect, object: nil) - NotificationCenter.default.addObserver(self, selector: #selector(planUpdate), name: Notification.Name.PlanUpdate, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(evaluatePlanUpdate), name: Notification.Name.EvaluatePlanUpdate, object: nil) } // MARK: - Private methods - @@ -431,24 +431,31 @@ class ControlPanelViewController: UITableViewController { evaluateReconnect(sender: controlPanelView) } - @objc private func planUpdate() { - let isMultiHopEnabled = Application.shared.serviceStatus.isEnabled(capability: .multihop) - if isMultiHopEnabled { - return + @objc private func evaluatePlanUpdate() { + let isMultiHopAvailable = Application.shared.serviceStatus.isEnabled(capability: .multihop) + let isMultiHopEnabled = UserDefaults.shared.isMultiHop + let isVPNConnected = Application.shared.connectionManager.status == .connected + + if !isMultiHopAvailable && isMultiHopEnabled { + if isVPNConnected { + let plan = Application.shared.serviceStatus.currentPlan ?? "" + showActionAlert(title: "Subscription is changed to \(plan)", message: "Active VPN connection is using Pro plan features (MultiHop) and will be disconnected.", action: "Reconnect with SingleHop VPN", cancel: "OK", cancelHandler: { [self] _ in + disableMultiHop() + Application.shared.connectionManager.disconnect() + }, actionHandler: { [self] _ in + disableMultiHop() + Application.shared.connectionManager.reconnect() + }) + } else { + disableMultiHop() + } } - - UserDefaults.shared.set(isMultiHopEnabled, forKey: UserDefaults.Key.isMultiHop) - Application.shared.settings.updateSelectedServerForMultiHop(isEnabled: isMultiHopEnabled) + } + + private func disableMultiHop() { + UserDefaults.shared.set(false, forKey: UserDefaults.Key.isMultiHop) + Application.shared.settings.updateSelectedServerForMultiHop(isEnabled: false) updateControlPanel() - - if Application.shared.connectionManager.status == .connected { - showActionAlert(title: "", message: "Active VPN connection is using Pro plan features (MultiHop) and will be disconnected.", action: "Reconnect with SingleHop", cancel: "OK", cancelHandler: { _ in - Application.shared.connectionManager.disconnect() - - }, actionHandler: { _ in - Application.shared.connectionManager.reconnect() - }) - } } } diff --git a/IVPNClient/Utilities/Extensions/NotificationName+Ext.swift b/IVPNClient/Utilities/Extensions/NotificationName+Ext.swift index 397d6b1d2..1aaf9ddb2 100644 --- a/IVPNClient/Utilities/Extensions/NotificationName+Ext.swift +++ b/IVPNClient/Utilities/Extensions/NotificationName+Ext.swift @@ -56,6 +56,6 @@ extension Notification.Name { public static let AntiTrackerUpdated = Notification.Name("antiTrackerUpdatedUpdated") public static let CustomDNSUpdated = Notification.Name("customDNSUpdatedUpdated") public static let EvaluateReconnect = Notification.Name("evaluateReconnect") - public static let PlanUpdate = Notification.Name("planUpdate") + public static let EvaluatePlanUpdate = Notification.Name("evaluatePlanUpdate") } From 2b76f0f26b0e5934965ede2016840b08cc61509d Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Fri, 3 Jun 2022 13:16:42 +0200 Subject: [PATCH 006/121] feat(settings): add new ports in Config.swift --- IVPNClient/Config/Config.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/IVPNClient/Config/Config.swift b/IVPNClient/Config/Config.swift index a3fd10fbd..0a0f3752e 100644 --- a/IVPNClient/Config/Config.swift +++ b/IVPNClient/Config/Config.swift @@ -70,8 +70,8 @@ struct Config { ConnectionSettings.openvpn(.udp, 2049), ConnectionSettings.openvpn(.udp, 2050), ConnectionSettings.openvpn(.udp, 53), - // ConnectionSettings.openvpn(.udp, 80), - // ConnectionSettings.openvpn(.udp, 443), + ConnectionSettings.openvpn(.udp, 80), + ConnectionSettings.openvpn(.udp, 443), ConnectionSettings.openvpn(.udp, 1194), ConnectionSettings.openvpn(.tcp, 443), ConnectionSettings.openvpn(.tcp, 1443), @@ -79,8 +79,8 @@ struct Config { ConnectionSettings.wireguard(.udp, 2049), ConnectionSettings.wireguard(.udp, 2050), ConnectionSettings.wireguard(.udp, 53), - // ConnectionSettings.wireguard(.udp, 80), - // ConnectionSettings.wireguard(.udp, 443), + ConnectionSettings.wireguard(.udp, 80), + ConnectionSettings.wireguard(.udp, 443), ConnectionSettings.wireguard(.udp, 1194), ConnectionSettings.wireguard(.udp, 30587), ConnectionSettings.wireguard(.udp, 41893), From 40d843a440b738b9219a90a8410a85d3dc660977 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Fri, 3 Jun 2022 13:17:47 +0200 Subject: [PATCH 007/121] feat(settings) update Config.swift --- IVPNClient/Config/Config.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/IVPNClient/Config/Config.swift b/IVPNClient/Config/Config.swift index 0a0f3752e..e05aecbfc 100644 --- a/IVPNClient/Config/Config.swift +++ b/IVPNClient/Config/Config.swift @@ -70,22 +70,22 @@ struct Config { ConnectionSettings.openvpn(.udp, 2049), ConnectionSettings.openvpn(.udp, 2050), ConnectionSettings.openvpn(.udp, 53), + ConnectionSettings.openvpn(.udp, 1194), ConnectionSettings.openvpn(.udp, 80), ConnectionSettings.openvpn(.udp, 443), - ConnectionSettings.openvpn(.udp, 1194), ConnectionSettings.openvpn(.tcp, 443), ConnectionSettings.openvpn(.tcp, 1443), ConnectionSettings.openvpn(.tcp, 80), ConnectionSettings.wireguard(.udp, 2049), ConnectionSettings.wireguard(.udp, 2050), ConnectionSettings.wireguard(.udp, 53), - ConnectionSettings.wireguard(.udp, 80), - ConnectionSettings.wireguard(.udp, 443), ConnectionSettings.wireguard(.udp, 1194), ConnectionSettings.wireguard(.udp, 30587), ConnectionSettings.wireguard(.udp, 41893), ConnectionSettings.wireguard(.udp, 48574), - ConnectionSettings.wireguard(.udp, 58237) + ConnectionSettings.wireguard(.udp, 58237), + ConnectionSettings.wireguard(.udp, 80), + ConnectionSettings.wireguard(.udp, 443), ] static let supportedProtocolTypes = [ From 33d3120bfde4739e8d4580e8193b836a859ccb0a Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Fri, 3 Jun 2022 13:58:48 +0200 Subject: [PATCH 008/121] feat(session): add startAPIUpdate method --- .../ControlPanel/ControlPanelViewController.swift | 7 ++++++- IVPNClient/Scenes/MainScreen/MainViewController.swift | 8 +++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift b/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift index 4b5f53c36..fbb4181a3 100644 --- a/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift +++ b/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift @@ -124,6 +124,7 @@ class ControlPanelViewController: UITableViewController { initView() addObservers() setupGestureRecognizers() + startAPIUpdate() } override func viewWillAppear(_ animated: Bool) { @@ -284,7 +285,7 @@ class ControlPanelViewController: UITableViewController { lastVPNStatus = vpnStatus } - func refreshServiceStatus() { + @objc func refreshServiceStatus() { if let lastUpdateDate = lastStatusUpdateDate { let now = Date() if now.timeIntervalSince(lastUpdateDate) < Config.serviceStatusRefreshMaxIntervalSeconds { return } @@ -458,4 +459,8 @@ class ControlPanelViewController: UITableViewController { updateControlPanel() } + private func startAPIUpdate() { + Timer.scheduledTimer(timeInterval: 60 * 60, target: self, selector: #selector(refreshServiceStatus), userInfo: nil, repeats: true) + } + } diff --git a/IVPNClient/Scenes/MainScreen/MainViewController.swift b/IVPNClient/Scenes/MainScreen/MainViewController.swift index af70c80bc..b7ecd72cc 100644 --- a/IVPNClient/Scenes/MainScreen/MainViewController.swift +++ b/IVPNClient/Scenes/MainScreen/MainViewController.swift @@ -35,7 +35,6 @@ class MainViewController: UIViewController { var floatingPanel: FloatingPanelController! private var updateServerListDidComplete = false - private var updateServersTimer = Timer() private var vpnErrorObserver = VPNErrorObserver() // MARK: - @IBActions - @@ -69,7 +68,7 @@ class MainViewController: UIViewController { initErrorObservers() initFloatingPanel() addObservers() - startServersUpdate() + startAPIUpdate() startVPNStatusObserver() } @@ -85,7 +84,6 @@ class MainViewController: UIViewController { } deinit { - updateServersTimer.invalidate() Application.shared.connectionManager.removeStatusChangeUpdates() } @@ -225,9 +223,9 @@ class MainViewController: UIViewController { floatingPanel.show(animated: true) } - private func startServersUpdate() { + private func startAPIUpdate() { updateServersList() - updateServersTimer = Timer.scheduledTimer(timeInterval: 60 * 15, target: self, selector: #selector(updateServersList), userInfo: nil, repeats: true) + Timer.scheduledTimer(timeInterval: 60 * 15, target: self, selector: #selector(updateServersList), userInfo: nil, repeats: true) } private func startPingService(updateServerListDidComplete: Bool) { From 1c7bc826f18b7f74328940f8f25c297551f60b6e Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Fri, 3 Jun 2022 14:19:44 +0200 Subject: [PATCH 009/121] chore: update servers.json --- IVPNClient/Config/servers.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IVPNClient/Config/servers.json b/IVPNClient/Config/servers.json index 8607b6c0f..a89b03eea 100644 --- a/IVPNClient/Config/servers.json +++ b/IVPNClient/Config/servers.json @@ -1 +1 @@ -{"wireguard":[{"gateway":"us-tx.wg.ivpn.net","country_code":"US","country":"United States","city":"Dallas, TX","latitude":32.7936,"longitude":-96.7662,"isp":"Quadranet","hosts":[{"hostname":"us-tx1.wg.ivpn.net","host":"198.55.124.114","public_key":"JPT1veXLmasj2uQDstX24mpR7VWD+GmV8JDkidkz91Q=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21010},{"hostname":"us-tx01.wg.ivpn.net","host":"96.44.189.197","public_key":"LvWf548mFddi8PTrIGL6uD1/l85LU8z0Rc8tpvw2Vls=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21001},{"hostname":"us-tx2.wg.ivpn.net","host":"96.44.142.77","public_key":"om8hOGUcEvoOhHvJZoBHxNF4jxY/+Ml9Iy1WOSC/pFo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25001}]},{"gateway":"nl.wg.ivpn.net","country_code":"NL","country":"Netherlands","city":"Amsterdam","latitude":52.35,"longitude":4.9166,"isp":"Datapacket","hosts":[{"hostname":"nl1.wg.ivpn.net","host":"185.102.218.104","public_key":"AsMT2FqpkZbjzWeDch6GwufF5odl259W/hIkGytVfWo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20301},{"hostname":"nl4.wg.ivpn.net","host":"95.211.95.19","public_key":"cVB66gPq5cZ9dfXY+e2pbsCyih5o1zk04l5c5VCsV1g=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23201},{"hostname":"nl3.wg.ivpn.net","host":"95.211.95.9","public_key":"XDU6Syq1DY82IMatsHV0x/TAtbLiRwh/SdFCXlEn40c=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23101},{"hostname":"nl6.wg.ivpn.net","host":"95.211.243.182","public_key":"hMWpqb3FEATHIbImPVWB/5z2nWIXghwpnJjevPY+1H0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24101},{"hostname":"nl5.wg.ivpn.net","host":"95.211.243.162","public_key":"NCagAawwRixI6Iw/NWiGD8lbjDNCl0aTICZKJtO/1HA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23901},{"hostname":"nl7.wg.ivpn.net","host":"95.211.172.105","public_key":"hQNYqtfOOAEz0IGshLx/TI9hUrfR9gIIkjVm4VsCbBM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22501},{"hostname":"nl8.wg.ivpn.net","host":"95.211.198.167","public_key":"/nY1/OhVhdHtbnU/s31zYUuPBH0pizv4DemW5KDOUkg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22801}]},{"gateway":"de.wg.ivpn.net","country_code":"DE","country":"Germany","city":"Frankfurt","latitude":50.1,"longitude":8.675,"isp":"Datapacket","hosts":[{"hostname":"de1.wg.ivpn.net","host":"185.102.219.26","public_key":"mS3/WpXjnMAMmXjSpd4nFzx9HSE3ubv2WyjpyH2REgs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23010},{"hostname":"de01.wg.ivpn.net","host":"178.162.212.24","public_key":"Sc5AUZieg0qX8kyCy9p0OHRES4n0CHtHHM+ZPyERFTc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23001},{"hostname":"de2.wg.ivpn.net","host":"37.58.60.151","public_key":"QhY3OtBf4FFafKtLO33e6k8JnAl8e6ktFcRUyLjCDVY=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22001}]},{"gateway":"us-il.wg.ivpn.net","country_code":"US","country":"United States","city":"Chicago, IL","latitude":41.8373,"longitude":-87.6862,"isp":"Datapacket","hosts":[{"hostname":"us-il1.wg.ivpn.net","host":"89.187.181.116","public_key":"hku9gjamhoii8OvxZgx+TdUDIkOAQYFu39qbav2AyUQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21410},{"hostname":"us-il01.wg.ivpn.net","host":"72.11.137.158","public_key":"Uy5a8JOqneAUY1dC5s9jubLnotbyIfBsLP2nZuzRbHs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21401},{"hostname":"us-il2.wg.ivpn.net","host":"72.11.137.148","public_key":"ANhVUMAQgStPVNRHW8mg0ZtN1YI1QHyXfNCO8+USNQQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24901}]},{"gateway":"us-ga.wg.ivpn.net","country_code":"US","country":"United States","city":"Atlanta, GA","latitude":33.7627,"longitude":-84.4225,"isp":"Datapacket","hosts":[{"hostname":"us-ga1.wg.ivpn.net","host":"185.93.0.212","public_key":"jD8h+pL5/d6fmYcTzl0lR8AWzQVN5XkwRFSmM/3NcDM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24510},{"hostname":"us-ga01.wg.ivpn.net","host":"104.129.24.149","public_key":"EJFl28aYpZKfmJqb1jxxTEnGx6kaH2USVrigpHKKXhs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24501},{"hostname":"us-ga2.wg.ivpn.net","host":"107.150.22.77","public_key":"hr2uQOEGCvGeDkoCQJ2dCI8dM8Iu5aKhb1PIvJ9q72E=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24810}]},{"gateway":"us-ca.wg.ivpn.net","country_code":"US","country":"United States","city":"Los Angeles, CA","latitude":34.1139,"longitude":-118.4068,"isp":"Datapacket","hosts":[{"hostname":"us-ca1.wg.ivpn.net","host":"185.180.13.41","public_key":"FGl78s9Ct6xNamQ2/CtAyXwGePrrU0kiZxfM27pm8XA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22210},{"hostname":"us-ca01.wg.ivpn.net","host":"216.144.236.44","public_key":"B+qXdkIuETpzI0bfhGUAHN4SU91Tjs6ItdFlu93S42I=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22201},{"hostname":"us-ca2.wg.ivpn.net","host":"216.144.236.68","public_key":"qv4Tupfon5NUSwzDpM8zPizSwJZn2h+9CqrufcyDOko=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22401},{"hostname":"us-ca3.wg.ivpn.net","host":"198.54.129.100","public_key":"J5+Bx84LxNPdWEhewOvBV/fGWiDluIBlAcr1QlJZil8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21301},{"hostname":"us-ca4.wg.ivpn.net","host":"216.144.237.83","public_key":"dYPXYr6HSRJPe3MhALwGWNtdEy1+EPE9Kqv7cTrUXk8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21901}]},{"gateway":"ca-qc.wg.ivpn.net","country_code":"CA","country":"Canada","city":"Montreal","latitude":45.5,"longitude":-73.5833,"isp":"M247","hosts":[{"hostname":"ca1.wg.ivpn.net","host":"37.120.130.58","public_key":"rg+GGDmjM4Vxo1hURvKmgm9yonb6qcoKbPCP/DNDBnI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23810},{"hostname":"ca-qc1.wg.ivpn.net","host":"87.101.92.29","public_key":"98JU1mdCR8vD1aNZg017/NjBeTjuuCKUaLw0zfz/CUE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27001}]},{"gateway":"gb.wg.ivpn.net","country_code":"GB","country":"United Kingdom","city":"London","latitude":51.5,"longitude":-0.1167,"isp":"M247","hosts":[{"hostname":"gb1.wg.ivpn.net","host":"81.92.202.114","public_key":"7+jos+Eg+hMEOQE4Std6OJ+WVnCcmbqS1/EbPwn9w3s=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20810},{"hostname":"gb2.wg.ivpn.net","host":"185.59.221.225","public_key":"x0BTRaxsdxAd58ZyU2YMX4bmuj+Eg+8/urT2F3Vs1n8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24201},{"hostname":"gb01.wg.ivpn.net","host":"185.59.221.140","public_key":"yKK5x+D17Jr3Q12T/UBaDjNVmNdZBsqpvTqH6YfsGHg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20801}]},{"gateway":"us-ny.wg.ivpn.net","country_code":"US","country":"United States","city":"New York, NY","latitude":40.6943,"longitude":-73.9249,"isp":"M247","hosts":[{"hostname":"us-ny1.wg.ivpn.net","host":"91.132.137.170","public_key":"6/tjvgb7HFl7UuvBSegolxa1zKr3iSlDrlCexCmhAGE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21210},{"hostname":"us-ny2.wg.ivpn.net","host":"212.103.48.195","public_key":"c7DwY2uT+6ulWAJ5u8qJNWHroA0qyJLcdNzf/f2kkhs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21801},{"hostname":"us-ny3.wg.ivpn.net","host":"89.187.178.145","public_key":"m5/Ssw9SN3WuE+yD/fAsH5G8iuI8TcDGEiZZnPgiMCc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27601}]},{"gateway":"se.wg.ivpn.net","country_code":"SE","country":"Sweden","city":"Stockholm","latitude":59.3508,"longitude":18.0973,"isp":"M247","hosts":[{"hostname":"se1.wg.ivpn.net","host":"37.120.153.226","public_key":"2n0nFE1g/+vQr2AOQPm9Igyiy0zh9uTTultvOOSkMRo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24010},{"hostname":"se01.wg.ivpn.net","host":"80.67.10.141","public_key":"u8VHnYEpoEjJWDAF9NAUkU6s810RnkMuhEfFD9U0cGo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24001}]},{"gateway":"sg.wg.ivpn.net","country_code":"SG","country":"Singapore","city":"Singapore","latitude":1.293,"longitude":103.8558,"isp":"M247","hosts":[{"hostname":"sg1.wg.ivpn.net","host":"37.120.151.122","public_key":"hSg0At4uwuIhmTy5UT4fRbi5AN6JO2ZWTuIvqd4nHCE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26110},{"hostname":"sg01.wg.ivpn.net","host":"185.128.24.189","public_key":"pWk0u1Xq8FHC+xpkN+C6yEKOTEanorR5zMCSfHlLzFw=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26101}]},{"gateway":"ch.wg.ivpn.net","country_code":"CH","country":"Switzerland","city":"Zurich","latitude":47.38,"longitude":8.55,"isp":"Privatelayer","hosts":[{"hostname":"ch1.wg.ivpn.net","host":"141.255.164.66","public_key":"jVZJ61i1xxkAfriDHpwvF/GDuTvZUqhwoWSjkOJvaUA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23610},{"hostname":"ch3.wg.ivpn.net","host":"141.255.166.198","public_key":"JBpgBKtqIneRuEga7mbP2PAk/e4HPRaC11H0A0+R3lA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22901},{"hostname":"ch01.wg.ivpn.net","host":"185.212.170.141","public_key":"dU7gLfcupYd37LW0q6cxC6PHMba+eUFAUOoU/ryXZkY=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23601}]},{"gateway":"it.wg.ivpn.net","country_code":"IT","country":"Italy","city":"Milan","latitude":45.47,"longitude":9.205,"isp":"M247","hosts":[{"hostname":"it1.wg.ivpn.net","host":"82.102.21.90","public_key":"Aj6b81yrDk7I913R+fuSW/NAmIl87N73vHgY5/WQY0Q=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24310},{"hostname":"it01.wg.ivpn.net","host":"158.58.172.89","public_key":"QTzR5R6jeDI/cQ0CXPIqOby9GR5nn+4Bcf4bK536Vy0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24301}]},{"gateway":"ro.wg.ivpn.net","country_code":"RO","country":"Romania","city":"Bucharest","latitude":44.4334,"longitude":26.0999,"isp":"M247","hosts":[{"hostname":"ro1.wg.ivpn.net","host":"37.120.206.53","public_key":"F2uQ57hysZTlw8WYELnyCw9Lga80wNYoYwkrrxyXKmw=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22301}]},{"gateway":"fr.wg.ivpn.net","country_code":"FR","country":"France","city":"Paris","latitude":48.8667,"longitude":2.3333,"isp":"Datapacket","hosts":[{"hostname":"fr1.wg.ivpn.net","host":"185.246.211.185","public_key":"g7BuMzj3r/noLiLR4qhQMcvU6GSIY8RGEnaYtdYsFX4=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23401}]},{"gateway":"is.wg.ivpn.net","country_code":"IS","country":"Iceland","city":"Reykjavik","latitude":64.15,"longitude":-21.95,"isp":"Advania","hosts":[{"hostname":"is1.wg.ivpn.net","host":"82.221.107.185","public_key":"nZZT6TlQ2dXlVe3P3B5ozEScHYMWH4JY4y3to8w5dz0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23501}]},{"gateway":"hk.wg.ivpn.net","country_code":"HK","country":"Hong Kong","city":"Hong Kong","latitude":22.305,"longitude":114.185,"isp":"Leaseweb","hosts":[{"hostname":"hk1.wg.ivpn.net","host":"209.58.189.105","public_key":"MbqqGy6TI2WVxHYdMa7X1LJoIEQNElhYXMGlMqtwtS0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23301},{"hostname":"hk2.wg.ivpn.net","host":"64.120.120.239","public_key":"kyolyq4cJydI3vQB2ESTIUAy2Fq0bpOf+Qe7GIq6XEA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27501}]},{"gateway":"us-ut.wg.ivpn.net","country_code":"US","country":"United States","city":"Salt Lake City, UT","latitude":40.7774,"longitude":-111.93,"isp":"100TB","hosts":[{"hostname":"us-ut1.wg.ivpn.net","host":"206.190.145.92","public_key":"KirI7bpxD186CuYiOqNHF+QUe6YmRYf6CN3pXWOJT2k=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24401}]},{"gateway":"us-fl.wg.ivpn.net","country_code":"US","country":"United States","city":"Miami, FL","latitude":25.7839,"longitude":-80.2102,"isp":"Quadranet","hosts":[{"hostname":"us-fl1.wg.ivpn.net","host":"173.44.49.93","public_key":"Rkzo9WgxJBiKyEbkZvqGWtOVh9Gk9Vd7wL49SHXdHig=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24601}]},{"gateway":"ca.wg.ivpn.net","country_code":"CA","country":"Canada","city":"Toronto","latitude":43.7,"longitude":-79.42,"isp":"Amanah","hosts":[{"hostname":"ca2.wg.ivpn.net","host":"172.86.186.173","public_key":"5qHV10ZbFgEGnF6wg9QpKeh1l6Di2JUG/5PdNaaoNW8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22101},{"hostname":"ca01.wg.ivpn.net","host":"104.254.90.181","public_key":"mdGnCZwinuOVGg46zsWnFhhenfFId6jht9GBTKB+xUA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23801}]},{"gateway":"us-nj.wg.ivpn.net","country_code":"US","country":"United States","city":"New Jersey, NJ","latitude":40.737764,"longitude":-74.151747,"isp":"Quadranet","hosts":[{"hostname":"us-nj3.wg.ivpn.net","host":"23.226.128.21","public_key":"AX7C1LO0ECUcHRYgX4/tIDYdR8npvfB/+pf4AfI3OHU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21610},{"hostname":"us-nj4.wg.ivpn.net","host":"194.36.111.54","public_key":"1Te4AfL1yKo2k4jzPALnRPfKE3YSzXKo4XIRHPz5FxI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27401}]},{"gateway":"es.wg.ivpn.net","country_code":"ES","country":"Spain","city":"Madrid","latitude":40.4,"longitude":-3.6834,"isp":"Datapacket","hosts":[{"hostname":"es1.wg.ivpn.net","host":"84.17.62.98","public_key":"w7umiArTtlJ4Pk6Ii9WX5VXK5vw/Qu+Z37/icKlIYWo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21501}]},{"gateway":"pl.wg.ivpn.net","country_code":"PL","country":"Poland","city":"Warsaw","latitude":52.25,"longitude":21,"isp":"Datapacket","hosts":[{"hostname":"pl1.wg.ivpn.net","host":"185.246.208.109","public_key":"1JDmF79rWj5C+kHp71AbdHne/yGaizWCd2bLfSFvYjo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25101}]},{"gateway":"cz.wg.ivpn.net","country_code":"CZ","country":"Czech Republic","city":"Prague","latitude":50.0833,"longitude":14.466,"isp":"Datapacket","hosts":[{"hostname":"cz1.wg.ivpn.net","host":"185.180.14.41","public_key":"gVbEq2cGRzwCSGPqT2oRSYYN+P6IK3uvvRffErASDSk=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25201}]},{"gateway":"no.wg.ivpn.net","country_code":"NO","country":"Norway","city":"Oslo","latitude":59.9167,"longitude":10.75,"isp":"Servetheworld","hosts":[{"hostname":"no1.wg.ivpn.net","host":"91.189.177.156","public_key":"xFO6ksbO3Gr05rRgAW0O5Veoi4bpTgz2G9RvtBzK7Cg=","local_ip":"172.16.0.1/12","ipv6":{},"multihop_port":25301}]},{"gateway":"hu.wg.ivpn.net","country_code":"HU","country":"Hungary","city":"Budapest","latitude":47.5,"longitude":19.0833,"isp":"M247","hosts":[{"hostname":"hu1.wg.ivpn.net","host":"185.189.114.189","public_key":"G30fNdXrnlqtqqOLF23QXWzFdLIKDxLW60HoYPvqml8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25401}]},{"gateway":"dk.wg.ivpn.net","country_code":"DK","country":"Denmark","city":"Copenhagen","latitude":55.6786,"longitude":12.5635,"isp":"M247","hosts":[{"hostname":"dk1.wg.ivpn.net","host":"185.245.84.229","public_key":"jTsV5gOD7lT4egDj9rhKwO2OO2X7bKs2EQPcZEnUWDE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25501}]},{"gateway":"at.wg.ivpn.net","country_code":"AT","country":"Austria","city":"Vienna","latitude":48.2,"longitude":16.3666,"isp":"M247","hosts":[{"hostname":"at1.wg.ivpn.net","host":"185.244.212.69","public_key":"83LUBnP97SFpnS0y1MpEAFcg8MIiQJgW1FRv/8Mc40g=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25601}]},{"gateway":"be.wg.ivpn.net","country_code":"BE","country":"Belgium","city":"Brussels","latitude":50.8333,"longitude":4.3333,"isp":"M247","hosts":[{"hostname":"be1.wg.ivpn.net","host":"194.187.251.13","public_key":"awriP5lpdxEMWKuG+A1DOg+vb1M5jd3WhynIMB61BhU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25701}]},{"gateway":"bg.wg.ivpn.net","country_code":"BG","country":"Bulgaria","city":"Sofia","latitude":42.6833,"longitude":23.3167,"isp":"M247","hosts":[{"hostname":"bg1.wg.ivpn.net","host":"82.102.23.21","public_key":"WDSsdJE6wvATIWfzQwayPtE/0DaXBQgW/hPm7sQSJmU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25901}]},{"gateway":"sk.wg.ivpn.net","country_code":"SK","country":"Slovakia","city":"Bratislava","latitude":48.15,"longitude":17.117,"isp":"M247","hosts":[{"hostname":"sk1.wg.ivpn.net","host":"185.245.85.253","public_key":"MOBWWpEgNsKbFj4BEyWSDFLlkBs5iUFiqdSdTFTDBko=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25801}]},{"gateway":"jp.wg.ivpn.net","country_code":"JP","country":"Japan","city":"Tokyo","latitude":35.685,"longitude":139.7514,"isp":"M247","hosts":[{"hostname":"jp1.wg.ivpn.net","host":"91.207.174.237","public_key":"tb9WdC3LSho3d1rI5N7kfG9e42/d+u4LPVdEYERPsSQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26201}]},{"gateway":"ua.wg.ivpn.net","country_code":"UA","country":"Ukraine","city":"Kharkiv","latitude":50,"longitude":36.25,"isp":"Xservers","hosts":[{"hostname":"ua1.wg.ivpn.net","host":"176.103.57.129","public_key":"mIxEzfjZ2wV6jJVj30w38ECd2LSH4bw/HLMnM2ICHiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26301}]},{"gateway":"fi.wg.ivpn.net","country_code":"FI","country":"Finland","city":"Helsinki","latitude":60.1756,"longitude":24.9341,"isp":"Creanova","hosts":[{"hostname":"fi1.wg.ivpn.net","host":"194.34.134.63","public_key":"mIxEzfjZ2wV6jJVj30w38ECd2LSH4bw/HLMnM2ICHiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26001}]},{"gateway":"us-az.wg.ivpn.net","country_code":"US","country":"United States","city":"Phoenix, AZ","latitude":33.5722,"longitude":-112.0891,"isp":"M247","hosts":[{"hostname":"us-az1.wg.ivpn.net","host":"193.37.254.133","public_key":"Ts4MGazxpxL9rrYbERjgxa+kCEX85ou9gHoaJvDsRiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26401}]},{"gateway":"us-nv.wg.ivpn.net","country_code":"US","country":"United States","city":"Las Vegas, NV","latitude":36.2333,"longitude":-115.2654,"isp":"M247","hosts":[{"hostname":"us-nv1.wg.ivpn.net","host":"185.242.5.37","public_key":"PRpvAZyoNWNm/KHlqafjtYoZtn1PkIPylUE4WbuYmgM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26501}]},{"gateway":"au-nsw.wg.ivpn.net","country_code":"AU","country":"Australia","city":"Sydney","latitude":-33.92,"longitude":151.1852,"isp":"M247","hosts":[{"hostname":"au-nsw1.wg.ivpn.net","host":"46.102.153.246","public_key":"KmSrG48t5xw9CJCPlYLBG3JnmiY0CnUgyRM5TUEwZhM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26601},{"hostname":"au-nsw2.wg.ivpn.net","host":"146.70.78.75","public_key":"q+wbp7GjiTszp5G16rNpGCqxkL0qSY3CH4pcgD6UsVQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27801}]},{"gateway":"br.wg.ivpn.net","country_code":"BR","country":"Brazil","city":"Franca","latitude":-20.53,"longitude":-47.39,"isp":"Qnax","hosts":[{"hostname":"br1.wg.ivpn.net","host":"45.162.229.133","public_key":"eN1f15S3YzRyYCALiPGRQcjkQO9xntcdqPhJJ6TOymc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26701}]},{"gateway":"rs.wg.ivpn.net","country_code":"RS","country":"Serbia","city":"Belgrade","latitude":44.8186,"longitude":20.468,"isp":"M247","hosts":[{"hostname":"rs1.wg.ivpn.net","host":"141.98.103.253","public_key":"xLN/lpQThQ3z3tvYf7VqdAsRL/nton1Vhv2kCZlQtWE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26801}]},{"gateway":"gb-man.wg.ivpn.net","country_code":"GB","country":"United Kingdom","city":"Manchester","latitude":53.5004,"longitude":-2.248,"isp":"M247","hosts":[{"hostname":"gb-man1.wg.ivpn.net","host":"89.238.141.231","public_key":"+hf4DYilNEIjTdSOuCNcWdqVyaRoxGzXw7wvNl7f7Rg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26901}]},{"gateway":"pt.wg.ivpn.net","country_code":"PT","country":"Portugal","city":"Lisbon","latitude":38.7227,"longitude":-9.1449,"isp":"Hostwebis","hosts":[{"hostname":"pt1.wg.ivpn.net","host":"94.46.175.113","public_key":"nMnA82YVrvEK80GVoY/0Z9McWeqjcLzuMYSL+86j5nU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27101}]},{"gateway":"lu.wg.ivpn.net","country_code":"LU","country":"Luxembourg","city":"Luxembourg","latitude":49.6117,"longitude":6.13,"isp":"Evoluso","hosts":[{"hostname":"lu1.wg.ivpn.net","host":"92.223.89.57","public_key":"hUS1OAFLGwpba8+oc5mifYtohZt/RTro5dMyYBLYHjI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27201}]},{"gateway":"il.wg.ivpn.net","country_code":"IL","country":"Israel","city":"Holon, Tel Aviv","latitude":32.08,"longitude":34.77,"isp":"HQServ","hosts":[{"hostname":"il01.wg.ivpn.net","host":"185.191.207.197","public_key":"HR9gAjpxXU3YVt6kehBw5n8yVYVE0iIgJdc4HTqOzEE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27301}]},{"gateway":"us-va.wg.ivpn.net","country_code":"US","country":"United States","city":"Ashburn, VA","latitude":39.0437,"longitude":-77.4875,"isp":"Datapacket","hosts":[{"hostname":"us-va1.wg.ivpn.net","host":"37.19.206.106","public_key":"ZCnZK6U+cRuP/WgzIDb/P6UG2rX/KyCRd5vJ1hAbr2E=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27701}]},{"gateway":"us-wa.wg.ivpn.net","country_code":"US","country":"United States","city":"Seattle, WA","latitude":47.6211,"longitude":-122.3244,"isp":"Tzulo","hosts":[{"hostname":"us-wa2.wg.ivpn.net","host":"198.44.131.4","public_key":"VcrOOozBUCIURU0AnqMAE7AkMmC7Qrp+j/PzPbgbalU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27801}]}],"openvpn":[{"gateway":"us-ca.gw.ivpn.net","country_code":"US","country":"United States","city":"Los Angeles, CA","latitude":34.1139,"longitude":-118.4068,"isp":"Quadranet","hosts":[{"hostname":"us-ca1.gw.ivpn.net","host":"173.254.196.58","multihop_port":22201},{"hostname":"us-ca2.gw.ivpn.net","host":"69.12.80.146","multihop_port":22401},{"hostname":"us-ca3.gw.ivpn.net","host":"198.54.129.99","multihop_port":21301},{"hostname":"us-ca4.gw.ivpn.net","host":"173.254.204.202","multihop_port":21901}]},{"gateway":"ro.gw.ivpn.net","country_code":"RO","country":"Romania","city":"Bucharest","latitude":44.4334,"longitude":26.0999,"isp":"M247","hosts":[{"hostname":"ro1.gw.ivpn.net","host":"37.120.206.50","multihop_port":22301}]},{"gateway":"de.gw.ivpn.net","country_code":"DE","country":"Germany","city":"Frankfurt","latitude":50.1,"longitude":8.675,"isp":"Leaseweb","hosts":[{"hostname":"de1.gw.ivpn.net","host":"178.162.222.40","multihop_port":23001},{"hostname":"de2.gw.ivpn.net","host":"178.162.211.114","multihop_port":22001}]},{"gateway":"nl.gw.ivpn.net","country_code":"NL","country":"Netherlands","city":"Amsterdam","latitude":52.35,"longitude":4.9166,"isp":"Leaseweb","hosts":[{"hostname":"nl4.gw.ivpn.net","host":"95.211.172.95","multihop_port":23201},{"hostname":"nl3.gw.ivpn.net","host":"95.211.172.68","multihop_port":23101},{"hostname":"nl6.gw.ivpn.net","host":"95.211.187.228","multihop_port":24101},{"hostname":"nl5.gw.ivpn.net","host":"95.211.187.222","multihop_port":23901},{"hostname":"nl7.gw.ivpn.net","host":"95.211.95.22","multihop_port":22501},{"hostname":"nl8.gw.ivpn.net","host":"95.211.172.18","multihop_port":22801}]},{"gateway":"fr.gw.ivpn.net","country_code":"FR","country":"France","city":"Paris","latitude":48.8667,"longitude":2.3333,"isp":"Datapacket","hosts":[{"hostname":"fr1.gw.ivpn.net","host":"185.246.211.179","multihop_port":23401}]},{"gateway":"is.gw.ivpn.net","country_code":"IS","country":"Iceland","city":"Reykjavik","latitude":64.15,"longitude":-21.95,"isp":"Advania","hosts":[{"hostname":"is1.gw.ivpn.net","host":"82.221.107.178","multihop_port":23501}]},{"gateway":"hk.gw.ivpn.net","country_code":"HK","country":"Hong Kong","city":"Hong Kong","latitude":22.305,"longitude":114.185,"isp":"Leaseweb","hosts":[{"hostname":"hk1.gw.ivpn.net","host":"209.58.189.163","multihop_port":23301},{"hostname":"hk2.gw.ivpn.net","host":"209.58.188.13","multihop_port":27501}]},{"gateway":"us-tx.gw.ivpn.net","country_code":"US","country":"United States","city":"Dallas, TX","latitude":32.7936,"longitude":-96.7662,"isp":"Quadranet","hosts":[{"hostname":"us-tx1.gw.ivpn.net","host":"96.44.189.194","multihop_port":21001},{"hostname":"us-tx2.gw.ivpn.net","host":"96.44.142.74","multihop_port":25001}]},{"gateway":"gb.gw.ivpn.net","country_code":"GB","country":"United Kingdom","city":"London","latitude":51.5,"longitude":-0.1167,"isp":"Datapacket","hosts":[{"hostname":"gb2.gw.ivpn.net","host":"185.59.221.88","multihop_port":24201},{"hostname":"gb1.gw.ivpn.net","host":"185.59.221.133","multihop_port":20801}]},{"gateway":"us-ut.gw.ivpn.net","country_code":"US","country":"United States","city":"Salt Lake City, UT","latitude":40.7774,"longitude":-111.93,"isp":"100TB","hosts":[{"hostname":"us-ut1.gw.ivpn.net","host":"198.105.216.28","multihop_port":24401}]},{"gateway":"it.gw.ivpn.net","country_code":"IT","country":"Italy","city":"Milan","latitude":45.47,"longitude":9.205,"isp":"SEFlow","hosts":[{"hostname":"it1.gw.ivpn.net","host":"158.58.172.73","multihop_port":24301}]},{"gateway":"se.gw.ivpn.net","country_code":"SE","country":"Sweden","city":"Stockholm","latitude":59.3508,"longitude":18.0973,"isp":"GleSyS","hosts":[{"hostname":"se1.gw.ivpn.net","host":"80.67.10.138","multihop_port":24001}]},{"gateway":"us-ga.gw.ivpn.net","country_code":"US","country":"United States","city":"Atlanta, GA","latitude":33.7627,"longitude":-84.4225,"isp":"Quadranet","hosts":[{"hostname":"us-ga1.gw.ivpn.net","host":"104.129.24.146","multihop_port":24501},{"hostname":"us-ga2.gw.ivpn.net","host":"107.150.22.74","multihop_port":24810}]},{"gateway":"us-fl.gw.ivpn.net","country_code":"US","country":"United States","city":"Miami, FL","latitude":25.7839,"longitude":-80.2102,"isp":"Quadranet","hosts":[{"hostname":"us-fl1.gw.ivpn.net","host":"173.44.49.90","multihop_port":24601}]},{"gateway":"ca.gw.ivpn.net","country_code":"CA","country":"Canada","city":"Toronto","latitude":43.7,"longitude":-79.42,"isp":"Amanah","hosts":[{"hostname":"ca2.gw.ivpn.net","host":"172.86.186.170","multihop_port":22101},{"hostname":"ca1.gw.ivpn.net","host":"104.254.90.178","multihop_port":23801}]},{"gateway":"ch.gw.ivpn.net","country_code":"CH","country":"Switzerland","city":"Zurich","latitude":47.38,"longitude":8.55,"isp":"Privatelayer","hosts":[{"hostname":"ch3.gw.ivpn.net","host":"141.255.166.194","multihop_port":22901},{"hostname":"ch1.gw.ivpn.net","host":"185.212.170.138","multihop_port":23601}]},{"gateway":"us-il.gw.ivpn.net","country_code":"US","country":"United States","city":"Chicago, IL","latitude":41.8373,"longitude":-87.6862,"isp":"Quadranet","hosts":[{"hostname":"us-il1.gw.ivpn.net","host":"107.150.28.82","multihop_port":21401},{"hostname":"us-il2.gw.ivpn.net","host":"72.11.137.146","multihop_port":24901}]},{"gateway":"us-nj.gw.ivpn.net","country_code":"US","country":"United States","city":"New Jersey, NJ","latitude":40.737764,"longitude":-74.151747,"isp":"Quadranet","hosts":[{"hostname":"us-nj3.gw.ivpn.net","host":"23.226.128.18","multihop_port":21610},{"hostname":"us-nj4.gw.ivpn.net","host":"194.36.111.50","multihop_port":27401}]},{"gateway":"es.gw.ivpn.net","country_code":"ES","country":"Spain","city":"Madrid","latitude":40.4,"longitude":-3.6834,"isp":"Datapacket","hosts":[{"hostname":"es1.gw.ivpn.net","host":"185.93.3.193","multihop_port":21501}]},{"gateway":"us-ny.gw.ivpn.net","country_code":"US","country":"United States","city":"New York, NY","latitude":40.6943,"longitude":-73.9249,"isp":"M247","hosts":[{"hostname":"us-ny2.gw.ivpn.net","host":"212.103.48.194","multihop_port":21801},{"hostname":"us-ny3.gw.ivpn.net","host":"89.187.178.144","multihop_port":27601}]},{"gateway":"pl.gw.ivpn.net","country_code":"PL","country":"Poland","city":"Warsaw","latitude":52.25,"longitude":21,"isp":"Datapacket","hosts":[{"hostname":"pl1.gw.ivpn.net","host":"185.246.208.86","multihop_port":25101}]},{"gateway":"cz.gw.ivpn.net","country_code":"CZ","country":"Czech Republic","city":"Prague","latitude":50.0833,"longitude":14.466,"isp":"Datapacket","hosts":[{"hostname":"cz1.gw.ivpn.net","host":"195.181.160.167","multihop_port":25201}]},{"gateway":"no.gw.ivpn.net","country_code":"NO","country":"Norway","city":"Oslo","latitude":59.9167,"longitude":10.75,"isp":"Servetheworld","hosts":[{"hostname":"no1.gw.ivpn.net","host":"194.242.10.150","multihop_port":25301}]},{"gateway":"hu.gw.ivpn.net","country_code":"HU","country":"Hungary","city":"Budapest","latitude":47.5,"longitude":19.0833,"isp":"M247","hosts":[{"hostname":"hu1.gw.ivpn.net","host":"185.189.114.186","multihop_port":25401}]},{"gateway":"dk.gw.ivpn.net","country_code":"DK","country":"Denmark","city":"Copenhagen","latitude":55.6786,"longitude":12.5635,"isp":"M247","hosts":[{"hostname":"dk1.gw.ivpn.net","host":"185.245.84.226","multihop_port":25501}]},{"gateway":"at.gw.ivpn.net","country_code":"AT","country":"Austria","city":"Vienna","latitude":48.2,"longitude":16.3666,"isp":"M247","hosts":[{"hostname":"at1.gw.ivpn.net","host":"185.244.212.66","multihop_port":25601}]},{"gateway":"be.gw.ivpn.net","country_code":"BE","country":"Belgium","city":"Brussels","latitude":50.8333,"longitude":4.3333,"isp":"M247","hosts":[{"hostname":"be1.gw.ivpn.net","host":"194.187.251.10","multihop_port":25701}]},{"gateway":"bg.gw.ivpn.net","country_code":"BG","country":"Bulgaria","city":"Sofia","latitude":42.6833,"longitude":23.3167,"isp":"M247","hosts":[{"hostname":"bg1.gw.ivpn.net","host":"82.102.23.18","multihop_port":25901}]},{"gateway":"sk.gw.ivpn.net","country_code":"SK","country":"Slovakia","city":"Bratislava","latitude":48.15,"longitude":17.117,"isp":"M247","hosts":[{"hostname":"sk1.gw.ivpn.net","host":"185.245.85.250","multihop_port":25801}]},{"gateway":"jp.gw.ivpn.net","country_code":"JP","country":"Japan","city":"Tokyo","latitude":35.685,"longitude":139.7514,"isp":"M247","hosts":[{"hostname":"jp1.gw.ivpn.net","host":"91.207.174.234","multihop_port":26201}]},{"gateway":"sg.gw.ivpn.net","country_code":"SG","country":"Singapore","city":"Singapore","latitude":1.293,"longitude":103.8558,"isp":"M247","hosts":[{"hostname":"sg1.gw.ivpn.net","host":"185.128.24.186","multihop_port":26101}]},{"gateway":"ua.gw.ivpn.net","country_code":"UA","country":"Ukraine","city":"Kharkiv","latitude":50,"longitude":36.25,"isp":"Xservers","hosts":[{"hostname":"ua1.gw.ivpn.net","host":"193.203.48.54","multihop_port":26301}]},{"gateway":"fi.gw.ivpn.net","country_code":"FI","country":"Finland","city":"Helsinki","latitude":60.1756,"longitude":24.9341,"isp":"Creanova","hosts":[{"hostname":"fi1.gw.ivpn.net","host":"185.112.82.12","multihop_port":26001}]},{"gateway":"us-az.gw.ivpn.net","country_code":"US","country":"United States","city":"Phoenix, AZ","latitude":33.5722,"longitude":-112.0891,"isp":"M247","hosts":[{"hostname":"us-az1.gw.ivpn.net","host":"193.37.254.130","multihop_port":26401}]},{"gateway":"us-nv.gw.ivpn.net","country_code":"US","country":"United States","city":"Las Vegas, NV","latitude":36.2333,"longitude":-115.2654,"isp":"M247","hosts":[{"hostname":"us-nv1.gw.ivpn.net","host":"185.242.5.34","multihop_port":26501}]},{"gateway":"au-nsw.gw.ivpn.net","country_code":"AU","country":"Australia","city":"Sydney","latitude":-33.92,"longitude":151.1852,"isp":"M247","hosts":[{"hostname":"au-nsw1.gw.ivpn.net","host":"46.102.153.242","multihop_port":26601},{"hostname":"au-nsw2.gw.ivpn.net","host":"146.70.78.74","multihop_port":27801}]},{"gateway":"br.gw.ivpn.net","country_code":"BR","country":"Brazil","city":"Franca","latitude":-20.53,"longitude":-47.39,"isp":"Qnax","hosts":[{"hostname":"br1.gw.ivpn.net","host":"45.162.229.130","multihop_port":26701}]},{"gateway":"rs.gw.ivpn.net","country_code":"RS","country":"Serbia","city":"Belgrade","latitude":44.8186,"longitude":20.468,"isp":"M247","hosts":[{"hostname":"rs1.gw.ivpn.net","host":"141.98.103.250","multihop_port":26801}]},{"gateway":"gb-man.gw.ivpn.net","country_code":"GB","country":"United Kingdom","city":"Manchester","latitude":53.5004,"longitude":-2.248,"isp":"M247","hosts":[{"hostname":"gb-man1.gw.ivpn.net","host":"89.238.141.228","multihop_port":26901}]},{"gateway":"ca-qc.gw.ivpn.net","country_code":"CA","country":"Canada","city":"Montreal","latitude":45.5,"longitude":-73.5833,"isp":"M247","hosts":[{"hostname":"ca-qc1.gw.ivpn.net","host":"87.101.92.26","multihop_port":27001}]},{"gateway":"pt.gw.ivpn.net","country_code":"PT","country":"Portugal","city":"Lisbon","latitude":38.7227,"longitude":-9.1449,"isp":"Hostwebis","hosts":[{"hostname":"pt1.gw.ivpn.net","host":"94.46.175.112","multihop_port":27101}]},{"gateway":"lu.gw.ivpn.net","country_code":"LU","country":"Luxembourg","city":"Luxembourg","latitude":49.6117,"longitude":6.13,"isp":"Evoluso","hosts":[{"hostname":"lu1.gw.ivpn.net","host":"92.223.89.53","multihop_port":27201}]},{"gateway":"il.gw.ivpn.net","country_code":"IL","country":"Israel","city":"Holon, Tel Aviv","latitude":32.08,"longitude":34.77,"isp":"HQServ","hosts":[{"hostname":"il1.gw.ivpn.net","host":"185.191.207.194","multihop_port":27301}]},{"gateway":"us-va.gw.ivpn.net","country_code":"US","country":"United States","city":"Ashburn, VA","latitude":39.0437,"longitude":-77.4875,"isp":"Datapacket","hosts":[{"hostname":"us-va1.gw.ivpn.net","host":"37.19.206.105","multihop_port":27701}]},{"gateway":"us-wa.gw.ivpn.net","country_code":"US","country":"United States","city":"Seattle, WA","latitude":47.6211,"longitude":-122.3244,"isp":"Tzulo","hosts":[{"hostname":"us-wa2.gw.ivpn.net","host":"198.44.131.3","multihop_port":27801}]}],"config":{"antitracker":{"default":{"ip":"10.0.254.2","multihop-ip":"10.0.254.102"},"hardcore":{"ip":"10.0.254.3","multihop-ip":"10.0.254.103"}},"api":{"ips":["198.50.177.220","198.50.177.222","198.50.177.223"],"ipv6s":["2607:5300:203:1735::8888","2607:5300:203:1735::8","2607:5300:203:1735:6580:7300:0:aaaa"]}}} +{"wireguard":[{"gateway":"us-tx.wg.ivpn.net","country_code":"US","country":"United States","city":"Dallas, TX","latitude":32.7936,"longitude":-96.7662,"isp":"Quadranet","hosts":[{"hostname":"us-tx1.wg.ivpn.net","host":"198.55.124.114","public_key":"JPT1veXLmasj2uQDstX24mpR7VWD+GmV8JDkidkz91Q=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21010},{"hostname":"us-tx01.wg.ivpn.net","host":"96.44.189.197","public_key":"LvWf548mFddi8PTrIGL6uD1/l85LU8z0Rc8tpvw2Vls=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21001},{"hostname":"us-tx2.wg.ivpn.net","host":"96.44.142.77","public_key":"om8hOGUcEvoOhHvJZoBHxNF4jxY/+Ml9Iy1WOSC/pFo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25001}]},{"gateway":"nl.wg.ivpn.net","country_code":"NL","country":"Netherlands","city":"Amsterdam","latitude":52.35,"longitude":4.9166,"isp":"Datapacket","hosts":[{"hostname":"nl1.wg.ivpn.net","host":"185.102.218.104","public_key":"AsMT2FqpkZbjzWeDch6GwufF5odl259W/hIkGytVfWo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20301},{"hostname":"nl4.wg.ivpn.net","host":"95.211.95.19","public_key":"cVB66gPq5cZ9dfXY+e2pbsCyih5o1zk04l5c5VCsV1g=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23201},{"hostname":"nl3.wg.ivpn.net","host":"95.211.95.9","public_key":"XDU6Syq1DY82IMatsHV0x/TAtbLiRwh/SdFCXlEn40c=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23101},{"hostname":"nl6.wg.ivpn.net","host":"95.211.243.182","public_key":"hMWpqb3FEATHIbImPVWB/5z2nWIXghwpnJjevPY+1H0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24101},{"hostname":"nl5.wg.ivpn.net","host":"95.211.243.162","public_key":"NCagAawwRixI6Iw/NWiGD8lbjDNCl0aTICZKJtO/1HA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23901},{"hostname":"nl7.wg.ivpn.net","host":"95.211.172.105","public_key":"hQNYqtfOOAEz0IGshLx/TI9hUrfR9gIIkjVm4VsCbBM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22501},{"hostname":"nl8.wg.ivpn.net","host":"95.211.198.167","public_key":"/nY1/OhVhdHtbnU/s31zYUuPBH0pizv4DemW5KDOUkg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22801}]},{"gateway":"de.wg.ivpn.net","country_code":"DE","country":"Germany","city":"Frankfurt","latitude":50.1,"longitude":8.675,"isp":"Datapacket","hosts":[{"hostname":"de1.wg.ivpn.net","host":"185.102.219.26","public_key":"mS3/WpXjnMAMmXjSpd4nFzx9HSE3ubv2WyjpyH2REgs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23010},{"hostname":"de01.wg.ivpn.net","host":"178.162.212.24","public_key":"Sc5AUZieg0qX8kyCy9p0OHRES4n0CHtHHM+ZPyERFTc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23001},{"hostname":"de2.wg.ivpn.net","host":"37.58.60.151","public_key":"QhY3OtBf4FFafKtLO33e6k8JnAl8e6ktFcRUyLjCDVY=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22001}]},{"gateway":"us-il.wg.ivpn.net","country_code":"US","country":"United States","city":"Chicago, IL","latitude":41.8373,"longitude":-87.6862,"isp":"Datapacket","hosts":[{"hostname":"us-il1.wg.ivpn.net","host":"89.187.181.116","public_key":"hku9gjamhoii8OvxZgx+TdUDIkOAQYFu39qbav2AyUQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21410},{"hostname":"us-il01.wg.ivpn.net","host":"72.11.137.158","public_key":"Uy5a8JOqneAUY1dC5s9jubLnotbyIfBsLP2nZuzRbHs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21401},{"hostname":"us-il2.wg.ivpn.net","host":"72.11.137.148","public_key":"ANhVUMAQgStPVNRHW8mg0ZtN1YI1QHyXfNCO8+USNQQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24901}]},{"gateway":"us-ga.wg.ivpn.net","country_code":"US","country":"United States","city":"Atlanta, GA","latitude":33.7627,"longitude":-84.4225,"isp":"Datapacket","hosts":[{"hostname":"us-ga1.wg.ivpn.net","host":"185.93.0.212","public_key":"jD8h+pL5/d6fmYcTzl0lR8AWzQVN5XkwRFSmM/3NcDM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24510},{"hostname":"us-ga01.wg.ivpn.net","host":"104.129.24.149","public_key":"EJFl28aYpZKfmJqb1jxxTEnGx6kaH2USVrigpHKKXhs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24501},{"hostname":"us-ga2.wg.ivpn.net","host":"107.150.22.77","public_key":"hr2uQOEGCvGeDkoCQJ2dCI8dM8Iu5aKhb1PIvJ9q72E=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24810}]},{"gateway":"us-ca.wg.ivpn.net","country_code":"US","country":"United States","city":"Los Angeles, CA","latitude":34.1139,"longitude":-118.4068,"isp":"Datapacket","hosts":[{"hostname":"us-ca1.wg.ivpn.net","host":"185.180.13.41","public_key":"FGl78s9Ct6xNamQ2/CtAyXwGePrrU0kiZxfM27pm8XA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22210},{"hostname":"us-ca01.wg.ivpn.net","host":"216.144.236.44","public_key":"B+qXdkIuETpzI0bfhGUAHN4SU91Tjs6ItdFlu93S42I=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22201},{"hostname":"us-ca2.wg.ivpn.net","host":"216.144.236.68","public_key":"qv4Tupfon5NUSwzDpM8zPizSwJZn2h+9CqrufcyDOko=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22401},{"hostname":"us-ca3.wg.ivpn.net","host":"198.54.129.100","public_key":"J5+Bx84LxNPdWEhewOvBV/fGWiDluIBlAcr1QlJZil8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21301},{"hostname":"us-ca4.wg.ivpn.net","host":"216.144.237.83","public_key":"dYPXYr6HSRJPe3MhALwGWNtdEy1+EPE9Kqv7cTrUXk8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21901}]},{"gateway":"ca-qc.wg.ivpn.net","country_code":"CA","country":"Canada","city":"Montreal","latitude":45.5,"longitude":-73.5833,"isp":"M247","hosts":[{"hostname":"ca1.wg.ivpn.net","host":"37.120.130.58","public_key":"rg+GGDmjM4Vxo1hURvKmgm9yonb6qcoKbPCP/DNDBnI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23810},{"hostname":"ca-qc1.wg.ivpn.net","host":"87.101.92.29","public_key":"98JU1mdCR8vD1aNZg017/NjBeTjuuCKUaLw0zfz/CUE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27001}]},{"gateway":"gb.wg.ivpn.net","country_code":"GB","country":"United Kingdom","city":"London","latitude":51.5,"longitude":-0.1167,"isp":"M247","hosts":[{"hostname":"gb1.wg.ivpn.net","host":"81.92.202.114","public_key":"7+jos+Eg+hMEOQE4Std6OJ+WVnCcmbqS1/EbPwn9w3s=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20810},{"hostname":"gb2.wg.ivpn.net","host":"185.59.221.225","public_key":"x0BTRaxsdxAd58ZyU2YMX4bmuj+Eg+8/urT2F3Vs1n8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24201},{"hostname":"gb01.wg.ivpn.net","host":"185.59.221.140","public_key":"yKK5x+D17Jr3Q12T/UBaDjNVmNdZBsqpvTqH6YfsGHg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20801}]},{"gateway":"us-ny.wg.ivpn.net","country_code":"US","country":"United States","city":"New York, NY","latitude":40.6943,"longitude":-73.9249,"isp":"M247","hosts":[{"hostname":"us-ny1.wg.ivpn.net","host":"91.132.137.170","public_key":"6/tjvgb7HFl7UuvBSegolxa1zKr3iSlDrlCexCmhAGE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21210},{"hostname":"us-ny2.wg.ivpn.net","host":"212.103.48.195","public_key":"c7DwY2uT+6ulWAJ5u8qJNWHroA0qyJLcdNzf/f2kkhs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21801},{"hostname":"us-ny3.wg.ivpn.net","host":"89.187.178.145","public_key":"m5/Ssw9SN3WuE+yD/fAsH5G8iuI8TcDGEiZZnPgiMCc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27601}]},{"gateway":"se.wg.ivpn.net","country_code":"SE","country":"Sweden","city":"Stockholm","latitude":59.3508,"longitude":18.0973,"isp":"M247","hosts":[{"hostname":"se1.wg.ivpn.net","host":"37.120.153.226","public_key":"2n0nFE1g/+vQr2AOQPm9Igyiy0zh9uTTultvOOSkMRo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24010},{"hostname":"se01.wg.ivpn.net","host":"80.67.10.141","public_key":"u8VHnYEpoEjJWDAF9NAUkU6s810RnkMuhEfFD9U0cGo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24001}]},{"gateway":"sg.wg.ivpn.net","country_code":"SG","country":"Singapore","city":"Singapore","latitude":1.293,"longitude":103.8558,"isp":"M247","hosts":[{"hostname":"sg1.wg.ivpn.net","host":"37.120.151.122","public_key":"hSg0At4uwuIhmTy5UT4fRbi5AN6JO2ZWTuIvqd4nHCE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26110},{"hostname":"sg01.wg.ivpn.net","host":"185.128.24.189","public_key":"pWk0u1Xq8FHC+xpkN+C6yEKOTEanorR5zMCSfHlLzFw=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26101}]},{"gateway":"ch.wg.ivpn.net","country_code":"CH","country":"Switzerland","city":"Zurich","latitude":47.38,"longitude":8.55,"isp":"Privatelayer","hosts":[{"hostname":"ch1.wg.ivpn.net","host":"141.255.164.66","public_key":"jVZJ61i1xxkAfriDHpwvF/GDuTvZUqhwoWSjkOJvaUA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23610},{"hostname":"ch3.wg.ivpn.net","host":"141.255.166.198","public_key":"JBpgBKtqIneRuEga7mbP2PAk/e4HPRaC11H0A0+R3lA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22901},{"hostname":"ch01.wg.ivpn.net","host":"185.212.170.141","public_key":"dU7gLfcupYd37LW0q6cxC6PHMba+eUFAUOoU/ryXZkY=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23601}]},{"gateway":"it.wg.ivpn.net","country_code":"IT","country":"Italy","city":"Milan","latitude":45.47,"longitude":9.205,"isp":"M247","hosts":[{"hostname":"it1.wg.ivpn.net","host":"82.102.21.90","public_key":"Aj6b81yrDk7I913R+fuSW/NAmIl87N73vHgY5/WQY0Q=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24310},{"hostname":"it01.wg.ivpn.net","host":"158.58.172.89","public_key":"QTzR5R6jeDI/cQ0CXPIqOby9GR5nn+4Bcf4bK536Vy0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24301}]},{"gateway":"ro.wg.ivpn.net","country_code":"RO","country":"Romania","city":"Bucharest","latitude":44.4334,"longitude":26.0999,"isp":"M247","hosts":[{"hostname":"ro1.wg.ivpn.net","host":"37.120.206.53","public_key":"F2uQ57hysZTlw8WYELnyCw9Lga80wNYoYwkrrxyXKmw=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22301}]},{"gateway":"fr.wg.ivpn.net","country_code":"FR","country":"France","city":"Paris","latitude":48.8667,"longitude":2.3333,"isp":"Datapacket","hosts":[{"hostname":"fr1.wg.ivpn.net","host":"185.246.211.185","public_key":"g7BuMzj3r/noLiLR4qhQMcvU6GSIY8RGEnaYtdYsFX4=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23401}]},{"gateway":"is.wg.ivpn.net","country_code":"IS","country":"Iceland","city":"Reykjavik","latitude":64.15,"longitude":-21.95,"isp":"Advania","hosts":[{"hostname":"is1.wg.ivpn.net","host":"82.221.107.185","public_key":"nZZT6TlQ2dXlVe3P3B5ozEScHYMWH4JY4y3to8w5dz0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23501}]},{"gateway":"hk.wg.ivpn.net","country_code":"HK","country":"Hong Kong","city":"Hong Kong","latitude":22.305,"longitude":114.185,"isp":"Leaseweb","hosts":[{"hostname":"hk1.wg.ivpn.net","host":"209.58.189.105","public_key":"MbqqGy6TI2WVxHYdMa7X1LJoIEQNElhYXMGlMqtwtS0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23301},{"hostname":"hk2.wg.ivpn.net","host":"64.120.120.239","public_key":"kyolyq4cJydI3vQB2ESTIUAy2Fq0bpOf+Qe7GIq6XEA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27501}]},{"gateway":"us-ut.wg.ivpn.net","country_code":"US","country":"United States","city":"Salt Lake City, UT","latitude":40.7774,"longitude":-111.93,"isp":"100TB","hosts":[{"hostname":"us-ut1.wg.ivpn.net","host":"206.190.145.92","public_key":"KirI7bpxD186CuYiOqNHF+QUe6YmRYf6CN3pXWOJT2k=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24401}]},{"gateway":"us-fl.wg.ivpn.net","country_code":"US","country":"United States","city":"Miami, FL","latitude":25.7839,"longitude":-80.2102,"isp":"Quadranet","hosts":[{"hostname":"us-fl1.wg.ivpn.net","host":"173.44.49.93","public_key":"Rkzo9WgxJBiKyEbkZvqGWtOVh9Gk9Vd7wL49SHXdHig=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24601}]},{"gateway":"ca.wg.ivpn.net","country_code":"CA","country":"Canada","city":"Toronto","latitude":43.7,"longitude":-79.42,"isp":"Amanah","hosts":[{"hostname":"ca2.wg.ivpn.net","host":"172.86.186.173","public_key":"5qHV10ZbFgEGnF6wg9QpKeh1l6Di2JUG/5PdNaaoNW8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22101},{"hostname":"ca01.wg.ivpn.net","host":"104.254.90.181","public_key":"mdGnCZwinuOVGg46zsWnFhhenfFId6jht9GBTKB+xUA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23801}]},{"gateway":"us-nj.wg.ivpn.net","country_code":"US","country":"United States","city":"New Jersey, NJ","latitude":40.737764,"longitude":-74.151747,"isp":"Quadranet","hosts":[{"hostname":"us-nj3.wg.ivpn.net","host":"23.226.128.21","public_key":"AX7C1LO0ECUcHRYgX4/tIDYdR8npvfB/+pf4AfI3OHU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21610},{"hostname":"us-nj4.wg.ivpn.net","host":"194.36.111.54","public_key":"1Te4AfL1yKo2k4jzPALnRPfKE3YSzXKo4XIRHPz5FxI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27401}]},{"gateway":"es.wg.ivpn.net","country_code":"ES","country":"Spain","city":"Madrid","latitude":40.4,"longitude":-3.6834,"isp":"Datapacket","hosts":[{"hostname":"es1.wg.ivpn.net","host":"84.17.62.98","public_key":"w7umiArTtlJ4Pk6Ii9WX5VXK5vw/Qu+Z37/icKlIYWo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21501}]},{"gateway":"pl.wg.ivpn.net","country_code":"PL","country":"Poland","city":"Warsaw","latitude":52.25,"longitude":21,"isp":"Datapacket","hosts":[{"hostname":"pl1.wg.ivpn.net","host":"185.246.208.109","public_key":"1JDmF79rWj5C+kHp71AbdHne/yGaizWCd2bLfSFvYjo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25101}]},{"gateway":"cz.wg.ivpn.net","country_code":"CZ","country":"Czech Republic","city":"Prague","latitude":50.0833,"longitude":14.466,"isp":"Datapacket","hosts":[{"hostname":"cz1.wg.ivpn.net","host":"185.180.14.41","public_key":"gVbEq2cGRzwCSGPqT2oRSYYN+P6IK3uvvRffErASDSk=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25201}]},{"gateway":"no.wg.ivpn.net","country_code":"NO","country":"Norway","city":"Oslo","latitude":59.9167,"longitude":10.75,"isp":"Servetheworld","hosts":[{"hostname":"no1.wg.ivpn.net","host":"91.189.177.156","public_key":"xFO6ksbO3Gr05rRgAW0O5Veoi4bpTgz2G9RvtBzK7Cg=","local_ip":"172.16.0.1/12","ipv6":{},"multihop_port":25301}]},{"gateway":"hu.wg.ivpn.net","country_code":"HU","country":"Hungary","city":"Budapest","latitude":47.5,"longitude":19.0833,"isp":"M247","hosts":[{"hostname":"hu1.wg.ivpn.net","host":"185.189.114.189","public_key":"G30fNdXrnlqtqqOLF23QXWzFdLIKDxLW60HoYPvqml8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25401}]},{"gateway":"dk.wg.ivpn.net","country_code":"DK","country":"Denmark","city":"Copenhagen","latitude":55.6786,"longitude":12.5635,"isp":"M247","hosts":[{"hostname":"dk1.wg.ivpn.net","host":"185.245.84.229","public_key":"jTsV5gOD7lT4egDj9rhKwO2OO2X7bKs2EQPcZEnUWDE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25501}]},{"gateway":"at.wg.ivpn.net","country_code":"AT","country":"Austria","city":"Vienna","latitude":48.2,"longitude":16.3666,"isp":"M247","hosts":[{"hostname":"at1.wg.ivpn.net","host":"185.244.212.69","public_key":"83LUBnP97SFpnS0y1MpEAFcg8MIiQJgW1FRv/8Mc40g=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25601}]},{"gateway":"be.wg.ivpn.net","country_code":"BE","country":"Belgium","city":"Brussels","latitude":50.8333,"longitude":4.3333,"isp":"M247","hosts":[{"hostname":"be1.wg.ivpn.net","host":"194.187.251.13","public_key":"awriP5lpdxEMWKuG+A1DOg+vb1M5jd3WhynIMB61BhU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25701}]},{"gateway":"bg.wg.ivpn.net","country_code":"BG","country":"Bulgaria","city":"Sofia","latitude":42.6833,"longitude":23.3167,"isp":"M247","hosts":[{"hostname":"bg1.wg.ivpn.net","host":"82.102.23.21","public_key":"WDSsdJE6wvATIWfzQwayPtE/0DaXBQgW/hPm7sQSJmU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25901}]},{"gateway":"sk.wg.ivpn.net","country_code":"SK","country":"Slovakia","city":"Bratislava","latitude":48.15,"longitude":17.117,"isp":"M247","hosts":[{"hostname":"sk1.wg.ivpn.net","host":"185.245.85.253","public_key":"MOBWWpEgNsKbFj4BEyWSDFLlkBs5iUFiqdSdTFTDBko=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25801}]},{"gateway":"jp.wg.ivpn.net","country_code":"JP","country":"Japan","city":"Tokyo","latitude":35.685,"longitude":139.7514,"isp":"M247","hosts":[{"hostname":"jp1.wg.ivpn.net","host":"91.207.174.237","public_key":"tb9WdC3LSho3d1rI5N7kfG9e42/d+u4LPVdEYERPsSQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26201}]},{"gateway":"ua.wg.ivpn.net","country_code":"UA","country":"Ukraine","city":"Kharkiv","latitude":50,"longitude":36.25,"isp":"Xservers","hosts":[{"hostname":"ua1.wg.ivpn.net","host":"176.103.57.129","public_key":"mIxEzfjZ2wV6jJVj30w38ECd2LSH4bw/HLMnM2ICHiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26301}]},{"gateway":"fi.wg.ivpn.net","country_code":"FI","country":"Finland","city":"Helsinki","latitude":60.1756,"longitude":24.9341,"isp":"Creanova","hosts":[{"hostname":"fi1.wg.ivpn.net","host":"194.34.134.63","public_key":"mIxEzfjZ2wV6jJVj30w38ECd2LSH4bw/HLMnM2ICHiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26001}]},{"gateway":"us-az.wg.ivpn.net","country_code":"US","country":"United States","city":"Phoenix, AZ","latitude":33.5722,"longitude":-112.0891,"isp":"M247","hosts":[{"hostname":"us-az1.wg.ivpn.net","host":"193.37.254.133","public_key":"Ts4MGazxpxL9rrYbERjgxa+kCEX85ou9gHoaJvDsRiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26401}]},{"gateway":"us-nv.wg.ivpn.net","country_code":"US","country":"United States","city":"Las Vegas, NV","latitude":36.2333,"longitude":-115.2654,"isp":"M247","hosts":[{"hostname":"us-nv1.wg.ivpn.net","host":"185.242.5.37","public_key":"PRpvAZyoNWNm/KHlqafjtYoZtn1PkIPylUE4WbuYmgM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26501}]},{"gateway":"au-nsw.wg.ivpn.net","country_code":"AU","country":"Australia","city":"Sydney","latitude":-33.92,"longitude":151.1852,"isp":"M247","hosts":[{"hostname":"au-nsw1.wg.ivpn.net","host":"46.102.153.246","public_key":"KmSrG48t5xw9CJCPlYLBG3JnmiY0CnUgyRM5TUEwZhM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26601},{"hostname":"au-nsw2.wg.ivpn.net","host":"146.70.78.75","public_key":"q+wbp7GjiTszp5G16rNpGCqxkL0qSY3CH4pcgD6UsVQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27801}]},{"gateway":"br.wg.ivpn.net","country_code":"BR","country":"Brazil","city":"Franca","latitude":-20.53,"longitude":-47.39,"isp":"Qnax","hosts":[{"hostname":"br1.wg.ivpn.net","host":"45.162.229.133","public_key":"eN1f15S3YzRyYCALiPGRQcjkQO9xntcdqPhJJ6TOymc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26701}]},{"gateway":"rs.wg.ivpn.net","country_code":"RS","country":"Serbia","city":"Belgrade","latitude":44.8186,"longitude":20.468,"isp":"M247","hosts":[{"hostname":"rs1.wg.ivpn.net","host":"141.98.103.253","public_key":"xLN/lpQThQ3z3tvYf7VqdAsRL/nton1Vhv2kCZlQtWE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26801}]},{"gateway":"gb-man.wg.ivpn.net","country_code":"GB","country":"United Kingdom","city":"Manchester","latitude":53.5004,"longitude":-2.248,"isp":"M247","hosts":[{"hostname":"gb-man1.wg.ivpn.net","host":"89.238.141.231","public_key":"+hf4DYilNEIjTdSOuCNcWdqVyaRoxGzXw7wvNl7f7Rg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26901}]},{"gateway":"pt.wg.ivpn.net","country_code":"PT","country":"Portugal","city":"Lisbon","latitude":38.7227,"longitude":-9.1449,"isp":"Hostwebis","hosts":[{"hostname":"pt1.wg.ivpn.net","host":"94.46.175.113","public_key":"nMnA82YVrvEK80GVoY/0Z9McWeqjcLzuMYSL+86j5nU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27101}]},{"gateway":"lu.wg.ivpn.net","country_code":"LU","country":"Luxembourg","city":"Luxembourg","latitude":49.6117,"longitude":6.13,"isp":"Evoluso","hosts":[{"hostname":"lu1.wg.ivpn.net","host":"92.223.89.57","public_key":"hUS1OAFLGwpba8+oc5mifYtohZt/RTro5dMyYBLYHjI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27201}]},{"gateway":"il.wg.ivpn.net","country_code":"IL","country":"Israel","city":"Holon, Tel Aviv","latitude":32.08,"longitude":34.77,"isp":"HQServ","hosts":[{"hostname":"il01.wg.ivpn.net","host":"185.191.207.197","public_key":"HR9gAjpxXU3YVt6kehBw5n8yVYVE0iIgJdc4HTqOzEE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27301}]},{"gateway":"us-va.wg.ivpn.net","country_code":"US","country":"United States","city":"Ashburn, VA","latitude":39.0437,"longitude":-77.4875,"isp":"Datapacket","hosts":[{"hostname":"us-va1.wg.ivpn.net","host":"37.19.206.106","public_key":"ZCnZK6U+cRuP/WgzIDb/P6UG2rX/KyCRd5vJ1hAbr2E=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27701}]},{"gateway":"us-wa.wg.ivpn.net","country_code":"US","country":"United States","city":"Seattle, WA","latitude":47.6211,"longitude":-122.3244,"isp":"Tzulo","hosts":[{"hostname":"us-wa2.wg.ivpn.net","host":"198.44.131.4","public_key":"VcrOOozBUCIURU0AnqMAE7AkMmC7Qrp+j/PzPbgbalU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27801}]}],"openvpn":[{"gateway":"us-ca.gw.ivpn.net","country_code":"US","country":"United States","city":"Los Angeles, CA","latitude":34.1139,"longitude":-118.4068,"isp":"Quadranet","hosts":[{"hostname":"us-ca1.gw.ivpn.net","host":"173.254.196.58","multihop_port":22201},{"hostname":"us-ca2.gw.ivpn.net","host":"69.12.80.146","multihop_port":22401},{"hostname":"us-ca3.gw.ivpn.net","host":"198.54.129.99","multihop_port":21301},{"hostname":"us-ca4.gw.ivpn.net","host":"173.254.204.202","multihop_port":21901}]},{"gateway":"ro.gw.ivpn.net","country_code":"RO","country":"Romania","city":"Bucharest","latitude":44.4334,"longitude":26.0999,"isp":"M247","hosts":[{"hostname":"ro1.gw.ivpn.net","host":"37.120.206.50","multihop_port":22301}]},{"gateway":"de.gw.ivpn.net","country_code":"DE","country":"Germany","city":"Frankfurt","latitude":50.1,"longitude":8.675,"isp":"Leaseweb","hosts":[{"hostname":"de1.gw.ivpn.net","host":"178.162.222.40","multihop_port":23001},{"hostname":"de2.gw.ivpn.net","host":"178.162.211.114","multihop_port":22001}]},{"gateway":"nl.gw.ivpn.net","country_code":"NL","country":"Netherlands","city":"Amsterdam","latitude":52.35,"longitude":4.9166,"isp":"Leaseweb","hosts":[{"hostname":"nl4.gw.ivpn.net","host":"95.211.172.95","multihop_port":23201},{"hostname":"nl3.gw.ivpn.net","host":"95.211.172.68","multihop_port":23101},{"hostname":"nl6.gw.ivpn.net","host":"95.211.187.228","multihop_port":24101},{"hostname":"nl5.gw.ivpn.net","host":"95.211.187.222","multihop_port":23901},{"hostname":"nl7.gw.ivpn.net","host":"95.211.95.22","multihop_port":22501},{"hostname":"nl8.gw.ivpn.net","host":"95.211.172.18","multihop_port":22801}]},{"gateway":"fr.gw.ivpn.net","country_code":"FR","country":"France","city":"Paris","latitude":48.8667,"longitude":2.3333,"isp":"Datapacket","hosts":[{"hostname":"fr1.gw.ivpn.net","host":"185.246.211.179","multihop_port":23401}]},{"gateway":"is.gw.ivpn.net","country_code":"IS","country":"Iceland","city":"Reykjavik","latitude":64.15,"longitude":-21.95,"isp":"Advania","hosts":[{"hostname":"is1.gw.ivpn.net","host":"82.221.107.178","multihop_port":23501}]},{"gateway":"hk.gw.ivpn.net","country_code":"HK","country":"Hong Kong","city":"Hong Kong","latitude":22.305,"longitude":114.185,"isp":"Leaseweb","hosts":[{"hostname":"hk1.gw.ivpn.net","host":"209.58.189.163","multihop_port":23301},{"hostname":"hk2.gw.ivpn.net","host":"209.58.188.13","multihop_port":27501}]},{"gateway":"us-tx.gw.ivpn.net","country_code":"US","country":"United States","city":"Dallas, TX","latitude":32.7936,"longitude":-96.7662,"isp":"Quadranet","hosts":[{"hostname":"us-tx1.gw.ivpn.net","host":"96.44.189.194","multihop_port":21001},{"hostname":"us-tx2.gw.ivpn.net","host":"96.44.142.74","multihop_port":25001}]},{"gateway":"gb.gw.ivpn.net","country_code":"GB","country":"United Kingdom","city":"London","latitude":51.5,"longitude":-0.1167,"isp":"Datapacket","hosts":[{"hostname":"gb2.gw.ivpn.net","host":"185.59.221.88","multihop_port":24201},{"hostname":"gb1.gw.ivpn.net","host":"185.59.221.133","multihop_port":20801}]},{"gateway":"us-ut.gw.ivpn.net","country_code":"US","country":"United States","city":"Salt Lake City, UT","latitude":40.7774,"longitude":-111.93,"isp":"100TB","hosts":[{"hostname":"us-ut1.gw.ivpn.net","host":"198.105.216.28","multihop_port":24401}]},{"gateway":"it.gw.ivpn.net","country_code":"IT","country":"Italy","city":"Milan","latitude":45.47,"longitude":9.205,"isp":"SEFlow","hosts":[{"hostname":"it1.gw.ivpn.net","host":"158.58.172.73","multihop_port":24301}]},{"gateway":"se.gw.ivpn.net","country_code":"SE","country":"Sweden","city":"Stockholm","latitude":59.3508,"longitude":18.0973,"isp":"GleSyS","hosts":[{"hostname":"se1.gw.ivpn.net","host":"80.67.10.138","multihop_port":24001}]},{"gateway":"us-ga.gw.ivpn.net","country_code":"US","country":"United States","city":"Atlanta, GA","latitude":33.7627,"longitude":-84.4225,"isp":"Quadranet","hosts":[{"hostname":"us-ga1.gw.ivpn.net","host":"104.129.24.146","multihop_port":24501},{"hostname":"us-ga2.gw.ivpn.net","host":"107.150.22.74","multihop_port":24810}]},{"gateway":"us-fl.gw.ivpn.net","country_code":"US","country":"United States","city":"Miami, FL","latitude":25.7839,"longitude":-80.2102,"isp":"Quadranet","hosts":[{"hostname":"us-fl1.gw.ivpn.net","host":"173.44.49.90","multihop_port":24601}]},{"gateway":"ca.gw.ivpn.net","country_code":"CA","country":"Canada","city":"Toronto","latitude":43.7,"longitude":-79.42,"isp":"Amanah","hosts":[{"hostname":"ca2.gw.ivpn.net","host":"172.86.186.170","multihop_port":22101},{"hostname":"ca1.gw.ivpn.net","host":"104.254.90.178","multihop_port":23801}]},{"gateway":"ch.gw.ivpn.net","country_code":"CH","country":"Switzerland","city":"Zurich","latitude":47.38,"longitude":8.55,"isp":"Privatelayer","hosts":[{"hostname":"ch3.gw.ivpn.net","host":"141.255.166.194","multihop_port":22901},{"hostname":"ch1.gw.ivpn.net","host":"185.212.170.138","multihop_port":23601}]},{"gateway":"us-il.gw.ivpn.net","country_code":"US","country":"United States","city":"Chicago, IL","latitude":41.8373,"longitude":-87.6862,"isp":"Quadranet","hosts":[{"hostname":"us-il1.gw.ivpn.net","host":"107.150.28.82","multihop_port":21401},{"hostname":"us-il2.gw.ivpn.net","host":"72.11.137.146","multihop_port":24901}]},{"gateway":"us-nj.gw.ivpn.net","country_code":"US","country":"United States","city":"New Jersey, NJ","latitude":40.737764,"longitude":-74.151747,"isp":"Quadranet","hosts":[{"hostname":"us-nj3.gw.ivpn.net","host":"23.226.128.18","multihop_port":21610},{"hostname":"us-nj4.gw.ivpn.net","host":"194.36.111.50","multihop_port":27401}]},{"gateway":"es.gw.ivpn.net","country_code":"ES","country":"Spain","city":"Madrid","latitude":40.4,"longitude":-3.6834,"isp":"Datapacket","hosts":[{"hostname":"es1.gw.ivpn.net","host":"185.93.3.193","multihop_port":21501}]},{"gateway":"us-ny.gw.ivpn.net","country_code":"US","country":"United States","city":"New York, NY","latitude":40.6943,"longitude":-73.9249,"isp":"M247","hosts":[{"hostname":"us-ny2.gw.ivpn.net","host":"212.103.48.194","multihop_port":21801},{"hostname":"us-ny3.gw.ivpn.net","host":"89.187.178.144","multihop_port":27601}]},{"gateway":"pl.gw.ivpn.net","country_code":"PL","country":"Poland","city":"Warsaw","latitude":52.25,"longitude":21,"isp":"Datapacket","hosts":[{"hostname":"pl1.gw.ivpn.net","host":"185.246.208.86","multihop_port":25101}]},{"gateway":"cz.gw.ivpn.net","country_code":"CZ","country":"Czech Republic","city":"Prague","latitude":50.0833,"longitude":14.466,"isp":"Datapacket","hosts":[{"hostname":"cz1.gw.ivpn.net","host":"195.181.160.167","multihop_port":25201}]},{"gateway":"no.gw.ivpn.net","country_code":"NO","country":"Norway","city":"Oslo","latitude":59.9167,"longitude":10.75,"isp":"Servetheworld","hosts":[{"hostname":"no1.gw.ivpn.net","host":"194.242.10.150","multihop_port":25301}]},{"gateway":"hu.gw.ivpn.net","country_code":"HU","country":"Hungary","city":"Budapest","latitude":47.5,"longitude":19.0833,"isp":"M247","hosts":[{"hostname":"hu1.gw.ivpn.net","host":"185.189.114.186","multihop_port":25401}]},{"gateway":"dk.gw.ivpn.net","country_code":"DK","country":"Denmark","city":"Copenhagen","latitude":55.6786,"longitude":12.5635,"isp":"M247","hosts":[{"hostname":"dk1.gw.ivpn.net","host":"185.245.84.226","multihop_port":25501}]},{"gateway":"at.gw.ivpn.net","country_code":"AT","country":"Austria","city":"Vienna","latitude":48.2,"longitude":16.3666,"isp":"M247","hosts":[{"hostname":"at1.gw.ivpn.net","host":"185.244.212.66","multihop_port":25601}]},{"gateway":"be.gw.ivpn.net","country_code":"BE","country":"Belgium","city":"Brussels","latitude":50.8333,"longitude":4.3333,"isp":"M247","hosts":[{"hostname":"be1.gw.ivpn.net","host":"194.187.251.10","multihop_port":25701}]},{"gateway":"bg.gw.ivpn.net","country_code":"BG","country":"Bulgaria","city":"Sofia","latitude":42.6833,"longitude":23.3167,"isp":"M247","hosts":[{"hostname":"bg1.gw.ivpn.net","host":"82.102.23.18","multihop_port":25901}]},{"gateway":"sk.gw.ivpn.net","country_code":"SK","country":"Slovakia","city":"Bratislava","latitude":48.15,"longitude":17.117,"isp":"M247","hosts":[{"hostname":"sk1.gw.ivpn.net","host":"185.245.85.250","multihop_port":25801}]},{"gateway":"jp.gw.ivpn.net","country_code":"JP","country":"Japan","city":"Tokyo","latitude":35.685,"longitude":139.7514,"isp":"M247","hosts":[{"hostname":"jp1.gw.ivpn.net","host":"91.207.174.234","multihop_port":26201}]},{"gateway":"sg.gw.ivpn.net","country_code":"SG","country":"Singapore","city":"Singapore","latitude":1.293,"longitude":103.8558,"isp":"M247","hosts":[{"hostname":"sg1.gw.ivpn.net","host":"185.128.24.186","multihop_port":26101}]},{"gateway":"ua.gw.ivpn.net","country_code":"UA","country":"Ukraine","city":"Kharkiv","latitude":50,"longitude":36.25,"isp":"Xservers","hosts":[{"hostname":"ua1.gw.ivpn.net","host":"176.103.58.123","multihop_port":26301}]},{"gateway":"fi.gw.ivpn.net","country_code":"FI","country":"Finland","city":"Helsinki","latitude":60.1756,"longitude":24.9341,"isp":"Creanova","hosts":[{"hostname":"fi1.gw.ivpn.net","host":"185.112.82.12","multihop_port":26001}]},{"gateway":"us-az.gw.ivpn.net","country_code":"US","country":"United States","city":"Phoenix, AZ","latitude":33.5722,"longitude":-112.0891,"isp":"M247","hosts":[{"hostname":"us-az1.gw.ivpn.net","host":"193.37.254.130","multihop_port":26401}]},{"gateway":"us-nv.gw.ivpn.net","country_code":"US","country":"United States","city":"Las Vegas, NV","latitude":36.2333,"longitude":-115.2654,"isp":"M247","hosts":[{"hostname":"us-nv1.gw.ivpn.net","host":"185.242.5.34","multihop_port":26501}]},{"gateway":"au-nsw.gw.ivpn.net","country_code":"AU","country":"Australia","city":"Sydney","latitude":-33.92,"longitude":151.1852,"isp":"M247","hosts":[{"hostname":"au-nsw1.gw.ivpn.net","host":"46.102.153.242","multihop_port":26601},{"hostname":"au-nsw2.gw.ivpn.net","host":"146.70.78.74","multihop_port":27801}]},{"gateway":"br.gw.ivpn.net","country_code":"BR","country":"Brazil","city":"Franca","latitude":-20.53,"longitude":-47.39,"isp":"Qnax","hosts":[{"hostname":"br1.gw.ivpn.net","host":"45.162.229.130","multihop_port":26701}]},{"gateway":"rs.gw.ivpn.net","country_code":"RS","country":"Serbia","city":"Belgrade","latitude":44.8186,"longitude":20.468,"isp":"M247","hosts":[{"hostname":"rs1.gw.ivpn.net","host":"141.98.103.250","multihop_port":26801}]},{"gateway":"gb-man.gw.ivpn.net","country_code":"GB","country":"United Kingdom","city":"Manchester","latitude":53.5004,"longitude":-2.248,"isp":"M247","hosts":[{"hostname":"gb-man1.gw.ivpn.net","host":"89.238.141.228","multihop_port":26901}]},{"gateway":"ca-qc.gw.ivpn.net","country_code":"CA","country":"Canada","city":"Montreal","latitude":45.5,"longitude":-73.5833,"isp":"M247","hosts":[{"hostname":"ca-qc1.gw.ivpn.net","host":"87.101.92.26","multihop_port":27001}]},{"gateway":"pt.gw.ivpn.net","country_code":"PT","country":"Portugal","city":"Lisbon","latitude":38.7227,"longitude":-9.1449,"isp":"Hostwebis","hosts":[{"hostname":"pt1.gw.ivpn.net","host":"94.46.175.112","multihop_port":27101}]},{"gateway":"lu.gw.ivpn.net","country_code":"LU","country":"Luxembourg","city":"Luxembourg","latitude":49.6117,"longitude":6.13,"isp":"Evoluso","hosts":[{"hostname":"lu1.gw.ivpn.net","host":"92.223.89.53","multihop_port":27201}]},{"gateway":"il.gw.ivpn.net","country_code":"IL","country":"Israel","city":"Holon, Tel Aviv","latitude":32.08,"longitude":34.77,"isp":"HQServ","hosts":[{"hostname":"il1.gw.ivpn.net","host":"185.191.207.194","multihop_port":27301}]},{"gateway":"us-va.gw.ivpn.net","country_code":"US","country":"United States","city":"Ashburn, VA","latitude":39.0437,"longitude":-77.4875,"isp":"Datapacket","hosts":[{"hostname":"us-va1.gw.ivpn.net","host":"37.19.206.105","multihop_port":27701}]},{"gateway":"us-wa.gw.ivpn.net","country_code":"US","country":"United States","city":"Seattle, WA","latitude":47.6211,"longitude":-122.3244,"isp":"Tzulo","hosts":[{"hostname":"us-wa2.gw.ivpn.net","host":"198.44.131.3","multihop_port":27801}]}],"config":{"antitracker":{"default":{"ip":"10.0.254.2","multihop-ip":"10.0.254.102"},"hardcore":{"ip":"10.0.254.3","multihop-ip":"10.0.254.103"}},"api":{"ips":["198.50.177.220","149.56.162.156","198.50.177.222","149.56.162.159","198.50.177.223"],"ipv6s":["2607:5300:203:1735::8888","2607:5300:203:1735::8","2607:5300:203:1735:6580:7300:0:aaaa"]}}} From d8326d6fe871a3bc6f8614522a3f1b29975b0f60 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Tue, 7 Jun 2022 14:03:03 +0200 Subject: [PATCH 010/121] feat(settings): parse ports in VPNServerList.swift --- IVPNClient/Models/VPNServerList.swift | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/IVPNClient/Models/VPNServerList.swift b/IVPNClient/Models/VPNServerList.swift index 0328e880d..20e34ba57 100644 --- a/IVPNClient/Models/VPNServerList.swift +++ b/IVPNClient/Models/VPNServerList.swift @@ -31,6 +31,7 @@ class VPNServerList { // MARK: - Properties - open private(set) var servers: [VPNServer] + open private(set) var ports: [ConnectionSettings] var filteredFastestServers: [VPNServer] { var serversArray = getServers() @@ -84,6 +85,7 @@ class VPNServerList { // and optionally save it to the cache file for later access init(withJSONData data: Data?, storeInCache: Bool = false) { servers = [VPNServer]() + ports = [ConnectionSettings]() if let jsonData = data { var serversList: [[String: Any]]? @@ -140,6 +142,27 @@ class VPNServerList { UserDefaults.shared.set(ips, forKey: UserDefaults.Key.ipv6HostNames) } } + + if let portsObj = config["ports"] as? [String: Any] { + ports.append(ConnectionSettings.ipsec) + + if let openvpn = portsObj["openvpn"] as? [[String: Any]] { + for port in openvpn { + let portNumber = port["port"] as? Int ?? 0 + if port["type"] as? String == "TCP" { + ports.append(ConnectionSettings.openvpn(.tcp, portNumber)) + } else { + ports.append(ConnectionSettings.openvpn(.udp, portNumber)) + } + } + } + if let openvpn = portsObj["wireguard"] as? [[String: Any]] { + for port in openvpn { + let portNumber = port["port"] as? Int ?? 0 + ports.append(ConnectionSettings.wireguard(.udp, portNumber)) + } + } + } } } } From 96159f08bab3a8966d6a13dcffb744179b101b45 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Tue, 7 Jun 2022 14:42:36 +0200 Subject: [PATCH 011/121] refactor: update getSavedProtocol method in ConnectionSettings.swift --- IVPNClient/Enums/ConnectionSettings.swift | 33 ++++++++++++++++--- IVPNClient/Models/Settings.swift | 4 --- .../Extensions/UserDefaults+Ext.swift | 2 -- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/IVPNClient/Enums/ConnectionSettings.swift b/IVPNClient/Enums/ConnectionSettings.swift index 401f7b7a7..fad6859eb 100644 --- a/IVPNClient/Enums/ConnectionSettings.swift +++ b/IVPNClient/Enums/ConnectionSettings.swift @@ -146,11 +146,36 @@ enum ConnectionSettings { } static func getSavedProtocol() -> ConnectionSettings { - let protocolIndex = UserDefaults.standard.integer(forKey: UserDefaults.Key.selectedProtocolIndex) + var name = "" + var proto = "" + var port = 0 + let components = UserDefaults.standard.string(forKey: UserDefaults.Key.selectedProtocol)?.components(separatedBy: "-") - if Config.supportedProtocols.indices.contains(protocolIndex) && UserDefaults.standard.object(forKey: UserDefaults.Key.selectedProtocolIndex) != nil || !(KeyChain.sessionToken ?? "").isEmpty { - return Config.supportedProtocols[protocolIndex] - } else { + if let protocolName = components?[0] { + name = protocolName + } + if let protocolProto = components?[1] { + proto = protocolProto + } + if let protocolPort = components?[2] { + port = Int(protocolPort) ?? 0 + } + + switch name { + case "ikev2": + return .ipsec + case "openvpn": + switch proto { + case "tcp": + return .openvpn(.tcp, port) + case "udp": + return .openvpn(.udp, port) + default: + return Config.defaultProtocol + } + case "wireguard": + return .wireguard(.udp, port) + default: return Config.defaultProtocol } } diff --git a/IVPNClient/Models/Settings.swift b/IVPNClient/Models/Settings.swift index 22e2f0077..16b83783a 100644 --- a/IVPNClient/Models/Settings.swift +++ b/IVPNClient/Models/Settings.swift @@ -118,10 +118,6 @@ class Settings { } func saveConnectionProtocol() { - if let index = Config.supportedProtocols.firstIndex(where: {$0 == connectionProtocol}) { - UserDefaults.standard.set(index, forKey: UserDefaults.Key.selectedProtocolIndex) - } - UserDefaults.standard.set(connectionProtocol.formatSave(), forKey: UserDefaults.Key.selectedProtocol) } diff --git a/IVPNClient/Utilities/Extensions/UserDefaults+Ext.swift b/IVPNClient/Utilities/Extensions/UserDefaults+Ext.swift index 7e444e231..a87393cca 100644 --- a/IVPNClient/Utilities/Extensions/UserDefaults+Ext.swift +++ b/IVPNClient/Utilities/Extensions/UserDefaults+Ext.swift @@ -60,7 +60,6 @@ extension UserDefaults { static let keepAlive = "keepAlive" static let serversSort = "serversSort" static let notAskToReconnect = "notAskToReconnect" - static let selectedProtocolIndex = "selectedProtocolIndex" static let selectedProtocol = "selectedProtocol" static let resolvedDNSInsideVPN = "resolvedDNSInsideVPN" static let resolvedDNSOutsideVPN = "resolvedDNSOutsideVPN" @@ -240,7 +239,6 @@ extension UserDefaults { standard.removeObject(forKey: Key.selectedServerFastest) standard.removeObject(forKey: Key.fastestServerConfigured) standard.removeObject(forKey: Key.showIPv4Servers) - standard.removeObject(forKey: Key.selectedProtocolIndex) standard.removeObject(forKey: Key.selectedProtocol) standard.synchronize() } From a1c79f48439089db4f5ce02452d933e8d6deb02b Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Tue, 7 Jun 2022 14:43:37 +0200 Subject: [PATCH 012/121] refactor: update supportedProtocolsFormat method --- IVPNClient/Enums/ConnectionSettings.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IVPNClient/Enums/ConnectionSettings.swift b/IVPNClient/Enums/ConnectionSettings.swift index fad6859eb..c58a78020 100644 --- a/IVPNClient/Enums/ConnectionSettings.swift +++ b/IVPNClient/Enums/ConnectionSettings.swift @@ -137,7 +137,7 @@ enum ConnectionSettings { } func supportedProtocolsFormat(protocols: [ConnectionSettings]) -> [String] { - let protocols = supportedProtocols(protocols: Config.supportedProtocols) + let protocols = supportedProtocols(protocols: protocols) return protocols.map({ $0.formatProtocol() }) } From e2c5fb77db6d00db5aeee7c4f348af244ecdd7f8 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Tue, 7 Jun 2022 21:28:24 +0200 Subject: [PATCH 013/121] refactor: update getSavedProtocol method --- IVPNClient/Enums/ConnectionSettings.swift | 6 +++--- .../Scenes/ViewControllers/ProtocolViewController.swift | 5 +++-- IVPNClient/Utilities/Extensions/Array+Ext.swift | 8 ++++++++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/IVPNClient/Enums/ConnectionSettings.swift b/IVPNClient/Enums/ConnectionSettings.swift index c58a78020..ea9723f61 100644 --- a/IVPNClient/Enums/ConnectionSettings.swift +++ b/IVPNClient/Enums/ConnectionSettings.swift @@ -151,13 +151,13 @@ enum ConnectionSettings { var port = 0 let components = UserDefaults.standard.string(forKey: UserDefaults.Key.selectedProtocol)?.components(separatedBy: "-") - if let protocolName = components?[0] { + if let protocolName = components?[safeIndex: 0] { name = protocolName } - if let protocolProto = components?[1] { + if let protocolProto = components?[safeIndex: 1] { proto = protocolProto } - if let protocolPort = components?[2] { + if let protocolPort = components?[safeIndex: 2] { port = Int(protocolPort) ?? 0 } diff --git a/IVPNClient/Scenes/ViewControllers/ProtocolViewController.swift b/IVPNClient/Scenes/ViewControllers/ProtocolViewController.swift index b76622fe3..eeb513cad 100644 --- a/IVPNClient/Scenes/ViewControllers/ProtocolViewController.swift +++ b/IVPNClient/Scenes/ViewControllers/ProtocolViewController.swift @@ -138,9 +138,10 @@ class ProtocolViewController: UITableViewController { } func selectPreferredProtocolAndPort(connectionProtocol: ConnectionSettings) { + let ports = Application.shared.serverList.ports let selected = Application.shared.settings.connectionProtocol.formatProtocol() - let protocols = connectionProtocol.supportedProtocols(protocols: Config.supportedProtocols) - let actions = connectionProtocol.supportedProtocolsFormat(protocols: Config.supportedProtocols) + let protocols = connectionProtocol.supportedProtocols(protocols: ports) + let actions = connectionProtocol.supportedProtocolsFormat(protocols: ports) showActionSheet(image: nil, selected: selected, largeText: true, centered: true, title: "Preferred protocol & port", actions: actions, sourceView: view) { [self] index in guard index > -1 else { diff --git a/IVPNClient/Utilities/Extensions/Array+Ext.swift b/IVPNClient/Utilities/Extensions/Array+Ext.swift index 8fee669ec..3f1602a93 100644 --- a/IVPNClient/Utilities/Extensions/Array+Ext.swift +++ b/IVPNClient/Utilities/Extensions/Array+Ext.swift @@ -42,4 +42,12 @@ extension Array where Element: Equatable { insert(remove(at: index), at: newIndex) } + public subscript(safeIndex index: Int) -> Element? { + guard index >= 0, index < endIndex else { + return nil + } + + return self[index] + } + } From e18041c6c66ec861b7796328ca465e3b62c3c264 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Wed, 8 Jun 2022 09:09:00 +0200 Subject: [PATCH 014/121] refactor: update formatMultiHop method --- IVPNClient/Enums/ConnectionSettings.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IVPNClient/Enums/ConnectionSettings.swift b/IVPNClient/Enums/ConnectionSettings.swift index ea9723f61..7410b3d2a 100644 --- a/IVPNClient/Enums/ConnectionSettings.swift +++ b/IVPNClient/Enums/ConnectionSettings.swift @@ -56,7 +56,7 @@ enum ConnectionSettings { case .udp: return "OpenVPN, UDP" } - case .wireguard(_, _): + case .wireguard: return "WireGuard, UDP" } } From c19435942fab1cb180b3dc9026157da68cd5e3ad Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Wed, 8 Jun 2022 09:15:43 +0200 Subject: [PATCH 015/121] refactor: remove supportedProtocols in Config.swift --- IVPNClient/Config/Config.swift | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/IVPNClient/Config/Config.swift b/IVPNClient/Config/Config.swift index a3fd10fbd..3548fd594 100644 --- a/IVPNClient/Config/Config.swift +++ b/IVPNClient/Config/Config.swift @@ -65,29 +65,6 @@ struct Config { static let stableVPNStatusInterval: TimeInterval = 0.5 static let defaultProtocol = ConnectionSettings.wireguard(.udp, 2049) - static let supportedProtocols = [ - ConnectionSettings.ipsec, - ConnectionSettings.openvpn(.udp, 2049), - ConnectionSettings.openvpn(.udp, 2050), - ConnectionSettings.openvpn(.udp, 53), - // ConnectionSettings.openvpn(.udp, 80), - // ConnectionSettings.openvpn(.udp, 443), - ConnectionSettings.openvpn(.udp, 1194), - ConnectionSettings.openvpn(.tcp, 443), - ConnectionSettings.openvpn(.tcp, 1443), - ConnectionSettings.openvpn(.tcp, 80), - ConnectionSettings.wireguard(.udp, 2049), - ConnectionSettings.wireguard(.udp, 2050), - ConnectionSettings.wireguard(.udp, 53), - // ConnectionSettings.wireguard(.udp, 80), - // ConnectionSettings.wireguard(.udp, 443), - ConnectionSettings.wireguard(.udp, 1194), - ConnectionSettings.wireguard(.udp, 30587), - ConnectionSettings.wireguard(.udp, 41893), - ConnectionSettings.wireguard(.udp, 48574), - ConnectionSettings.wireguard(.udp, 58237) - ] - static let supportedProtocolTypes = [ ConnectionSettings.wireguard(.udp, 2049), ConnectionSettings.ipsec, From c8e277d08688e36bbd92639209d871a0e742e760 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Wed, 29 Jun 2022 22:00:19 +0200 Subject: [PATCH 016/121] feat(settings): parse port as string in VPNServerList.swift --- IVPNClient/Models/VPNServerList.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/IVPNClient/Models/VPNServerList.swift b/IVPNClient/Models/VPNServerList.swift index 20e34ba57..4b8a24228 100644 --- a/IVPNClient/Models/VPNServerList.swift +++ b/IVPNClient/Models/VPNServerList.swift @@ -148,11 +148,11 @@ class VPNServerList { if let openvpn = portsObj["openvpn"] as? [[String: Any]] { for port in openvpn { - let portNumber = port["port"] as? Int ?? 0 + let portNumber = port["port"] as? String ?? "0" if port["type"] as? String == "TCP" { - ports.append(ConnectionSettings.openvpn(.tcp, portNumber)) + ports.append(ConnectionSettings.openvpn(.tcp, Int(portNumber) ?? 0)) } else { - ports.append(ConnectionSettings.openvpn(.udp, portNumber)) + ports.append(ConnectionSettings.openvpn(.udp, Int(portNumber) ?? 0)) } } } From ffe83eda33bbf6f7ffd0b6854a5f8c9b897fa442 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Wed, 29 Jun 2022 22:51:49 +0200 Subject: [PATCH 017/121] chore: update servers.json --- IVPNClient/Config/servers.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IVPNClient/Config/servers.json b/IVPNClient/Config/servers.json index a89b03eea..5745ff157 100644 --- a/IVPNClient/Config/servers.json +++ b/IVPNClient/Config/servers.json @@ -1 +1 @@ -{"wireguard":[{"gateway":"us-tx.wg.ivpn.net","country_code":"US","country":"United States","city":"Dallas, TX","latitude":32.7936,"longitude":-96.7662,"isp":"Quadranet","hosts":[{"hostname":"us-tx1.wg.ivpn.net","host":"198.55.124.114","public_key":"JPT1veXLmasj2uQDstX24mpR7VWD+GmV8JDkidkz91Q=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21010},{"hostname":"us-tx01.wg.ivpn.net","host":"96.44.189.197","public_key":"LvWf548mFddi8PTrIGL6uD1/l85LU8z0Rc8tpvw2Vls=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21001},{"hostname":"us-tx2.wg.ivpn.net","host":"96.44.142.77","public_key":"om8hOGUcEvoOhHvJZoBHxNF4jxY/+Ml9Iy1WOSC/pFo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25001}]},{"gateway":"nl.wg.ivpn.net","country_code":"NL","country":"Netherlands","city":"Amsterdam","latitude":52.35,"longitude":4.9166,"isp":"Datapacket","hosts":[{"hostname":"nl1.wg.ivpn.net","host":"185.102.218.104","public_key":"AsMT2FqpkZbjzWeDch6GwufF5odl259W/hIkGytVfWo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20301},{"hostname":"nl4.wg.ivpn.net","host":"95.211.95.19","public_key":"cVB66gPq5cZ9dfXY+e2pbsCyih5o1zk04l5c5VCsV1g=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23201},{"hostname":"nl3.wg.ivpn.net","host":"95.211.95.9","public_key":"XDU6Syq1DY82IMatsHV0x/TAtbLiRwh/SdFCXlEn40c=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23101},{"hostname":"nl6.wg.ivpn.net","host":"95.211.243.182","public_key":"hMWpqb3FEATHIbImPVWB/5z2nWIXghwpnJjevPY+1H0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24101},{"hostname":"nl5.wg.ivpn.net","host":"95.211.243.162","public_key":"NCagAawwRixI6Iw/NWiGD8lbjDNCl0aTICZKJtO/1HA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23901},{"hostname":"nl7.wg.ivpn.net","host":"95.211.172.105","public_key":"hQNYqtfOOAEz0IGshLx/TI9hUrfR9gIIkjVm4VsCbBM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22501},{"hostname":"nl8.wg.ivpn.net","host":"95.211.198.167","public_key":"/nY1/OhVhdHtbnU/s31zYUuPBH0pizv4DemW5KDOUkg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22801}]},{"gateway":"de.wg.ivpn.net","country_code":"DE","country":"Germany","city":"Frankfurt","latitude":50.1,"longitude":8.675,"isp":"Datapacket","hosts":[{"hostname":"de1.wg.ivpn.net","host":"185.102.219.26","public_key":"mS3/WpXjnMAMmXjSpd4nFzx9HSE3ubv2WyjpyH2REgs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23010},{"hostname":"de01.wg.ivpn.net","host":"178.162.212.24","public_key":"Sc5AUZieg0qX8kyCy9p0OHRES4n0CHtHHM+ZPyERFTc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23001},{"hostname":"de2.wg.ivpn.net","host":"37.58.60.151","public_key":"QhY3OtBf4FFafKtLO33e6k8JnAl8e6ktFcRUyLjCDVY=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22001}]},{"gateway":"us-il.wg.ivpn.net","country_code":"US","country":"United States","city":"Chicago, IL","latitude":41.8373,"longitude":-87.6862,"isp":"Datapacket","hosts":[{"hostname":"us-il1.wg.ivpn.net","host":"89.187.181.116","public_key":"hku9gjamhoii8OvxZgx+TdUDIkOAQYFu39qbav2AyUQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21410},{"hostname":"us-il01.wg.ivpn.net","host":"72.11.137.158","public_key":"Uy5a8JOqneAUY1dC5s9jubLnotbyIfBsLP2nZuzRbHs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21401},{"hostname":"us-il2.wg.ivpn.net","host":"72.11.137.148","public_key":"ANhVUMAQgStPVNRHW8mg0ZtN1YI1QHyXfNCO8+USNQQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24901}]},{"gateway":"us-ga.wg.ivpn.net","country_code":"US","country":"United States","city":"Atlanta, GA","latitude":33.7627,"longitude":-84.4225,"isp":"Datapacket","hosts":[{"hostname":"us-ga1.wg.ivpn.net","host":"185.93.0.212","public_key":"jD8h+pL5/d6fmYcTzl0lR8AWzQVN5XkwRFSmM/3NcDM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24510},{"hostname":"us-ga01.wg.ivpn.net","host":"104.129.24.149","public_key":"EJFl28aYpZKfmJqb1jxxTEnGx6kaH2USVrigpHKKXhs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24501},{"hostname":"us-ga2.wg.ivpn.net","host":"107.150.22.77","public_key":"hr2uQOEGCvGeDkoCQJ2dCI8dM8Iu5aKhb1PIvJ9q72E=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24810}]},{"gateway":"us-ca.wg.ivpn.net","country_code":"US","country":"United States","city":"Los Angeles, CA","latitude":34.1139,"longitude":-118.4068,"isp":"Datapacket","hosts":[{"hostname":"us-ca1.wg.ivpn.net","host":"185.180.13.41","public_key":"FGl78s9Ct6xNamQ2/CtAyXwGePrrU0kiZxfM27pm8XA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22210},{"hostname":"us-ca01.wg.ivpn.net","host":"216.144.236.44","public_key":"B+qXdkIuETpzI0bfhGUAHN4SU91Tjs6ItdFlu93S42I=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22201},{"hostname":"us-ca2.wg.ivpn.net","host":"216.144.236.68","public_key":"qv4Tupfon5NUSwzDpM8zPizSwJZn2h+9CqrufcyDOko=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22401},{"hostname":"us-ca3.wg.ivpn.net","host":"198.54.129.100","public_key":"J5+Bx84LxNPdWEhewOvBV/fGWiDluIBlAcr1QlJZil8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21301},{"hostname":"us-ca4.wg.ivpn.net","host":"216.144.237.83","public_key":"dYPXYr6HSRJPe3MhALwGWNtdEy1+EPE9Kqv7cTrUXk8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21901}]},{"gateway":"ca-qc.wg.ivpn.net","country_code":"CA","country":"Canada","city":"Montreal","latitude":45.5,"longitude":-73.5833,"isp":"M247","hosts":[{"hostname":"ca1.wg.ivpn.net","host":"37.120.130.58","public_key":"rg+GGDmjM4Vxo1hURvKmgm9yonb6qcoKbPCP/DNDBnI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23810},{"hostname":"ca-qc1.wg.ivpn.net","host":"87.101.92.29","public_key":"98JU1mdCR8vD1aNZg017/NjBeTjuuCKUaLw0zfz/CUE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27001}]},{"gateway":"gb.wg.ivpn.net","country_code":"GB","country":"United Kingdom","city":"London","latitude":51.5,"longitude":-0.1167,"isp":"M247","hosts":[{"hostname":"gb1.wg.ivpn.net","host":"81.92.202.114","public_key":"7+jos+Eg+hMEOQE4Std6OJ+WVnCcmbqS1/EbPwn9w3s=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20810},{"hostname":"gb2.wg.ivpn.net","host":"185.59.221.225","public_key":"x0BTRaxsdxAd58ZyU2YMX4bmuj+Eg+8/urT2F3Vs1n8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24201},{"hostname":"gb01.wg.ivpn.net","host":"185.59.221.140","public_key":"yKK5x+D17Jr3Q12T/UBaDjNVmNdZBsqpvTqH6YfsGHg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20801}]},{"gateway":"us-ny.wg.ivpn.net","country_code":"US","country":"United States","city":"New York, NY","latitude":40.6943,"longitude":-73.9249,"isp":"M247","hosts":[{"hostname":"us-ny1.wg.ivpn.net","host":"91.132.137.170","public_key":"6/tjvgb7HFl7UuvBSegolxa1zKr3iSlDrlCexCmhAGE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21210},{"hostname":"us-ny2.wg.ivpn.net","host":"212.103.48.195","public_key":"c7DwY2uT+6ulWAJ5u8qJNWHroA0qyJLcdNzf/f2kkhs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21801},{"hostname":"us-ny3.wg.ivpn.net","host":"89.187.178.145","public_key":"m5/Ssw9SN3WuE+yD/fAsH5G8iuI8TcDGEiZZnPgiMCc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27601}]},{"gateway":"se.wg.ivpn.net","country_code":"SE","country":"Sweden","city":"Stockholm","latitude":59.3508,"longitude":18.0973,"isp":"M247","hosts":[{"hostname":"se1.wg.ivpn.net","host":"37.120.153.226","public_key":"2n0nFE1g/+vQr2AOQPm9Igyiy0zh9uTTultvOOSkMRo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24010},{"hostname":"se01.wg.ivpn.net","host":"80.67.10.141","public_key":"u8VHnYEpoEjJWDAF9NAUkU6s810RnkMuhEfFD9U0cGo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24001}]},{"gateway":"sg.wg.ivpn.net","country_code":"SG","country":"Singapore","city":"Singapore","latitude":1.293,"longitude":103.8558,"isp":"M247","hosts":[{"hostname":"sg1.wg.ivpn.net","host":"37.120.151.122","public_key":"hSg0At4uwuIhmTy5UT4fRbi5AN6JO2ZWTuIvqd4nHCE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26110},{"hostname":"sg01.wg.ivpn.net","host":"185.128.24.189","public_key":"pWk0u1Xq8FHC+xpkN+C6yEKOTEanorR5zMCSfHlLzFw=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26101}]},{"gateway":"ch.wg.ivpn.net","country_code":"CH","country":"Switzerland","city":"Zurich","latitude":47.38,"longitude":8.55,"isp":"Privatelayer","hosts":[{"hostname":"ch1.wg.ivpn.net","host":"141.255.164.66","public_key":"jVZJ61i1xxkAfriDHpwvF/GDuTvZUqhwoWSjkOJvaUA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23610},{"hostname":"ch3.wg.ivpn.net","host":"141.255.166.198","public_key":"JBpgBKtqIneRuEga7mbP2PAk/e4HPRaC11H0A0+R3lA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22901},{"hostname":"ch01.wg.ivpn.net","host":"185.212.170.141","public_key":"dU7gLfcupYd37LW0q6cxC6PHMba+eUFAUOoU/ryXZkY=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23601}]},{"gateway":"it.wg.ivpn.net","country_code":"IT","country":"Italy","city":"Milan","latitude":45.47,"longitude":9.205,"isp":"M247","hosts":[{"hostname":"it1.wg.ivpn.net","host":"82.102.21.90","public_key":"Aj6b81yrDk7I913R+fuSW/NAmIl87N73vHgY5/WQY0Q=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24310},{"hostname":"it01.wg.ivpn.net","host":"158.58.172.89","public_key":"QTzR5R6jeDI/cQ0CXPIqOby9GR5nn+4Bcf4bK536Vy0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24301}]},{"gateway":"ro.wg.ivpn.net","country_code":"RO","country":"Romania","city":"Bucharest","latitude":44.4334,"longitude":26.0999,"isp":"M247","hosts":[{"hostname":"ro1.wg.ivpn.net","host":"37.120.206.53","public_key":"F2uQ57hysZTlw8WYELnyCw9Lga80wNYoYwkrrxyXKmw=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22301}]},{"gateway":"fr.wg.ivpn.net","country_code":"FR","country":"France","city":"Paris","latitude":48.8667,"longitude":2.3333,"isp":"Datapacket","hosts":[{"hostname":"fr1.wg.ivpn.net","host":"185.246.211.185","public_key":"g7BuMzj3r/noLiLR4qhQMcvU6GSIY8RGEnaYtdYsFX4=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23401}]},{"gateway":"is.wg.ivpn.net","country_code":"IS","country":"Iceland","city":"Reykjavik","latitude":64.15,"longitude":-21.95,"isp":"Advania","hosts":[{"hostname":"is1.wg.ivpn.net","host":"82.221.107.185","public_key":"nZZT6TlQ2dXlVe3P3B5ozEScHYMWH4JY4y3to8w5dz0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23501}]},{"gateway":"hk.wg.ivpn.net","country_code":"HK","country":"Hong Kong","city":"Hong Kong","latitude":22.305,"longitude":114.185,"isp":"Leaseweb","hosts":[{"hostname":"hk1.wg.ivpn.net","host":"209.58.189.105","public_key":"MbqqGy6TI2WVxHYdMa7X1LJoIEQNElhYXMGlMqtwtS0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23301},{"hostname":"hk2.wg.ivpn.net","host":"64.120.120.239","public_key":"kyolyq4cJydI3vQB2ESTIUAy2Fq0bpOf+Qe7GIq6XEA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27501}]},{"gateway":"us-ut.wg.ivpn.net","country_code":"US","country":"United States","city":"Salt Lake City, UT","latitude":40.7774,"longitude":-111.93,"isp":"100TB","hosts":[{"hostname":"us-ut1.wg.ivpn.net","host":"206.190.145.92","public_key":"KirI7bpxD186CuYiOqNHF+QUe6YmRYf6CN3pXWOJT2k=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24401}]},{"gateway":"us-fl.wg.ivpn.net","country_code":"US","country":"United States","city":"Miami, FL","latitude":25.7839,"longitude":-80.2102,"isp":"Quadranet","hosts":[{"hostname":"us-fl1.wg.ivpn.net","host":"173.44.49.93","public_key":"Rkzo9WgxJBiKyEbkZvqGWtOVh9Gk9Vd7wL49SHXdHig=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24601}]},{"gateway":"ca.wg.ivpn.net","country_code":"CA","country":"Canada","city":"Toronto","latitude":43.7,"longitude":-79.42,"isp":"Amanah","hosts":[{"hostname":"ca2.wg.ivpn.net","host":"172.86.186.173","public_key":"5qHV10ZbFgEGnF6wg9QpKeh1l6Di2JUG/5PdNaaoNW8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22101},{"hostname":"ca01.wg.ivpn.net","host":"104.254.90.181","public_key":"mdGnCZwinuOVGg46zsWnFhhenfFId6jht9GBTKB+xUA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23801}]},{"gateway":"us-nj.wg.ivpn.net","country_code":"US","country":"United States","city":"New Jersey, NJ","latitude":40.737764,"longitude":-74.151747,"isp":"Quadranet","hosts":[{"hostname":"us-nj3.wg.ivpn.net","host":"23.226.128.21","public_key":"AX7C1LO0ECUcHRYgX4/tIDYdR8npvfB/+pf4AfI3OHU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21610},{"hostname":"us-nj4.wg.ivpn.net","host":"194.36.111.54","public_key":"1Te4AfL1yKo2k4jzPALnRPfKE3YSzXKo4XIRHPz5FxI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27401}]},{"gateway":"es.wg.ivpn.net","country_code":"ES","country":"Spain","city":"Madrid","latitude":40.4,"longitude":-3.6834,"isp":"Datapacket","hosts":[{"hostname":"es1.wg.ivpn.net","host":"84.17.62.98","public_key":"w7umiArTtlJ4Pk6Ii9WX5VXK5vw/Qu+Z37/icKlIYWo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21501}]},{"gateway":"pl.wg.ivpn.net","country_code":"PL","country":"Poland","city":"Warsaw","latitude":52.25,"longitude":21,"isp":"Datapacket","hosts":[{"hostname":"pl1.wg.ivpn.net","host":"185.246.208.109","public_key":"1JDmF79rWj5C+kHp71AbdHne/yGaizWCd2bLfSFvYjo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25101}]},{"gateway":"cz.wg.ivpn.net","country_code":"CZ","country":"Czech Republic","city":"Prague","latitude":50.0833,"longitude":14.466,"isp":"Datapacket","hosts":[{"hostname":"cz1.wg.ivpn.net","host":"185.180.14.41","public_key":"gVbEq2cGRzwCSGPqT2oRSYYN+P6IK3uvvRffErASDSk=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25201}]},{"gateway":"no.wg.ivpn.net","country_code":"NO","country":"Norway","city":"Oslo","latitude":59.9167,"longitude":10.75,"isp":"Servetheworld","hosts":[{"hostname":"no1.wg.ivpn.net","host":"91.189.177.156","public_key":"xFO6ksbO3Gr05rRgAW0O5Veoi4bpTgz2G9RvtBzK7Cg=","local_ip":"172.16.0.1/12","ipv6":{},"multihop_port":25301}]},{"gateway":"hu.wg.ivpn.net","country_code":"HU","country":"Hungary","city":"Budapest","latitude":47.5,"longitude":19.0833,"isp":"M247","hosts":[{"hostname":"hu1.wg.ivpn.net","host":"185.189.114.189","public_key":"G30fNdXrnlqtqqOLF23QXWzFdLIKDxLW60HoYPvqml8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25401}]},{"gateway":"dk.wg.ivpn.net","country_code":"DK","country":"Denmark","city":"Copenhagen","latitude":55.6786,"longitude":12.5635,"isp":"M247","hosts":[{"hostname":"dk1.wg.ivpn.net","host":"185.245.84.229","public_key":"jTsV5gOD7lT4egDj9rhKwO2OO2X7bKs2EQPcZEnUWDE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25501}]},{"gateway":"at.wg.ivpn.net","country_code":"AT","country":"Austria","city":"Vienna","latitude":48.2,"longitude":16.3666,"isp":"M247","hosts":[{"hostname":"at1.wg.ivpn.net","host":"185.244.212.69","public_key":"83LUBnP97SFpnS0y1MpEAFcg8MIiQJgW1FRv/8Mc40g=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25601}]},{"gateway":"be.wg.ivpn.net","country_code":"BE","country":"Belgium","city":"Brussels","latitude":50.8333,"longitude":4.3333,"isp":"M247","hosts":[{"hostname":"be1.wg.ivpn.net","host":"194.187.251.13","public_key":"awriP5lpdxEMWKuG+A1DOg+vb1M5jd3WhynIMB61BhU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25701}]},{"gateway":"bg.wg.ivpn.net","country_code":"BG","country":"Bulgaria","city":"Sofia","latitude":42.6833,"longitude":23.3167,"isp":"M247","hosts":[{"hostname":"bg1.wg.ivpn.net","host":"82.102.23.21","public_key":"WDSsdJE6wvATIWfzQwayPtE/0DaXBQgW/hPm7sQSJmU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25901}]},{"gateway":"sk.wg.ivpn.net","country_code":"SK","country":"Slovakia","city":"Bratislava","latitude":48.15,"longitude":17.117,"isp":"M247","hosts":[{"hostname":"sk1.wg.ivpn.net","host":"185.245.85.253","public_key":"MOBWWpEgNsKbFj4BEyWSDFLlkBs5iUFiqdSdTFTDBko=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25801}]},{"gateway":"jp.wg.ivpn.net","country_code":"JP","country":"Japan","city":"Tokyo","latitude":35.685,"longitude":139.7514,"isp":"M247","hosts":[{"hostname":"jp1.wg.ivpn.net","host":"91.207.174.237","public_key":"tb9WdC3LSho3d1rI5N7kfG9e42/d+u4LPVdEYERPsSQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26201}]},{"gateway":"ua.wg.ivpn.net","country_code":"UA","country":"Ukraine","city":"Kharkiv","latitude":50,"longitude":36.25,"isp":"Xservers","hosts":[{"hostname":"ua1.wg.ivpn.net","host":"176.103.57.129","public_key":"mIxEzfjZ2wV6jJVj30w38ECd2LSH4bw/HLMnM2ICHiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26301}]},{"gateway":"fi.wg.ivpn.net","country_code":"FI","country":"Finland","city":"Helsinki","latitude":60.1756,"longitude":24.9341,"isp":"Creanova","hosts":[{"hostname":"fi1.wg.ivpn.net","host":"194.34.134.63","public_key":"mIxEzfjZ2wV6jJVj30w38ECd2LSH4bw/HLMnM2ICHiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26001}]},{"gateway":"us-az.wg.ivpn.net","country_code":"US","country":"United States","city":"Phoenix, AZ","latitude":33.5722,"longitude":-112.0891,"isp":"M247","hosts":[{"hostname":"us-az1.wg.ivpn.net","host":"193.37.254.133","public_key":"Ts4MGazxpxL9rrYbERjgxa+kCEX85ou9gHoaJvDsRiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26401}]},{"gateway":"us-nv.wg.ivpn.net","country_code":"US","country":"United States","city":"Las Vegas, NV","latitude":36.2333,"longitude":-115.2654,"isp":"M247","hosts":[{"hostname":"us-nv1.wg.ivpn.net","host":"185.242.5.37","public_key":"PRpvAZyoNWNm/KHlqafjtYoZtn1PkIPylUE4WbuYmgM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26501}]},{"gateway":"au-nsw.wg.ivpn.net","country_code":"AU","country":"Australia","city":"Sydney","latitude":-33.92,"longitude":151.1852,"isp":"M247","hosts":[{"hostname":"au-nsw1.wg.ivpn.net","host":"46.102.153.246","public_key":"KmSrG48t5xw9CJCPlYLBG3JnmiY0CnUgyRM5TUEwZhM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26601},{"hostname":"au-nsw2.wg.ivpn.net","host":"146.70.78.75","public_key":"q+wbp7GjiTszp5G16rNpGCqxkL0qSY3CH4pcgD6UsVQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27801}]},{"gateway":"br.wg.ivpn.net","country_code":"BR","country":"Brazil","city":"Franca","latitude":-20.53,"longitude":-47.39,"isp":"Qnax","hosts":[{"hostname":"br1.wg.ivpn.net","host":"45.162.229.133","public_key":"eN1f15S3YzRyYCALiPGRQcjkQO9xntcdqPhJJ6TOymc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26701}]},{"gateway":"rs.wg.ivpn.net","country_code":"RS","country":"Serbia","city":"Belgrade","latitude":44.8186,"longitude":20.468,"isp":"M247","hosts":[{"hostname":"rs1.wg.ivpn.net","host":"141.98.103.253","public_key":"xLN/lpQThQ3z3tvYf7VqdAsRL/nton1Vhv2kCZlQtWE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26801}]},{"gateway":"gb-man.wg.ivpn.net","country_code":"GB","country":"United Kingdom","city":"Manchester","latitude":53.5004,"longitude":-2.248,"isp":"M247","hosts":[{"hostname":"gb-man1.wg.ivpn.net","host":"89.238.141.231","public_key":"+hf4DYilNEIjTdSOuCNcWdqVyaRoxGzXw7wvNl7f7Rg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26901}]},{"gateway":"pt.wg.ivpn.net","country_code":"PT","country":"Portugal","city":"Lisbon","latitude":38.7227,"longitude":-9.1449,"isp":"Hostwebis","hosts":[{"hostname":"pt1.wg.ivpn.net","host":"94.46.175.113","public_key":"nMnA82YVrvEK80GVoY/0Z9McWeqjcLzuMYSL+86j5nU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27101}]},{"gateway":"lu.wg.ivpn.net","country_code":"LU","country":"Luxembourg","city":"Luxembourg","latitude":49.6117,"longitude":6.13,"isp":"Evoluso","hosts":[{"hostname":"lu1.wg.ivpn.net","host":"92.223.89.57","public_key":"hUS1OAFLGwpba8+oc5mifYtohZt/RTro5dMyYBLYHjI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27201}]},{"gateway":"il.wg.ivpn.net","country_code":"IL","country":"Israel","city":"Holon, Tel Aviv","latitude":32.08,"longitude":34.77,"isp":"HQServ","hosts":[{"hostname":"il01.wg.ivpn.net","host":"185.191.207.197","public_key":"HR9gAjpxXU3YVt6kehBw5n8yVYVE0iIgJdc4HTqOzEE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27301}]},{"gateway":"us-va.wg.ivpn.net","country_code":"US","country":"United States","city":"Ashburn, VA","latitude":39.0437,"longitude":-77.4875,"isp":"Datapacket","hosts":[{"hostname":"us-va1.wg.ivpn.net","host":"37.19.206.106","public_key":"ZCnZK6U+cRuP/WgzIDb/P6UG2rX/KyCRd5vJ1hAbr2E=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27701}]},{"gateway":"us-wa.wg.ivpn.net","country_code":"US","country":"United States","city":"Seattle, WA","latitude":47.6211,"longitude":-122.3244,"isp":"Tzulo","hosts":[{"hostname":"us-wa2.wg.ivpn.net","host":"198.44.131.4","public_key":"VcrOOozBUCIURU0AnqMAE7AkMmC7Qrp+j/PzPbgbalU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27801}]}],"openvpn":[{"gateway":"us-ca.gw.ivpn.net","country_code":"US","country":"United States","city":"Los Angeles, CA","latitude":34.1139,"longitude":-118.4068,"isp":"Quadranet","hosts":[{"hostname":"us-ca1.gw.ivpn.net","host":"173.254.196.58","multihop_port":22201},{"hostname":"us-ca2.gw.ivpn.net","host":"69.12.80.146","multihop_port":22401},{"hostname":"us-ca3.gw.ivpn.net","host":"198.54.129.99","multihop_port":21301},{"hostname":"us-ca4.gw.ivpn.net","host":"173.254.204.202","multihop_port":21901}]},{"gateway":"ro.gw.ivpn.net","country_code":"RO","country":"Romania","city":"Bucharest","latitude":44.4334,"longitude":26.0999,"isp":"M247","hosts":[{"hostname":"ro1.gw.ivpn.net","host":"37.120.206.50","multihop_port":22301}]},{"gateway":"de.gw.ivpn.net","country_code":"DE","country":"Germany","city":"Frankfurt","latitude":50.1,"longitude":8.675,"isp":"Leaseweb","hosts":[{"hostname":"de1.gw.ivpn.net","host":"178.162.222.40","multihop_port":23001},{"hostname":"de2.gw.ivpn.net","host":"178.162.211.114","multihop_port":22001}]},{"gateway":"nl.gw.ivpn.net","country_code":"NL","country":"Netherlands","city":"Amsterdam","latitude":52.35,"longitude":4.9166,"isp":"Leaseweb","hosts":[{"hostname":"nl4.gw.ivpn.net","host":"95.211.172.95","multihop_port":23201},{"hostname":"nl3.gw.ivpn.net","host":"95.211.172.68","multihop_port":23101},{"hostname":"nl6.gw.ivpn.net","host":"95.211.187.228","multihop_port":24101},{"hostname":"nl5.gw.ivpn.net","host":"95.211.187.222","multihop_port":23901},{"hostname":"nl7.gw.ivpn.net","host":"95.211.95.22","multihop_port":22501},{"hostname":"nl8.gw.ivpn.net","host":"95.211.172.18","multihop_port":22801}]},{"gateway":"fr.gw.ivpn.net","country_code":"FR","country":"France","city":"Paris","latitude":48.8667,"longitude":2.3333,"isp":"Datapacket","hosts":[{"hostname":"fr1.gw.ivpn.net","host":"185.246.211.179","multihop_port":23401}]},{"gateway":"is.gw.ivpn.net","country_code":"IS","country":"Iceland","city":"Reykjavik","latitude":64.15,"longitude":-21.95,"isp":"Advania","hosts":[{"hostname":"is1.gw.ivpn.net","host":"82.221.107.178","multihop_port":23501}]},{"gateway":"hk.gw.ivpn.net","country_code":"HK","country":"Hong Kong","city":"Hong Kong","latitude":22.305,"longitude":114.185,"isp":"Leaseweb","hosts":[{"hostname":"hk1.gw.ivpn.net","host":"209.58.189.163","multihop_port":23301},{"hostname":"hk2.gw.ivpn.net","host":"209.58.188.13","multihop_port":27501}]},{"gateway":"us-tx.gw.ivpn.net","country_code":"US","country":"United States","city":"Dallas, TX","latitude":32.7936,"longitude":-96.7662,"isp":"Quadranet","hosts":[{"hostname":"us-tx1.gw.ivpn.net","host":"96.44.189.194","multihop_port":21001},{"hostname":"us-tx2.gw.ivpn.net","host":"96.44.142.74","multihop_port":25001}]},{"gateway":"gb.gw.ivpn.net","country_code":"GB","country":"United Kingdom","city":"London","latitude":51.5,"longitude":-0.1167,"isp":"Datapacket","hosts":[{"hostname":"gb2.gw.ivpn.net","host":"185.59.221.88","multihop_port":24201},{"hostname":"gb1.gw.ivpn.net","host":"185.59.221.133","multihop_port":20801}]},{"gateway":"us-ut.gw.ivpn.net","country_code":"US","country":"United States","city":"Salt Lake City, UT","latitude":40.7774,"longitude":-111.93,"isp":"100TB","hosts":[{"hostname":"us-ut1.gw.ivpn.net","host":"198.105.216.28","multihop_port":24401}]},{"gateway":"it.gw.ivpn.net","country_code":"IT","country":"Italy","city":"Milan","latitude":45.47,"longitude":9.205,"isp":"SEFlow","hosts":[{"hostname":"it1.gw.ivpn.net","host":"158.58.172.73","multihop_port":24301}]},{"gateway":"se.gw.ivpn.net","country_code":"SE","country":"Sweden","city":"Stockholm","latitude":59.3508,"longitude":18.0973,"isp":"GleSyS","hosts":[{"hostname":"se1.gw.ivpn.net","host":"80.67.10.138","multihop_port":24001}]},{"gateway":"us-ga.gw.ivpn.net","country_code":"US","country":"United States","city":"Atlanta, GA","latitude":33.7627,"longitude":-84.4225,"isp":"Quadranet","hosts":[{"hostname":"us-ga1.gw.ivpn.net","host":"104.129.24.146","multihop_port":24501},{"hostname":"us-ga2.gw.ivpn.net","host":"107.150.22.74","multihop_port":24810}]},{"gateway":"us-fl.gw.ivpn.net","country_code":"US","country":"United States","city":"Miami, FL","latitude":25.7839,"longitude":-80.2102,"isp":"Quadranet","hosts":[{"hostname":"us-fl1.gw.ivpn.net","host":"173.44.49.90","multihop_port":24601}]},{"gateway":"ca.gw.ivpn.net","country_code":"CA","country":"Canada","city":"Toronto","latitude":43.7,"longitude":-79.42,"isp":"Amanah","hosts":[{"hostname":"ca2.gw.ivpn.net","host":"172.86.186.170","multihop_port":22101},{"hostname":"ca1.gw.ivpn.net","host":"104.254.90.178","multihop_port":23801}]},{"gateway":"ch.gw.ivpn.net","country_code":"CH","country":"Switzerland","city":"Zurich","latitude":47.38,"longitude":8.55,"isp":"Privatelayer","hosts":[{"hostname":"ch3.gw.ivpn.net","host":"141.255.166.194","multihop_port":22901},{"hostname":"ch1.gw.ivpn.net","host":"185.212.170.138","multihop_port":23601}]},{"gateway":"us-il.gw.ivpn.net","country_code":"US","country":"United States","city":"Chicago, IL","latitude":41.8373,"longitude":-87.6862,"isp":"Quadranet","hosts":[{"hostname":"us-il1.gw.ivpn.net","host":"107.150.28.82","multihop_port":21401},{"hostname":"us-il2.gw.ivpn.net","host":"72.11.137.146","multihop_port":24901}]},{"gateway":"us-nj.gw.ivpn.net","country_code":"US","country":"United States","city":"New Jersey, NJ","latitude":40.737764,"longitude":-74.151747,"isp":"Quadranet","hosts":[{"hostname":"us-nj3.gw.ivpn.net","host":"23.226.128.18","multihop_port":21610},{"hostname":"us-nj4.gw.ivpn.net","host":"194.36.111.50","multihop_port":27401}]},{"gateway":"es.gw.ivpn.net","country_code":"ES","country":"Spain","city":"Madrid","latitude":40.4,"longitude":-3.6834,"isp":"Datapacket","hosts":[{"hostname":"es1.gw.ivpn.net","host":"185.93.3.193","multihop_port":21501}]},{"gateway":"us-ny.gw.ivpn.net","country_code":"US","country":"United States","city":"New York, NY","latitude":40.6943,"longitude":-73.9249,"isp":"M247","hosts":[{"hostname":"us-ny2.gw.ivpn.net","host":"212.103.48.194","multihop_port":21801},{"hostname":"us-ny3.gw.ivpn.net","host":"89.187.178.144","multihop_port":27601}]},{"gateway":"pl.gw.ivpn.net","country_code":"PL","country":"Poland","city":"Warsaw","latitude":52.25,"longitude":21,"isp":"Datapacket","hosts":[{"hostname":"pl1.gw.ivpn.net","host":"185.246.208.86","multihop_port":25101}]},{"gateway":"cz.gw.ivpn.net","country_code":"CZ","country":"Czech Republic","city":"Prague","latitude":50.0833,"longitude":14.466,"isp":"Datapacket","hosts":[{"hostname":"cz1.gw.ivpn.net","host":"195.181.160.167","multihop_port":25201}]},{"gateway":"no.gw.ivpn.net","country_code":"NO","country":"Norway","city":"Oslo","latitude":59.9167,"longitude":10.75,"isp":"Servetheworld","hosts":[{"hostname":"no1.gw.ivpn.net","host":"194.242.10.150","multihop_port":25301}]},{"gateway":"hu.gw.ivpn.net","country_code":"HU","country":"Hungary","city":"Budapest","latitude":47.5,"longitude":19.0833,"isp":"M247","hosts":[{"hostname":"hu1.gw.ivpn.net","host":"185.189.114.186","multihop_port":25401}]},{"gateway":"dk.gw.ivpn.net","country_code":"DK","country":"Denmark","city":"Copenhagen","latitude":55.6786,"longitude":12.5635,"isp":"M247","hosts":[{"hostname":"dk1.gw.ivpn.net","host":"185.245.84.226","multihop_port":25501}]},{"gateway":"at.gw.ivpn.net","country_code":"AT","country":"Austria","city":"Vienna","latitude":48.2,"longitude":16.3666,"isp":"M247","hosts":[{"hostname":"at1.gw.ivpn.net","host":"185.244.212.66","multihop_port":25601}]},{"gateway":"be.gw.ivpn.net","country_code":"BE","country":"Belgium","city":"Brussels","latitude":50.8333,"longitude":4.3333,"isp":"M247","hosts":[{"hostname":"be1.gw.ivpn.net","host":"194.187.251.10","multihop_port":25701}]},{"gateway":"bg.gw.ivpn.net","country_code":"BG","country":"Bulgaria","city":"Sofia","latitude":42.6833,"longitude":23.3167,"isp":"M247","hosts":[{"hostname":"bg1.gw.ivpn.net","host":"82.102.23.18","multihop_port":25901}]},{"gateway":"sk.gw.ivpn.net","country_code":"SK","country":"Slovakia","city":"Bratislava","latitude":48.15,"longitude":17.117,"isp":"M247","hosts":[{"hostname":"sk1.gw.ivpn.net","host":"185.245.85.250","multihop_port":25801}]},{"gateway":"jp.gw.ivpn.net","country_code":"JP","country":"Japan","city":"Tokyo","latitude":35.685,"longitude":139.7514,"isp":"M247","hosts":[{"hostname":"jp1.gw.ivpn.net","host":"91.207.174.234","multihop_port":26201}]},{"gateway":"sg.gw.ivpn.net","country_code":"SG","country":"Singapore","city":"Singapore","latitude":1.293,"longitude":103.8558,"isp":"M247","hosts":[{"hostname":"sg1.gw.ivpn.net","host":"185.128.24.186","multihop_port":26101}]},{"gateway":"ua.gw.ivpn.net","country_code":"UA","country":"Ukraine","city":"Kharkiv","latitude":50,"longitude":36.25,"isp":"Xservers","hosts":[{"hostname":"ua1.gw.ivpn.net","host":"176.103.58.123","multihop_port":26301}]},{"gateway":"fi.gw.ivpn.net","country_code":"FI","country":"Finland","city":"Helsinki","latitude":60.1756,"longitude":24.9341,"isp":"Creanova","hosts":[{"hostname":"fi1.gw.ivpn.net","host":"185.112.82.12","multihop_port":26001}]},{"gateway":"us-az.gw.ivpn.net","country_code":"US","country":"United States","city":"Phoenix, AZ","latitude":33.5722,"longitude":-112.0891,"isp":"M247","hosts":[{"hostname":"us-az1.gw.ivpn.net","host":"193.37.254.130","multihop_port":26401}]},{"gateway":"us-nv.gw.ivpn.net","country_code":"US","country":"United States","city":"Las Vegas, NV","latitude":36.2333,"longitude":-115.2654,"isp":"M247","hosts":[{"hostname":"us-nv1.gw.ivpn.net","host":"185.242.5.34","multihop_port":26501}]},{"gateway":"au-nsw.gw.ivpn.net","country_code":"AU","country":"Australia","city":"Sydney","latitude":-33.92,"longitude":151.1852,"isp":"M247","hosts":[{"hostname":"au-nsw1.gw.ivpn.net","host":"46.102.153.242","multihop_port":26601},{"hostname":"au-nsw2.gw.ivpn.net","host":"146.70.78.74","multihop_port":27801}]},{"gateway":"br.gw.ivpn.net","country_code":"BR","country":"Brazil","city":"Franca","latitude":-20.53,"longitude":-47.39,"isp":"Qnax","hosts":[{"hostname":"br1.gw.ivpn.net","host":"45.162.229.130","multihop_port":26701}]},{"gateway":"rs.gw.ivpn.net","country_code":"RS","country":"Serbia","city":"Belgrade","latitude":44.8186,"longitude":20.468,"isp":"M247","hosts":[{"hostname":"rs1.gw.ivpn.net","host":"141.98.103.250","multihop_port":26801}]},{"gateway":"gb-man.gw.ivpn.net","country_code":"GB","country":"United Kingdom","city":"Manchester","latitude":53.5004,"longitude":-2.248,"isp":"M247","hosts":[{"hostname":"gb-man1.gw.ivpn.net","host":"89.238.141.228","multihop_port":26901}]},{"gateway":"ca-qc.gw.ivpn.net","country_code":"CA","country":"Canada","city":"Montreal","latitude":45.5,"longitude":-73.5833,"isp":"M247","hosts":[{"hostname":"ca-qc1.gw.ivpn.net","host":"87.101.92.26","multihop_port":27001}]},{"gateway":"pt.gw.ivpn.net","country_code":"PT","country":"Portugal","city":"Lisbon","latitude":38.7227,"longitude":-9.1449,"isp":"Hostwebis","hosts":[{"hostname":"pt1.gw.ivpn.net","host":"94.46.175.112","multihop_port":27101}]},{"gateway":"lu.gw.ivpn.net","country_code":"LU","country":"Luxembourg","city":"Luxembourg","latitude":49.6117,"longitude":6.13,"isp":"Evoluso","hosts":[{"hostname":"lu1.gw.ivpn.net","host":"92.223.89.53","multihop_port":27201}]},{"gateway":"il.gw.ivpn.net","country_code":"IL","country":"Israel","city":"Holon, Tel Aviv","latitude":32.08,"longitude":34.77,"isp":"HQServ","hosts":[{"hostname":"il1.gw.ivpn.net","host":"185.191.207.194","multihop_port":27301}]},{"gateway":"us-va.gw.ivpn.net","country_code":"US","country":"United States","city":"Ashburn, VA","latitude":39.0437,"longitude":-77.4875,"isp":"Datapacket","hosts":[{"hostname":"us-va1.gw.ivpn.net","host":"37.19.206.105","multihop_port":27701}]},{"gateway":"us-wa.gw.ivpn.net","country_code":"US","country":"United States","city":"Seattle, WA","latitude":47.6211,"longitude":-122.3244,"isp":"Tzulo","hosts":[{"hostname":"us-wa2.gw.ivpn.net","host":"198.44.131.3","multihop_port":27801}]}],"config":{"antitracker":{"default":{"ip":"10.0.254.2","multihop-ip":"10.0.254.102"},"hardcore":{"ip":"10.0.254.3","multihop-ip":"10.0.254.103"}},"api":{"ips":["198.50.177.220","149.56.162.156","198.50.177.222","149.56.162.159","198.50.177.223"],"ipv6s":["2607:5300:203:1735::8888","2607:5300:203:1735::8","2607:5300:203:1735:6580:7300:0:aaaa"]}}} +{"wireguard":[{"gateway":"us-tx.wg.ivpn.net","country_code":"US","country":"United States","city":"Dallas, TX","latitude":32.7936,"longitude":-96.7662,"isp":"Quadranet","hosts":[{"hostname":"us-tx1.wg.ivpn.net","host":"198.55.124.114","public_key":"JPT1veXLmasj2uQDstX24mpR7VWD+GmV8JDkidkz91Q=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21010,"load":8.08},{"hostname":"us-tx01.wg.ivpn.net","host":"96.44.189.197","public_key":"LvWf548mFddi8PTrIGL6uD1/l85LU8z0Rc8tpvw2Vls=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21001,"load":9.46},{"hostname":"us-tx2.wg.ivpn.net","host":"96.44.142.77","public_key":"om8hOGUcEvoOhHvJZoBHxNF4jxY/+Ml9Iy1WOSC/pFo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25001,"load":5.74}]},{"gateway":"nl.wg.ivpn.net","country_code":"NL","country":"Netherlands","city":"Amsterdam","latitude":52.35,"longitude":4.9166,"isp":"Datapacket","hosts":[{"hostname":"nl1.wg.ivpn.net","host":"185.102.218.104","public_key":"AsMT2FqpkZbjzWeDch6GwufF5odl259W/hIkGytVfWo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20301,"load":18.43},{"hostname":"nl4.wg.ivpn.net","host":"95.211.95.19","public_key":"cVB66gPq5cZ9dfXY+e2pbsCyih5o1zk04l5c5VCsV1g=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23201,"load":10.5},{"hostname":"nl3.wg.ivpn.net","host":"95.211.95.9","public_key":"XDU6Syq1DY82IMatsHV0x/TAtbLiRwh/SdFCXlEn40c=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23101,"load":11.84},{"hostname":"nl6.wg.ivpn.net","host":"95.211.243.182","public_key":"hMWpqb3FEATHIbImPVWB/5z2nWIXghwpnJjevPY+1H0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24101,"load":17.21},{"hostname":"nl5.wg.ivpn.net","host":"95.211.243.162","public_key":"NCagAawwRixI6Iw/NWiGD8lbjDNCl0aTICZKJtO/1HA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23901,"load":15.1},{"hostname":"nl7.wg.ivpn.net","host":"95.211.172.105","public_key":"hQNYqtfOOAEz0IGshLx/TI9hUrfR9gIIkjVm4VsCbBM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22501,"load":13.02},{"hostname":"nl8.wg.ivpn.net","host":"95.211.198.167","public_key":"/nY1/OhVhdHtbnU/s31zYUuPBH0pizv4DemW5KDOUkg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22801,"load":19.77}]},{"gateway":"de.wg.ivpn.net","country_code":"DE","country":"Germany","city":"Frankfurt","latitude":50.1,"longitude":8.675,"isp":"Datapacket","hosts":[{"hostname":"de1.wg.ivpn.net","host":"185.102.219.26","public_key":"mS3/WpXjnMAMmXjSpd4nFzx9HSE3ubv2WyjpyH2REgs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23010,"load":8.9},{"hostname":"de01.wg.ivpn.net","host":"178.162.212.24","public_key":"Sc5AUZieg0qX8kyCy9p0OHRES4n0CHtHHM+ZPyERFTc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23001,"load":11.42},{"hostname":"de2.wg.ivpn.net","host":"37.58.60.151","public_key":"QhY3OtBf4FFafKtLO33e6k8JnAl8e6ktFcRUyLjCDVY=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22001,"load":60.22}]},{"gateway":"us-il.wg.ivpn.net","country_code":"US","country":"United States","city":"Chicago, IL","latitude":41.8373,"longitude":-87.6862,"isp":"Datapacket","hosts":[{"hostname":"us-il1.wg.ivpn.net","host":"89.187.181.116","public_key":"hku9gjamhoii8OvxZgx+TdUDIkOAQYFu39qbav2AyUQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21410,"load":58.43},{"hostname":"us-il01.wg.ivpn.net","host":"72.11.137.158","public_key":"Uy5a8JOqneAUY1dC5s9jubLnotbyIfBsLP2nZuzRbHs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21401,"load":24.8}]},{"gateway":"us-ga.wg.ivpn.net","country_code":"US","country":"United States","city":"Atlanta, GA","latitude":33.7627,"longitude":-84.4225,"isp":"Datapacket","hosts":[{"hostname":"us-ga1.wg.ivpn.net","host":"185.93.0.212","public_key":"jD8h+pL5/d6fmYcTzl0lR8AWzQVN5XkwRFSmM/3NcDM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24510,"load":8.59},{"hostname":"us-ga01.wg.ivpn.net","host":"104.129.24.149","public_key":"EJFl28aYpZKfmJqb1jxxTEnGx6kaH2USVrigpHKKXhs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24501,"load":12.09},{"hostname":"us-ga2.wg.ivpn.net","host":"107.150.22.77","public_key":"hr2uQOEGCvGeDkoCQJ2dCI8dM8Iu5aKhb1PIvJ9q72E=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24810,"load":10.69}]},{"gateway":"us-ca.wg.ivpn.net","country_code":"US","country":"United States","city":"Los Angeles, CA","latitude":34.1139,"longitude":-118.4068,"isp":"Datapacket","hosts":[{"hostname":"us-ca1.wg.ivpn.net","host":"185.180.13.41","public_key":"FGl78s9Ct6xNamQ2/CtAyXwGePrrU0kiZxfM27pm8XA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22210,"load":8.14},{"hostname":"us-ca01.wg.ivpn.net","host":"216.144.236.44","public_key":"B+qXdkIuETpzI0bfhGUAHN4SU91Tjs6ItdFlu93S42I=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22201,"load":7.74},{"hostname":"us-ca2.wg.ivpn.net","host":"216.144.236.68","public_key":"qv4Tupfon5NUSwzDpM8zPizSwJZn2h+9CqrufcyDOko=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22401,"load":7.68},{"hostname":"us-ca3.wg.ivpn.net","host":"198.54.129.100","public_key":"J5+Bx84LxNPdWEhewOvBV/fGWiDluIBlAcr1QlJZil8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21301,"load":10.95},{"hostname":"us-ca4.wg.ivpn.net","host":"216.144.237.83","public_key":"dYPXYr6HSRJPe3MhALwGWNtdEy1+EPE9Kqv7cTrUXk8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21901,"load":7.8}]},{"gateway":"ca-qc.wg.ivpn.net","country_code":"CA","country":"Canada","city":"Montreal","latitude":45.5,"longitude":-73.5833,"isp":"M247","hosts":[{"hostname":"ca1.wg.ivpn.net","host":"37.120.130.58","public_key":"rg+GGDmjM4Vxo1hURvKmgm9yonb6qcoKbPCP/DNDBnI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23810,"load":19.04},{"hostname":"ca-qc1.wg.ivpn.net","host":"87.101.92.29","public_key":"98JU1mdCR8vD1aNZg017/NjBeTjuuCKUaLw0zfz/CUE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27001,"load":18.79}]},{"gateway":"gb.wg.ivpn.net","country_code":"GB","country":"United Kingdom","city":"London","latitude":51.5,"longitude":-0.1167,"isp":"M247","hosts":[{"hostname":"gb1.wg.ivpn.net","host":"81.92.202.114","public_key":"7+jos+Eg+hMEOQE4Std6OJ+WVnCcmbqS1/EbPwn9w3s=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20810,"load":7.64},{"hostname":"gb2.wg.ivpn.net","host":"185.59.221.225","public_key":"x0BTRaxsdxAd58ZyU2YMX4bmuj+Eg+8/urT2F3Vs1n8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24201,"load":8.64},{"hostname":"gb01.wg.ivpn.net","host":"185.59.221.140","public_key":"yKK5x+D17Jr3Q12T/UBaDjNVmNdZBsqpvTqH6YfsGHg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20801,"load":15.73}]},{"gateway":"us-ny.wg.ivpn.net","country_code":"US","country":"United States","city":"New York, NY","latitude":40.6943,"longitude":-73.9249,"isp":"M247","hosts":[{"hostname":"us-ny1.wg.ivpn.net","host":"91.132.137.170","public_key":"6/tjvgb7HFl7UuvBSegolxa1zKr3iSlDrlCexCmhAGE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21210,"load":40.08},{"hostname":"us-ny2.wg.ivpn.net","host":"212.103.48.195","public_key":"c7DwY2uT+6ulWAJ5u8qJNWHroA0qyJLcdNzf/f2kkhs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21801,"load":5.8},{"hostname":"us-ny3.wg.ivpn.net","host":"89.187.178.145","public_key":"m5/Ssw9SN3WuE+yD/fAsH5G8iuI8TcDGEiZZnPgiMCc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27601,"load":9.72}]},{"gateway":"se.wg.ivpn.net","country_code":"SE","country":"Sweden","city":"Stockholm","latitude":59.3508,"longitude":18.0973,"isp":"M247","hosts":[{"hostname":"se1.wg.ivpn.net","host":"37.120.153.226","public_key":"2n0nFE1g/+vQr2AOQPm9Igyiy0zh9uTTultvOOSkMRo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24010,"load":9.62},{"hostname":"se01.wg.ivpn.net","host":"80.67.10.141","public_key":"u8VHnYEpoEjJWDAF9NAUkU6s810RnkMuhEfFD9U0cGo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24001,"load":17.76}]},{"gateway":"sg.wg.ivpn.net","country_code":"SG","country":"Singapore","city":"Singapore","latitude":1.293,"longitude":103.8558,"isp":"M247","hosts":[{"hostname":"sg1.wg.ivpn.net","host":"37.120.151.122","public_key":"hSg0At4uwuIhmTy5UT4fRbi5AN6JO2ZWTuIvqd4nHCE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26110,"load":7.69},{"hostname":"sg01.wg.ivpn.net","host":"185.128.24.189","public_key":"pWk0u1Xq8FHC+xpkN+C6yEKOTEanorR5zMCSfHlLzFw=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26101,"load":15.55}]},{"gateway":"ch.wg.ivpn.net","country_code":"CH","country":"Switzerland","city":"Zurich","latitude":47.38,"longitude":8.55,"isp":"Privatelayer","hosts":[{"hostname":"ch1.wg.ivpn.net","host":"141.255.164.66","public_key":"jVZJ61i1xxkAfriDHpwvF/GDuTvZUqhwoWSjkOJvaUA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23610,"load":6.98},{"hostname":"ch3.wg.ivpn.net","host":"141.255.166.198","public_key":"JBpgBKtqIneRuEga7mbP2PAk/e4HPRaC11H0A0+R3lA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22901,"load":17.26},{"hostname":"ch01.wg.ivpn.net","host":"185.212.170.141","public_key":"dU7gLfcupYd37LW0q6cxC6PHMba+eUFAUOoU/ryXZkY=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23601,"load":23.62}]},{"gateway":"it.wg.ivpn.net","country_code":"IT","country":"Italy","city":"Milan","latitude":45.47,"longitude":9.205,"isp":"M247","hosts":[{"hostname":"it1.wg.ivpn.net","host":"82.102.21.90","public_key":"Aj6b81yrDk7I913R+fuSW/NAmIl87N73vHgY5/WQY0Q=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24310,"load":5.87},{"hostname":"it01.wg.ivpn.net","host":"158.58.172.89","public_key":"QTzR5R6jeDI/cQ0CXPIqOby9GR5nn+4Bcf4bK536Vy0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24301,"load":40.7}]},{"gateway":"ro.wg.ivpn.net","country_code":"RO","country":"Romania","city":"Bucharest","latitude":44.4334,"longitude":26.0999,"isp":"M247","hosts":[{"hostname":"ro1.wg.ivpn.net","host":"37.120.206.53","public_key":"F2uQ57hysZTlw8WYELnyCw9Lga80wNYoYwkrrxyXKmw=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22301,"load":62.36}]},{"gateway":"fr.wg.ivpn.net","country_code":"FR","country":"France","city":"Paris","latitude":48.8667,"longitude":2.3333,"isp":"Datapacket","hosts":[{"hostname":"fr1.wg.ivpn.net","host":"185.246.211.185","public_key":"g7BuMzj3r/noLiLR4qhQMcvU6GSIY8RGEnaYtdYsFX4=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23401,"load":10.81}]},{"gateway":"is.wg.ivpn.net","country_code":"IS","country":"Iceland","city":"Reykjavik","latitude":64.15,"longitude":-21.95,"isp":"Advania","hosts":[{"hostname":"is1.wg.ivpn.net","host":"82.221.107.185","public_key":"nZZT6TlQ2dXlVe3P3B5ozEScHYMWH4JY4y3to8w5dz0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23501,"load":56.66}]},{"gateway":"hk.wg.ivpn.net","country_code":"HK","country":"Hong Kong","city":"Hong Kong","latitude":22.305,"longitude":114.185,"isp":"Leaseweb","hosts":[{"hostname":"hk1.wg.ivpn.net","host":"209.58.189.105","public_key":"MbqqGy6TI2WVxHYdMa7X1LJoIEQNElhYXMGlMqtwtS0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23301,"load":9.15},{"hostname":"hk2.wg.ivpn.net","host":"64.120.120.239","public_key":"kyolyq4cJydI3vQB2ESTIUAy2Fq0bpOf+Qe7GIq6XEA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27501,"load":9.64}]},{"gateway":"us-ut.wg.ivpn.net","country_code":"US","country":"United States","city":"Salt Lake City, UT","latitude":40.7774,"longitude":-111.93,"isp":"100TB","hosts":[{"hostname":"us-ut1.wg.ivpn.net","host":"206.190.145.92","public_key":"KirI7bpxD186CuYiOqNHF+QUe6YmRYf6CN3pXWOJT2k=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24401,"load":38.17}]},{"gateway":"us-fl.wg.ivpn.net","country_code":"US","country":"United States","city":"Miami, FL","latitude":25.7839,"longitude":-80.2102,"isp":"Quadranet","hosts":[{"hostname":"us-fl1.wg.ivpn.net","host":"173.44.49.93","public_key":"Rkzo9WgxJBiKyEbkZvqGWtOVh9Gk9Vd7wL49SHXdHig=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24601,"load":10.87}]},{"gateway":"ca.wg.ivpn.net","country_code":"CA","country":"Canada","city":"Toronto","latitude":43.7,"longitude":-79.42,"isp":"Amanah","hosts":[{"hostname":"ca2.wg.ivpn.net","host":"172.86.186.173","public_key":"5qHV10ZbFgEGnF6wg9QpKeh1l6Di2JUG/5PdNaaoNW8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22101,"load":40.55},{"hostname":"ca01.wg.ivpn.net","host":"104.254.90.181","public_key":"mdGnCZwinuOVGg46zsWnFhhenfFId6jht9GBTKB+xUA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23801,"load":85.21}]},{"gateway":"us-nj.wg.ivpn.net","country_code":"US","country":"United States","city":"New Jersey, NJ","latitude":40.737764,"longitude":-74.151747,"isp":"Quadranet","hosts":[{"hostname":"us-nj3.wg.ivpn.net","host":"23.226.128.21","public_key":"AX7C1LO0ECUcHRYgX4/tIDYdR8npvfB/+pf4AfI3OHU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21610,"load":9.62},{"hostname":"us-nj4.wg.ivpn.net","host":"194.36.111.54","public_key":"1Te4AfL1yKo2k4jzPALnRPfKE3YSzXKo4XIRHPz5FxI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27401,"load":15.42}]},{"gateway":"es.wg.ivpn.net","country_code":"ES","country":"Spain","city":"Madrid","latitude":40.4,"longitude":-3.6834,"isp":"Datapacket","hosts":[{"hostname":"es1.wg.ivpn.net","host":"84.17.62.98","public_key":"w7umiArTtlJ4Pk6Ii9WX5VXK5vw/Qu+Z37/icKlIYWo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21501,"load":8.25}]},{"gateway":"pl.wg.ivpn.net","country_code":"PL","country":"Poland","city":"Warsaw","latitude":52.25,"longitude":21,"isp":"Datapacket","hosts":[{"hostname":"pl1.wg.ivpn.net","host":"185.246.208.109","public_key":"1JDmF79rWj5C+kHp71AbdHne/yGaizWCd2bLfSFvYjo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25101,"load":12.75}]},{"gateway":"cz.wg.ivpn.net","country_code":"CZ","country":"Czech Republic","city":"Prague","latitude":50.0833,"longitude":14.466,"isp":"Datapacket","hosts":[{"hostname":"cz1.wg.ivpn.net","host":"185.180.14.41","public_key":"gVbEq2cGRzwCSGPqT2oRSYYN+P6IK3uvvRffErASDSk=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25201,"load":17.13}]},{"gateway":"no.wg.ivpn.net","country_code":"NO","country":"Norway","city":"Oslo","latitude":59.9167,"longitude":10.75,"isp":"Servetheworld","hosts":[{"hostname":"no1.wg.ivpn.net","host":"91.189.177.156","public_key":"xFO6ksbO3Gr05rRgAW0O5Veoi4bpTgz2G9RvtBzK7Cg=","local_ip":"172.16.0.1/12","ipv6":{},"multihop_port":25301,"load":0}]},{"gateway":"hu.wg.ivpn.net","country_code":"HU","country":"Hungary","city":"Budapest","latitude":47.5,"longitude":19.0833,"isp":"M247","hosts":[{"hostname":"hu1.wg.ivpn.net","host":"185.189.114.189","public_key":"G30fNdXrnlqtqqOLF23QXWzFdLIKDxLW60HoYPvqml8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25401,"load":44.48}]},{"gateway":"dk.wg.ivpn.net","country_code":"DK","country":"Denmark","city":"Copenhagen","latitude":55.6786,"longitude":12.5635,"isp":"M247","hosts":[{"hostname":"dk1.wg.ivpn.net","host":"185.245.84.229","public_key":"jTsV5gOD7lT4egDj9rhKwO2OO2X7bKs2EQPcZEnUWDE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25501,"load":21.92}]},{"gateway":"at.wg.ivpn.net","country_code":"AT","country":"Austria","city":"Vienna","latitude":48.2,"longitude":16.3666,"isp":"M247","hosts":[{"hostname":"at1.wg.ivpn.net","host":"185.244.212.69","public_key":"83LUBnP97SFpnS0y1MpEAFcg8MIiQJgW1FRv/8Mc40g=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25601,"load":94.1}]},{"gateway":"be.wg.ivpn.net","country_code":"BE","country":"Belgium","city":"Brussels","latitude":50.8333,"longitude":4.3333,"isp":"M247","hosts":[{"hostname":"be1.wg.ivpn.net","host":"194.187.251.13","public_key":"awriP5lpdxEMWKuG+A1DOg+vb1M5jd3WhynIMB61BhU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25701,"load":39.45}]},{"gateway":"bg.wg.ivpn.net","country_code":"BG","country":"Bulgaria","city":"Sofia","latitude":42.6833,"longitude":23.3167,"isp":"M247","hosts":[{"hostname":"bg1.wg.ivpn.net","host":"82.102.23.21","public_key":"WDSsdJE6wvATIWfzQwayPtE/0DaXBQgW/hPm7sQSJmU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25901,"load":100}]},{"gateway":"sk.wg.ivpn.net","country_code":"SK","country":"Slovakia","city":"Bratislava","latitude":48.15,"longitude":17.117,"isp":"M247","hosts":[{"hostname":"sk1.wg.ivpn.net","host":"185.245.85.253","public_key":"MOBWWpEgNsKbFj4BEyWSDFLlkBs5iUFiqdSdTFTDBko=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25801,"load":100}]},{"gateway":"jp.wg.ivpn.net","country_code":"JP","country":"Japan","city":"Tokyo","latitude":35.685,"longitude":139.7514,"isp":"M247","hosts":[{"hostname":"jp1.wg.ivpn.net","host":"91.207.174.237","public_key":"tb9WdC3LSho3d1rI5N7kfG9e42/d+u4LPVdEYERPsSQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26201,"load":13.83}]},{"gateway":"ua.wg.ivpn.net","country_code":"UA","country":"Ukraine","city":"Kharkiv","latitude":50,"longitude":36.25,"isp":"Xservers","hosts":[{"hostname":"ua1.wg.ivpn.net","host":"176.103.57.129","public_key":"mIxEzfjZ2wV6jJVj30w38ECd2LSH4bw/HLMnM2ICHiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26301,"load":8.19}]},{"gateway":"fi.wg.ivpn.net","country_code":"FI","country":"Finland","city":"Helsinki","latitude":60.1756,"longitude":24.9341,"isp":"Creanova","hosts":[{"hostname":"fi1.wg.ivpn.net","host":"194.34.134.63","public_key":"mIxEzfjZ2wV6jJVj30w38ECd2LSH4bw/HLMnM2ICHiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26001,"load":91.34}]},{"gateway":"us-az.wg.ivpn.net","country_code":"US","country":"United States","city":"Phoenix, AZ","latitude":33.5722,"longitude":-112.0891,"isp":"M247","hosts":[{"hostname":"us-az1.wg.ivpn.net","host":"193.37.254.133","public_key":"Ts4MGazxpxL9rrYbERjgxa+kCEX85ou9gHoaJvDsRiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26401,"load":5.95}]},{"gateway":"us-nv.wg.ivpn.net","country_code":"US","country":"United States","city":"Las Vegas, NV","latitude":36.2333,"longitude":-115.2654,"isp":"M247","hosts":[{"hostname":"us-nv1.wg.ivpn.net","host":"185.242.5.37","public_key":"PRpvAZyoNWNm/KHlqafjtYoZtn1PkIPylUE4WbuYmgM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26501,"load":32.74}]},{"gateway":"au-nsw.wg.ivpn.net","country_code":"AU","country":"Australia","city":"Sydney","latitude":-33.92,"longitude":151.1852,"isp":"M247","hosts":[{"hostname":"au-nsw1.wg.ivpn.net","host":"46.102.153.246","public_key":"KmSrG48t5xw9CJCPlYLBG3JnmiY0CnUgyRM5TUEwZhM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26601,"load":13},{"hostname":"au-nsw2.wg.ivpn.net","host":"146.70.78.75","public_key":"q+wbp7GjiTszp5G16rNpGCqxkL0qSY3CH4pcgD6UsVQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27801,"load":15.91}]},{"gateway":"br.wg.ivpn.net","country_code":"BR","country":"Brazil","city":"Franca","latitude":-20.53,"longitude":-47.39,"isp":"Qnax","hosts":[{"hostname":"br1.wg.ivpn.net","host":"45.162.229.133","public_key":"eN1f15S3YzRyYCALiPGRQcjkQO9xntcdqPhJJ6TOymc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26701,"load":33.79}]},{"gateway":"rs.wg.ivpn.net","country_code":"RS","country":"Serbia","city":"Belgrade","latitude":44.8186,"longitude":20.468,"isp":"M247","hosts":[{"hostname":"rs1.wg.ivpn.net","host":"141.98.103.253","public_key":"xLN/lpQThQ3z3tvYf7VqdAsRL/nton1Vhv2kCZlQtWE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26801,"load":32.35}]},{"gateway":"gb-man.wg.ivpn.net","country_code":"GB","country":"United Kingdom","city":"Manchester","latitude":53.5004,"longitude":-2.248,"isp":"M247","hosts":[{"hostname":"gb-man1.wg.ivpn.net","host":"89.238.141.231","public_key":"+hf4DYilNEIjTdSOuCNcWdqVyaRoxGzXw7wvNl7f7Rg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26901,"load":17.64}]},{"gateway":"pt.wg.ivpn.net","country_code":"PT","country":"Portugal","city":"Lisbon","latitude":38.7227,"longitude":-9.1449,"isp":"Hostwebis","hosts":[{"hostname":"pt1.wg.ivpn.net","host":"94.46.175.113","public_key":"nMnA82YVrvEK80GVoY/0Z9McWeqjcLzuMYSL+86j5nU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27101,"load":8.26}]},{"gateway":"lu.wg.ivpn.net","country_code":"LU","country":"Luxembourg","city":"Luxembourg","latitude":49.6117,"longitude":6.13,"isp":"Evoluso","hosts":[{"hostname":"lu1.wg.ivpn.net","host":"92.223.89.57","public_key":"hUS1OAFLGwpba8+oc5mifYtohZt/RTro5dMyYBLYHjI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27201,"load":100}]},{"gateway":"il.wg.ivpn.net","country_code":"IL","country":"Israel","city":"Holon, Tel Aviv","latitude":32.08,"longitude":34.77,"isp":"HQServ","hosts":[{"hostname":"il01.wg.ivpn.net","host":"185.191.207.197","public_key":"HR9gAjpxXU3YVt6kehBw5n8yVYVE0iIgJdc4HTqOzEE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27301,"load":7.9}]},{"gateway":"us-va.wg.ivpn.net","country_code":"US","country":"United States","city":"Ashburn, VA","latitude":39.0437,"longitude":-77.4875,"isp":"Datapacket","hosts":[{"hostname":"us-va1.wg.ivpn.net","host":"37.19.206.106","public_key":"ZCnZK6U+cRuP/WgzIDb/P6UG2rX/KyCRd5vJ1hAbr2E=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27701,"load":49.85}]},{"gateway":"us-wa.wg.ivpn.net","country_code":"US","country":"United States","city":"Seattle, WA","latitude":47.6211,"longitude":-122.3244,"isp":"Tzulo","hosts":[{"hostname":"us-wa2.wg.ivpn.net","host":"198.44.131.4","public_key":"VcrOOozBUCIURU0AnqMAE7AkMmC7Qrp+j/PzPbgbalU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27801,"load":16.43}]}],"openvpn":[{"gateway":"us-ca.gw.ivpn.net","country_code":"US","country":"United States","city":"Los Angeles, CA","latitude":34.1139,"longitude":-118.4068,"isp":"Quadranet","hosts":[{"hostname":"us-ca1.gw.ivpn.net","host":"173.254.196.58","multihop_port":22201,"load":7.74},{"hostname":"us-ca2.gw.ivpn.net","host":"69.12.80.146","multihop_port":22401,"load":7.68},{"hostname":"us-ca3.gw.ivpn.net","host":"198.54.129.99","multihop_port":21301,"load":10.95},{"hostname":"us-ca4.gw.ivpn.net","host":"173.254.204.202","multihop_port":21901,"load":7.8}]},{"gateway":"ro.gw.ivpn.net","country_code":"RO","country":"Romania","city":"Bucharest","latitude":44.4334,"longitude":26.0999,"isp":"M247","hosts":[{"hostname":"ro1.gw.ivpn.net","host":"37.120.206.50","multihop_port":22301,"load":62.36}]},{"gateway":"de.gw.ivpn.net","country_code":"DE","country":"Germany","city":"Frankfurt","latitude":50.1,"longitude":8.675,"isp":"Leaseweb","hosts":[{"hostname":"de1.gw.ivpn.net","host":"178.162.222.40","multihop_port":23001,"load":11.42},{"hostname":"de2.gw.ivpn.net","host":"178.162.211.114","multihop_port":22001,"load":60.22}]},{"gateway":"nl.gw.ivpn.net","country_code":"NL","country":"Netherlands","city":"Amsterdam","latitude":52.35,"longitude":4.9166,"isp":"Leaseweb","hosts":[{"hostname":"nl4.gw.ivpn.net","host":"95.211.172.95","multihop_port":23201,"load":10.5},{"hostname":"nl3.gw.ivpn.net","host":"95.211.172.68","multihop_port":23101,"load":11.84},{"hostname":"nl6.gw.ivpn.net","host":"95.211.187.228","multihop_port":24101,"load":17.21},{"hostname":"nl5.gw.ivpn.net","host":"95.211.187.222","multihop_port":23901,"load":15.1},{"hostname":"nl7.gw.ivpn.net","host":"95.211.95.22","multihop_port":22501,"load":13.02},{"hostname":"nl8.gw.ivpn.net","host":"95.211.172.18","multihop_port":22801,"load":19.77}]},{"gateway":"fr.gw.ivpn.net","country_code":"FR","country":"France","city":"Paris","latitude":48.8667,"longitude":2.3333,"isp":"Datapacket","hosts":[{"hostname":"fr1.gw.ivpn.net","host":"185.246.211.179","multihop_port":23401,"load":10.81}]},{"gateway":"is.gw.ivpn.net","country_code":"IS","country":"Iceland","city":"Reykjavik","latitude":64.15,"longitude":-21.95,"isp":"Advania","hosts":[{"hostname":"is1.gw.ivpn.net","host":"82.221.107.178","multihop_port":23501,"load":56.66}]},{"gateway":"hk.gw.ivpn.net","country_code":"HK","country":"Hong Kong","city":"Hong Kong","latitude":22.305,"longitude":114.185,"isp":"Leaseweb","hosts":[{"hostname":"hk1.gw.ivpn.net","host":"209.58.189.163","multihop_port":23301,"load":9.15},{"hostname":"hk2.gw.ivpn.net","host":"209.58.188.13","multihop_port":27501,"load":9.64}]},{"gateway":"us-tx.gw.ivpn.net","country_code":"US","country":"United States","city":"Dallas, TX","latitude":32.7936,"longitude":-96.7662,"isp":"Quadranet","hosts":[{"hostname":"us-tx1.gw.ivpn.net","host":"96.44.189.194","multihop_port":21001,"load":9.46},{"hostname":"us-tx2.gw.ivpn.net","host":"96.44.142.74","multihop_port":25001,"load":5.74}]},{"gateway":"gb.gw.ivpn.net","country_code":"GB","country":"United Kingdom","city":"London","latitude":51.5,"longitude":-0.1167,"isp":"Datapacket","hosts":[{"hostname":"gb2.gw.ivpn.net","host":"185.59.221.88","multihop_port":24201,"load":8.64},{"hostname":"gb1.gw.ivpn.net","host":"185.59.221.133","multihop_port":20801,"load":15.73}]},{"gateway":"us-ut.gw.ivpn.net","country_code":"US","country":"United States","city":"Salt Lake City, UT","latitude":40.7774,"longitude":-111.93,"isp":"100TB","hosts":[{"hostname":"us-ut1.gw.ivpn.net","host":"198.105.216.28","multihop_port":24401,"load":38.17}]},{"gateway":"it.gw.ivpn.net","country_code":"IT","country":"Italy","city":"Milan","latitude":45.47,"longitude":9.205,"isp":"SEFlow","hosts":[{"hostname":"it1.gw.ivpn.net","host":"158.58.172.73","multihop_port":24301,"load":40.7}]},{"gateway":"se.gw.ivpn.net","country_code":"SE","country":"Sweden","city":"Stockholm","latitude":59.3508,"longitude":18.0973,"isp":"GleSyS","hosts":[{"hostname":"se1.gw.ivpn.net","host":"80.67.10.138","multihop_port":24001,"load":17.76}]},{"gateway":"us-ga.gw.ivpn.net","country_code":"US","country":"United States","city":"Atlanta, GA","latitude":33.7627,"longitude":-84.4225,"isp":"Quadranet","hosts":[{"hostname":"us-ga1.gw.ivpn.net","host":"104.129.24.146","multihop_port":24501,"load":12.09},{"hostname":"us-ga2.gw.ivpn.net","host":"107.150.22.74","multihop_port":24810,"load":10.69}]},{"gateway":"us-fl.gw.ivpn.net","country_code":"US","country":"United States","city":"Miami, FL","latitude":25.7839,"longitude":-80.2102,"isp":"Quadranet","hosts":[{"hostname":"us-fl1.gw.ivpn.net","host":"173.44.49.90","multihop_port":24601,"load":10.87}]},{"gateway":"ca.gw.ivpn.net","country_code":"CA","country":"Canada","city":"Toronto","latitude":43.7,"longitude":-79.42,"isp":"Amanah","hosts":[{"hostname":"ca2.gw.ivpn.net","host":"172.86.186.170","multihop_port":22101,"load":40.55},{"hostname":"ca1.gw.ivpn.net","host":"104.254.90.178","multihop_port":23801,"load":85.21}]},{"gateway":"ch.gw.ivpn.net","country_code":"CH","country":"Switzerland","city":"Zurich","latitude":47.38,"longitude":8.55,"isp":"Privatelayer","hosts":[{"hostname":"ch3.gw.ivpn.net","host":"141.255.166.194","multihop_port":22901,"load":17.26},{"hostname":"ch1.gw.ivpn.net","host":"185.212.170.138","multihop_port":23601,"load":23.62}]},{"gateway":"us-il.gw.ivpn.net","country_code":"US","country":"United States","city":"Chicago, IL","latitude":41.8373,"longitude":-87.6862,"isp":"Quadranet","hosts":[{"hostname":"us-il1.gw.ivpn.net","host":"107.150.28.82","multihop_port":21401,"load":24.8}]},{"gateway":"us-nj.gw.ivpn.net","country_code":"US","country":"United States","city":"New Jersey, NJ","latitude":40.737764,"longitude":-74.151747,"isp":"Quadranet","hosts":[{"hostname":"us-nj3.gw.ivpn.net","host":"23.226.128.18","multihop_port":21610,"load":9.62},{"hostname":"us-nj4.gw.ivpn.net","host":"194.36.111.50","multihop_port":27401,"load":15.42}]},{"gateway":"es.gw.ivpn.net","country_code":"ES","country":"Spain","city":"Madrid","latitude":40.4,"longitude":-3.6834,"isp":"Datapacket","hosts":[{"hostname":"es1.gw.ivpn.net","host":"185.93.3.193","multihop_port":21501,"load":8.25}]},{"gateway":"us-ny.gw.ivpn.net","country_code":"US","country":"United States","city":"New York, NY","latitude":40.6943,"longitude":-73.9249,"isp":"M247","hosts":[{"hostname":"us-ny2.gw.ivpn.net","host":"212.103.48.194","multihop_port":21801,"load":5.8},{"hostname":"us-ny3.gw.ivpn.net","host":"89.187.178.144","multihop_port":27601,"load":9.72}]},{"gateway":"pl.gw.ivpn.net","country_code":"PL","country":"Poland","city":"Warsaw","latitude":52.25,"longitude":21,"isp":"Datapacket","hosts":[{"hostname":"pl1.gw.ivpn.net","host":"185.246.208.86","multihop_port":25101,"load":12.75}]},{"gateway":"cz.gw.ivpn.net","country_code":"CZ","country":"Czech Republic","city":"Prague","latitude":50.0833,"longitude":14.466,"isp":"Datapacket","hosts":[{"hostname":"cz1.gw.ivpn.net","host":"195.181.160.167","multihop_port":25201,"load":17.13}]},{"gateway":"no.gw.ivpn.net","country_code":"NO","country":"Norway","city":"Oslo","latitude":59.9167,"longitude":10.75,"isp":"Servetheworld","hosts":[{"hostname":"no1.gw.ivpn.net","host":"194.242.10.150","multihop_port":25301,"load":27.88}]},{"gateway":"hu.gw.ivpn.net","country_code":"HU","country":"Hungary","city":"Budapest","latitude":47.5,"longitude":19.0833,"isp":"M247","hosts":[{"hostname":"hu1.gw.ivpn.net","host":"185.189.114.186","multihop_port":25401,"load":44.48}]},{"gateway":"dk.gw.ivpn.net","country_code":"DK","country":"Denmark","city":"Copenhagen","latitude":55.6786,"longitude":12.5635,"isp":"M247","hosts":[{"hostname":"dk1.gw.ivpn.net","host":"185.245.84.226","multihop_port":25501,"load":21.92}]},{"gateway":"at.gw.ivpn.net","country_code":"AT","country":"Austria","city":"Vienna","latitude":48.2,"longitude":16.3666,"isp":"M247","hosts":[{"hostname":"at1.gw.ivpn.net","host":"185.244.212.66","multihop_port":25601,"load":94.1}]},{"gateway":"be.gw.ivpn.net","country_code":"BE","country":"Belgium","city":"Brussels","latitude":50.8333,"longitude":4.3333,"isp":"M247","hosts":[{"hostname":"be1.gw.ivpn.net","host":"194.187.251.10","multihop_port":25701,"load":39.45}]},{"gateway":"bg.gw.ivpn.net","country_code":"BG","country":"Bulgaria","city":"Sofia","latitude":42.6833,"longitude":23.3167,"isp":"M247","hosts":[{"hostname":"bg1.gw.ivpn.net","host":"82.102.23.18","multihop_port":25901,"load":100}]},{"gateway":"sk.gw.ivpn.net","country_code":"SK","country":"Slovakia","city":"Bratislava","latitude":48.15,"longitude":17.117,"isp":"M247","hosts":[{"hostname":"sk1.gw.ivpn.net","host":"185.245.85.250","multihop_port":25801,"load":100}]},{"gateway":"jp.gw.ivpn.net","country_code":"JP","country":"Japan","city":"Tokyo","latitude":35.685,"longitude":139.7514,"isp":"M247","hosts":[{"hostname":"jp1.gw.ivpn.net","host":"91.207.174.234","multihop_port":26201,"load":13.83}]},{"gateway":"sg.gw.ivpn.net","country_code":"SG","country":"Singapore","city":"Singapore","latitude":1.293,"longitude":103.8558,"isp":"M247","hosts":[{"hostname":"sg1.gw.ivpn.net","host":"185.128.24.186","multihop_port":26101,"load":15.55}]},{"gateway":"ua.gw.ivpn.net","country_code":"UA","country":"Ukraine","city":"Kharkiv","latitude":50,"longitude":36.25,"isp":"Xservers","hosts":[{"hostname":"ua1.gw.ivpn.net","host":"176.103.58.123","multihop_port":26301,"load":8.19}]},{"gateway":"fi.gw.ivpn.net","country_code":"FI","country":"Finland","city":"Helsinki","latitude":60.1756,"longitude":24.9341,"isp":"Creanova","hosts":[{"hostname":"fi1.gw.ivpn.net","host":"185.112.82.12","multihop_port":26001,"load":91.34}]},{"gateway":"us-az.gw.ivpn.net","country_code":"US","country":"United States","city":"Phoenix, AZ","latitude":33.5722,"longitude":-112.0891,"isp":"M247","hosts":[{"hostname":"us-az1.gw.ivpn.net","host":"193.37.254.130","multihop_port":26401,"load":5.95}]},{"gateway":"us-nv.gw.ivpn.net","country_code":"US","country":"United States","city":"Las Vegas, NV","latitude":36.2333,"longitude":-115.2654,"isp":"M247","hosts":[{"hostname":"us-nv1.gw.ivpn.net","host":"185.242.5.34","multihop_port":26501,"load":32.74}]},{"gateway":"au-nsw.gw.ivpn.net","country_code":"AU","country":"Australia","city":"Sydney","latitude":-33.92,"longitude":151.1852,"isp":"M247","hosts":[{"hostname":"au-nsw1.gw.ivpn.net","host":"46.102.153.242","multihop_port":26601,"load":13},{"hostname":"au-nsw2.gw.ivpn.net","host":"146.70.78.74","multihop_port":27801,"load":15.91}]},{"gateway":"br.gw.ivpn.net","country_code":"BR","country":"Brazil","city":"Franca","latitude":-20.53,"longitude":-47.39,"isp":"Qnax","hosts":[{"hostname":"br1.gw.ivpn.net","host":"45.162.229.130","multihop_port":26701,"load":33.79}]},{"gateway":"rs.gw.ivpn.net","country_code":"RS","country":"Serbia","city":"Belgrade","latitude":44.8186,"longitude":20.468,"isp":"M247","hosts":[{"hostname":"rs1.gw.ivpn.net","host":"141.98.103.250","multihop_port":26801,"load":32.35}]},{"gateway":"gb-man.gw.ivpn.net","country_code":"GB","country":"United Kingdom","city":"Manchester","latitude":53.5004,"longitude":-2.248,"isp":"M247","hosts":[{"hostname":"gb-man1.gw.ivpn.net","host":"89.238.141.228","multihop_port":26901,"load":17.64}]},{"gateway":"ca-qc.gw.ivpn.net","country_code":"CA","country":"Canada","city":"Montreal","latitude":45.5,"longitude":-73.5833,"isp":"M247","hosts":[{"hostname":"ca-qc1.gw.ivpn.net","host":"87.101.92.26","multihop_port":27001,"load":18.79}]},{"gateway":"pt.gw.ivpn.net","country_code":"PT","country":"Portugal","city":"Lisbon","latitude":38.7227,"longitude":-9.1449,"isp":"Hostwebis","hosts":[{"hostname":"pt1.gw.ivpn.net","host":"94.46.175.112","multihop_port":27101,"load":8.26}]},{"gateway":"lu.gw.ivpn.net","country_code":"LU","country":"Luxembourg","city":"Luxembourg","latitude":49.6117,"longitude":6.13,"isp":"Evoluso","hosts":[{"hostname":"lu1.gw.ivpn.net","host":"92.223.89.53","multihop_port":27201,"load":100}]},{"gateway":"il.gw.ivpn.net","country_code":"IL","country":"Israel","city":"Holon, Tel Aviv","latitude":32.08,"longitude":34.77,"isp":"HQServ","hosts":[{"hostname":"il1.gw.ivpn.net","host":"185.191.207.194","multihop_port":27301,"load":7.9}]},{"gateway":"us-va.gw.ivpn.net","country_code":"US","country":"United States","city":"Ashburn, VA","latitude":39.0437,"longitude":-77.4875,"isp":"Datapacket","hosts":[{"hostname":"us-va1.gw.ivpn.net","host":"37.19.206.105","multihop_port":27701,"load":49.85}]},{"gateway":"us-wa.gw.ivpn.net","country_code":"US","country":"United States","city":"Seattle, WA","latitude":47.6211,"longitude":-122.3244,"isp":"Tzulo","hosts":[{"hostname":"us-wa2.gw.ivpn.net","host":"198.44.131.3","multihop_port":27801,"load":16.43}]}],"config":{"antitracker":{"default":{"ip":"10.0.254.2","multihop-ip":"10.0.254.102"},"hardcore":{"ip":"10.0.254.3","multihop-ip":"10.0.254.103"}},"api":{"ips":["198.50.177.220","149.56.162.156","198.50.177.222","149.56.162.159","198.50.177.223"],"ipv6s":["2607:5300:203:1735::8888","2607:5300:203:1735::8","2607:5300:203:1735:6580:7300:0:aaaa"]},"ports":{"openvpn":[{"type":"UDP","port":"53"},{"type":"UDP","port":"80"},{"type":"UDP","port":"2049"},{"type":"UDP","port":"2050"},{"type":"UDP","port":"443"},{"type":"UDP","port":"1194"},{"type":"TCP","port":"80"},{"type":"TCP","port":"443"},{"type":"TCP","port":"1443"}],"wireguard":[{"type":"UDP","port":"53"},{"type":"UDP","port":"80"},{"type":"UDP","port":"443"},{"type":"UDP","port":"1194"},{"type":"UDP","port":"2049"},{"type":"UDP","port":"2050"},{"type":"UDP","port":"30587"},{"type":"UDP","port":"41893"},{"type":"UDP","port":"48574"},{"type":"UDP","port":"58237"}]}}} From 8c2acd7b13f96907c24f2ed7d57a5ecb1260e1c2 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Thu, 30 Jun 2022 10:35:40 +0200 Subject: [PATCH 018/121] feat(settings): update port information in VPNServerList.swift --- IVPNClient/Models/VPNServerList.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/IVPNClient/Models/VPNServerList.swift b/IVPNClient/Models/VPNServerList.swift index 4b8a24228..20e34ba57 100644 --- a/IVPNClient/Models/VPNServerList.swift +++ b/IVPNClient/Models/VPNServerList.swift @@ -148,11 +148,11 @@ class VPNServerList { if let openvpn = portsObj["openvpn"] as? [[String: Any]] { for port in openvpn { - let portNumber = port["port"] as? String ?? "0" + let portNumber = port["port"] as? Int ?? 0 if port["type"] as? String == "TCP" { - ports.append(ConnectionSettings.openvpn(.tcp, Int(portNumber) ?? 0)) + ports.append(ConnectionSettings.openvpn(.tcp, portNumber)) } else { - ports.append(ConnectionSettings.openvpn(.udp, Int(portNumber) ?? 0)) + ports.append(ConnectionSettings.openvpn(.udp, portNumber)) } } } From 1366e63ea8a3b66cf131e4c48105d7f25ed85656 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Thu, 30 Jun 2022 12:28:07 +0200 Subject: [PATCH 019/121] feat: add getAllHosts method in VPNServerList model --- IVPNClient/Models/Host.swift | 1 + IVPNClient/Models/VPNServerList.swift | 15 +++++++++++++++ .../ViewControllers/ServerViewController.swift | 2 +- IVPNClient/ViewModels/VPNServerViewModel.swift | 4 ++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/IVPNClient/Models/Host.swift b/IVPNClient/Models/Host.swift index e62b1adef..68b4d88a3 100644 --- a/IVPNClient/Models/Host.swift +++ b/IVPNClient/Models/Host.swift @@ -30,6 +30,7 @@ struct IPv6 { struct Host { var host: String + var hostName: String var publicKey: String var localIP: String var ipv6: IPv6? diff --git a/IVPNClient/Models/VPNServerList.swift b/IVPNClient/Models/VPNServerList.swift index 0328e880d..b56fc000c 100644 --- a/IVPNClient/Models/VPNServerList.swift +++ b/IVPNClient/Models/VPNServerList.swift @@ -166,6 +166,20 @@ class VPNServerList { return servers } + func getAllHosts() -> [VPNServer] { + var servers: [VPNServer] = [] + + for server in getServers() { + servers.append(server) + + for host in server.hosts { + servers.append(VPNServer(gateway: host.hostName, countryCode: "", country: "", city: "")) + } + } + + return servers + } + func getServer(byIpAddress ipAddress: String) -> VPNServer? { return getServers().first { $0.ipAddresses.first { $0 == ipAddress } != nil } } @@ -274,6 +288,7 @@ class VPNServerList { var newHost = Host( host: host["host"] as? String ?? "", + hostName: host["hostname"] as? String ?? "", publicKey: host["public_key"] as? String ?? "", localIP: host["local_ip"] as? String ?? "", multihopPort: host["multihop_port"] as? Int ?? 0 diff --git a/IVPNClient/Scenes/ViewControllers/ServerViewController.swift b/IVPNClient/Scenes/ViewControllers/ServerViewController.swift index d4be7c4d8..79b232208 100644 --- a/IVPNClient/Scenes/ViewControllers/ServerViewController.swift +++ b/IVPNClient/Scenes/ViewControllers/ServerViewController.swift @@ -45,7 +45,7 @@ class ServerViewController: UITableViewController { if isSearchActive { list = filteredCollection } else { - list = Application.shared.serverList.getServers() + list = Application.shared.serverList.getAllHosts() } list.insert(VPNServer(gateway: "", countryCode: "", country: "", city: "", fastest: false), at: 0) diff --git a/IVPNClient/ViewModels/VPNServerViewModel.swift b/IVPNClient/ViewModels/VPNServerViewModel.swift index 2b014f38a..1ff90d2ba 100644 --- a/IVPNClient/ViewModels/VPNServerViewModel.swift +++ b/IVPNClient/ViewModels/VPNServerViewModel.swift @@ -123,6 +123,10 @@ struct VPNServerViewModel { // MARK: - Methods - func formattedServerName(sort: ServersSort) -> String { + if server.city == "" && server.countryCode == "" && server.gateway != "" { + return server.gateway + } + guard sort != .country else { return "\(server.countryCode.uppercased()), \(server.city)" } From 41e2554e0287ed9e2cb464ba6ea89c97cc241d7d Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Thu, 30 Jun 2022 13:28:32 +0200 Subject: [PATCH 020/121] feat: add selectedHost property in Settings model --- IVPNClient/Models/Settings.swift | 3 +++ IVPNClient/Models/VPNServer.swift | 4 ++++ IVPNClient/Models/VPNServerList.swift | 2 +- .../ViewControllers/ServerViewController.swift | 17 ++++++++++++++++- IVPNClient/ViewModels/VPNServerViewModel.swift | 2 +- 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/IVPNClient/Models/Settings.swift b/IVPNClient/Models/Settings.swift index 22e2f0077..2daf5ae2d 100644 --- a/IVPNClient/Models/Settings.swift +++ b/IVPNClient/Models/Settings.swift @@ -44,6 +44,9 @@ class Settings { } } + var selectedHost: Host? + var selectedExitHost: Host? + var connectionProtocol: ConnectionSettings { didSet { saveConnectionProtocol() diff --git a/IVPNClient/Models/VPNServer.swift b/IVPNClient/Models/VPNServer.swift index f27a24dfb..e2c0027ea 100644 --- a/IVPNClient/Models/VPNServer.swift +++ b/IVPNClient/Models/VPNServer.swift @@ -113,6 +113,10 @@ class VPNServer { return location.distance(from: self.location) } + func getHost(hostName: String) -> Host? { + return hosts.first { $0.hostName == hostName } + } + static func == (lhs: VPNServer, rhs: VPNServer) -> Bool { return lhs.city == rhs.city && lhs.countryCode == rhs.countryCode } diff --git a/IVPNClient/Models/VPNServerList.swift b/IVPNClient/Models/VPNServerList.swift index b56fc000c..801b2bfa8 100644 --- a/IVPNClient/Models/VPNServerList.swift +++ b/IVPNClient/Models/VPNServerList.swift @@ -173,7 +173,7 @@ class VPNServerList { servers.append(server) for host in server.hosts { - servers.append(VPNServer(gateway: host.hostName, countryCode: "", country: "", city: "")) + servers.append(VPNServer(gateway: host.hostName, countryCode: "", country: "", city: server.city)) } } diff --git a/IVPNClient/Scenes/ViewControllers/ServerViewController.swift b/IVPNClient/Scenes/ViewControllers/ServerViewController.swift index 79b232208..1a82f053b 100644 --- a/IVPNClient/Scenes/ViewControllers/ServerViewController.swift +++ b/IVPNClient/Scenes/ViewControllers/ServerViewController.swift @@ -187,11 +187,22 @@ extension ServerViewController { extension ServerViewController { override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - guard indexPath.row < collection.count else { return } + guard indexPath.row < collection.count else { + return + } + var selectedHost: Host? var server = collection[indexPath.row] server.random = false + if server.countryCode == "" && server.gateway != "" { + let hostName = server.gateway + if let serverByCity = Application.shared.serverList.getServer(byCity: server.city) { + server = serverByCity + selectedHost = server.getHost(hostName: hostName) + } + } + if (!UserDefaults.shared.isMultiHop && indexPath.row == 1) || (UserDefaults.shared.isMultiHop && indexPath.row == 0) { server = Application.shared.serverList.getRandomServer(isExitServer: isExitServer) server.random = true @@ -214,9 +225,11 @@ extension ServerViewController { if isExitServer { Application.shared.settings.selectedExitServer = server + Application.shared.settings.selectedExitHost = selectedHost } else { if UserDefaults.shared.isMultiHop || indexPath.row > 0 || server.random { Application.shared.settings.selectedServer = server + Application.shared.settings.selectedHost = selectedHost Application.shared.settings.selectedServer.fastest = false } else { if let fastestServer = Application.shared.serverList.getFastestServer() { @@ -225,6 +238,7 @@ extension ServerViewController { } else { serverDifferentToSelectedServer = true Application.shared.settings.selectedServer = fastestServer + Application.shared.settings.selectedHost = selectedHost } } Application.shared.settings.selectedServer.fastest = true @@ -233,6 +247,7 @@ extension ServerViewController { if !UserDefaults.shared.isMultiHop { Application.shared.settings.selectedExitServer = Application.shared.serverList.getExitServer(entryServer: server) + Application.shared.settings.selectedExitHost = selectedHost } UserDefaults.standard.set(Application.shared.settings.selectedServer.fastest, forKey: UserDefaults.Key.fastestServerPreferred) } diff --git a/IVPNClient/ViewModels/VPNServerViewModel.swift b/IVPNClient/ViewModels/VPNServerViewModel.swift index 1ff90d2ba..137b7c085 100644 --- a/IVPNClient/ViewModels/VPNServerViewModel.swift +++ b/IVPNClient/ViewModels/VPNServerViewModel.swift @@ -123,7 +123,7 @@ struct VPNServerViewModel { // MARK: - Methods - func formattedServerName(sort: ServersSort) -> String { - if server.city == "" && server.countryCode == "" && server.gateway != "" { + if server.countryCode == "" && server.gateway != "" { return server.gateway } From 3aa284c8ae9fad682075525c1af034c6530a8648 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Fri, 1 Jul 2022 13:21:51 +0200 Subject: [PATCH 021/121] chore: update servers.json --- IVPNClient/Config/servers.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IVPNClient/Config/servers.json b/IVPNClient/Config/servers.json index 5745ff157..653218e7d 100644 --- a/IVPNClient/Config/servers.json +++ b/IVPNClient/Config/servers.json @@ -1 +1 @@ -{"wireguard":[{"gateway":"us-tx.wg.ivpn.net","country_code":"US","country":"United States","city":"Dallas, TX","latitude":32.7936,"longitude":-96.7662,"isp":"Quadranet","hosts":[{"hostname":"us-tx1.wg.ivpn.net","host":"198.55.124.114","public_key":"JPT1veXLmasj2uQDstX24mpR7VWD+GmV8JDkidkz91Q=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21010,"load":8.08},{"hostname":"us-tx01.wg.ivpn.net","host":"96.44.189.197","public_key":"LvWf548mFddi8PTrIGL6uD1/l85LU8z0Rc8tpvw2Vls=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21001,"load":9.46},{"hostname":"us-tx2.wg.ivpn.net","host":"96.44.142.77","public_key":"om8hOGUcEvoOhHvJZoBHxNF4jxY/+Ml9Iy1WOSC/pFo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25001,"load":5.74}]},{"gateway":"nl.wg.ivpn.net","country_code":"NL","country":"Netherlands","city":"Amsterdam","latitude":52.35,"longitude":4.9166,"isp":"Datapacket","hosts":[{"hostname":"nl1.wg.ivpn.net","host":"185.102.218.104","public_key":"AsMT2FqpkZbjzWeDch6GwufF5odl259W/hIkGytVfWo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20301,"load":18.43},{"hostname":"nl4.wg.ivpn.net","host":"95.211.95.19","public_key":"cVB66gPq5cZ9dfXY+e2pbsCyih5o1zk04l5c5VCsV1g=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23201,"load":10.5},{"hostname":"nl3.wg.ivpn.net","host":"95.211.95.9","public_key":"XDU6Syq1DY82IMatsHV0x/TAtbLiRwh/SdFCXlEn40c=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23101,"load":11.84},{"hostname":"nl6.wg.ivpn.net","host":"95.211.243.182","public_key":"hMWpqb3FEATHIbImPVWB/5z2nWIXghwpnJjevPY+1H0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24101,"load":17.21},{"hostname":"nl5.wg.ivpn.net","host":"95.211.243.162","public_key":"NCagAawwRixI6Iw/NWiGD8lbjDNCl0aTICZKJtO/1HA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23901,"load":15.1},{"hostname":"nl7.wg.ivpn.net","host":"95.211.172.105","public_key":"hQNYqtfOOAEz0IGshLx/TI9hUrfR9gIIkjVm4VsCbBM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22501,"load":13.02},{"hostname":"nl8.wg.ivpn.net","host":"95.211.198.167","public_key":"/nY1/OhVhdHtbnU/s31zYUuPBH0pizv4DemW5KDOUkg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22801,"load":19.77}]},{"gateway":"de.wg.ivpn.net","country_code":"DE","country":"Germany","city":"Frankfurt","latitude":50.1,"longitude":8.675,"isp":"Datapacket","hosts":[{"hostname":"de1.wg.ivpn.net","host":"185.102.219.26","public_key":"mS3/WpXjnMAMmXjSpd4nFzx9HSE3ubv2WyjpyH2REgs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23010,"load":8.9},{"hostname":"de01.wg.ivpn.net","host":"178.162.212.24","public_key":"Sc5AUZieg0qX8kyCy9p0OHRES4n0CHtHHM+ZPyERFTc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23001,"load":11.42},{"hostname":"de2.wg.ivpn.net","host":"37.58.60.151","public_key":"QhY3OtBf4FFafKtLO33e6k8JnAl8e6ktFcRUyLjCDVY=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22001,"load":60.22}]},{"gateway":"us-il.wg.ivpn.net","country_code":"US","country":"United States","city":"Chicago, IL","latitude":41.8373,"longitude":-87.6862,"isp":"Datapacket","hosts":[{"hostname":"us-il1.wg.ivpn.net","host":"89.187.181.116","public_key":"hku9gjamhoii8OvxZgx+TdUDIkOAQYFu39qbav2AyUQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21410,"load":58.43},{"hostname":"us-il01.wg.ivpn.net","host":"72.11.137.158","public_key":"Uy5a8JOqneAUY1dC5s9jubLnotbyIfBsLP2nZuzRbHs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21401,"load":24.8}]},{"gateway":"us-ga.wg.ivpn.net","country_code":"US","country":"United States","city":"Atlanta, GA","latitude":33.7627,"longitude":-84.4225,"isp":"Datapacket","hosts":[{"hostname":"us-ga1.wg.ivpn.net","host":"185.93.0.212","public_key":"jD8h+pL5/d6fmYcTzl0lR8AWzQVN5XkwRFSmM/3NcDM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24510,"load":8.59},{"hostname":"us-ga01.wg.ivpn.net","host":"104.129.24.149","public_key":"EJFl28aYpZKfmJqb1jxxTEnGx6kaH2USVrigpHKKXhs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24501,"load":12.09},{"hostname":"us-ga2.wg.ivpn.net","host":"107.150.22.77","public_key":"hr2uQOEGCvGeDkoCQJ2dCI8dM8Iu5aKhb1PIvJ9q72E=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24810,"load":10.69}]},{"gateway":"us-ca.wg.ivpn.net","country_code":"US","country":"United States","city":"Los Angeles, CA","latitude":34.1139,"longitude":-118.4068,"isp":"Datapacket","hosts":[{"hostname":"us-ca1.wg.ivpn.net","host":"185.180.13.41","public_key":"FGl78s9Ct6xNamQ2/CtAyXwGePrrU0kiZxfM27pm8XA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22210,"load":8.14},{"hostname":"us-ca01.wg.ivpn.net","host":"216.144.236.44","public_key":"B+qXdkIuETpzI0bfhGUAHN4SU91Tjs6ItdFlu93S42I=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22201,"load":7.74},{"hostname":"us-ca2.wg.ivpn.net","host":"216.144.236.68","public_key":"qv4Tupfon5NUSwzDpM8zPizSwJZn2h+9CqrufcyDOko=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22401,"load":7.68},{"hostname":"us-ca3.wg.ivpn.net","host":"198.54.129.100","public_key":"J5+Bx84LxNPdWEhewOvBV/fGWiDluIBlAcr1QlJZil8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21301,"load":10.95},{"hostname":"us-ca4.wg.ivpn.net","host":"216.144.237.83","public_key":"dYPXYr6HSRJPe3MhALwGWNtdEy1+EPE9Kqv7cTrUXk8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21901,"load":7.8}]},{"gateway":"ca-qc.wg.ivpn.net","country_code":"CA","country":"Canada","city":"Montreal","latitude":45.5,"longitude":-73.5833,"isp":"M247","hosts":[{"hostname":"ca1.wg.ivpn.net","host":"37.120.130.58","public_key":"rg+GGDmjM4Vxo1hURvKmgm9yonb6qcoKbPCP/DNDBnI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23810,"load":19.04},{"hostname":"ca-qc1.wg.ivpn.net","host":"87.101.92.29","public_key":"98JU1mdCR8vD1aNZg017/NjBeTjuuCKUaLw0zfz/CUE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27001,"load":18.79}]},{"gateway":"gb.wg.ivpn.net","country_code":"GB","country":"United Kingdom","city":"London","latitude":51.5,"longitude":-0.1167,"isp":"M247","hosts":[{"hostname":"gb1.wg.ivpn.net","host":"81.92.202.114","public_key":"7+jos+Eg+hMEOQE4Std6OJ+WVnCcmbqS1/EbPwn9w3s=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20810,"load":7.64},{"hostname":"gb2.wg.ivpn.net","host":"185.59.221.225","public_key":"x0BTRaxsdxAd58ZyU2YMX4bmuj+Eg+8/urT2F3Vs1n8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24201,"load":8.64},{"hostname":"gb01.wg.ivpn.net","host":"185.59.221.140","public_key":"yKK5x+D17Jr3Q12T/UBaDjNVmNdZBsqpvTqH6YfsGHg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20801,"load":15.73}]},{"gateway":"us-ny.wg.ivpn.net","country_code":"US","country":"United States","city":"New York, NY","latitude":40.6943,"longitude":-73.9249,"isp":"M247","hosts":[{"hostname":"us-ny1.wg.ivpn.net","host":"91.132.137.170","public_key":"6/tjvgb7HFl7UuvBSegolxa1zKr3iSlDrlCexCmhAGE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21210,"load":40.08},{"hostname":"us-ny2.wg.ivpn.net","host":"212.103.48.195","public_key":"c7DwY2uT+6ulWAJ5u8qJNWHroA0qyJLcdNzf/f2kkhs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21801,"load":5.8},{"hostname":"us-ny3.wg.ivpn.net","host":"89.187.178.145","public_key":"m5/Ssw9SN3WuE+yD/fAsH5G8iuI8TcDGEiZZnPgiMCc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27601,"load":9.72}]},{"gateway":"se.wg.ivpn.net","country_code":"SE","country":"Sweden","city":"Stockholm","latitude":59.3508,"longitude":18.0973,"isp":"M247","hosts":[{"hostname":"se1.wg.ivpn.net","host":"37.120.153.226","public_key":"2n0nFE1g/+vQr2AOQPm9Igyiy0zh9uTTultvOOSkMRo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24010,"load":9.62},{"hostname":"se01.wg.ivpn.net","host":"80.67.10.141","public_key":"u8VHnYEpoEjJWDAF9NAUkU6s810RnkMuhEfFD9U0cGo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24001,"load":17.76}]},{"gateway":"sg.wg.ivpn.net","country_code":"SG","country":"Singapore","city":"Singapore","latitude":1.293,"longitude":103.8558,"isp":"M247","hosts":[{"hostname":"sg1.wg.ivpn.net","host":"37.120.151.122","public_key":"hSg0At4uwuIhmTy5UT4fRbi5AN6JO2ZWTuIvqd4nHCE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26110,"load":7.69},{"hostname":"sg01.wg.ivpn.net","host":"185.128.24.189","public_key":"pWk0u1Xq8FHC+xpkN+C6yEKOTEanorR5zMCSfHlLzFw=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26101,"load":15.55}]},{"gateway":"ch.wg.ivpn.net","country_code":"CH","country":"Switzerland","city":"Zurich","latitude":47.38,"longitude":8.55,"isp":"Privatelayer","hosts":[{"hostname":"ch1.wg.ivpn.net","host":"141.255.164.66","public_key":"jVZJ61i1xxkAfriDHpwvF/GDuTvZUqhwoWSjkOJvaUA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23610,"load":6.98},{"hostname":"ch3.wg.ivpn.net","host":"141.255.166.198","public_key":"JBpgBKtqIneRuEga7mbP2PAk/e4HPRaC11H0A0+R3lA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22901,"load":17.26},{"hostname":"ch01.wg.ivpn.net","host":"185.212.170.141","public_key":"dU7gLfcupYd37LW0q6cxC6PHMba+eUFAUOoU/ryXZkY=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23601,"load":23.62}]},{"gateway":"it.wg.ivpn.net","country_code":"IT","country":"Italy","city":"Milan","latitude":45.47,"longitude":9.205,"isp":"M247","hosts":[{"hostname":"it1.wg.ivpn.net","host":"82.102.21.90","public_key":"Aj6b81yrDk7I913R+fuSW/NAmIl87N73vHgY5/WQY0Q=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24310,"load":5.87},{"hostname":"it01.wg.ivpn.net","host":"158.58.172.89","public_key":"QTzR5R6jeDI/cQ0CXPIqOby9GR5nn+4Bcf4bK536Vy0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24301,"load":40.7}]},{"gateway":"ro.wg.ivpn.net","country_code":"RO","country":"Romania","city":"Bucharest","latitude":44.4334,"longitude":26.0999,"isp":"M247","hosts":[{"hostname":"ro1.wg.ivpn.net","host":"37.120.206.53","public_key":"F2uQ57hysZTlw8WYELnyCw9Lga80wNYoYwkrrxyXKmw=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22301,"load":62.36}]},{"gateway":"fr.wg.ivpn.net","country_code":"FR","country":"France","city":"Paris","latitude":48.8667,"longitude":2.3333,"isp":"Datapacket","hosts":[{"hostname":"fr1.wg.ivpn.net","host":"185.246.211.185","public_key":"g7BuMzj3r/noLiLR4qhQMcvU6GSIY8RGEnaYtdYsFX4=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23401,"load":10.81}]},{"gateway":"is.wg.ivpn.net","country_code":"IS","country":"Iceland","city":"Reykjavik","latitude":64.15,"longitude":-21.95,"isp":"Advania","hosts":[{"hostname":"is1.wg.ivpn.net","host":"82.221.107.185","public_key":"nZZT6TlQ2dXlVe3P3B5ozEScHYMWH4JY4y3to8w5dz0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23501,"load":56.66}]},{"gateway":"hk.wg.ivpn.net","country_code":"HK","country":"Hong Kong","city":"Hong Kong","latitude":22.305,"longitude":114.185,"isp":"Leaseweb","hosts":[{"hostname":"hk1.wg.ivpn.net","host":"209.58.189.105","public_key":"MbqqGy6TI2WVxHYdMa7X1LJoIEQNElhYXMGlMqtwtS0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23301,"load":9.15},{"hostname":"hk2.wg.ivpn.net","host":"64.120.120.239","public_key":"kyolyq4cJydI3vQB2ESTIUAy2Fq0bpOf+Qe7GIq6XEA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27501,"load":9.64}]},{"gateway":"us-ut.wg.ivpn.net","country_code":"US","country":"United States","city":"Salt Lake City, UT","latitude":40.7774,"longitude":-111.93,"isp":"100TB","hosts":[{"hostname":"us-ut1.wg.ivpn.net","host":"206.190.145.92","public_key":"KirI7bpxD186CuYiOqNHF+QUe6YmRYf6CN3pXWOJT2k=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24401,"load":38.17}]},{"gateway":"us-fl.wg.ivpn.net","country_code":"US","country":"United States","city":"Miami, FL","latitude":25.7839,"longitude":-80.2102,"isp":"Quadranet","hosts":[{"hostname":"us-fl1.wg.ivpn.net","host":"173.44.49.93","public_key":"Rkzo9WgxJBiKyEbkZvqGWtOVh9Gk9Vd7wL49SHXdHig=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24601,"load":10.87}]},{"gateway":"ca.wg.ivpn.net","country_code":"CA","country":"Canada","city":"Toronto","latitude":43.7,"longitude":-79.42,"isp":"Amanah","hosts":[{"hostname":"ca2.wg.ivpn.net","host":"172.86.186.173","public_key":"5qHV10ZbFgEGnF6wg9QpKeh1l6Di2JUG/5PdNaaoNW8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22101,"load":40.55},{"hostname":"ca01.wg.ivpn.net","host":"104.254.90.181","public_key":"mdGnCZwinuOVGg46zsWnFhhenfFId6jht9GBTKB+xUA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23801,"load":85.21}]},{"gateway":"us-nj.wg.ivpn.net","country_code":"US","country":"United States","city":"New Jersey, NJ","latitude":40.737764,"longitude":-74.151747,"isp":"Quadranet","hosts":[{"hostname":"us-nj3.wg.ivpn.net","host":"23.226.128.21","public_key":"AX7C1LO0ECUcHRYgX4/tIDYdR8npvfB/+pf4AfI3OHU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21610,"load":9.62},{"hostname":"us-nj4.wg.ivpn.net","host":"194.36.111.54","public_key":"1Te4AfL1yKo2k4jzPALnRPfKE3YSzXKo4XIRHPz5FxI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27401,"load":15.42}]},{"gateway":"es.wg.ivpn.net","country_code":"ES","country":"Spain","city":"Madrid","latitude":40.4,"longitude":-3.6834,"isp":"Datapacket","hosts":[{"hostname":"es1.wg.ivpn.net","host":"84.17.62.98","public_key":"w7umiArTtlJ4Pk6Ii9WX5VXK5vw/Qu+Z37/icKlIYWo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21501,"load":8.25}]},{"gateway":"pl.wg.ivpn.net","country_code":"PL","country":"Poland","city":"Warsaw","latitude":52.25,"longitude":21,"isp":"Datapacket","hosts":[{"hostname":"pl1.wg.ivpn.net","host":"185.246.208.109","public_key":"1JDmF79rWj5C+kHp71AbdHne/yGaizWCd2bLfSFvYjo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25101,"load":12.75}]},{"gateway":"cz.wg.ivpn.net","country_code":"CZ","country":"Czech Republic","city":"Prague","latitude":50.0833,"longitude":14.466,"isp":"Datapacket","hosts":[{"hostname":"cz1.wg.ivpn.net","host":"185.180.14.41","public_key":"gVbEq2cGRzwCSGPqT2oRSYYN+P6IK3uvvRffErASDSk=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25201,"load":17.13}]},{"gateway":"no.wg.ivpn.net","country_code":"NO","country":"Norway","city":"Oslo","latitude":59.9167,"longitude":10.75,"isp":"Servetheworld","hosts":[{"hostname":"no1.wg.ivpn.net","host":"91.189.177.156","public_key":"xFO6ksbO3Gr05rRgAW0O5Veoi4bpTgz2G9RvtBzK7Cg=","local_ip":"172.16.0.1/12","ipv6":{},"multihop_port":25301,"load":0}]},{"gateway":"hu.wg.ivpn.net","country_code":"HU","country":"Hungary","city":"Budapest","latitude":47.5,"longitude":19.0833,"isp":"M247","hosts":[{"hostname":"hu1.wg.ivpn.net","host":"185.189.114.189","public_key":"G30fNdXrnlqtqqOLF23QXWzFdLIKDxLW60HoYPvqml8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25401,"load":44.48}]},{"gateway":"dk.wg.ivpn.net","country_code":"DK","country":"Denmark","city":"Copenhagen","latitude":55.6786,"longitude":12.5635,"isp":"M247","hosts":[{"hostname":"dk1.wg.ivpn.net","host":"185.245.84.229","public_key":"jTsV5gOD7lT4egDj9rhKwO2OO2X7bKs2EQPcZEnUWDE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25501,"load":21.92}]},{"gateway":"at.wg.ivpn.net","country_code":"AT","country":"Austria","city":"Vienna","latitude":48.2,"longitude":16.3666,"isp":"M247","hosts":[{"hostname":"at1.wg.ivpn.net","host":"185.244.212.69","public_key":"83LUBnP97SFpnS0y1MpEAFcg8MIiQJgW1FRv/8Mc40g=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25601,"load":94.1}]},{"gateway":"be.wg.ivpn.net","country_code":"BE","country":"Belgium","city":"Brussels","latitude":50.8333,"longitude":4.3333,"isp":"M247","hosts":[{"hostname":"be1.wg.ivpn.net","host":"194.187.251.13","public_key":"awriP5lpdxEMWKuG+A1DOg+vb1M5jd3WhynIMB61BhU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25701,"load":39.45}]},{"gateway":"bg.wg.ivpn.net","country_code":"BG","country":"Bulgaria","city":"Sofia","latitude":42.6833,"longitude":23.3167,"isp":"M247","hosts":[{"hostname":"bg1.wg.ivpn.net","host":"82.102.23.21","public_key":"WDSsdJE6wvATIWfzQwayPtE/0DaXBQgW/hPm7sQSJmU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25901,"load":100}]},{"gateway":"sk.wg.ivpn.net","country_code":"SK","country":"Slovakia","city":"Bratislava","latitude":48.15,"longitude":17.117,"isp":"M247","hosts":[{"hostname":"sk1.wg.ivpn.net","host":"185.245.85.253","public_key":"MOBWWpEgNsKbFj4BEyWSDFLlkBs5iUFiqdSdTFTDBko=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25801,"load":100}]},{"gateway":"jp.wg.ivpn.net","country_code":"JP","country":"Japan","city":"Tokyo","latitude":35.685,"longitude":139.7514,"isp":"M247","hosts":[{"hostname":"jp1.wg.ivpn.net","host":"91.207.174.237","public_key":"tb9WdC3LSho3d1rI5N7kfG9e42/d+u4LPVdEYERPsSQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26201,"load":13.83}]},{"gateway":"ua.wg.ivpn.net","country_code":"UA","country":"Ukraine","city":"Kharkiv","latitude":50,"longitude":36.25,"isp":"Xservers","hosts":[{"hostname":"ua1.wg.ivpn.net","host":"176.103.57.129","public_key":"mIxEzfjZ2wV6jJVj30w38ECd2LSH4bw/HLMnM2ICHiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26301,"load":8.19}]},{"gateway":"fi.wg.ivpn.net","country_code":"FI","country":"Finland","city":"Helsinki","latitude":60.1756,"longitude":24.9341,"isp":"Creanova","hosts":[{"hostname":"fi1.wg.ivpn.net","host":"194.34.134.63","public_key":"mIxEzfjZ2wV6jJVj30w38ECd2LSH4bw/HLMnM2ICHiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26001,"load":91.34}]},{"gateway":"us-az.wg.ivpn.net","country_code":"US","country":"United States","city":"Phoenix, AZ","latitude":33.5722,"longitude":-112.0891,"isp":"M247","hosts":[{"hostname":"us-az1.wg.ivpn.net","host":"193.37.254.133","public_key":"Ts4MGazxpxL9rrYbERjgxa+kCEX85ou9gHoaJvDsRiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26401,"load":5.95}]},{"gateway":"us-nv.wg.ivpn.net","country_code":"US","country":"United States","city":"Las Vegas, NV","latitude":36.2333,"longitude":-115.2654,"isp":"M247","hosts":[{"hostname":"us-nv1.wg.ivpn.net","host":"185.242.5.37","public_key":"PRpvAZyoNWNm/KHlqafjtYoZtn1PkIPylUE4WbuYmgM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26501,"load":32.74}]},{"gateway":"au-nsw.wg.ivpn.net","country_code":"AU","country":"Australia","city":"Sydney","latitude":-33.92,"longitude":151.1852,"isp":"M247","hosts":[{"hostname":"au-nsw1.wg.ivpn.net","host":"46.102.153.246","public_key":"KmSrG48t5xw9CJCPlYLBG3JnmiY0CnUgyRM5TUEwZhM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26601,"load":13},{"hostname":"au-nsw2.wg.ivpn.net","host":"146.70.78.75","public_key":"q+wbp7GjiTszp5G16rNpGCqxkL0qSY3CH4pcgD6UsVQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27801,"load":15.91}]},{"gateway":"br.wg.ivpn.net","country_code":"BR","country":"Brazil","city":"Franca","latitude":-20.53,"longitude":-47.39,"isp":"Qnax","hosts":[{"hostname":"br1.wg.ivpn.net","host":"45.162.229.133","public_key":"eN1f15S3YzRyYCALiPGRQcjkQO9xntcdqPhJJ6TOymc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26701,"load":33.79}]},{"gateway":"rs.wg.ivpn.net","country_code":"RS","country":"Serbia","city":"Belgrade","latitude":44.8186,"longitude":20.468,"isp":"M247","hosts":[{"hostname":"rs1.wg.ivpn.net","host":"141.98.103.253","public_key":"xLN/lpQThQ3z3tvYf7VqdAsRL/nton1Vhv2kCZlQtWE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26801,"load":32.35}]},{"gateway":"gb-man.wg.ivpn.net","country_code":"GB","country":"United Kingdom","city":"Manchester","latitude":53.5004,"longitude":-2.248,"isp":"M247","hosts":[{"hostname":"gb-man1.wg.ivpn.net","host":"89.238.141.231","public_key":"+hf4DYilNEIjTdSOuCNcWdqVyaRoxGzXw7wvNl7f7Rg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26901,"load":17.64}]},{"gateway":"pt.wg.ivpn.net","country_code":"PT","country":"Portugal","city":"Lisbon","latitude":38.7227,"longitude":-9.1449,"isp":"Hostwebis","hosts":[{"hostname":"pt1.wg.ivpn.net","host":"94.46.175.113","public_key":"nMnA82YVrvEK80GVoY/0Z9McWeqjcLzuMYSL+86j5nU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27101,"load":8.26}]},{"gateway":"lu.wg.ivpn.net","country_code":"LU","country":"Luxembourg","city":"Luxembourg","latitude":49.6117,"longitude":6.13,"isp":"Evoluso","hosts":[{"hostname":"lu1.wg.ivpn.net","host":"92.223.89.57","public_key":"hUS1OAFLGwpba8+oc5mifYtohZt/RTro5dMyYBLYHjI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27201,"load":100}]},{"gateway":"il.wg.ivpn.net","country_code":"IL","country":"Israel","city":"Holon, Tel Aviv","latitude":32.08,"longitude":34.77,"isp":"HQServ","hosts":[{"hostname":"il01.wg.ivpn.net","host":"185.191.207.197","public_key":"HR9gAjpxXU3YVt6kehBw5n8yVYVE0iIgJdc4HTqOzEE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27301,"load":7.9}]},{"gateway":"us-va.wg.ivpn.net","country_code":"US","country":"United States","city":"Ashburn, VA","latitude":39.0437,"longitude":-77.4875,"isp":"Datapacket","hosts":[{"hostname":"us-va1.wg.ivpn.net","host":"37.19.206.106","public_key":"ZCnZK6U+cRuP/WgzIDb/P6UG2rX/KyCRd5vJ1hAbr2E=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27701,"load":49.85}]},{"gateway":"us-wa.wg.ivpn.net","country_code":"US","country":"United States","city":"Seattle, WA","latitude":47.6211,"longitude":-122.3244,"isp":"Tzulo","hosts":[{"hostname":"us-wa2.wg.ivpn.net","host":"198.44.131.4","public_key":"VcrOOozBUCIURU0AnqMAE7AkMmC7Qrp+j/PzPbgbalU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27801,"load":16.43}]}],"openvpn":[{"gateway":"us-ca.gw.ivpn.net","country_code":"US","country":"United States","city":"Los Angeles, CA","latitude":34.1139,"longitude":-118.4068,"isp":"Quadranet","hosts":[{"hostname":"us-ca1.gw.ivpn.net","host":"173.254.196.58","multihop_port":22201,"load":7.74},{"hostname":"us-ca2.gw.ivpn.net","host":"69.12.80.146","multihop_port":22401,"load":7.68},{"hostname":"us-ca3.gw.ivpn.net","host":"198.54.129.99","multihop_port":21301,"load":10.95},{"hostname":"us-ca4.gw.ivpn.net","host":"173.254.204.202","multihop_port":21901,"load":7.8}]},{"gateway":"ro.gw.ivpn.net","country_code":"RO","country":"Romania","city":"Bucharest","latitude":44.4334,"longitude":26.0999,"isp":"M247","hosts":[{"hostname":"ro1.gw.ivpn.net","host":"37.120.206.50","multihop_port":22301,"load":62.36}]},{"gateway":"de.gw.ivpn.net","country_code":"DE","country":"Germany","city":"Frankfurt","latitude":50.1,"longitude":8.675,"isp":"Leaseweb","hosts":[{"hostname":"de1.gw.ivpn.net","host":"178.162.222.40","multihop_port":23001,"load":11.42},{"hostname":"de2.gw.ivpn.net","host":"178.162.211.114","multihop_port":22001,"load":60.22}]},{"gateway":"nl.gw.ivpn.net","country_code":"NL","country":"Netherlands","city":"Amsterdam","latitude":52.35,"longitude":4.9166,"isp":"Leaseweb","hosts":[{"hostname":"nl4.gw.ivpn.net","host":"95.211.172.95","multihop_port":23201,"load":10.5},{"hostname":"nl3.gw.ivpn.net","host":"95.211.172.68","multihop_port":23101,"load":11.84},{"hostname":"nl6.gw.ivpn.net","host":"95.211.187.228","multihop_port":24101,"load":17.21},{"hostname":"nl5.gw.ivpn.net","host":"95.211.187.222","multihop_port":23901,"load":15.1},{"hostname":"nl7.gw.ivpn.net","host":"95.211.95.22","multihop_port":22501,"load":13.02},{"hostname":"nl8.gw.ivpn.net","host":"95.211.172.18","multihop_port":22801,"load":19.77}]},{"gateway":"fr.gw.ivpn.net","country_code":"FR","country":"France","city":"Paris","latitude":48.8667,"longitude":2.3333,"isp":"Datapacket","hosts":[{"hostname":"fr1.gw.ivpn.net","host":"185.246.211.179","multihop_port":23401,"load":10.81}]},{"gateway":"is.gw.ivpn.net","country_code":"IS","country":"Iceland","city":"Reykjavik","latitude":64.15,"longitude":-21.95,"isp":"Advania","hosts":[{"hostname":"is1.gw.ivpn.net","host":"82.221.107.178","multihop_port":23501,"load":56.66}]},{"gateway":"hk.gw.ivpn.net","country_code":"HK","country":"Hong Kong","city":"Hong Kong","latitude":22.305,"longitude":114.185,"isp":"Leaseweb","hosts":[{"hostname":"hk1.gw.ivpn.net","host":"209.58.189.163","multihop_port":23301,"load":9.15},{"hostname":"hk2.gw.ivpn.net","host":"209.58.188.13","multihop_port":27501,"load":9.64}]},{"gateway":"us-tx.gw.ivpn.net","country_code":"US","country":"United States","city":"Dallas, TX","latitude":32.7936,"longitude":-96.7662,"isp":"Quadranet","hosts":[{"hostname":"us-tx1.gw.ivpn.net","host":"96.44.189.194","multihop_port":21001,"load":9.46},{"hostname":"us-tx2.gw.ivpn.net","host":"96.44.142.74","multihop_port":25001,"load":5.74}]},{"gateway":"gb.gw.ivpn.net","country_code":"GB","country":"United Kingdom","city":"London","latitude":51.5,"longitude":-0.1167,"isp":"Datapacket","hosts":[{"hostname":"gb2.gw.ivpn.net","host":"185.59.221.88","multihop_port":24201,"load":8.64},{"hostname":"gb1.gw.ivpn.net","host":"185.59.221.133","multihop_port":20801,"load":15.73}]},{"gateway":"us-ut.gw.ivpn.net","country_code":"US","country":"United States","city":"Salt Lake City, UT","latitude":40.7774,"longitude":-111.93,"isp":"100TB","hosts":[{"hostname":"us-ut1.gw.ivpn.net","host":"198.105.216.28","multihop_port":24401,"load":38.17}]},{"gateway":"it.gw.ivpn.net","country_code":"IT","country":"Italy","city":"Milan","latitude":45.47,"longitude":9.205,"isp":"SEFlow","hosts":[{"hostname":"it1.gw.ivpn.net","host":"158.58.172.73","multihop_port":24301,"load":40.7}]},{"gateway":"se.gw.ivpn.net","country_code":"SE","country":"Sweden","city":"Stockholm","latitude":59.3508,"longitude":18.0973,"isp":"GleSyS","hosts":[{"hostname":"se1.gw.ivpn.net","host":"80.67.10.138","multihop_port":24001,"load":17.76}]},{"gateway":"us-ga.gw.ivpn.net","country_code":"US","country":"United States","city":"Atlanta, GA","latitude":33.7627,"longitude":-84.4225,"isp":"Quadranet","hosts":[{"hostname":"us-ga1.gw.ivpn.net","host":"104.129.24.146","multihop_port":24501,"load":12.09},{"hostname":"us-ga2.gw.ivpn.net","host":"107.150.22.74","multihop_port":24810,"load":10.69}]},{"gateway":"us-fl.gw.ivpn.net","country_code":"US","country":"United States","city":"Miami, FL","latitude":25.7839,"longitude":-80.2102,"isp":"Quadranet","hosts":[{"hostname":"us-fl1.gw.ivpn.net","host":"173.44.49.90","multihop_port":24601,"load":10.87}]},{"gateway":"ca.gw.ivpn.net","country_code":"CA","country":"Canada","city":"Toronto","latitude":43.7,"longitude":-79.42,"isp":"Amanah","hosts":[{"hostname":"ca2.gw.ivpn.net","host":"172.86.186.170","multihop_port":22101,"load":40.55},{"hostname":"ca1.gw.ivpn.net","host":"104.254.90.178","multihop_port":23801,"load":85.21}]},{"gateway":"ch.gw.ivpn.net","country_code":"CH","country":"Switzerland","city":"Zurich","latitude":47.38,"longitude":8.55,"isp":"Privatelayer","hosts":[{"hostname":"ch3.gw.ivpn.net","host":"141.255.166.194","multihop_port":22901,"load":17.26},{"hostname":"ch1.gw.ivpn.net","host":"185.212.170.138","multihop_port":23601,"load":23.62}]},{"gateway":"us-il.gw.ivpn.net","country_code":"US","country":"United States","city":"Chicago, IL","latitude":41.8373,"longitude":-87.6862,"isp":"Quadranet","hosts":[{"hostname":"us-il1.gw.ivpn.net","host":"107.150.28.82","multihop_port":21401,"load":24.8}]},{"gateway":"us-nj.gw.ivpn.net","country_code":"US","country":"United States","city":"New Jersey, NJ","latitude":40.737764,"longitude":-74.151747,"isp":"Quadranet","hosts":[{"hostname":"us-nj3.gw.ivpn.net","host":"23.226.128.18","multihop_port":21610,"load":9.62},{"hostname":"us-nj4.gw.ivpn.net","host":"194.36.111.50","multihop_port":27401,"load":15.42}]},{"gateway":"es.gw.ivpn.net","country_code":"ES","country":"Spain","city":"Madrid","latitude":40.4,"longitude":-3.6834,"isp":"Datapacket","hosts":[{"hostname":"es1.gw.ivpn.net","host":"185.93.3.193","multihop_port":21501,"load":8.25}]},{"gateway":"us-ny.gw.ivpn.net","country_code":"US","country":"United States","city":"New York, NY","latitude":40.6943,"longitude":-73.9249,"isp":"M247","hosts":[{"hostname":"us-ny2.gw.ivpn.net","host":"212.103.48.194","multihop_port":21801,"load":5.8},{"hostname":"us-ny3.gw.ivpn.net","host":"89.187.178.144","multihop_port":27601,"load":9.72}]},{"gateway":"pl.gw.ivpn.net","country_code":"PL","country":"Poland","city":"Warsaw","latitude":52.25,"longitude":21,"isp":"Datapacket","hosts":[{"hostname":"pl1.gw.ivpn.net","host":"185.246.208.86","multihop_port":25101,"load":12.75}]},{"gateway":"cz.gw.ivpn.net","country_code":"CZ","country":"Czech Republic","city":"Prague","latitude":50.0833,"longitude":14.466,"isp":"Datapacket","hosts":[{"hostname":"cz1.gw.ivpn.net","host":"195.181.160.167","multihop_port":25201,"load":17.13}]},{"gateway":"no.gw.ivpn.net","country_code":"NO","country":"Norway","city":"Oslo","latitude":59.9167,"longitude":10.75,"isp":"Servetheworld","hosts":[{"hostname":"no1.gw.ivpn.net","host":"194.242.10.150","multihop_port":25301,"load":27.88}]},{"gateway":"hu.gw.ivpn.net","country_code":"HU","country":"Hungary","city":"Budapest","latitude":47.5,"longitude":19.0833,"isp":"M247","hosts":[{"hostname":"hu1.gw.ivpn.net","host":"185.189.114.186","multihop_port":25401,"load":44.48}]},{"gateway":"dk.gw.ivpn.net","country_code":"DK","country":"Denmark","city":"Copenhagen","latitude":55.6786,"longitude":12.5635,"isp":"M247","hosts":[{"hostname":"dk1.gw.ivpn.net","host":"185.245.84.226","multihop_port":25501,"load":21.92}]},{"gateway":"at.gw.ivpn.net","country_code":"AT","country":"Austria","city":"Vienna","latitude":48.2,"longitude":16.3666,"isp":"M247","hosts":[{"hostname":"at1.gw.ivpn.net","host":"185.244.212.66","multihop_port":25601,"load":94.1}]},{"gateway":"be.gw.ivpn.net","country_code":"BE","country":"Belgium","city":"Brussels","latitude":50.8333,"longitude":4.3333,"isp":"M247","hosts":[{"hostname":"be1.gw.ivpn.net","host":"194.187.251.10","multihop_port":25701,"load":39.45}]},{"gateway":"bg.gw.ivpn.net","country_code":"BG","country":"Bulgaria","city":"Sofia","latitude":42.6833,"longitude":23.3167,"isp":"M247","hosts":[{"hostname":"bg1.gw.ivpn.net","host":"82.102.23.18","multihop_port":25901,"load":100}]},{"gateway":"sk.gw.ivpn.net","country_code":"SK","country":"Slovakia","city":"Bratislava","latitude":48.15,"longitude":17.117,"isp":"M247","hosts":[{"hostname":"sk1.gw.ivpn.net","host":"185.245.85.250","multihop_port":25801,"load":100}]},{"gateway":"jp.gw.ivpn.net","country_code":"JP","country":"Japan","city":"Tokyo","latitude":35.685,"longitude":139.7514,"isp":"M247","hosts":[{"hostname":"jp1.gw.ivpn.net","host":"91.207.174.234","multihop_port":26201,"load":13.83}]},{"gateway":"sg.gw.ivpn.net","country_code":"SG","country":"Singapore","city":"Singapore","latitude":1.293,"longitude":103.8558,"isp":"M247","hosts":[{"hostname":"sg1.gw.ivpn.net","host":"185.128.24.186","multihop_port":26101,"load":15.55}]},{"gateway":"ua.gw.ivpn.net","country_code":"UA","country":"Ukraine","city":"Kharkiv","latitude":50,"longitude":36.25,"isp":"Xservers","hosts":[{"hostname":"ua1.gw.ivpn.net","host":"176.103.58.123","multihop_port":26301,"load":8.19}]},{"gateway":"fi.gw.ivpn.net","country_code":"FI","country":"Finland","city":"Helsinki","latitude":60.1756,"longitude":24.9341,"isp":"Creanova","hosts":[{"hostname":"fi1.gw.ivpn.net","host":"185.112.82.12","multihop_port":26001,"load":91.34}]},{"gateway":"us-az.gw.ivpn.net","country_code":"US","country":"United States","city":"Phoenix, AZ","latitude":33.5722,"longitude":-112.0891,"isp":"M247","hosts":[{"hostname":"us-az1.gw.ivpn.net","host":"193.37.254.130","multihop_port":26401,"load":5.95}]},{"gateway":"us-nv.gw.ivpn.net","country_code":"US","country":"United States","city":"Las Vegas, NV","latitude":36.2333,"longitude":-115.2654,"isp":"M247","hosts":[{"hostname":"us-nv1.gw.ivpn.net","host":"185.242.5.34","multihop_port":26501,"load":32.74}]},{"gateway":"au-nsw.gw.ivpn.net","country_code":"AU","country":"Australia","city":"Sydney","latitude":-33.92,"longitude":151.1852,"isp":"M247","hosts":[{"hostname":"au-nsw1.gw.ivpn.net","host":"46.102.153.242","multihop_port":26601,"load":13},{"hostname":"au-nsw2.gw.ivpn.net","host":"146.70.78.74","multihop_port":27801,"load":15.91}]},{"gateway":"br.gw.ivpn.net","country_code":"BR","country":"Brazil","city":"Franca","latitude":-20.53,"longitude":-47.39,"isp":"Qnax","hosts":[{"hostname":"br1.gw.ivpn.net","host":"45.162.229.130","multihop_port":26701,"load":33.79}]},{"gateway":"rs.gw.ivpn.net","country_code":"RS","country":"Serbia","city":"Belgrade","latitude":44.8186,"longitude":20.468,"isp":"M247","hosts":[{"hostname":"rs1.gw.ivpn.net","host":"141.98.103.250","multihop_port":26801,"load":32.35}]},{"gateway":"gb-man.gw.ivpn.net","country_code":"GB","country":"United Kingdom","city":"Manchester","latitude":53.5004,"longitude":-2.248,"isp":"M247","hosts":[{"hostname":"gb-man1.gw.ivpn.net","host":"89.238.141.228","multihop_port":26901,"load":17.64}]},{"gateway":"ca-qc.gw.ivpn.net","country_code":"CA","country":"Canada","city":"Montreal","latitude":45.5,"longitude":-73.5833,"isp":"M247","hosts":[{"hostname":"ca-qc1.gw.ivpn.net","host":"87.101.92.26","multihop_port":27001,"load":18.79}]},{"gateway":"pt.gw.ivpn.net","country_code":"PT","country":"Portugal","city":"Lisbon","latitude":38.7227,"longitude":-9.1449,"isp":"Hostwebis","hosts":[{"hostname":"pt1.gw.ivpn.net","host":"94.46.175.112","multihop_port":27101,"load":8.26}]},{"gateway":"lu.gw.ivpn.net","country_code":"LU","country":"Luxembourg","city":"Luxembourg","latitude":49.6117,"longitude":6.13,"isp":"Evoluso","hosts":[{"hostname":"lu1.gw.ivpn.net","host":"92.223.89.53","multihop_port":27201,"load":100}]},{"gateway":"il.gw.ivpn.net","country_code":"IL","country":"Israel","city":"Holon, Tel Aviv","latitude":32.08,"longitude":34.77,"isp":"HQServ","hosts":[{"hostname":"il1.gw.ivpn.net","host":"185.191.207.194","multihop_port":27301,"load":7.9}]},{"gateway":"us-va.gw.ivpn.net","country_code":"US","country":"United States","city":"Ashburn, VA","latitude":39.0437,"longitude":-77.4875,"isp":"Datapacket","hosts":[{"hostname":"us-va1.gw.ivpn.net","host":"37.19.206.105","multihop_port":27701,"load":49.85}]},{"gateway":"us-wa.gw.ivpn.net","country_code":"US","country":"United States","city":"Seattle, WA","latitude":47.6211,"longitude":-122.3244,"isp":"Tzulo","hosts":[{"hostname":"us-wa2.gw.ivpn.net","host":"198.44.131.3","multihop_port":27801,"load":16.43}]}],"config":{"antitracker":{"default":{"ip":"10.0.254.2","multihop-ip":"10.0.254.102"},"hardcore":{"ip":"10.0.254.3","multihop-ip":"10.0.254.103"}},"api":{"ips":["198.50.177.220","149.56.162.156","198.50.177.222","149.56.162.159","198.50.177.223"],"ipv6s":["2607:5300:203:1735::8888","2607:5300:203:1735::8","2607:5300:203:1735:6580:7300:0:aaaa"]},"ports":{"openvpn":[{"type":"UDP","port":"53"},{"type":"UDP","port":"80"},{"type":"UDP","port":"2049"},{"type":"UDP","port":"2050"},{"type":"UDP","port":"443"},{"type":"UDP","port":"1194"},{"type":"TCP","port":"80"},{"type":"TCP","port":"443"},{"type":"TCP","port":"1443"}],"wireguard":[{"type":"UDP","port":"53"},{"type":"UDP","port":"80"},{"type":"UDP","port":"443"},{"type":"UDP","port":"1194"},{"type":"UDP","port":"2049"},{"type":"UDP","port":"2050"},{"type":"UDP","port":"30587"},{"type":"UDP","port":"41893"},{"type":"UDP","port":"48574"},{"type":"UDP","port":"58237"}]}}} +{"wireguard":[{"gateway":"us-tx.wg.ivpn.net","country_code":"US","country":"United States","city":"Dallas, TX","latitude":32.7936,"longitude":-96.7662,"isp":"Quadranet","hosts":[{"hostname":"us-tx1.wg.ivpn.net","host":"198.55.124.114","public_key":"JPT1veXLmasj2uQDstX24mpR7VWD+GmV8JDkidkz91Q=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21010,"load":22.92},{"hostname":"us-tx01.wg.ivpn.net","host":"96.44.189.197","public_key":"LvWf548mFddi8PTrIGL6uD1/l85LU8z0Rc8tpvw2Vls=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21001,"load":8.85},{"hostname":"us-tx2.wg.ivpn.net","host":"96.44.142.77","public_key":"om8hOGUcEvoOhHvJZoBHxNF4jxY/+Ml9Iy1WOSC/pFo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25001,"load":7.59}]},{"gateway":"nl.wg.ivpn.net","country_code":"NL","country":"Netherlands","city":"Amsterdam","latitude":52.35,"longitude":4.9166,"isp":"Datapacket","hosts":[{"hostname":"nl1.wg.ivpn.net","host":"185.102.218.104","public_key":"AsMT2FqpkZbjzWeDch6GwufF5odl259W/hIkGytVfWo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20301,"load":33.95},{"hostname":"nl4.wg.ivpn.net","host":"95.211.95.19","public_key":"cVB66gPq5cZ9dfXY+e2pbsCyih5o1zk04l5c5VCsV1g=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23201,"load":9.26},{"hostname":"nl3.wg.ivpn.net","host":"95.211.95.9","public_key":"XDU6Syq1DY82IMatsHV0x/TAtbLiRwh/SdFCXlEn40c=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23101,"load":5.96},{"hostname":"nl6.wg.ivpn.net","host":"95.211.243.182","public_key":"hMWpqb3FEATHIbImPVWB/5z2nWIXghwpnJjevPY+1H0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24101,"load":12.52},{"hostname":"nl5.wg.ivpn.net","host":"95.211.243.162","public_key":"NCagAawwRixI6Iw/NWiGD8lbjDNCl0aTICZKJtO/1HA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23901,"load":34.74},{"hostname":"nl7.wg.ivpn.net","host":"95.211.172.105","public_key":"hQNYqtfOOAEz0IGshLx/TI9hUrfR9gIIkjVm4VsCbBM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22501,"load":57.07},{"hostname":"nl8.wg.ivpn.net","host":"95.211.198.167","public_key":"/nY1/OhVhdHtbnU/s31zYUuPBH0pizv4DemW5KDOUkg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22801,"load":9.12}]},{"gateway":"de.wg.ivpn.net","country_code":"DE","country":"Germany","city":"Frankfurt","latitude":50.1,"longitude":8.675,"isp":"Datapacket","hosts":[{"hostname":"de1.wg.ivpn.net","host":"185.102.219.26","public_key":"mS3/WpXjnMAMmXjSpd4nFzx9HSE3ubv2WyjpyH2REgs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23010,"load":13.26},{"hostname":"de01.wg.ivpn.net","host":"178.162.212.24","public_key":"Sc5AUZieg0qX8kyCy9p0OHRES4n0CHtHHM+ZPyERFTc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23001,"load":33.3},{"hostname":"de2.wg.ivpn.net","host":"37.58.60.151","public_key":"QhY3OtBf4FFafKtLO33e6k8JnAl8e6ktFcRUyLjCDVY=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22001,"load":11.98}]},{"gateway":"us-il.wg.ivpn.net","country_code":"US","country":"United States","city":"Chicago, IL","latitude":41.8373,"longitude":-87.6862,"isp":"Datapacket","hosts":[{"hostname":"us-il1.wg.ivpn.net","host":"89.187.181.116","public_key":"hku9gjamhoii8OvxZgx+TdUDIkOAQYFu39qbav2AyUQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21410,"load":6.5},{"hostname":"us-il01.wg.ivpn.net","host":"72.11.137.158","public_key":"Uy5a8JOqneAUY1dC5s9jubLnotbyIfBsLP2nZuzRbHs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21401,"load":8.41},{"hostname":"us-il2.wg.ivpn.net","host":"72.11.137.148","public_key":"ANhVUMAQgStPVNRHW8mg0ZtN1YI1QHyXfNCO8+USNQQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24901,"load":9.93}]},{"gateway":"us-ga.wg.ivpn.net","country_code":"US","country":"United States","city":"Atlanta, GA","latitude":33.7627,"longitude":-84.4225,"isp":"Datapacket","hosts":[{"hostname":"us-ga1.wg.ivpn.net","host":"185.93.0.212","public_key":"jD8h+pL5/d6fmYcTzl0lR8AWzQVN5XkwRFSmM/3NcDM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24510,"load":6.9},{"hostname":"us-ga01.wg.ivpn.net","host":"104.129.24.149","public_key":"EJFl28aYpZKfmJqb1jxxTEnGx6kaH2USVrigpHKKXhs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24501,"load":8.84},{"hostname":"us-ga2.wg.ivpn.net","host":"107.150.22.77","public_key":"hr2uQOEGCvGeDkoCQJ2dCI8dM8Iu5aKhb1PIvJ9q72E=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24810,"load":5.91}]},{"gateway":"us-ca.wg.ivpn.net","country_code":"US","country":"United States","city":"Los Angeles, CA","latitude":34.1139,"longitude":-118.4068,"isp":"Datapacket","hosts":[{"hostname":"us-ca1.wg.ivpn.net","host":"185.180.13.41","public_key":"FGl78s9Ct6xNamQ2/CtAyXwGePrrU0kiZxfM27pm8XA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22210,"load":7.31},{"hostname":"us-ca01.wg.ivpn.net","host":"216.144.236.44","public_key":"B+qXdkIuETpzI0bfhGUAHN4SU91Tjs6ItdFlu93S42I=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22201,"load":6.45},{"hostname":"us-ca2.wg.ivpn.net","host":"216.144.236.68","public_key":"qv4Tupfon5NUSwzDpM8zPizSwJZn2h+9CqrufcyDOko=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22401,"load":7.83},{"hostname":"us-ca3.wg.ivpn.net","host":"198.54.129.100","public_key":"J5+Bx84LxNPdWEhewOvBV/fGWiDluIBlAcr1QlJZil8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21301,"load":9.82},{"hostname":"us-ca4.wg.ivpn.net","host":"216.144.237.83","public_key":"dYPXYr6HSRJPe3MhALwGWNtdEy1+EPE9Kqv7cTrUXk8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21901,"load":8.14}]},{"gateway":"ca-qc.wg.ivpn.net","country_code":"CA","country":"Canada","city":"Montreal","latitude":45.5,"longitude":-73.5833,"isp":"M247","hosts":[{"hostname":"ca1.wg.ivpn.net","host":"37.120.130.58","public_key":"rg+GGDmjM4Vxo1hURvKmgm9yonb6qcoKbPCP/DNDBnI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23810,"load":12.22},{"hostname":"ca-qc1.wg.ivpn.net","host":"87.101.92.29","public_key":"98JU1mdCR8vD1aNZg017/NjBeTjuuCKUaLw0zfz/CUE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27001,"load":56.73}]},{"gateway":"gb.wg.ivpn.net","country_code":"GB","country":"United Kingdom","city":"London","latitude":51.5,"longitude":-0.1167,"isp":"M247","hosts":[{"hostname":"gb1.wg.ivpn.net","host":"81.92.202.114","public_key":"7+jos+Eg+hMEOQE4Std6OJ+WVnCcmbqS1/EbPwn9w3s=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20810,"load":16.46},{"hostname":"gb2.wg.ivpn.net","host":"185.59.221.225","public_key":"x0BTRaxsdxAd58ZyU2YMX4bmuj+Eg+8/urT2F3Vs1n8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24201,"load":6.67},{"hostname":"gb01.wg.ivpn.net","host":"185.59.221.140","public_key":"yKK5x+D17Jr3Q12T/UBaDjNVmNdZBsqpvTqH6YfsGHg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":20801,"load":14.26}]},{"gateway":"us-ny.wg.ivpn.net","country_code":"US","country":"United States","city":"New York, NY","latitude":40.6943,"longitude":-73.9249,"isp":"M247","hosts":[{"hostname":"us-ny1.wg.ivpn.net","host":"91.132.137.170","public_key":"6/tjvgb7HFl7UuvBSegolxa1zKr3iSlDrlCexCmhAGE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21210,"load":5.31},{"hostname":"us-ny2.wg.ivpn.net","host":"212.103.48.195","public_key":"c7DwY2uT+6ulWAJ5u8qJNWHroA0qyJLcdNzf/f2kkhs=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21801,"load":6.49},{"hostname":"us-ny3.wg.ivpn.net","host":"89.187.178.145","public_key":"m5/Ssw9SN3WuE+yD/fAsH5G8iuI8TcDGEiZZnPgiMCc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27601,"load":8.62}]},{"gateway":"se.wg.ivpn.net","country_code":"SE","country":"Sweden","city":"Stockholm","latitude":59.3508,"longitude":18.0973,"isp":"M247","hosts":[{"hostname":"se1.wg.ivpn.net","host":"37.120.153.226","public_key":"2n0nFE1g/+vQr2AOQPm9Igyiy0zh9uTTultvOOSkMRo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24010,"load":6.64},{"hostname":"se01.wg.ivpn.net","host":"80.67.10.141","public_key":"u8VHnYEpoEjJWDAF9NAUkU6s810RnkMuhEfFD9U0cGo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24001,"load":8.3}]},{"gateway":"sg.wg.ivpn.net","country_code":"SG","country":"Singapore","city":"Singapore","latitude":1.293,"longitude":103.8558,"isp":"M247","hosts":[{"hostname":"sg1.wg.ivpn.net","host":"37.120.151.122","public_key":"hSg0At4uwuIhmTy5UT4fRbi5AN6JO2ZWTuIvqd4nHCE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26110,"load":7.08},{"hostname":"sg01.wg.ivpn.net","host":"185.128.24.189","public_key":"pWk0u1Xq8FHC+xpkN+C6yEKOTEanorR5zMCSfHlLzFw=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26101,"load":38.71}]},{"gateway":"ch.wg.ivpn.net","country_code":"CH","country":"Switzerland","city":"Zurich","latitude":47.38,"longitude":8.55,"isp":"Privatelayer","hosts":[{"hostname":"ch1.wg.ivpn.net","host":"141.255.164.66","public_key":"jVZJ61i1xxkAfriDHpwvF/GDuTvZUqhwoWSjkOJvaUA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23610,"load":8.46},{"hostname":"ch3.wg.ivpn.net","host":"141.255.166.198","public_key":"JBpgBKtqIneRuEga7mbP2PAk/e4HPRaC11H0A0+R3lA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22901,"load":10.89},{"hostname":"ch01.wg.ivpn.net","host":"185.212.170.141","public_key":"dU7gLfcupYd37LW0q6cxC6PHMba+eUFAUOoU/ryXZkY=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23601,"load":20.66}]},{"gateway":"it.wg.ivpn.net","country_code":"IT","country":"Italy","city":"Milan","latitude":45.47,"longitude":9.205,"isp":"M247","hosts":[{"hostname":"it1.wg.ivpn.net","host":"82.102.21.90","public_key":"Aj6b81yrDk7I913R+fuSW/NAmIl87N73vHgY5/WQY0Q=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24310,"load":5.85},{"hostname":"it01.wg.ivpn.net","host":"158.58.172.89","public_key":"QTzR5R6jeDI/cQ0CXPIqOby9GR5nn+4Bcf4bK536Vy0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24301,"load":45}]},{"gateway":"ro.wg.ivpn.net","country_code":"RO","country":"Romania","city":"Bucharest","latitude":44.4334,"longitude":26.0999,"isp":"M247","hosts":[{"hostname":"ro1.wg.ivpn.net","host":"37.120.206.53","public_key":"F2uQ57hysZTlw8WYELnyCw9Lga80wNYoYwkrrxyXKmw=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22301,"load":65.44}]},{"gateway":"fr.wg.ivpn.net","country_code":"FR","country":"France","city":"Paris","latitude":48.8667,"longitude":2.3333,"isp":"Datapacket","hosts":[{"hostname":"fr1.wg.ivpn.net","host":"185.246.211.185","public_key":"g7BuMzj3r/noLiLR4qhQMcvU6GSIY8RGEnaYtdYsFX4=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23401,"load":22.49}]},{"gateway":"is.wg.ivpn.net","country_code":"IS","country":"Iceland","city":"Reykjavik","latitude":64.15,"longitude":-21.95,"isp":"Advania","hosts":[{"hostname":"is1.wg.ivpn.net","host":"82.221.107.185","public_key":"nZZT6TlQ2dXlVe3P3B5ozEScHYMWH4JY4y3to8w5dz0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23501,"load":20.69}]},{"gateway":"hk.wg.ivpn.net","country_code":"HK","country":"Hong Kong","city":"Hong Kong","latitude":22.305,"longitude":114.185,"isp":"Leaseweb","hosts":[{"hostname":"hk1.wg.ivpn.net","host":"209.58.189.105","public_key":"MbqqGy6TI2WVxHYdMa7X1LJoIEQNElhYXMGlMqtwtS0=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23301,"load":42.72},{"hostname":"hk2.wg.ivpn.net","host":"64.120.120.239","public_key":"kyolyq4cJydI3vQB2ESTIUAy2Fq0bpOf+Qe7GIq6XEA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27501,"load":18.21}]},{"gateway":"us-ut.wg.ivpn.net","country_code":"US","country":"United States","city":"Salt Lake City, UT","latitude":40.7774,"longitude":-111.93,"isp":"100TB","hosts":[{"hostname":"us-ut1.wg.ivpn.net","host":"206.190.145.92","public_key":"KirI7bpxD186CuYiOqNHF+QUe6YmRYf6CN3pXWOJT2k=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24401,"load":27.74}]},{"gateway":"us-fl.wg.ivpn.net","country_code":"US","country":"United States","city":"Miami, FL","latitude":25.7839,"longitude":-80.2102,"isp":"Quadranet","hosts":[{"hostname":"us-fl1.wg.ivpn.net","host":"173.44.49.93","public_key":"Rkzo9WgxJBiKyEbkZvqGWtOVh9Gk9Vd7wL49SHXdHig=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":24601,"load":11.87}]},{"gateway":"ca.wg.ivpn.net","country_code":"CA","country":"Canada","city":"Toronto","latitude":43.7,"longitude":-79.42,"isp":"Amanah","hosts":[{"hostname":"ca2.wg.ivpn.net","host":"172.86.186.173","public_key":"5qHV10ZbFgEGnF6wg9QpKeh1l6Di2JUG/5PdNaaoNW8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":22101,"load":85.49},{"hostname":"ca01.wg.ivpn.net","host":"104.254.90.181","public_key":"mdGnCZwinuOVGg46zsWnFhhenfFId6jht9GBTKB+xUA=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":23801,"load":98.47}]},{"gateway":"us-nj.wg.ivpn.net","country_code":"US","country":"United States","city":"New Jersey, NJ","latitude":40.737764,"longitude":-74.151747,"isp":"Quadranet","hosts":[{"hostname":"us-nj3.wg.ivpn.net","host":"23.226.128.21","public_key":"AX7C1LO0ECUcHRYgX4/tIDYdR8npvfB/+pf4AfI3OHU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21610,"load":7.69},{"hostname":"us-nj4.wg.ivpn.net","host":"194.36.111.54","public_key":"1Te4AfL1yKo2k4jzPALnRPfKE3YSzXKo4XIRHPz5FxI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27401,"load":9.33}]},{"gateway":"es.wg.ivpn.net","country_code":"ES","country":"Spain","city":"Madrid","latitude":40.4,"longitude":-3.6834,"isp":"Datapacket","hosts":[{"hostname":"es1.wg.ivpn.net","host":"84.17.62.98","public_key":"w7umiArTtlJ4Pk6Ii9WX5VXK5vw/Qu+Z37/icKlIYWo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":21501,"load":7.66}]},{"gateway":"pl.wg.ivpn.net","country_code":"PL","country":"Poland","city":"Warsaw","latitude":52.25,"longitude":21,"isp":"Datapacket","hosts":[{"hostname":"pl1.wg.ivpn.net","host":"185.246.208.109","public_key":"1JDmF79rWj5C+kHp71AbdHne/yGaizWCd2bLfSFvYjo=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25101,"load":11.01}]},{"gateway":"cz.wg.ivpn.net","country_code":"CZ","country":"Czech Republic","city":"Prague","latitude":50.0833,"longitude":14.466,"isp":"Datapacket","hosts":[{"hostname":"cz1.wg.ivpn.net","host":"185.180.14.41","public_key":"gVbEq2cGRzwCSGPqT2oRSYYN+P6IK3uvvRffErASDSk=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25201,"load":8.85}]},{"gateway":"no.wg.ivpn.net","country_code":"NO","country":"Norway","city":"Oslo","latitude":59.9167,"longitude":10.75,"isp":"Servetheworld","hosts":[{"hostname":"no1.wg.ivpn.net","host":"91.189.177.156","public_key":"xFO6ksbO3Gr05rRgAW0O5Veoi4bpTgz2G9RvtBzK7Cg=","local_ip":"172.16.0.1/12","ipv6":{},"multihop_port":25301,"load":0}]},{"gateway":"hu.wg.ivpn.net","country_code":"HU","country":"Hungary","city":"Budapest","latitude":47.5,"longitude":19.0833,"isp":"M247","hosts":[{"hostname":"hu1.wg.ivpn.net","host":"185.189.114.189","public_key":"G30fNdXrnlqtqqOLF23QXWzFdLIKDxLW60HoYPvqml8=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25401,"load":83.22}]},{"gateway":"dk.wg.ivpn.net","country_code":"DK","country":"Denmark","city":"Copenhagen","latitude":55.6786,"longitude":12.5635,"isp":"M247","hosts":[{"hostname":"dk1.wg.ivpn.net","host":"185.245.84.229","public_key":"jTsV5gOD7lT4egDj9rhKwO2OO2X7bKs2EQPcZEnUWDE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25501,"load":24.42}]},{"gateway":"at.wg.ivpn.net","country_code":"AT","country":"Austria","city":"Vienna","latitude":48.2,"longitude":16.3666,"isp":"M247","hosts":[{"hostname":"at1.wg.ivpn.net","host":"185.244.212.69","public_key":"83LUBnP97SFpnS0y1MpEAFcg8MIiQJgW1FRv/8Mc40g=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25601,"load":39.05}]},{"gateway":"be.wg.ivpn.net","country_code":"BE","country":"Belgium","city":"Brussels","latitude":50.8333,"longitude":4.3333,"isp":"M247","hosts":[{"hostname":"be1.wg.ivpn.net","host":"194.187.251.13","public_key":"awriP5lpdxEMWKuG+A1DOg+vb1M5jd3WhynIMB61BhU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25701,"load":98.96}]},{"gateway":"bg.wg.ivpn.net","country_code":"BG","country":"Bulgaria","city":"Sofia","latitude":42.6833,"longitude":23.3167,"isp":"M247","hosts":[{"hostname":"bg1.wg.ivpn.net","host":"82.102.23.21","public_key":"WDSsdJE6wvATIWfzQwayPtE/0DaXBQgW/hPm7sQSJmU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25901,"load":62.62}]},{"gateway":"sk.wg.ivpn.net","country_code":"SK","country":"Slovakia","city":"Bratislava","latitude":48.15,"longitude":17.117,"isp":"M247","hosts":[{"hostname":"sk1.wg.ivpn.net","host":"185.245.85.253","public_key":"MOBWWpEgNsKbFj4BEyWSDFLlkBs5iUFiqdSdTFTDBko=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":25801,"load":100}]},{"gateway":"jp.wg.ivpn.net","country_code":"JP","country":"Japan","city":"Tokyo","latitude":35.685,"longitude":139.7514,"isp":"M247","hosts":[{"hostname":"jp1.wg.ivpn.net","host":"91.207.174.237","public_key":"tb9WdC3LSho3d1rI5N7kfG9e42/d+u4LPVdEYERPsSQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26201,"load":65.44}]},{"gateway":"ua.wg.ivpn.net","country_code":"UA","country":"Ukraine","city":"Kharkiv","latitude":50,"longitude":36.25,"isp":"Xservers","hosts":[{"hostname":"ua1.wg.ivpn.net","host":"176.103.57.129","public_key":"mIxEzfjZ2wV6jJVj30w38ECd2LSH4bw/HLMnM2ICHiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26301,"load":6.12}]},{"gateway":"fi.wg.ivpn.net","country_code":"FI","country":"Finland","city":"Helsinki","latitude":60.1756,"longitude":24.9341,"isp":"Creanova","hosts":[{"hostname":"fi1.wg.ivpn.net","host":"194.34.134.63","public_key":"mIxEzfjZ2wV6jJVj30w38ECd2LSH4bw/HLMnM2ICHiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26001,"load":46.81}]},{"gateway":"us-az.wg.ivpn.net","country_code":"US","country":"United States","city":"Phoenix, AZ","latitude":33.5722,"longitude":-112.0891,"isp":"M247","hosts":[{"hostname":"us-az1.wg.ivpn.net","host":"193.37.254.133","public_key":"Ts4MGazxpxL9rrYbERjgxa+kCEX85ou9gHoaJvDsRiI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26401,"load":10.46}]},{"gateway":"us-nv.wg.ivpn.net","country_code":"US","country":"United States","city":"Las Vegas, NV","latitude":36.2333,"longitude":-115.2654,"isp":"M247","hosts":[{"hostname":"us-nv1.wg.ivpn.net","host":"185.242.5.37","public_key":"PRpvAZyoNWNm/KHlqafjtYoZtn1PkIPylUE4WbuYmgM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26501,"load":29.73}]},{"gateway":"au-nsw.wg.ivpn.net","country_code":"AU","country":"Australia","city":"Sydney","latitude":-33.92,"longitude":151.1852,"isp":"M247","hosts":[{"hostname":"au-nsw1.wg.ivpn.net","host":"46.102.153.246","public_key":"KmSrG48t5xw9CJCPlYLBG3JnmiY0CnUgyRM5TUEwZhM=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26601,"load":25.64},{"hostname":"au-nsw2.wg.ivpn.net","host":"146.70.78.75","public_key":"q+wbp7GjiTszp5G16rNpGCqxkL0qSY3CH4pcgD6UsVQ=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27801,"load":91.58}]},{"gateway":"br.wg.ivpn.net","country_code":"BR","country":"Brazil","city":"Franca","latitude":-20.53,"longitude":-47.39,"isp":"Qnax","hosts":[{"hostname":"br1.wg.ivpn.net","host":"45.162.229.133","public_key":"eN1f15S3YzRyYCALiPGRQcjkQO9xntcdqPhJJ6TOymc=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26701,"load":15.7}]},{"gateway":"rs.wg.ivpn.net","country_code":"RS","country":"Serbia","city":"Belgrade","latitude":44.8186,"longitude":20.468,"isp":"M247","hosts":[{"hostname":"rs1.wg.ivpn.net","host":"141.98.103.253","public_key":"xLN/lpQThQ3z3tvYf7VqdAsRL/nton1Vhv2kCZlQtWE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26801,"load":95.3}]},{"gateway":"gb-man.wg.ivpn.net","country_code":"GB","country":"United Kingdom","city":"Manchester","latitude":53.5004,"longitude":-2.248,"isp":"M247","hosts":[{"hostname":"gb-man1.wg.ivpn.net","host":"89.238.141.231","public_key":"+hf4DYilNEIjTdSOuCNcWdqVyaRoxGzXw7wvNl7f7Rg=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":26901,"load":32.33}]},{"gateway":"pt.wg.ivpn.net","country_code":"PT","country":"Portugal","city":"Lisbon","latitude":38.7227,"longitude":-9.1449,"isp":"Hostwebis","hosts":[{"hostname":"pt1.wg.ivpn.net","host":"94.46.175.113","public_key":"nMnA82YVrvEK80GVoY/0Z9McWeqjcLzuMYSL+86j5nU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27101,"load":6.89}]},{"gateway":"lu.wg.ivpn.net","country_code":"LU","country":"Luxembourg","city":"Luxembourg","latitude":49.6117,"longitude":6.13,"isp":"Evoluso","hosts":[{"hostname":"lu1.wg.ivpn.net","host":"92.223.89.57","public_key":"hUS1OAFLGwpba8+oc5mifYtohZt/RTro5dMyYBLYHjI=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27201,"load":63.21}]},{"gateway":"il.wg.ivpn.net","country_code":"IL","country":"Israel","city":"Holon, Tel Aviv","latitude":32.08,"longitude":34.77,"isp":"HQServ","hosts":[{"hostname":"il01.wg.ivpn.net","host":"185.191.207.197","public_key":"HR9gAjpxXU3YVt6kehBw5n8yVYVE0iIgJdc4HTqOzEE=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27301,"load":12.76}]},{"gateway":"us-va.wg.ivpn.net","country_code":"US","country":"United States","city":"Ashburn, VA","latitude":39.0437,"longitude":-77.4875,"isp":"Datapacket","hosts":[{"hostname":"us-va1.wg.ivpn.net","host":"37.19.206.106","public_key":"ZCnZK6U+cRuP/WgzIDb/P6UG2rX/KyCRd5vJ1hAbr2E=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27701,"load":30.64}]},{"gateway":"us-wa.wg.ivpn.net","country_code":"US","country":"United States","city":"Seattle, WA","latitude":47.6211,"longitude":-122.3244,"isp":"Tzulo","hosts":[{"hostname":"us-wa2.wg.ivpn.net","host":"198.44.131.4","public_key":"VcrOOozBUCIURU0AnqMAE7AkMmC7Qrp+j/PzPbgbalU=","local_ip":"172.16.0.1/12","ipv6":{"local_ip":"fd00:4956:504e:ffff::/96"},"multihop_port":27801,"load":23.26}]}],"openvpn":[{"gateway":"us-ca.gw.ivpn.net","country_code":"US","country":"United States","city":"Los Angeles, CA","latitude":34.1139,"longitude":-118.4068,"isp":"Quadranet","hosts":[{"hostname":"us-ca1.gw.ivpn.net","host":"173.254.196.58","multihop_port":22201,"load":6.45},{"hostname":"us-ca2.gw.ivpn.net","host":"69.12.80.146","multihop_port":22401,"load":7.83},{"hostname":"us-ca3.gw.ivpn.net","host":"198.54.129.99","multihop_port":21301,"load":9.82},{"hostname":"us-ca4.gw.ivpn.net","host":"173.254.204.202","multihop_port":21901,"load":8.14}]},{"gateway":"ro.gw.ivpn.net","country_code":"RO","country":"Romania","city":"Bucharest","latitude":44.4334,"longitude":26.0999,"isp":"M247","hosts":[{"hostname":"ro1.gw.ivpn.net","host":"37.120.206.50","multihop_port":22301,"load":65.44}]},{"gateway":"de.gw.ivpn.net","country_code":"DE","country":"Germany","city":"Frankfurt","latitude":50.1,"longitude":8.675,"isp":"Leaseweb","hosts":[{"hostname":"de1.gw.ivpn.net","host":"178.162.222.40","multihop_port":23001,"load":33.3},{"hostname":"de2.gw.ivpn.net","host":"178.162.211.114","multihop_port":22001,"load":11.98}]},{"gateway":"nl.gw.ivpn.net","country_code":"NL","country":"Netherlands","city":"Amsterdam","latitude":52.35,"longitude":4.9166,"isp":"Leaseweb","hosts":[{"hostname":"nl4.gw.ivpn.net","host":"95.211.172.95","multihop_port":23201,"load":9.26},{"hostname":"nl3.gw.ivpn.net","host":"95.211.172.68","multihop_port":23101,"load":5.96},{"hostname":"nl6.gw.ivpn.net","host":"95.211.187.228","multihop_port":24101,"load":12.52},{"hostname":"nl5.gw.ivpn.net","host":"95.211.187.222","multihop_port":23901,"load":34.74},{"hostname":"nl7.gw.ivpn.net","host":"95.211.95.22","multihop_port":22501,"load":57.07},{"hostname":"nl8.gw.ivpn.net","host":"95.211.172.18","multihop_port":22801,"load":9.12}]},{"gateway":"fr.gw.ivpn.net","country_code":"FR","country":"France","city":"Paris","latitude":48.8667,"longitude":2.3333,"isp":"Datapacket","hosts":[{"hostname":"fr1.gw.ivpn.net","host":"185.246.211.179","multihop_port":23401,"load":22.49}]},{"gateway":"is.gw.ivpn.net","country_code":"IS","country":"Iceland","city":"Reykjavik","latitude":64.15,"longitude":-21.95,"isp":"Advania","hosts":[{"hostname":"is1.gw.ivpn.net","host":"82.221.107.178","multihop_port":23501,"load":20.69}]},{"gateway":"hk.gw.ivpn.net","country_code":"HK","country":"Hong Kong","city":"Hong Kong","latitude":22.305,"longitude":114.185,"isp":"Leaseweb","hosts":[{"hostname":"hk1.gw.ivpn.net","host":"209.58.189.163","multihop_port":23301,"load":42.72},{"hostname":"hk2.gw.ivpn.net","host":"209.58.188.13","multihop_port":27501,"load":18.21}]},{"gateway":"us-tx.gw.ivpn.net","country_code":"US","country":"United States","city":"Dallas, TX","latitude":32.7936,"longitude":-96.7662,"isp":"Quadranet","hosts":[{"hostname":"us-tx1.gw.ivpn.net","host":"96.44.189.194","multihop_port":21001,"load":8.85},{"hostname":"us-tx2.gw.ivpn.net","host":"96.44.142.74","multihop_port":25001,"load":7.59}]},{"gateway":"gb.gw.ivpn.net","country_code":"GB","country":"United Kingdom","city":"London","latitude":51.5,"longitude":-0.1167,"isp":"Datapacket","hosts":[{"hostname":"gb2.gw.ivpn.net","host":"185.59.221.88","multihop_port":24201,"load":6.67},{"hostname":"gb1.gw.ivpn.net","host":"185.59.221.133","multihop_port":20801,"load":14.26}]},{"gateway":"us-ut.gw.ivpn.net","country_code":"US","country":"United States","city":"Salt Lake City, UT","latitude":40.7774,"longitude":-111.93,"isp":"100TB","hosts":[{"hostname":"us-ut1.gw.ivpn.net","host":"198.105.216.28","multihop_port":24401,"load":27.74}]},{"gateway":"it.gw.ivpn.net","country_code":"IT","country":"Italy","city":"Milan","latitude":45.47,"longitude":9.205,"isp":"SEFlow","hosts":[{"hostname":"it1.gw.ivpn.net","host":"158.58.172.73","multihop_port":24301,"load":45}]},{"gateway":"se.gw.ivpn.net","country_code":"SE","country":"Sweden","city":"Stockholm","latitude":59.3508,"longitude":18.0973,"isp":"GleSyS","hosts":[{"hostname":"se1.gw.ivpn.net","host":"80.67.10.138","multihop_port":24001,"load":8.3}]},{"gateway":"us-ga.gw.ivpn.net","country_code":"US","country":"United States","city":"Atlanta, GA","latitude":33.7627,"longitude":-84.4225,"isp":"Quadranet","hosts":[{"hostname":"us-ga1.gw.ivpn.net","host":"104.129.24.146","multihop_port":24501,"load":8.84},{"hostname":"us-ga2.gw.ivpn.net","host":"107.150.22.74","multihop_port":24810,"load":5.91}]},{"gateway":"us-fl.gw.ivpn.net","country_code":"US","country":"United States","city":"Miami, FL","latitude":25.7839,"longitude":-80.2102,"isp":"Quadranet","hosts":[{"hostname":"us-fl1.gw.ivpn.net","host":"173.44.49.90","multihop_port":24601,"load":11.87}]},{"gateway":"ca.gw.ivpn.net","country_code":"CA","country":"Canada","city":"Toronto","latitude":43.7,"longitude":-79.42,"isp":"Amanah","hosts":[{"hostname":"ca2.gw.ivpn.net","host":"172.86.186.170","multihop_port":22101,"load":85.49},{"hostname":"ca1.gw.ivpn.net","host":"104.254.90.178","multihop_port":23801,"load":98.47}]},{"gateway":"ch.gw.ivpn.net","country_code":"CH","country":"Switzerland","city":"Zurich","latitude":47.38,"longitude":8.55,"isp":"Privatelayer","hosts":[{"hostname":"ch3.gw.ivpn.net","host":"141.255.166.194","multihop_port":22901,"load":10.89},{"hostname":"ch1.gw.ivpn.net","host":"185.212.170.138","multihop_port":23601,"load":20.66}]},{"gateway":"us-il.gw.ivpn.net","country_code":"US","country":"United States","city":"Chicago, IL","latitude":41.8373,"longitude":-87.6862,"isp":"Quadranet","hosts":[{"hostname":"us-il1.gw.ivpn.net","host":"107.150.28.82","multihop_port":21401,"load":8.41},{"hostname":"us-il2.gw.ivpn.net","host":"72.11.137.146","multihop_port":24901,"load":9.93}]},{"gateway":"us-nj.gw.ivpn.net","country_code":"US","country":"United States","city":"New Jersey, NJ","latitude":40.737764,"longitude":-74.151747,"isp":"Quadranet","hosts":[{"hostname":"us-nj3.gw.ivpn.net","host":"23.226.128.18","multihop_port":21610,"load":7.69},{"hostname":"us-nj4.gw.ivpn.net","host":"194.36.111.50","multihop_port":27401,"load":9.33}]},{"gateway":"es.gw.ivpn.net","country_code":"ES","country":"Spain","city":"Madrid","latitude":40.4,"longitude":-3.6834,"isp":"Datapacket","hosts":[{"hostname":"es1.gw.ivpn.net","host":"185.93.3.193","multihop_port":21501,"load":7.66}]},{"gateway":"us-ny.gw.ivpn.net","country_code":"US","country":"United States","city":"New York, NY","latitude":40.6943,"longitude":-73.9249,"isp":"M247","hosts":[{"hostname":"us-ny2.gw.ivpn.net","host":"212.103.48.194","multihop_port":21801,"load":6.49},{"hostname":"us-ny3.gw.ivpn.net","host":"89.187.178.144","multihop_port":27601,"load":8.62}]},{"gateway":"pl.gw.ivpn.net","country_code":"PL","country":"Poland","city":"Warsaw","latitude":52.25,"longitude":21,"isp":"Datapacket","hosts":[{"hostname":"pl1.gw.ivpn.net","host":"185.246.208.86","multihop_port":25101,"load":11.01}]},{"gateway":"cz.gw.ivpn.net","country_code":"CZ","country":"Czech Republic","city":"Prague","latitude":50.0833,"longitude":14.466,"isp":"Datapacket","hosts":[{"hostname":"cz1.gw.ivpn.net","host":"195.181.160.167","multihop_port":25201,"load":8.85}]},{"gateway":"no.gw.ivpn.net","country_code":"NO","country":"Norway","city":"Oslo","latitude":59.9167,"longitude":10.75,"isp":"Servetheworld","hosts":[{"hostname":"no1.gw.ivpn.net","host":"194.242.10.150","multihop_port":25301,"load":17.91}]},{"gateway":"hu.gw.ivpn.net","country_code":"HU","country":"Hungary","city":"Budapest","latitude":47.5,"longitude":19.0833,"isp":"M247","hosts":[{"hostname":"hu1.gw.ivpn.net","host":"185.189.114.186","multihop_port":25401,"load":83.22}]},{"gateway":"dk.gw.ivpn.net","country_code":"DK","country":"Denmark","city":"Copenhagen","latitude":55.6786,"longitude":12.5635,"isp":"M247","hosts":[{"hostname":"dk1.gw.ivpn.net","host":"185.245.84.226","multihop_port":25501,"load":24.42}]},{"gateway":"at.gw.ivpn.net","country_code":"AT","country":"Austria","city":"Vienna","latitude":48.2,"longitude":16.3666,"isp":"M247","hosts":[{"hostname":"at1.gw.ivpn.net","host":"185.244.212.66","multihop_port":25601,"load":39.05}]},{"gateway":"be.gw.ivpn.net","country_code":"BE","country":"Belgium","city":"Brussels","latitude":50.8333,"longitude":4.3333,"isp":"M247","hosts":[{"hostname":"be1.gw.ivpn.net","host":"194.187.251.10","multihop_port":25701,"load":98.96}]},{"gateway":"bg.gw.ivpn.net","country_code":"BG","country":"Bulgaria","city":"Sofia","latitude":42.6833,"longitude":23.3167,"isp":"M247","hosts":[{"hostname":"bg1.gw.ivpn.net","host":"82.102.23.18","multihop_port":25901,"load":62.62}]},{"gateway":"sk.gw.ivpn.net","country_code":"SK","country":"Slovakia","city":"Bratislava","latitude":48.15,"longitude":17.117,"isp":"M247","hosts":[{"hostname":"sk1.gw.ivpn.net","host":"185.245.85.250","multihop_port":25801,"load":100}]},{"gateway":"jp.gw.ivpn.net","country_code":"JP","country":"Japan","city":"Tokyo","latitude":35.685,"longitude":139.7514,"isp":"M247","hosts":[{"hostname":"jp1.gw.ivpn.net","host":"91.207.174.234","multihop_port":26201,"load":65.44}]},{"gateway":"sg.gw.ivpn.net","country_code":"SG","country":"Singapore","city":"Singapore","latitude":1.293,"longitude":103.8558,"isp":"M247","hosts":[{"hostname":"sg1.gw.ivpn.net","host":"185.128.24.186","multihop_port":26101,"load":38.71}]},{"gateway":"ua.gw.ivpn.net","country_code":"UA","country":"Ukraine","city":"Kharkiv","latitude":50,"longitude":36.25,"isp":"Xservers","hosts":[{"hostname":"ua1.gw.ivpn.net","host":"176.103.58.123","multihop_port":26301,"load":6.12}]},{"gateway":"fi.gw.ivpn.net","country_code":"FI","country":"Finland","city":"Helsinki","latitude":60.1756,"longitude":24.9341,"isp":"Creanova","hosts":[{"hostname":"fi1.gw.ivpn.net","host":"185.112.82.12","multihop_port":26001,"load":46.81}]},{"gateway":"us-az.gw.ivpn.net","country_code":"US","country":"United States","city":"Phoenix, AZ","latitude":33.5722,"longitude":-112.0891,"isp":"M247","hosts":[{"hostname":"us-az1.gw.ivpn.net","host":"193.37.254.130","multihop_port":26401,"load":10.46}]},{"gateway":"us-nv.gw.ivpn.net","country_code":"US","country":"United States","city":"Las Vegas, NV","latitude":36.2333,"longitude":-115.2654,"isp":"M247","hosts":[{"hostname":"us-nv1.gw.ivpn.net","host":"185.242.5.34","multihop_port":26501,"load":29.73}]},{"gateway":"au-nsw.gw.ivpn.net","country_code":"AU","country":"Australia","city":"Sydney","latitude":-33.92,"longitude":151.1852,"isp":"M247","hosts":[{"hostname":"au-nsw1.gw.ivpn.net","host":"46.102.153.242","multihop_port":26601,"load":25.64},{"hostname":"au-nsw2.gw.ivpn.net","host":"146.70.78.74","multihop_port":27801,"load":91.58}]},{"gateway":"br.gw.ivpn.net","country_code":"BR","country":"Brazil","city":"Franca","latitude":-20.53,"longitude":-47.39,"isp":"Qnax","hosts":[{"hostname":"br1.gw.ivpn.net","host":"45.162.229.130","multihop_port":26701,"load":15.7}]},{"gateway":"rs.gw.ivpn.net","country_code":"RS","country":"Serbia","city":"Belgrade","latitude":44.8186,"longitude":20.468,"isp":"M247","hosts":[{"hostname":"rs1.gw.ivpn.net","host":"141.98.103.250","multihop_port":26801,"load":95.3}]},{"gateway":"gb-man.gw.ivpn.net","country_code":"GB","country":"United Kingdom","city":"Manchester","latitude":53.5004,"longitude":-2.248,"isp":"M247","hosts":[{"hostname":"gb-man1.gw.ivpn.net","host":"89.238.141.228","multihop_port":26901,"load":32.33}]},{"gateway":"ca-qc.gw.ivpn.net","country_code":"CA","country":"Canada","city":"Montreal","latitude":45.5,"longitude":-73.5833,"isp":"M247","hosts":[{"hostname":"ca-qc1.gw.ivpn.net","host":"87.101.92.26","multihop_port":27001,"load":56.73}]},{"gateway":"pt.gw.ivpn.net","country_code":"PT","country":"Portugal","city":"Lisbon","latitude":38.7227,"longitude":-9.1449,"isp":"Hostwebis","hosts":[{"hostname":"pt1.gw.ivpn.net","host":"94.46.175.112","multihop_port":27101,"load":6.89}]},{"gateway":"lu.gw.ivpn.net","country_code":"LU","country":"Luxembourg","city":"Luxembourg","latitude":49.6117,"longitude":6.13,"isp":"Evoluso","hosts":[{"hostname":"lu1.gw.ivpn.net","host":"92.223.89.53","multihop_port":27201,"load":63.21}]},{"gateway":"il.gw.ivpn.net","country_code":"IL","country":"Israel","city":"Holon, Tel Aviv","latitude":32.08,"longitude":34.77,"isp":"HQServ","hosts":[{"hostname":"il1.gw.ivpn.net","host":"185.191.207.194","multihop_port":27301,"load":12.76}]},{"gateway":"us-va.gw.ivpn.net","country_code":"US","country":"United States","city":"Ashburn, VA","latitude":39.0437,"longitude":-77.4875,"isp":"Datapacket","hosts":[{"hostname":"us-va1.gw.ivpn.net","host":"37.19.206.105","multihop_port":27701,"load":30.64}]},{"gateway":"us-wa.gw.ivpn.net","country_code":"US","country":"United States","city":"Seattle, WA","latitude":47.6211,"longitude":-122.3244,"isp":"Tzulo","hosts":[{"hostname":"us-wa2.gw.ivpn.net","host":"198.44.131.3","multihop_port":27801,"load":23.26}]}],"config":{"antitracker":{"default":{"ip":"10.0.254.2","multihop-ip":"10.0.254.102"},"hardcore":{"ip":"10.0.254.3","multihop-ip":"10.0.254.103"}},"api":{"ips":["198.50.177.220","149.56.162.156","198.50.177.222","149.56.162.159","198.50.177.223"],"ipv6s":["2607:5300:203:1735::8888","2607:5300:203:1735::8","2607:5300:203:1735:6580:7300:0:aaaa"]},"ports":{"openvpn":[{"type":"UDP","port":53},{"type":"UDP","port":80},{"type":"UDP","port":2049},{"type":"UDP","port":2050},{"type":"UDP","port":443},{"type":"UDP","port":1194},{"type":"TCP","port":80},{"type":"TCP","port":443},{"type":"TCP","port":1443}],"wireguard":[{"type":"UDP","port":53},{"type":"UDP","port":80},{"type":"UDP","port":443},{"type":"UDP","port":1194},{"type":"UDP","port":2049},{"type":"UDP","port":2050},{"type":"UDP","port":30587},{"type":"UDP","port":41893},{"type":"UDP","port":48574},{"type":"UDP","port":58237}]}}} From 7a410fa415038665b4a3a698fc335c4531c2be2b Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Fri, 1 Jul 2022 13:28:11 +0200 Subject: [PATCH 022/121] feat: update UISearchBarDelegate in ServerViewController --- IVPNClient/Scenes/ViewControllers/ServerViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IVPNClient/Scenes/ViewControllers/ServerViewController.swift b/IVPNClient/Scenes/ViewControllers/ServerViewController.swift index 1a82f053b..fd6f7ffa8 100644 --- a/IVPNClient/Scenes/ViewControllers/ServerViewController.swift +++ b/IVPNClient/Scenes/ViewControllers/ServerViewController.swift @@ -287,7 +287,7 @@ extension ServerViewController { extension ServerViewController: UISearchBarDelegate { func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { - let collection = Application.shared.serverList.getServers() + let collection = Application.shared.serverList.getAllHosts() filteredCollection.removeAll(keepingCapacity: false) filteredCollection = collection.filter { (server: VPNServer) -> Bool in From fe77867bd80e34996c3375ec6359a79b82f328ca Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Fri, 1 Jul 2022 15:27:17 +0200 Subject: [PATCH 023/121] feat(session): update evaluatePlanUpdate method --- .../ControlPanel/ControlPanelViewController.swift | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift b/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift index fbb4181a3..db9fe1a4e 100644 --- a/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift +++ b/IVPNClient/Scenes/MainScreen/ControlPanel/ControlPanelViewController.swift @@ -435,14 +435,18 @@ class ControlPanelViewController: UITableViewController { @objc private func evaluatePlanUpdate() { let isMultiHopAvailable = Application.shared.serviceStatus.isEnabled(capability: .multihop) let isMultiHopEnabled = UserDefaults.shared.isMultiHop - let isVPNConnected = Application.shared.connectionManager.status == .connected + let status = Application.shared.connectionManager.status if !isMultiHopAvailable && isMultiHopEnabled { - if isVPNConnected { + if status == .connected { let plan = Application.shared.serviceStatus.currentPlan ?? "" showActionAlert(title: "Subscription is changed to \(plan)", message: "Active VPN connection is using Pro plan features (MultiHop) and will be disconnected.", action: "Reconnect with SingleHop VPN", cancel: "OK", cancelHandler: { [self] _ in disableMultiHop() - Application.shared.connectionManager.disconnect() + if Application.shared.connectionManager.canDisconnect(status: status) { + Application.shared.connectionManager.disconnect() + } else { + Application.shared.connectionManager.reconnect() + } }, actionHandler: { [self] _ in disableMultiHop() Application.shared.connectionManager.reconnect() From 7e190f3d6e7db9db5fad71591300f9527f60cdb8 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Sun, 3 Jul 2022 09:19:26 +0200 Subject: [PATCH 024/121] feat: add load property in Host model --- IVPNClient/Models/Host.swift | 1 + IVPNClient/Models/VPNServerList.swift | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/IVPNClient/Models/Host.swift b/IVPNClient/Models/Host.swift index 68b4d88a3..17cab8c69 100644 --- a/IVPNClient/Models/Host.swift +++ b/IVPNClient/Models/Host.swift @@ -35,6 +35,7 @@ struct Host { var localIP: String var ipv6: IPv6? var multihopPort: Int + var load: Float func localIPAddress() -> String { if let range = localIP.range(of: "/", options: .backwards, range: nil, locale: nil) { diff --git a/IVPNClient/Models/VPNServerList.swift b/IVPNClient/Models/VPNServerList.swift index 801b2bfa8..ce4da6b34 100644 --- a/IVPNClient/Models/VPNServerList.swift +++ b/IVPNClient/Models/VPNServerList.swift @@ -291,7 +291,8 @@ class VPNServerList { hostName: host["hostname"] as? String ?? "", publicKey: host["public_key"] as? String ?? "", localIP: host["local_ip"] as? String ?? "", - multihopPort: host["multihop_port"] as? Int ?? 0 + multihopPort: host["multihop_port"] as? Int ?? 0, + load: host["load"] as? Float ?? 0.0 ) if let ipv6 = host["ipv6"] as? [String: Any] { From 205bb9d2a43a2dca9888b00ad24e5911bc43460a Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Sun, 3 Jul 2022 10:03:34 +0200 Subject: [PATCH 025/121] feat: add load info in ServerTableViewCell --- IVPNClient/Models/Host.swift | 2 +- IVPNClient/Models/VPNServer.swift | 4 +++- IVPNClient/Models/VPNServerList.swift | 4 ++-- .../Scenes/TableCells/ServerTableViewCell.swift | 14 +++++++++++++- IVPNClient/ViewModels/VPNServerViewModel.swift | 12 ++++++++---- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/IVPNClient/Models/Host.swift b/IVPNClient/Models/Host.swift index 17cab8c69..c49f2c7ef 100644 --- a/IVPNClient/Models/Host.swift +++ b/IVPNClient/Models/Host.swift @@ -35,7 +35,7 @@ struct Host { var localIP: String var ipv6: IPv6? var multihopPort: Int - var load: Float + var load: Double func localIPAddress() -> String { if let range = localIP.range(of: "/", options: .backwards, range: nil, locale: nil) { diff --git a/IVPNClient/Models/VPNServer.swift b/IVPNClient/Models/VPNServer.swift index e2c0027ea..54105450d 100644 --- a/IVPNClient/Models/VPNServer.swift +++ b/IVPNClient/Models/VPNServer.swift @@ -86,10 +86,11 @@ class VPNServer { private (set) var longitude: Double private (set) var ipAddresses: [String] private (set) var hosts: [Host] + private (set) var load: Double? // MARK: - Initialize - - init(gateway: String, countryCode: String, country: String, city: String, latitude: Double = 0, longitude: Double = 0, ipAddresses: [String] = [], hosts: [Host] = [], fastest: Bool = false) { + init(gateway: String, countryCode: String, country: String, city: String, latitude: Double = 0, longitude: Double = 0, ipAddresses: [String] = [], hosts: [Host] = [], fastest: Bool = false, load: Double = 0) { self.gateway = gateway self.countryCode = countryCode self.country = country @@ -99,6 +100,7 @@ class VPNServer { self.ipAddresses = ipAddresses self.hosts = hosts self.fastest = fastest + self.load = load } // MARK: - Methods - diff --git a/IVPNClient/Models/VPNServerList.swift b/IVPNClient/Models/VPNServerList.swift index ce4da6b34..c6a3dcb99 100644 --- a/IVPNClient/Models/VPNServerList.swift +++ b/IVPNClient/Models/VPNServerList.swift @@ -173,7 +173,7 @@ class VPNServerList { servers.append(server) for host in server.hosts { - servers.append(VPNServer(gateway: host.hostName, countryCode: "", country: "", city: server.city)) + servers.append(VPNServer(gateway: host.hostName, countryCode: "", country: "", city: server.city, load: host.load)) } } @@ -292,7 +292,7 @@ class VPNServerList { publicKey: host["public_key"] as? String ?? "", localIP: host["local_ip"] as? String ?? "", multihopPort: host["multihop_port"] as? Int ?? 0, - load: host["load"] as? Float ?? 0.0 + load: host["load"] as? Double ?? 0 ) if let ipv6 = host["ipv6"] as? [String: Any] { diff --git a/IVPNClient/Scenes/TableCells/ServerTableViewCell.swift b/IVPNClient/Scenes/TableCells/ServerTableViewCell.swift index 813acfcb1..f3c4654e1 100644 --- a/IVPNClient/Scenes/TableCells/ServerTableViewCell.swift +++ b/IVPNClient/Scenes/TableCells/ServerTableViewCell.swift @@ -41,6 +41,12 @@ class ServerTableViewCell: UITableViewCell { serverName.text = "Fastest server" configureButton.isHidden = false configureButton.isUserInteractionEnabled = true + } else if viewModel.isHost { + serverName.text = viewModel.formattedServerName + configureButton.isHidden = true + configureButton.isUserInteractionEnabled = false + flagImage.image = nil + flagImage.image?.accessibilityIdentifier = "" } else if isMultiHop && indexPath.row == 0 || !isMultiHop && indexPath.row == 1 { flagImage.image = UIImage(named: "icon-shuffle") flagImage.image?.accessibilityIdentifier = "icon-shuffle" @@ -58,7 +64,13 @@ class ServerTableViewCell: UITableViewCell { flagImage.updateUpFlagIcon() serverName.sizeToFit() - if let pingMs = viewModel.server.pingMs { + if viewModel.isHost { + pingImage.isHidden = true + if let load = viewModel.server.load { + pingTimeMs.text = "\(load)%" + pingTimeMs.isHidden = false + } + } else if let pingMs = viewModel.server.pingMs { if pingMs == -1 { pingTimeMs.text = "Offline" } else { diff --git a/IVPNClient/ViewModels/VPNServerViewModel.swift b/IVPNClient/ViewModels/VPNServerViewModel.swift index 137b7c085..984d5602f 100644 --- a/IVPNClient/ViewModels/VPNServerViewModel.swift +++ b/IVPNClient/ViewModels/VPNServerViewModel.swift @@ -91,6 +91,10 @@ struct VPNServerViewModel { } var formattedServerName: String { + if isHost { + return server.gateway + } + return "\(server.city), \(server.countryCode.uppercased())" } @@ -114,6 +118,10 @@ struct VPNServerViewModel { return UserDefaults.standard.showIPv4Servers && UserDefaults.shared.isIPv6 && server.enabledIPv6 && !(server.random && Application.shared.connectionManager.status.isDisconnected()) } + var isHost: Bool { + return server.countryCode == "" && server.gateway != "" + } + // MARK: - Initialize - init(server: VPNServer) { @@ -123,10 +131,6 @@ struct VPNServerViewModel { // MARK: - Methods - func formattedServerName(sort: ServersSort) -> String { - if server.countryCode == "" && server.gateway != "" { - return server.gateway - } - guard sort != .country else { return "\(server.countryCode.uppercased()), \(server.city)" } From 9b50b41775c5e920c61dba569689c56051860d51 Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Mon, 4 Jul 2022 12:10:37 +0200 Subject: [PATCH 026/121] feat: add expandHost method in ServerViewController --- .../Scenes/ViewControllers/ServerViewController.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/IVPNClient/Scenes/ViewControllers/ServerViewController.swift b/IVPNClient/Scenes/ViewControllers/ServerViewController.swift index fd6f7ffa8..5fe2d0085 100644 --- a/IVPNClient/Scenes/ViewControllers/ServerViewController.swift +++ b/IVPNClient/Scenes/ViewControllers/ServerViewController.swift @@ -57,6 +57,8 @@ class ServerViewController: UITableViewController { return list } + private var expandedGateways: [String] = [] + private var isSearchActive: Bool { return !searchBar.text!.isEmpty } @@ -160,6 +162,11 @@ class ServerViewController: UITableViewController { refreshControl = nil } + private func expandHost(_ host: String) -> Bool { + let gateway = host.components(separatedBy: CharacterSet.decimalDigits).joined() + return expandedGateways.contains(gateway) + } + } // MARK: - UITableViewDataSource - From 769307114bdb695a086f07c8824a13a10ac505ca Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Mon, 4 Jul 2022 13:47:31 +0200 Subject: [PATCH 027/121] feat: add expandGateway method in ServerViewController --- IVPNClient/Models/VPNServer.swift | 8 ++++++ .../TableCells/ServerTableViewCell.swift | 4 +-- .../ServerViewController.swift | 27 ++++++++++++++++--- .../ViewModels/VPNServerViewModel.swift | 6 +---- 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/IVPNClient/Models/VPNServer.swift b/IVPNClient/Models/VPNServer.swift index 54105450d..78ebd7321 100644 --- a/IVPNClient/Models/VPNServer.swift +++ b/IVPNClient/Models/VPNServer.swift @@ -78,6 +78,14 @@ class VPNServer { return false } + var isHost: Bool { + return countryCode == "" && gateway != "" + } + + var hostGateway: String { + return gateway.components(separatedBy: CharacterSet.decimalDigits).joined() + } + private (set) var gateway: String private (set) var countryCode: String private (set) var country: String diff --git a/IVPNClient/Scenes/TableCells/ServerTableViewCell.swift b/IVPNClient/Scenes/TableCells/ServerTableViewCell.swift index f3c4654e1..25b1b28c7 100644 --- a/IVPNClient/Scenes/TableCells/ServerTableViewCell.swift +++ b/IVPNClient/Scenes/TableCells/ServerTableViewCell.swift @@ -41,7 +41,7 @@ class ServerTableViewCell: UITableViewCell { serverName.text = "Fastest server" configureButton.isHidden = false configureButton.isUserInteractionEnabled = true - } else if viewModel.isHost { + } else if viewModel.server.isHost { serverName.text = viewModel.formattedServerName configureButton.isHidden = true configureButton.isUserInteractionEnabled = false @@ -64,7 +64,7 @@ class ServerTableViewCell: UITableViewCell { flagImage.updateUpFlagIcon() serverName.sizeToFit() - if viewModel.isHost { + if viewModel.server.isHost { pingImage.isHidden = true if let load = viewModel.server.load { pingTimeMs.text = "\(load)%" diff --git a/IVPNClient/Scenes/ViewControllers/ServerViewController.swift b/IVPNClient/Scenes/ViewControllers/ServerViewController.swift index 5fe2d0085..89132c2ae 100644 --- a/IVPNClient/Scenes/ViewControllers/ServerViewController.swift +++ b/IVPNClient/Scenes/ViewControllers/ServerViewController.swift @@ -88,6 +88,23 @@ class ServerViewController: UITableViewController { } } + @IBAction func expandGateway(_ sender: Any) { + var superview = (sender as AnyObject).superview + while let view = superview, !(view is UITableViewCell) { + superview = view?.superview + } + guard let cell = superview as? UITableViewCell else { + return + } + guard let indexPath = tableView.indexPath(for: cell) else { + return + } + + let server = collection[indexPath.row] + expandedGateways.append(server.gateway) + tableView.reloadData() + } + // MARK: - View Lifecycle - override func viewDidLoad() { @@ -162,9 +179,8 @@ class ServerViewController: UITableViewController { refreshControl = nil } - private func expandHost(_ host: String) -> Bool { - let gateway = host.components(separatedBy: CharacterSet.decimalDigits).joined() - return expandedGateways.contains(gateway) + private func expandHost(_ server: VPNServer) -> Bool { + return expandedGateways.contains(server.hostGateway) } } @@ -284,6 +300,11 @@ extension ServerViewController { } override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + let server = collection[indexPath.row] + if server.isHost && !expandHost(server) { + return 0 + } + return 64 } diff --git a/IVPNClient/ViewModels/VPNServerViewModel.swift b/IVPNClient/ViewModels/VPNServerViewModel.swift index 984d5602f..231c9fdb5 100644 --- a/IVPNClient/ViewModels/VPNServerViewModel.swift +++ b/IVPNClient/ViewModels/VPNServerViewModel.swift @@ -91,7 +91,7 @@ struct VPNServerViewModel { } var formattedServerName: String { - if isHost { + if server.isHost { return server.gateway } @@ -118,10 +118,6 @@ struct VPNServerViewModel { return UserDefaults.standard.showIPv4Servers && UserDefaults.shared.isIPv6 && server.enabledIPv6 && !(server.random && Application.shared.connectionManager.status.isDisconnected()) } - var isHost: Bool { - return server.countryCode == "" && server.gateway != "" - } - // MARK: - Initialize - init(server: VPNServer) { From dcaa193ebec029a86173838a8a23e0f3555ba76d Mon Sep 17 00:00:00 2001 From: Juraj Hilje Date: Mon, 4 Jul 2022 20:45:58 +0200 Subject: [PATCH 028/121] feat: update ServerTableViewCell --- IVPNClient/Scenes/Base.lproj/Main.storyboard | 19 +++++++++++++++++-- .../TableCells/ServerTableViewCell.swift | 5 +++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/IVPNClient/Scenes/Base.lproj/Main.storyboard b/IVPNClient/Scenes/Base.lproj/Main.storyboard index 809e85fe3..f024203a7 100644 --- a/IVPNClient/Scenes/Base.lproj/Main.storyboard +++ b/IVPNClient/Scenes/Base.lproj/Main.storyboard @@ -641,7 +641,7 @@ - + - + @@ -2360,7 +2492,7 @@ - + @@ -2433,14 +2565,14 @@ - + - + - + @@ -2460,7 +2592,7 @@ - + - + - + - + - + @@ -2825,7 +2957,7 @@ - + @@ -3006,7 +3138,7 @@ - + @@ -3214,7 +3346,7 @@ - + @@ -3239,7 +3371,7 @@ - + @@ -3275,7 +3407,7 @@ - + @@ -3308,7 +3440,7 @@ - + @@ -3344,7 +3476,7 @@ - + @@ -3380,7 +3512,7 @@ - + @@ -3492,7 +3624,7 @@ Hardcore mode blocks the leading companies with business models relying on user surveillance (currently: Google and Facebook). Learn more - + @@ -3624,21 +3756,21 @@ - + - +