Fixed checks of base classes. Fixed -headers-list and -skip-symbols options. Fixed list of headers in the report. Fixed style of the report.
diff --git a/abi-compliance-checker.pl b/abi-compliance-checker.pl
index dd68448..6f77622 100755
--- a/abi-compliance-checker.pl
+++ b/abi-compliance-checker.pl
@@ -147,10 +147,7 @@
     "Empty_Set"=>11
 );
 
-my %HomePage = (
-    "Wiki"=>"http://ispras.linuxbase.org/index.php/ABI_compliance_checker",
-    "Dev"=>"https://github.com/lvc/abi-compliance-checker"
-);
+my $HomePage = "http://lvc.github.io/abi-compliance-checker/";
 
 my $ShortUsage = "ABI Compliance Checker (ABICC) $TOOL_VERSION
 A tool for checking backward compatibility of a C/C++ library API
@@ -801,8 +798,7 @@
     non-zero - Incompatible or the tool has run with errors.
 
 MORE INFORMATION:
-    ".$HomePage{"Wiki"}."
-    ".$HomePage{"Dev"}."\n");
+    ".$HomePage."\n");
 }
 
 my %Operator_Indication = (
@@ -1365,7 +1361,6 @@
   "2"=>{} );
 my %SymbolsList;
 my %TypesList;
-my %SkipSymbolsList;
 my %SymbolsList_App;
 my %CheckedSymbols;
 my %Symbol_Library = (
@@ -10500,6 +10495,7 @@
             return ($Cache{"cmpVTables_Real"}{$Strong}{$ClassName} = ($Strong or $Entry1!~/__cxa_pure_virtual/));
         }
         my $Entry2 = $VTable_New{$Offset};
+        
         $Entry1 = simpleVEntry($Entry1);
         $Entry2 = simpleVEntry($Entry2);
         if($Entry1 ne $Entry2)
@@ -10686,6 +10682,13 @@
                 $ClassId_New = $Class_New{"Tid"};
             }
         }
+        
+        if(not $Class_New{"Size"} or not $Class_Old{"Size"})
+        { # incomplete info in the ABI dump
+            next;
+        }
+        
+        
         my @Bases_Old = sort {$Class_Old{"Base"}{$a}{"pos"}<=>$Class_Old{"Base"}{$b}{"pos"}} keys(%{$Class_Old{"Base"}});
         my @Bases_New = sort {$Class_New{"Base"}{$a}{"pos"}<=>$Class_New{"Base"}{$b}{"pos"}} keys(%{$Class_New{"Base"}});
         
@@ -12495,11 +12498,21 @@
     }
     if($Type=~/Affected/)
     {
-        my $ClassId = $CompleteSignature{$LibVersion}{$Symbol}{"Class"};
         if($SkipSymbols{$LibVersion}{$Symbol})
         { # user defined symbols to ignore
             return 0;
         }
+        if($SymbolsListPath and not $SymbolsList{$Symbol})
+        { # user defined symbols
+            return 0;
+        }
+        if($AppPath and not $SymbolsList_App{$Symbol})
+        { # user defined symbols (in application)
+            return 0;
+        }
+        
+        my $ClassId = $CompleteSignature{$LibVersion}{$Symbol}{"Class"};
+        
         my $NameSpace = $CompleteSignature{$LibVersion}{$Symbol}{"NameSpace"};
         if(not $NameSpace and $ClassId)
         { # class methods have no "NameSpace" attribute
@@ -12526,27 +12539,37 @@
                 }
             }
         }
