Build Information
Successful build of SwByeDPI, reference master (4b1ca8), with Swift 6.2 for Android on 17 Jul 2026 15:08:31 UTC.
Swift 6 data race errors: 0
Build Command
bash -c docker run --pull=always --rm -v "checkouts-54344847-0":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/saguaro1/spi-images:android-6.2-latest swift build --swift-sdk aarch64-unknown-linux-android28 2>&1Build Log
========================================
RunAll
========================================
Builder version: 333316120c8b89ed7d21f1b34865290794301d91
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/mIwr/SwByeDPI.git
Reference: master
Initialized empty Git repository in /host/spi-builder-workspace/.git/
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
From https://github.com/mIwr/SwByeDPI
* branch master -> FETCH_HEAD
* [new branch] master -> origin/master
HEAD is now at 4b1ca87 fix: DoH/DoT IP update from settings, NE exclude for SOCKS 0.0.0.0, typos
Cloned https://github.com/mIwr/SwByeDPI.git
Revision (git rev-parse @):
4b1ca8744630327dfb955ddd1ae0d3c5f2c1abdc
SUCCESS checkout https://github.com/mIwr/SwByeDPI.git at master
========================================
Build
========================================
Selected platform: android
Swift version: 6.2
Building package at path: $PWD
https://github.com/mIwr/SwByeDPI.git
Running build ...
bash -c docker run --pull=always --rm -v "checkouts-54344847-0":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/saguaro1/spi-images:android-6.2-latest swift build --swift-sdk aarch64-unknown-linux-android28 2>&1
android-6.2-latest: Pulling from saguaro1/spi-images
Digest: sha256:3f0849bce0d177c252f57ff0847fffe59d625aee973279c71a52a43c740d3c90
Status: Image is up to date for registry.gitlab.com/saguaro1/spi-images:android-6.2-latest
warning: 'spi-builder-workspace': /host/spi-builder-workspace/Package.swift:36:15: warning: 'init(name:defaultLocalization:platforms:pkgConfig:providers:products:dependencies:targets:swiftLanguageVersions:cLanguageStandard:cxxLanguageStandard:)' is deprecated: replaced by 'init(name:defaultLocalization:platforms:pkgConfig:providers:products:dependencies:targets:swiftLanguageModes:cLanguageStandard:cxxLanguageStandard:)' [#DeprecatedDeclaration]
34 | ]
35 |
36 | let package = Package(
| |- warning: 'init(name:defaultLocalization:platforms:pkgConfig:providers:products:dependencies:targets:swiftLanguageVersions:cLanguageStandard:cxxLanguageStandard:)' is deprecated: replaced by 'init(name:defaultLocalization:platforms:pkgConfig:providers:products:dependencies:targets:swiftLanguageModes:cLanguageStandard:cxxLanguageStandard:)' [#DeprecatedDeclaration]
| `- note: use 'init(name:defaultLocalization:platforms:pkgConfig:providers:products:dependencies:targets:swiftLanguageModes:cLanguageStandard:cxxLanguageStandard:)' instead
37 | name: "SwByeDPI",
38 | platforms: [
/host/spi-builder-workspace/Package.swift:39:17: warning: 'v10_12' is deprecated: macOS 10.13 is the oldest supported version [#DeprecatedDeclaration]
37 | name: "SwByeDPI",
38 | platforms: [
39 | .macOS(.v10_12), .iOS(.v10), .tvOS(.v10), .watchOS(.v3), .visionOS(.v1)
| `- warning: 'v10_12' is deprecated: macOS 10.13 is the oldest supported version [#DeprecatedDeclaration]
40 | ],
41 | products: [
/host/spi-builder-workspace/Package.swift:39:32: warning: 'v10' is deprecated: iOS 12.0 is the oldest supported version [#DeprecatedDeclaration]
37 | name: "SwByeDPI",
38 | platforms: [
39 | .macOS(.v10_12), .iOS(.v10), .tvOS(.v10), .watchOS(.v3), .visionOS(.v1)
| `- warning: 'v10' is deprecated: iOS 12.0 is the oldest supported version [#DeprecatedDeclaration]
40 | ],
41 | products: [
/host/spi-builder-workspace/Package.swift:39:45: warning: 'v10' is deprecated: tvOS 12.0 is the oldest supported version [#DeprecatedDeclaration]
37 | name: "SwByeDPI",
38 | platforms: [
39 | .macOS(.v10_12), .iOS(.v10), .tvOS(.v10), .watchOS(.v3), .visionOS(.v1)
| `- warning: 'v10' is deprecated: tvOS 12.0 is the oldest supported version [#DeprecatedDeclaration]
40 | ],
41 | products: [
/host/spi-builder-workspace/Package.swift:39:61: warning: 'v3' is deprecated: watchOS 4.0 is the oldest supported version [#DeprecatedDeclaration]
37 | name: "SwByeDPI",
38 | platforms: [
39 | .macOS(.v10_12), .iOS(.v10), .tvOS(.v10), .watchOS(.v3), .visionOS(.v1)
| `- warning: 'v3' is deprecated: watchOS 4.0 is the oldest supported version [#DeprecatedDeclaration]
40 | ],
41 | products: [
[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
Building for debugging...
[0/17] Write sources
[0/17] Copying PrivacyInfo.xcprivacy
[0/17] Copying LICENSE
[0/17] Write sources
[0/17] Copying PrivacyInfo.xcprivacy
[6/17] Compiling ByeDPIC ciadpi_bridge.c
[7/17] Compiling conev.c
[8/17] Compiling mpool.c
/host/spi-builder-workspace/Sources/ByeDPIC/byedpi/packets.c:48:35: warning: unknown attribute 'nonstring' ignored [-Wunknown-attributes]
48 | char http_data[43] __attribute__((nonstring)) = {
| ^~~~~~~~~
1 warning generated.
[9/17] Compiling packets.c
[10/17] Write swift-version--11D90AFD9DD3AB2.txt
[11/17] Compiling desync.c
[12/17] Compiling extend.c
[13/17] Compiling proxy.c
[14/17] Compiling ciadpi_main.c
[15/17] Write Objects.LinkFileList
[16/17] Archiving libByeDPIC.a
[18/21] Compiling ByeDPIKit BDError.swift
[19/21] Compiling ByeDPIKit resource_bundle_accessor.swift
[20/21] Emitting module ByeDPIKit
[21/21] Compiling ByeDPIKit ByeDPI.swift
[23/94] Compiling SwByeDPI FacebookShortTestDomains.swift
[24/94] Compiling SwByeDPI FacebookTestDomains.swift
[25/94] Compiling SwByeDPI GazpromDPIBypassSLD.swift
[26/94] Compiling SwByeDPI GitDPIBypassSLD.swift
[27/94] Compiling SwByeDPI GoogleAiTestDomains.swift
[28/94] Compiling SwByeDPI GoogleMeetTestDomains.swift
[29/94] Compiling SwByeDPI GooglePlayTestDomains.swift
[30/94] Compiling SwByeDPI GoogleVideoTestDomains.swift
[31/94] Compiling SwByeDPI GovDPIBypassSLD.swift
[32/94] Compiling SwByeDPI InstagramShortTestDomains.swift
[33/104] Compiling SwByeDPI SteamTestDomains.swift
[34/104] Compiling SwByeDPI SuperCellTestDomains.swift
[35/104] Compiling SwByeDPI TBankDPIBypassSLD.swift
[36/104] Compiling SwByeDPI TelegramTestDomains.swift
[37/104] Compiling SwByeDPI TikTokTestDomains.swift
[38/104] Compiling SwByeDPI TorTestDomains.swift
[39/104] Compiling SwByeDPI TorrentTestDomains.swift
[40/104] Compiling SwByeDPI TwitchTestDomains.swift
[41/104] Compiling SwByeDPI TwitterShortTestDomains.swift
[42/104] Compiling SwByeDPI TwitterTestDomains.swift
[43/104] Emitting module SwByeDPI
[44/104] Compiling SwByeDPI Notification+StrategyEventParser.swift
[45/104] Compiling SwByeDPI Notification+StrategyEvents.swift
[46/104] Compiling SwByeDPI Notification+TestingEventParser.swift
[47/104] Compiling SwByeDPI Notification+TestingEvents.swift
[48/104] Compiling SwByeDPI AlfaBankDPIBypassSLD.swift
[49/104] Compiling SwByeDPI BookTestDomains.swift
[50/104] Compiling SwByeDPI BuiltInDPIeStrategies.swift
[51/104] Compiling SwByeDPI CloudflareTestDomains.swift
[52/104] Compiling SwByeDPI DiscordTestDomains.swift
[53/104] Compiling SwByeDPI ExternalDPIeStrategies.swift
[54/104] Compiling SwByeDPI SBDTestConfig.swift
[55/104] Compiling SwByeDPI CancellationToken.swift
[56/104] Compiling SwByeDPI Cloneable.swift
[57/104] Compiling SwByeDPI SBDNamedListDelegate.swift
[58/104] Compiling SwByeDPI SBDObjControlDelegate.swift
[59/104] Compiling SwByeDPI SBDObjNamedListControlDelegate.swift
[60/104] Compiling SwByeDPI SBDDomainUtil.swift
[61/104] Compiling SwByeDPI SBDTestResultAnalyticsUtil.swift
[62/104] Compiling SwByeDPI SBDURLSessionUtil.swift
[63/104] Compiling SwByeDPI resource_bundle_accessor.swift
[64/104] Compiling SwByeDPI ByeDPI.swift
[65/104] Compiling SwByeDPI SBDDomainController.swift
[66/104] Compiling SwByeDPI SBDDomainListController.swift
[67/104] Compiling SwByeDPI SBDObjControllerImpl.swift
[68/104] Compiling SwByeDPI SBDObjNamedListControllerImpl.swift
[69/104] Compiling SwByeDPI SBDStrategyController.swift
[70/104] Compiling SwByeDPI SBDStrategyListController.swift
[71/104] Compiling SwByeDPI SBDTestController.swift
[72/104] Compiling SwByeDPI Global+AndroidThreadSleep.swift
[73/104] Compiling SwByeDPI Notification+DomainEventParser.swift
[74/104] Compiling SwByeDPI Notification+DomainEvents.swift
[75/104] Compiling SwByeDPI InstagramTestDomains.swift
[76/104] Compiling SwByeDPI LinkedInTestDomains.swift
[77/104] Compiling SwByeDPI MAXDPIBypassSLD.swift
[78/104] Compiling SwByeDPI MiscDPIBypassSLD.swift
[79/104] Compiling SwByeDPI MiscTestDomains.swift
[80/104] Compiling SwByeDPI NewsDPIBypassSLD.swift
[81/104] Compiling SwByeDPI RobloxTestDomains.swift
[82/104] Compiling SwByeDPI SberDPIBypassSLD.swift
[83/104] Compiling SwByeDPI SocialTestDomains.swift
[84/104] Compiling SwByeDPI SoundCloudTestDomains.swift
[85/104] Compiling SwByeDPI SBDStrategyCoverage.swift
[86/104] Compiling SwByeDPI SBDConfig.swift
[87/104] Compiling SwByeDPI SBDDomainList.swift
[88/104] Compiling SwByeDPI SBDDomainStrategyLink.swift
[89/104] Compiling SwByeDPI SBDDomainTestResult.swift
[90/104] Compiling SwByeDPI SBDError.swift
[91/104] Compiling SwByeDPI SBDLogLevel.swift
[92/104] Compiling SwByeDPI SBDStrategy.swift
[93/104] Compiling SwByeDPI SBDStrategyList.swift
[94/104] Compiling SwByeDPI SBDStrategyTestResult.swift
[95/104] Compiling SwByeDPI TwoGISDPIBypassSLD.swift
[96/104] Compiling SwByeDPI VKDPIBypassSLD.swift
[97/104] Compiling SwByeDPI VTBDPIBypassSLD.swift
[98/104] Compiling SwByeDPI VideoShortTestDomains.swift
[99/104] Compiling SwByeDPI VideoTestDomains.swift
[100/104] Compiling SwByeDPI WhatsappShortTestDomains.swift
[101/104] Compiling SwByeDPI WhatsappTestDomains.swift
[102/104] Compiling SwByeDPI YandexDPIBypassSLD.swift
[103/104] Compiling SwByeDPI YouTubeTestDomains.swift
[104/104] Compiling SwByeDPI SBDAndroidConfig.swift
Build complete! (7.89s)
Build complete.
{
"c_language_standard" : "c17",
"dependencies" : [
],
"manifest_display_name" : "SwByeDPI",
"name" : "SwByeDPI",
"path" : "/host/spi-builder-workspace",
"platforms" : [
{
"name" : "macos",
"version" : "10.12"
},
{
"name" : "ios",
"version" : "10.0"
},
{
"name" : "tvos",
"version" : "10.0"
},
{
"name" : "watchos",
"version" : "3.0"
},
{
"name" : "visionos",
"version" : "1.0"
}
],
"products" : [
{
"name" : "ByeDPIC",
"targets" : [
"ByeDPIC"
],
"type" : {
"library" : [
"static"
]
}
},
{
"name" : "ByeDPIKit",
"targets" : [
"ByeDPIKit"
],
"type" : {
"library" : [
"automatic"
]
}
},
{
"name" : "SwByeDPI",
"targets" : [
"SwByeDPI"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"swift_languages_versions" : [
"5",
"6"
],
"targets" : [
{
"c99name" : "SwByeDPITests",
"module_type" : "SwiftTarget",
"name" : "SwByeDPITests",
"path" : "Tests/SwByeDPITests",
"sources" : [
"Controller/SBDTestControllerTests.swift",
"Generated/StrategiesTest.swift",
"Model/SBDAndroidConfigTests.swift",
"Model/SBDConfigTests.swift",
"Model/SBDDomainListTests.swift",
"Model/SBDStrategyTests.swift",
"TestConstants.swift",
"Util/SBDTestResultAnalyticsUtilTests.swift"
],
"target_dependencies" : [
"SwByeDPI"
],
"type" : "test"
},
{
"c99name" : "SwByeDPI",
"module_type" : "SwiftTarget",
"name" : "SwByeDPI",
"path" : "Sources/SwByeDPI",
"product_memberships" : [
"SwByeDPI"
],
"resources" : [
{
"path" : "/host/spi-builder-workspace/Sources/SwByeDPI/PrivacyInfo.xcprivacy",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"ByeDPI.swift",
"Controller/SBDDomainController.swift",
"Controller/SBDDomainListController.swift",
"Controller/SBDObjControllerImpl.swift",
"Controller/SBDObjNamedListControllerImpl.swift",
"Controller/SBDStrategyController.swift",
"Controller/SBDStrategyListController.swift",
"Controller/SBDTestController.swift",
"Extension/Global+AndroidThreadSleep.swift",
"Extension/Notification+DomainEventParser.swift",
"Extension/Notification+DomainEvents.swift",
"Extension/Notification+StrategyEventParser.swift",
"Extension/Notification+StrategyEvents.swift",
"Extension/Notification+TestingEventParser.swift",
"Extension/Notification+TestingEvents.swift",
"Generated/AlfaBankDPIBypassSLD.swift",
"Generated/BookTestDomains.swift",
"Generated/BuiltInDPIeStrategies.swift",
"Generated/CloudflareTestDomains.swift",
"Generated/DiscordTestDomains.swift",
"Generated/ExternalDPIeStrategies.swift",
"Generated/FacebookShortTestDomains.swift",
"Generated/FacebookTestDomains.swift",
"Generated/GazpromDPIBypassSLD.swift",
"Generated/GitDPIBypassSLD.swift",
"Generated/GoogleAiTestDomains.swift",
"Generated/GoogleMeetTestDomains.swift",
"Generated/GooglePlayTestDomains.swift",
"Generated/GoogleVideoTestDomains.swift",
"Generated/GovDPIBypassSLD.swift",
"Generated/InstagramShortTestDomains.swift",
"Generated/InstagramTestDomains.swift",
"Generated/LinkedInTestDomains.swift",
"Generated/MAXDPIBypassSLD.swift",
"Generated/MiscDPIBypassSLD.swift",
"Generated/MiscTestDomains.swift",
"Generated/NewsDPIBypassSLD.swift",
"Generated/RobloxTestDomains.swift",
"Generated/SberDPIBypassSLD.swift",
"Generated/SocialTestDomains.swift",
"Generated/SoundCloudTestDomains.swift",
"Generated/SteamTestDomains.swift",
"Generated/SuperCellTestDomains.swift",
"Generated/TBankDPIBypassSLD.swift",
"Generated/TelegramTestDomains.swift",
"Generated/TikTokTestDomains.swift",
"Generated/TorTestDomains.swift",
"Generated/TorrentTestDomains.swift",
"Generated/TwitchTestDomains.swift",
"Generated/TwitterShortTestDomains.swift",
"Generated/TwitterTestDomains.swift",
"Generated/TwoGISDPIBypassSLD.swift",
"Generated/VKDPIBypassSLD.swift",
"Generated/VTBDPIBypassSLD.swift",
"Generated/VideoShortTestDomains.swift",
"Generated/VideoTestDomains.swift",
"Generated/WhatsappShortTestDomains.swift",
"Generated/WhatsappTestDomains.swift",
"Generated/YandexDPIBypassSLD.swift",
"Generated/YouTubeTestDomains.swift",
"Model/Adapter/SBDAndroidConfig.swift",
"Model/Analytics/SBDStrategyCoverage.swift",
"Model/SBDConfig.swift",
"Model/SBDDomainList.swift",
"Model/SBDDomainStrategyLink.swift",
"Model/SBDDomainTestResult.swift",
"Model/SBDError.swift",
"Model/SBDLogLevel.swift",
"Model/SBDStrategy.swift",
"Model/SBDStrategyList.swift",
"Model/SBDStrategyTestResult.swift",
"Model/SBDTestConfig.swift",
"Model/Support/CancellationToken.swift",
"Protocol/Cloneable.swift",
"Protocol/SBDNamedListDelegate.swift",
"Protocol/SBDObjControlDelegate.swift",
"Protocol/SBDObjNamedListControlDelegate.swift",
"Util/SBDDomainUtil.swift",
"Util/SBDTestResultAnalyticsUtil.swift",
"Util/SBDURLSessionUtil.swift"
],
"target_dependencies" : [
"ByeDPIKit"
],
"type" : "library"
},
{
"c99name" : "ByeDPIKitTests",
"module_type" : "SwiftTarget",
"name" : "ByeDPIKitTests",
"path" : "Tests/ByeDPIKitTests",
"sources" : [
"ByeDPITests.swift",
"Global+AndroidThreadSleep.swift",
"Util/URLSessionUtil.swift"
],
"target_dependencies" : [
"ByeDPIKit"
],
"type" : "test"
},
{
"c99name" : "ByeDPIKit",
"module_type" : "SwiftTarget",
"name" : "ByeDPIKit",
"path" : "Sources/ByeDPIKit",
"product_memberships" : [
"ByeDPIKit",
"SwByeDPI"
],
"resources" : [
{
"path" : "/host/spi-builder-workspace/Sources/ByeDPIKit/PrivacyInfo.xcprivacy",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"ByeDPI.swift",
"Model/BDError.swift"
],
"target_dependencies" : [
"ByeDPIC"
],
"type" : "library"
},
{
"c99name" : "ByeDPIC",
"module_type" : "ClangTarget",
"name" : "ByeDPIC",
"path" : "Sources/ByeDPIC",
"product_memberships" : [
"ByeDPIC",
"ByeDPIKit",
"SwByeDPI"
],
"resources" : [
{
"path" : "/host/spi-builder-workspace/Sources/ByeDPIC/PrivacyInfo.xcprivacy",
"rule" : {
"copy" : {
}
}
},
{
"path" : "/host/spi-builder-workspace/Sources/ByeDPIC/byedpi/LICENSE",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"byedpi/ciadpi_main.c",
"byedpi/conev.c",
"byedpi/desync.c",
"byedpi/extend.c",
"byedpi/mpool.c",
"byedpi/packets.c",
"byedpi/proxy.c",
"ciadpi_bridge.c"
],
"type" : "library"
}
],
"tools_version" : "6.0"
}
android-6.2-latest: Pulling from saguaro1/spi-images
Digest: sha256:3f0849bce0d177c252f57ff0847fffe59d625aee973279c71a52a43c740d3c90
Status: Image is up to date for registry.gitlab.com/saguaro1/spi-images:android-6.2-latest
warning: 'spi-builder-workspace': /host/spi-builder-workspace/Package.swift:36:15: warning: 'init(name:defaultLocalization:platforms:pkgConfig:providers:products:dependencies:targets:swiftLanguageVersions:cLanguageStandard:cxxLanguageStandard:)' is deprecated: replaced by 'init(name:defaultLocalization:platforms:pkgConfig:providers:products:dependencies:targets:swiftLanguageModes:cLanguageStandard:cxxLanguageStandard:)' [#DeprecatedDeclaration]
34 | ]
35 |
36 | let package = Package(
| |- warning: 'init(name:defaultLocalization:platforms:pkgConfig:providers:products:dependencies:targets:swiftLanguageVersions:cLanguageStandard:cxxLanguageStandard:)' is deprecated: replaced by 'init(name:defaultLocalization:platforms:pkgConfig:providers:products:dependencies:targets:swiftLanguageModes:cLanguageStandard:cxxLanguageStandard:)' [#DeprecatedDeclaration]
| `- note: use 'init(name:defaultLocalization:platforms:pkgConfig:providers:products:dependencies:targets:swiftLanguageModes:cLanguageStandard:cxxLanguageStandard:)' instead
37 | name: "SwByeDPI",
38 | platforms: [
/host/spi-builder-workspace/Package.swift:39:17: warning: 'v10_12' is deprecated: macOS 10.13 is the oldest supported version [#DeprecatedDeclaration]
37 | name: "SwByeDPI",
38 | platforms: [
39 | .macOS(.v10_12), .iOS(.v10), .tvOS(.v10), .watchOS(.v3), .visionOS(.v1)
| `- warning: 'v10_12' is deprecated: macOS 10.13 is the oldest supported version [#DeprecatedDeclaration]
40 | ],
41 | products: [
/host/spi-builder-workspace/Package.swift:39:32: warning: 'v10' is deprecated: iOS 12.0 is the oldest supported version [#DeprecatedDeclaration]
37 | name: "SwByeDPI",
38 | platforms: [
39 | .macOS(.v10_12), .iOS(.v10), .tvOS(.v10), .watchOS(.v3), .visionOS(.v1)
| `- warning: 'v10' is deprecated: iOS 12.0 is the oldest supported version [#DeprecatedDeclaration]
40 | ],
41 | products: [
/host/spi-builder-workspace/Package.swift:39:45: warning: 'v10' is deprecated: tvOS 12.0 is the oldest supported version [#DeprecatedDeclaration]
37 | name: "SwByeDPI",
38 | platforms: [
39 | .macOS(.v10_12), .iOS(.v10), .tvOS(.v10), .watchOS(.v3), .visionOS(.v1)
| `- warning: 'v10' is deprecated: tvOS 12.0 is the oldest supported version [#DeprecatedDeclaration]
40 | ],
41 | products: [
/host/spi-builder-workspace/Package.swift:39:61: warning: 'v3' is deprecated: watchOS 4.0 is the oldest supported version [#DeprecatedDeclaration]
37 | name: "SwByeDPI",
38 | platforms: [
39 | .macOS(.v10_12), .iOS(.v10), .tvOS(.v10), .watchOS(.v3), .visionOS(.v1)
| `- warning: 'v3' is deprecated: watchOS 4.0 is the oldest supported version [#DeprecatedDeclaration]
40 | ],
41 | products: [
[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
Done.