code: public Map<String,String> getResolvedArguments(String filterArgs, AnalyzedTokenReadings[] patternTokens, List<Integer> tokenPositions) {
      Map<String,String> result = new HashMap<>();
      String[] arguments = filterArgs.split("\\s+");
      for (String arg : arguments) {
        int delimPos = arg.indexOf(':');
        if (delimPos == -1) {
          throw new RuntimeException("Invalid syntax for key/value, expected 'key:value', got: '" + arg + "'");
        }
        String key = arg.substring(0, delimPos);
        String val = arg.substring(delimPos + 1);
        if (val.startsWith("\\")) {
          int refNumber = Integer.parseInt(val.replace("\\", ""));
          if (refNumber > tokenPositions.size()) {
            throw new RuntimeException("Your reference number " + refNumber + " is bigger than the number of tokens: " + tokenPositions.size());
          }
          int correctedRef = getSkipCorrectedReference(tokenPositions, refNumber);
          if (correctedRef >= patternTokens.length) {
            throw new RuntimeException("Your reference number " + refNumber +
                    " is bigger than number of matching tokens: " + patternTokens.length);
          }
          if (result.containsKey(key)) {
            throw new RuntimeException("Duplicate key '" + key + "'");
          }
          result.put(key, patternTokens[correctedRef].getToken());
        } else {
          result.put(key, val);
        }
      }
      return result;
    }
docs: Resolves the backref arguments, e.g. replaces {@code \1} by the value of the first token in the pattern.