anchor.diff:          // '#/'
           // hash path
           isHashPath = true;
  -        uri = replacePathAndQuery(uri, uri.fragment);
  +        uri = _replacePathAndQuery(uri, uri.fragment);
         } else if (uri.fragment.startsWith('!/')) {
           // '#!/'
           // hashbang path
           isHashPath = true;
  -        uri = replacePathAndQuery(uri, uri.fragment.substring(1));
  +        uri = _replacePathAndQuery(uri, uri.fragment.substring(1));
         } else if (isHashPath) {
           // still use the hash if mode="hash"
           if (uri.fragment.length == 0) {
  -          uri = uri.replace(path: '/');
  +          uri = uri.replace(path: '/', query: '');
           } else {
  -          uri = replacePathAndQuery(uri, uri.fragment);
  +          uri = _replacePathAndQuery(uri, uri.fragment);
           }
         }
   
  
positive.code:   String toString() => uri.toString() + " isHashPath: ${isHashPath}";
  
    /// Map represenation of this RouteUri.
    Map<String, dynamic> toMap() {
      Map<String, dynamic> map = new Map<String, dynamic>();
      map['path'] = this.path;
      map['hash'] = this.hash;
  
negative.code:   Uri uri;
    bool isHashPath = false;
  
    /// hash for routing for this uri ('...#/...?...#XXX')
    String get hash {
      if (uri.fragment.length == 0) return '';
      return '#' + uri.fragment;
    }
  
    /// path for routing for this uri ('...#/XXX?...#...')
    String get path {
      return uri.path;
    }
  
    /// query string for routing for this uri ('...#/...?XXX#...')
    String get search {
      if (uri.query.length == 0) return '';
      return '?' + uri.query;
  