Skip to content

Commit

Permalink
chore: minor tweaks and cleanup
Browse files Browse the repository at this point in the history
Including fixes to docs, punctuation, naming, etc.
  • Loading branch information
drmohundro committed May 4, 2022
1 parent 41df641 commit 821f8c7
Show file tree
Hide file tree
Showing 15 changed files with 48 additions and 48 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

## v4.8.0 (March 6, 2019)

- Added support for using String backed RawRepresentables in place of Strings for revelant APIs (via
- Added support for using String backed RawRepresentables in place of Strings for relevant APIs (via
[#204](https://github.com/drmohundro/SWXMLHash/pull/207))

## v4.7.6 (December 11, 2018)
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ I monitor [StackOverflow](http://stackoverflow.com) under the [SWXMLHash tag](ht
When reporting issues, please include:

* Which version of Xcode you're using
* Which OS or platform you're targetting
* Which OS or platform you're targeting
* Any stack trace or compiler error
* Code snippets that reproduce the behavior

Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ dependencies: [
### Manual Installation

To install manually, you'll need to clone the SWXMLHash repository. You can do
this in a separate directory or you can make use of git submodules - in this
this in a separate directory, or you can make use of git submodules - in this
case, git submodules are recommended so that your repository has details about
which commit of SWXMLHash you're using. Once this is done, you can just drop the
`SWXMLHash.swift` file into your project.
Expand Down Expand Up @@ -134,8 +134,8 @@ The available options at this time are:
will be returned as "\<table\>")
- Defaults to `false`
- `caseInsensitive`
- This setting allows for key lookups to be case insensitive. Typically XML is
a case sensitive language, but this option lets you bypass this if
- This setting allows for key lookups to be case-insensitive. Typically, XML is
a case-sensitive language, but this option lets you bypass this if
necessary.
- Defaults to `false`
- `encoding`
Expand Down Expand Up @@ -349,7 +349,7 @@ Given:
</root>
```

The following will return return "Midnight Rain". Filtering can be by any part
The following will return "Midnight Rain". Filtering can be by any part
of the `XMLElement` class or by index as well.

```swift
Expand Down
16 changes: 8 additions & 8 deletions SWXMLHash.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,9 @@
CDC6D13B1D32D84900570DE5 /* TypeConversionComplexTypesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC6D13A1D32D84900570DE5 /* TypeConversionComplexTypesTests.swift */; };
CDC6D13C1D32D84900570DE5 /* TypeConversionComplexTypesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC6D13A1D32D84900570DE5 /* TypeConversionComplexTypesTests.swift */; };
CDC6D13D1D32D84900570DE5 /* TypeConversionComplexTypesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC6D13A1D32D84900570DE5 /* TypeConversionComplexTypesTests.swift */; };
CDC6D13F1D32D98400570DE5 /* TypeConversionPrimitypeTypesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC6D13E1D32D98400570DE5 /* TypeConversionPrimitypeTypesTests.swift */; };
CDC6D1401D32D98400570DE5 /* TypeConversionPrimitypeTypesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC6D13E1D32D98400570DE5 /* TypeConversionPrimitypeTypesTests.swift */; };
CDC6D1411D32D98400570DE5 /* TypeConversionPrimitypeTypesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC6D13E1D32D98400570DE5 /* TypeConversionPrimitypeTypesTests.swift */; };
CDC6D13F1D32D98400570DE5 /* TypeConversionPrimitiveTypesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC6D13E1D32D98400570DE5 /* TypeConversionPrimitiveTypesTests.swift */; };
CDC6D1401D32D98400570DE5 /* TypeConversionPrimitiveTypesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC6D13E1D32D98400570DE5 /* TypeConversionPrimitiveTypesTests.swift */; };
CDC6D1411D32D98400570DE5 /* TypeConversionPrimitiveTypesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC6D13E1D32D98400570DE5 /* TypeConversionPrimitiveTypesTests.swift */; };
CDC6D1431D32D9D200570DE5 /* TypeConversionArrayOfNonPrimitiveTypesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC6D1421D32D9D200570DE5 /* TypeConversionArrayOfNonPrimitiveTypesTests.swift */; };
CDC6D1441D32D9D200570DE5 /* TypeConversionArrayOfNonPrimitiveTypesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC6D1421D32D9D200570DE5 /* TypeConversionArrayOfNonPrimitiveTypesTests.swift */; };
CDC6D1451D32D9D200570DE5 /* TypeConversionArrayOfNonPrimitiveTypesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDC6D1421D32D9D200570DE5 /* TypeConversionArrayOfNonPrimitiveTypesTests.swift */; };
Expand Down Expand Up @@ -263,7 +263,7 @@
CDC6D1321D32D7C300570DE5 /* LazyTypesConversionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LazyTypesConversionTests.swift; sourceTree = "<group>"; };
CDC6D1361D32D7F400570DE5 /* TypeConversionBasicTypesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TypeConversionBasicTypesTests.swift; sourceTree = "<group>"; };
CDC6D13A1D32D84900570DE5 /* TypeConversionComplexTypesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TypeConversionComplexTypesTests.swift; sourceTree = "<group>"; };
CDC6D13E1D32D98400570DE5 /* TypeConversionPrimitypeTypesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TypeConversionPrimitypeTypesTests.swift; sourceTree = "<group>"; };
CDC6D13E1D32D98400570DE5 /* TypeConversionPrimitiveTypesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TypeConversionPrimitiveTypesTests.swift; sourceTree = "<group>"; };
CDC6D1421D32D9D200570DE5 /* TypeConversionArrayOfNonPrimitiveTypesTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TypeConversionArrayOfNonPrimitiveTypesTests.swift; sourceTree = "<group>"; };
CDDEC74C1BF6311A00AB138B /* SWXMLHash.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SWXMLHash.framework; sourceTree = BUILT_PRODUCTS_DIR; };
CDDEC7551BF6311B00AB138B /* SWXMLHash tvOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SWXMLHash tvOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
Expand Down Expand Up @@ -443,7 +443,7 @@
CDC6D1421D32D9D200570DE5 /* TypeConversionArrayOfNonPrimitiveTypesTests.swift */,
CDC6D1361D32D7F400570DE5 /* TypeConversionBasicTypesTests.swift */,
CDC6D13A1D32D84900570DE5 /* TypeConversionComplexTypesTests.swift */,
CDC6D13E1D32D98400570DE5 /* TypeConversionPrimitypeTypesTests.swift */,
CDC6D13E1D32D98400570DE5 /* TypeConversionPrimitiveTypesTests.swift */,
CDC6D11E1D32D70800570DE5 /* WhiteSpaceParsingTests.swift */,
CDC6D11A1D32D6CE00570DE5 /* XMLParsingTests.swift */,
E25A0775261CF79300C68B90 /* XMLParsingValidationTests.swift */,
Expand Down Expand Up @@ -805,7 +805,7 @@
CDC6D1271D32D76400570DE5 /* LazyXMLParsingTests.swift in Sources */,
CDC6D12F1D32D79F00570DE5 /* XMLHashConfigTests.swift in Sources */,
6C42BED1205183A100137D31 /* shim.swift in Sources */,
CDC6D13F1D32D98400570DE5 /* TypeConversionPrimitypeTypesTests.swift in Sources */,
CDC6D13F1D32D98400570DE5 /* TypeConversionPrimitiveTypesTests.swift in Sources */,
E25A0776261CF79300C68B90 /* XMLParsingValidationTests.swift in Sources */,
CDC6D1431D32D9D200570DE5 /* TypeConversionArrayOfNonPrimitiveTypesTests.swift in Sources */,
CDC6D11F1D32D70800570DE5 /* WhiteSpaceParsingTests.swift in Sources */,
Expand Down Expand Up @@ -858,7 +858,7 @@
CDC6D1281D32D76400570DE5 /* LazyXMLParsingTests.swift in Sources */,
CDC6D1301D32D79F00570DE5 /* XMLHashConfigTests.swift in Sources */,
6C42BED2205183A100137D31 /* shim.swift in Sources */,
CDC6D1401D32D98400570DE5 /* TypeConversionPrimitypeTypesTests.swift in Sources */,
CDC6D1401D32D98400570DE5 /* TypeConversionPrimitiveTypesTests.swift in Sources */,
E25A0777261CF79300C68B90 /* XMLParsingValidationTests.swift in Sources */,
CDC6D1441D32D9D200570DE5 /* TypeConversionArrayOfNonPrimitiveTypesTests.swift in Sources */,
CDC6D1201D32D70800570DE5 /* WhiteSpaceParsingTests.swift in Sources */,
Expand Down Expand Up @@ -911,7 +911,7 @@
CDC6D1291D32D76400570DE5 /* LazyXMLParsingTests.swift in Sources */,
CDC6D1311D32D79F00570DE5 /* XMLHashConfigTests.swift in Sources */,
6C42BED3205183A100137D31 /* shim.swift in Sources */,
CDC6D1411D32D98400570DE5 /* TypeConversionPrimitypeTypesTests.swift in Sources */,
CDC6D1411D32D98400570DE5 /* TypeConversionPrimitiveTypesTests.swift in Sources */,
E25A0778261CF79300C68B90 /* XMLParsingValidationTests.swift in Sources */,
CDC6D1451D32D9D200570DE5 /* TypeConversionArrayOfNonPrimitiveTypesTests.swift in Sources */,
CDC6D1211D32D70800570DE5 /* WhiteSpaceParsingTests.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,7 @@ extension XMLElement {
- returns: The deserialized `T` value
*/
public func value<T: XMLAttributeDeserializable>(ofAttribute attr: String) throws -> T {
if let attr = self.attribute(by: attr) {
if let attr = attribute(by: attr) {
let deserialized = try T.deserialize(attr)
try deserialized.validate()
return deserialized
Expand All @@ -497,7 +497,7 @@ extension XMLElement {
- returns: The deserialized `T?` value, or nil if the attribute does not exist.
*/
public func value<T: XMLAttributeDeserializable>(ofAttribute attr: String) -> T? {
if let attr = self.attribute(by: attr) {
if let attr = attribute(by: attr) {
let deserialized = try? T.deserialize(attr)
if deserialized != nil {
try? deserialized?.validate()
Expand Down
2 changes: 1 addition & 1 deletion Source/FullXMLParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ class FullXMLParser: NSObject, SimpleXmlParser, XMLParserDelegate {
attributes attributeDict: [String: String]) {
let currentNode = parentStack
.top()
.addElement(elementName, withAttributes: attributeDict, caseInsensitive: self.options.caseInsensitive)
.addElement(elementName, withAttributes: attributeDict, caseInsensitive: options.caseInsensitive)

parentStack.push(currentNode)
}
Expand Down
2 changes: 1 addition & 1 deletion Source/IndexOp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class IndexOp {

init(_ key: String) {
self.key = key
self.index = -1
index = -1
}

func toString() -> String {
Expand Down
2 changes: 1 addition & 1 deletion Source/LazyXMLParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ class LazyXMLParser: NSObject, SimpleXmlParser, XMLParserDelegate {

let currentNode = parentStack
.top()
.addElement(elementName, withAttributes: attributeDict, caseInsensitive: self.options.caseInsensitive)
.addElement(elementName, withAttributes: attributeDict, caseInsensitive: options.caseInsensitive)
parentStack.push(currentNode)
}

Expand Down
2 changes: 1 addition & 1 deletion Source/XMLElement.swift
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ extension XMLElement {
//
// On macOS, `XMLElement` is defined in Foundation.
// So, the code referencing `XMLElement` generates above error.
// Following code allow to using `SWXMLhash.XMLElement` in client codes.
// Following code allow to using `SWXMLHash.XMLElement` in client codes.
extension XMLHash {
public typealias XMLElement = XMLHashXMLElement
}
Expand Down
6 changes: 3 additions & 3 deletions Source/XMLIndexer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ public enum XMLIndexer {

public func filterChildren(_ included: (_ elem: XMLElement, _ index: Int) -> Bool) -> XMLIndexer {
let children = handleFilteredResults(list: childElements, included: included)
if let current = self.element {
if let current = element {
let filteredElem = XMLElement(name: current.name, index: current.index, options: current.options)
filteredElem.children = children.allElements
return .element(filteredElem)
Expand Down Expand Up @@ -176,7 +176,7 @@ public enum XMLIndexer {
Initializes the XMLIndexer

- parameter _: should be an instance of XMLElement, but supports other values for error handling
- throws: an Error if the object passed in isn't an XMLElement or LaxyXMLParser
- throws: an Error if the object passed in isn't an XMLElement or LazyXMLParser
*/
public init(_ rawObject: AnyObject) throws {
switch rawObject {
Expand Down Expand Up @@ -240,7 +240,7 @@ public enum XMLIndexer {
*/
public subscript(key: String) -> XMLIndexer {
do {
return try self.byKey(key)
return try byKey(key)
} catch let error as IndexingError {
return .xmlError(error)
} catch {
Expand Down
2 changes: 1 addition & 1 deletion Tests/LinuxMain.swift
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ XCTMain([
testCase(TypeConversionArrayOfNonPrimitiveTypesTests.allTests),
testCase(TypeConversionBasicTypesTests.allTests),
testCase(TypeConversionComplexTypesTests.allTests),
testCase(TypeConversionPrimitypeTypesTests.allTests),
testCase(TypeConversionPrimitiveTypesTests.allTests),
testCase(WhiteSpaceParsingTests.allTests),
testCase(XMLParsingTests.allTests)
])
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ class TypeConversionArrayOfNonPrimitiveTypesTests: XCTestCase {
parser = XMLHash.parse(xmlWithArraysOfTypes)
}

func testShouldConvertArrayOfGoodBasicitemsItemsToNonOptional() {
func testShouldConvertArrayOfGoodBasicItemsToNonOptional() {
do {
let value: [BasicItem] = try parser!["root"]["arrayOfGoodBasicItems"]["basicItem"].value()
XCTAssertEqual(value, correctBasicItems)
Expand All @@ -100,7 +100,7 @@ class TypeConversionArrayOfNonPrimitiveTypesTests: XCTestCase {
}
}

func testShouldConvertArrayOfGoodBasicitemsItemsToOptional() {
func testShouldConvertArrayOfGoodBasicItemsToOptional() {
do {
let value: [BasicItem]? = try parser!["root"]["arrayOfGoodBasicItems"]["basicItem"].value()
XCTAssertNotNil(value)
Expand All @@ -112,7 +112,7 @@ class TypeConversionArrayOfNonPrimitiveTypesTests: XCTestCase {
}
}

func testShouldConvertArrayOfGoodBasicitemsItemsToArrayOfOptionals() {
func testShouldConvertArrayOfGoodBasicItemsToArrayOfOptionals() {
do {
let value: [BasicItem?] = try parser!["root"]["arrayOfGoodBasicItems"]["basicItem"].value()
XCTAssertEqual(value.compactMap({ $0 }), correctBasicItems)
Expand All @@ -121,7 +121,7 @@ class TypeConversionArrayOfNonPrimitiveTypesTests: XCTestCase {
}
}

func testShouldThrowWhenConvertingArrayOfBadBasicitemsToNonOptional() {
func testShouldThrowWhenConvertingArrayOfBadBasicItemsToNonOptional() {
XCTAssertThrowsError(try (parser!["root"]["arrayOfBadBasicItems"]["basicItem"].value() as [BasicItem])) { error in
guard error is XMLDeserializationError else {
XCTFail("Wrong type of error")
Expand All @@ -130,7 +130,7 @@ class TypeConversionArrayOfNonPrimitiveTypesTests: XCTestCase {
}
}

func testShouldThrowWhenConvertingArrayOfBadBasicitemsToOptional() {
func testShouldThrowWhenConvertingArrayOfBadBasicItemsToOptional() {
XCTAssertThrowsError(try (parser!["root"]["arrayOfBadBasicItems"]["basicItem"].value() as [BasicItem]?)) { error in
guard error is XMLDeserializationError else {
XCTFail("Wrong type of error")
Expand All @@ -139,7 +139,7 @@ class TypeConversionArrayOfNonPrimitiveTypesTests: XCTestCase {
}
}

func testShouldThrowWhenConvertingArrayOfBadBasicitemsToArrayOfOptionals() {
func testShouldThrowWhenConvertingArrayOfBadBasicItemsToArrayOfOptionals() {
XCTAssertThrowsError(try (parser!["root"]["arrayOfBadBasicItems"]["basicItem"].value() as [BasicItem?])) { error in
guard error is XMLDeserializationError else {
XCTFail("Wrong type of error")
Expand Down Expand Up @@ -262,12 +262,12 @@ class TypeConversionArrayOfNonPrimitiveTypesTests: XCTestCase {
extension TypeConversionArrayOfNonPrimitiveTypesTests {
static var allTests: [(String, (TypeConversionArrayOfNonPrimitiveTypesTests) -> () throws -> Void)] {
[
("testShouldConvertArrayOfGoodBasicitemsItemsToNonOptional", testShouldConvertArrayOfGoodBasicitemsItemsToNonOptional),
("testShouldConvertArrayOfGoodBasicitemsItemsToOptional", testShouldConvertArrayOfGoodBasicitemsItemsToOptional),
("testShouldConvertArrayOfGoodBasicitemsItemsToArrayOfOptionals", testShouldConvertArrayOfGoodBasicitemsItemsToArrayOfOptionals),
("testShouldThrowWhenConvertingArrayOfBadBasicitemsToNonOptional", testShouldThrowWhenConvertingArrayOfBadBasicitemsToNonOptional),
("testShouldThrowWhenConvertingArrayOfBadBasicitemsToOptional", testShouldThrowWhenConvertingArrayOfBadBasicitemsToOptional),
("testShouldThrowWhenConvertingArrayOfBadBasicitemsToArrayOfOptionals", testShouldThrowWhenConvertingArrayOfBadBasicitemsToArrayOfOptionals),
("testShouldConvertArrayOfGoodBasicItemsToNonOptional", testShouldConvertArrayOfGoodBasicItemsToNonOptional),
("testShouldConvertArrayOfGoodBasicItemsToOptional", testShouldConvertArrayOfGoodBasicItemsToOptional),
("testShouldConvertArrayOfGoodBasicItemsToArrayOfOptionals", testShouldConvertArrayOfGoodBasicItemsToArrayOfOptionals),
("testShouldThrowWhenConvertingArrayOfBadBasicItemsToNonOptional", testShouldThrowWhenConvertingArrayOfBadBasicItemsToNonOptional),
("testShouldThrowWhenConvertingArrayOfBadBasicItemsToOptional", testShouldThrowWhenConvertingArrayOfBadBasicItemsToOptional),
("testShouldThrowWhenConvertingArrayOfBadBasicItemsToArrayOfOptionals", testShouldThrowWhenConvertingArrayOfBadBasicItemsToArrayOfOptionals),
("testShouldConvertArrayOfEmptyMissingToOptional", testShouldConvertArrayOfEmptyMissingToOptional),
("testShouldConvertArrayOfGoodAttributeItemsToNonOptional", testShouldConvertArrayOfGoodAttributeItemsToNonOptional),
("testShouldConvertArrayOfGoodAttributeItemsToOptional", testShouldConvertArrayOfGoodAttributeItemsToOptional),
Expand Down
8 changes: 4 additions & 4 deletions Tests/SWXMLHashTests/TypeConversionBasicTypesTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -494,7 +494,7 @@ class TypeConversionBasicTypesTests: XCTestCase {

let correctBasicItem = BasicItem(name: "the name of basic item", price: 99.14, id: "1234")

func testBasicItemShouldConvertBasicitemToNonOptional() {
func testBasicItemShouldConvertBasicItemToNonOptional() {
do {
let value: BasicItem = try parser!["root"]["basicItem"].value()
XCTAssertEqual(value, correctBasicItem)
Expand Down Expand Up @@ -523,7 +523,7 @@ class TypeConversionBasicTypesTests: XCTestCase {
}
}

func testBasicItemShouldConvertBasicitemToOptional() {
func testBasicItemShouldConvertBasicItemToOptional() {
do {
let value: BasicItem? = try parser!["root"]["basicItem"].value()
XCTAssertEqual(value, correctBasicItem)
Expand Down Expand Up @@ -755,10 +755,10 @@ extension TypeConversionBasicTypesTests {
("testBoolShouldConvertMissingToOptional", testBoolShouldConvertMissingToOptional),
("testBoolShouldConvertAttributeToNonOptional", testBoolShouldConvertAttributeToNonOptional),
("testBoolShouldConvertAttributeToOptional", testBoolShouldConvertAttributeToOptional),
("testBasicItemShouldConvertBasicitemToNonOptional", testBasicItemShouldConvertBasicitemToNonOptional),
("testBasicItemShouldConvertBasicItemToNonOptional", testBasicItemShouldConvertBasicItemToNonOptional),
("testBasicItemShouldThrowWhenConvertingEmptyToNonOptional", testBasicItemShouldThrowWhenConvertingEmptyToNonOptional),
("testBasicItemShouldThrowWhenConvertingMissingToNonOptional", testBasicItemShouldThrowWhenConvertingMissingToNonOptional),
("testBasicItemShouldConvertBasicitemToOptional", testBasicItemShouldConvertBasicitemToOptional),
("testBasicItemShouldConvertBasicItemToOptional", testBasicItemShouldConvertBasicItemToOptional),
("testBasicItemShouldConvertEmptyToOptional", testBasicItemShouldConvertEmptyToOptional),
("testBasicItemShouldConvertMissingToOptional", testBasicItemShouldConvertMissingToOptional),
("testAttributeItemShouldConvertAttributeItemToNonOptional", testAttributeItemShouldConvertAttributeItemToNonOptional),
Expand Down
Loading

0 comments on commit 821f8c7

Please sign in to comment.