-        if($TypesListPath)
+        if($TypesListPath and $ClassId)
         { # user defined types
             my $CName = $TypeInfo{$LibVersion}{$ClassId}{"Name"};
             
             if(not $TypesList{$CName})
             {
-                return 0;
+                if(my $NS = $TypeInfo{$LibVersion}{$ClassId}{"NameSpace"})
+                {
+                    $CName=~s/\A\Q$NS\E\:\://g;
+                }
+                
+                if(not $TypesList{$CName})
+                {
+                    my $Found = 0;
+                    
+                    while($CName=~s/\:\:.+?\Z//)
+                    {
+                        if($TypesList{$CName})
+                        {
+                            $Found = 1;
+                            last;
+                        }
+                    }
+                    
+                    if(not $Found) {
+                        return 0;
+                    }
+                }
             }
         }
-        if($SymbolsListPath and not $SymbolsList{$Symbol})
-        { # user defined symbols
-            return 0;
-        }
-        if($SkipSymbolsListPath and $SkipSymbolsList{$Symbol})
-        { # user defined symbols
-            return 0;
-        }
-        if($AppPath and not $SymbolsList_App{$Symbol})
-        { # user defined symbols (in application)
-            return 0;
-        }
+        
         if(not selectSymbol($Symbol, $CompleteSignature{$LibVersion}{$Symbol}, $Level, $LibVersion))
         { # non-target symbols
             return 0;
@@ -15403,12 +15426,35 @@
     return $Title;
 }
 
+sub get_CheckedHeaders($)
+{
+    my $LibVersion = $_[0];
+    
+    my @Headers = ();
+    
+    foreach my $Path (keys(%{$Registered_Headers{$LibVersion}}))
+    {
+        my $File = get_filename($Path);
+        if(not is_target_header($File, $LibVersion)) {
+            next;
+        }
+        
+        if(skipHeader($File, $LibVersion)) {
+            next;
+        }
+        
+        push(@Headers, $Path);
+    }
+    
+    return @Headers;
+}
+
 sub get_SourceInfo()
 {
     my ($CheckedHeaders, $CheckedSources, $CheckedLibs) = ("", "");
     if(not $CheckObjectsOnly)
     {
-        if(my @Headers = keys(%{$Registered_Headers{1}}))
+        if(my @Headers = get_CheckedHeaders(1))
         {
             $CheckedHeaders = "<a name='Headers'></a><h2>Header Files (".($#Headers+1).")</h2><hr/>\n";
             $CheckedHeaders .= "<div class='h_list'>\n";
@@ -16930,8 +16976,8 @@
             else
             { # HTML
                 $VTABLES .= "<table class='vtable'>";
-                $VTABLES .= "<tr><th width='2%'>Offset</th>";
-                $VTABLES .= "<th width='45%'>Virtual Table (Old) - ".(keys(%{$Type1{"VTable"}}))." entries</th>";
+                $VTABLES .= "<tr><th>Offset</th>";
+                $VTABLES .= "<th>Virtual Table (Old) - ".(keys(%{$Type1{"VTable"}}))." entries</th>";
                 $VTABLES .= "<th>Virtual Table (New) - ".(keys(%{$Type2{"VTable"}}))." entries</th></tr>";
                 foreach my $Index (sort {int($a)<=>int($b)} (keys(%Entries)))
                 {
@@ -16968,6 +17014,8 @@
     or $VEntry eq "") {
         return "";
     }
+    
+    $VEntry=~s/ \[.+?\]\Z//; # support for ABI Dumper
     $VEntry=~s/\A(.+)::(_ZThn.+)\Z/$2/; # thunks
     $VEntry=~s/_ZTI\w+/typeinfo/g; # typeinfo
     if($VEntry=~/\A_ZThn.+\Z/) {
@@ -17565,7 +17613,7 @@
         $Class .= " double_report";
     }
     my $Footer = "<div class=\'$Class\' align='right'><i>Generated on ".(localtime time);
-    $Footer .= " by <a href='".$HomePage{"Dev"}."'>ABI Compliance Checker</a> $TOOL_VERSION &#160;";
+    $Footer .= " by <a href='".$HomePage."'>ABI Compliance Checker</a> $TOOL_VERSION &#160;";
     $Footer .= "</i></div>";
     $Footer .= "<br/>";
     return $Footer;
@@ -20010,17 +20058,26 @@
     { # support for old dumps
         $SkipTypes{$LibVersion} = $ABI->{"OpaqueTypes"};
     }
-    $SkipSymbols{$LibVersion} = $ABI->{"SkipSymbols"};
+    
     if(not $SkipSymbols{$LibVersion})
-    { # support for old dumps
-        $SkipSymbols{$LibVersion} = $ABI->{"SkipInterfaces"};
-    }
-    if(not $SkipSymbols{$LibVersion})
-    { # support for old dumps
-        $SkipSymbols{$LibVersion} = $ABI->{"InternalInterfaces"};
+    { # if not defined by -skip-symbols option
+        $SkipSymbols{$LibVersion} = $ABI->{"SkipSymbols"};
+        if(not $SkipSymbols{$LibVersion})
+        { # support for old dumps
+            $SkipSymbols{$LibVersion} = $ABI->{"SkipInterfaces"};
+        }
+        if(not $SkipSymbols{$LibVersion})
+        { # support for old dumps
+            $SkipSymbols{$LibVersion} = $ABI->{"InternalInterfaces"};
+        }
     }
     $SkipNameSpaces{$LibVersion} = $ABI->{"SkipNameSpaces"};
-    $TargetHeaders{$LibVersion} = $ABI->{"TargetHeaders"};
+    
+    if(not $TargetHeaders{$LibVersion})
+    { # if not defined by -headers-list option
+        $TargetHeaders{$LibVersion} = $ABI->{"TargetHeaders"};
+    }
+    
     foreach my $Path (keys(%{$ABI->{"SkipHeaders"}}))
     {
         $SkipHeadersList{$LibVersion}{$Path} = $ABI->{"SkipHeaders"}{$Path};
@@ -22555,7 +22612,8 @@
         HELP_MESSAGE();
         exit(0);
     }
-    if($InfoMsg) {
+    if($InfoMsg)
+    {
         INFO_MESSAGE();
         exit(0);
     }
@@ -22737,7 +22795,7 @@
             exitStatus("Access_Error", "can't access file \'$SkipSymbolsListPath\'");
         }
         foreach my $Interface (split(/\s*\n\s*/, readFile($SkipSymbolsListPath))) {
-            $SkipSymbolsList{$Interface} = 1;
+            $SkipSymbols{$Interface} = 1;
         }
     }
     if($SkipHeadersPath)