             }
 
             return false
-            
-//            break
         case "?":
             if si < address.endIndex {
                 break
             }
  
             return false
-            
-//            break
         /*
          * set specification is inclusive, that is [a-z] is a, z and
          * everything in between. this means [z-a] may be interpreted

}


// true
print(matches(address:"ablak", pattern:"ablak"))

// false
print(matches(address:"ablak", pattern:"abrak"))

// true
print(matches(address:"ablak", pattern:"ab?ak"))

// true
print(matches(address:"ablak", pattern:"ab*"))

// true
print(matches(address:"ablak", pattern:"a{blak,jto}"))

// false
print(matches(address:"ablak", pattern:"a{blak|jto}"))


                // consume closing character
                pi = pattern.index(after: pi)
            }
        case "{":
            
            let place = si // to backtrack
            var remainder = pi // to forward-track
            
            // iterate to the end of the choice list
            while remainder < pattern.endIndex && pattern[remainder] != "}" {
                remainder = pattern.index(after:remainder)
            }
            if remainder == pattern.endIndex {
                print("ERROR: unbalanced Choice")
                return false
            }
            
            // ?? step back
            //   reminder points to the last char AFTER closing curly brace
            remainder = pattern.index(after:remainder)


            // pick first char after opening curly brace
            var char = pattern[pi]
            pi = pattern.index(after:pi)

            while pi < pattern.endIndex {
                if char == "," {
                    // print("#1 choice: char = \(char)")
                    // print("Test string \(address.substring(from: si)) against pattern \(pattern.substring(from: remainder))")
                    if matches(address: address.substring(from: si), pattern: pattern.substring(from: remainder)) {
                        return true
                    } else {
