System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 28a2261dc387c69b5a34f3b25a6479a116f7306f:


0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72  /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57  .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69  ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65  stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67  k!.. */....using
0080: 20 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20   System;..using 
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69  ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79  stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53  stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c  ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75  m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76  ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74  DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e  opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73  dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d  tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 20 7c 7c 20 4e  .#if NET_20 || N
01b0: 45 54 5f 33 35 0d 0a 75 73 69 6e 67 20 53 79 73  ET_35..using Sys
01c0: 74 65 6d 2e 53 65 63 75 72 69 74 79 2e 50 65 72  tem.Security.Per
01d0: 6d 69 73 73 69 6f 6e 73 3b 0d 0a 23 65 6e 64 69  missions;..#endi
01e0: 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  f....using Syste
01f0: 6d 2e 54 65 78 74 3b 0d 0a 75 73 69 6e 67 20 53  m.Text;..using S
0200: 79 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 3b  ystem.Threading;
0210: 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 57  ..using System.W
0220: 69 6e 64 6f 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75  indows.Forms;..u
0230: 73 69 6e 67 20 53 79 73 74 65 6d 2e 58 6d 6c 3b  sing System.Xml;
0240: 0d 0a 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66  ..using Microsof
0250: 74 2e 57 69 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65  t.Win32;....name
0260: 73 70 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74  space System.Dat
0270: 61 2e 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20  a.SQLite..{..   
0280: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
0290: 44 65 6c 65 67 61 74 65 73 0d 0a 20 20 20 20 69  Delegates..    i
02a0: 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65  nternal delegate
02b0: 20 76 6f 69 64 20 54 72 61 63 65 43 61 6c 6c 62   void TraceCallb
02c0: 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 73 74  ack(..        st
02d0: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 20 2f 2a  ring message, /*
02e0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
02f0: 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 20  string category 
0300: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b  /* in */..    );
0310: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0360: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  ///....    inter
0370: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 62 6f 6f  nal delegate boo
0380: 6c 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69  l FrameworkConfi
0390: 67 43 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  gCallback(..    
03a0: 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
03b0: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ame,           /
03c0: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
03d0: 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e   string invarian
03e0: 74 4e 61 6d 65 2c 20 20 20 20 20 20 2f 2a 20 69  tName,      /* i
03f0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
0400: 72 69 6e 67 20 6e 61 6d 65 2c 20 20 20 20 20 20  ring name,      
0410: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0420: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0430: 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 20  g description,  
0440: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0450: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
0460: 79 70 65 4e 61 6d 65 2c 20 20 20 20 20 20 20 20  ypeName,        
0470: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0480: 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d       AssemblyNam
0490: 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20  e assemblyName, 
04a0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
04b0: 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
04c0: 72 79 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ry,          /* 
04d0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 6f  in */..        o
04e0: 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
04f0: 2c 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20  ,         /* in 
0500: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
0510: 20 70 65 72 55 73 65 72 2c 20 20 20 20 20 20 20   perUser,       
0520: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0530: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f  .        bool wo
0540: 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20 20  w64,            
0550: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
0560: 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
0570: 4f 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20 20 20  OnMissing,      
0580: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0590: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 20     bool whatIf, 
05a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
05b0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
05c0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20 20 20  bool verbose,   
05d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
05e0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 66   */..        ref
05f0: 20 62 6f 6f 6c 20 73 61 76 65 64 2c 20 20 20 20   bool saved,    
0600: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a          /* out *
0610: 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73  /..        ref s
0620: 74 72 69 6e 67 20 65 72 72 6f 72 20 20 20 20 20  tring error     
0630: 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d        /* out */.
0640: 0a 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f  .    );....    /
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
06a0: 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67    internal deleg
06b0: 61 74 65 20 62 6f 6f 6c 20 46 72 61 6d 65 77 6f  ate bool Framewo
06c0: 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  rkRegistryCallba
06d0: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73  ck(..        Ins
06e0: 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73  taller.MockRegis
06f0: 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20  tryKey rootKey, 
0700: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0710: 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
0720: 72 6b 4e 61 6d 65 2c 20 20 20 20 20 20 20 20 20  rkName,         
0730: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0740: 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
0750: 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
0760: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0770: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
0780: 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
0790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
07a0: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
07b0: 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
07c0: 79 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y,              
07d0: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
07e0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
07f0: 65 6e 74 44 61 74 61 2c 20 20 20 20 20 20 20 20  entData,        
0800: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0810: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
0820: 70 65 72 55 73 65 72 2c 20 20 20 20 20 20 20 20  perUser,        
0830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0840: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0850: 62 6f 6f 6c 20 77 6f 77 36 34 2c 20 20 20 20 20  bool wow64,     
0860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0870: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0880: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
0890: 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20 20 20 20  nMissing,       
08a0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
08b0: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
08c0: 68 61 74 49 66 2c 20 20 20 20 20 20 20 20 20 20  hatIf,          
08d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
08e0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
08f0: 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20 20 20 20  ool verbose,    
0900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0910: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0920: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
0930: 72 72 6f 72 20 20 20 20 20 20 20 20 20 20 20 20  rror            
0940: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f         /* out */
0950: 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20  ..    );....    
0960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
09a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
09b0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65     internal dele
09c0: 67 61 74 65 20 62 6f 6f 6c 20 56 69 73 75 61 6c  gate bool Visual
09d0: 53 74 75 64 69 6f 52 65 67 69 73 74 72 79 43 61  StudioRegistryCa
09e0: 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
09f0: 20 49 6e 73 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52   Installer.MockR
0a00: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
0a10: 65 79 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20  ey, /* in */..  
0a20: 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
0a30: 56 65 72 73 69 6f 6e 2c 20 20 20 20 20 20 20 20  Version,        
0a40: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0a50: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0a60: 67 20 73 75 66 66 69 78 2c 20 20 20 20 20 20 20  g suffix,       
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0a80: 20 69 6e 2c 20 6f 70 74 69 6f 6e 61 6c 20 2a 2f   in, optional */
0a90: 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c  ..        Instal
0aa0: 6c 65 72 2e 50 61 63 6b 61 67 65 20 70 61 63 6b  ler.Package pack
0ab0: 61 67 65 2c 20 20 20 20 20 20 20 20 20 2f 2a 20  age,         /* 
0ac0: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73  in */..        s
0ad0: 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c  tring directory,
0ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0af0: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0b00: 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
0b10: 74 44 61 74 61 2c 20 20 20 20 20 20 20 20 20 20  tData,          
0b20: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0b30: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65  .        bool pe
0b40: 72 55 73 65 72 2c 20 20 20 20 20 20 20 20 20 20  rUser,          
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0b60: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f  n */..        bo
0b70: 6f 6c 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20  ol wow64,       
0b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b90: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0ba0: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
0bb0: 69 73 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20  issing,         
0bc0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0bd0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
0be0: 74 49 66 2c 20 20 20 20 20 20 20 20 20 20 20 20  tIf,            
0bf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0c00: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   */..        boo
0c10: 6c 20 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20  l verbose,      
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c30: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0c40: 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
0c50: 6f 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  or              
0c60: 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a       /* out */..
0c70: 20 20 20 20 29 3b 0d 0a 20 20 20 20 23 65 6e 64      );..    #end
0c80: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
0c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0ce0: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
0cf0: 45 6e 75 6d 65 72 61 74 69 6f 6e 73 0d 0a 20 20  Enumerations..  
0d00: 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20 20 20    [Flags()]..   
0d10: 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 49 6e 73   public enum Ins
0d20: 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20 7b  tallFlags..    {
0d30: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
0d40: 6e 20 4e 6f 72 6d 61 6c 20 56 61 6c 75 65 73 0d  n Normal Values.
0d50: 0a 20 20 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20  .        None = 
0d60: 30 78 30 2c 20 20 20 20 20 20 20 20 20 20 20 20  0x0,            
0d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0d80: 20 4e 6f 20 61 63 74 69 6f 6e 73 20 73 68 6f 75   No actions shou
0d90: 6c 64 20 62 65 20 74 61 6b 65 6e 0d 0a 20 20 20  ld be taken..   
0da0: 20 20 20 20 20 43 6f 72 65 47 6c 6f 62 61 6c 41       CoreGlobalA
0db0: 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 30  ssemblyCache = 0
0dc0: 78 31 2c 20 20 20 20 20 20 20 2f 2f 20 47 41 43  x1,       // GAC
0dd0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
0de0: 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20  ite.dll..       
0df0: 20 4c 69 6e 71 47 6c 6f 62 61 6c 41 73 73 65 6d   LinqGlobalAssem
0e00: 62 6c 79 43 61 63 68 65 20 3d 20 30 78 32 2c 20  blyCache = 0x2, 
0e10: 20 20 20 20 20 20 2f 2f 20 47 41 43 20 53 79 73        // GAC Sys
0e20: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
0e30: 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20  Linq.dll..      
0e40: 20 20 45 66 36 47 6c 6f 62 61 6c 41 73 73 65 6d    Ef6GlobalAssem
0e50: 62 6c 79 43 61 63 68 65 20 3d 20 30 78 34 2c 20  blyCache = 0x4, 
0e60: 20 20 20 20 20 20 20 2f 2f 20 47 41 43 20 53 79         // GAC Sy
0e70: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
0e80: 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20 20 20 20 20  .EF6.dll..      
0e90: 20 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72    AssemblyFolder
0ea0: 73 20 3d 20 30 78 38 2c 20 20 20 20 20 20 20 20  s = 0x8,        
0eb0: 20 20 20 20 20 20 20 2f 2f 20 52 65 67 69 73 74         // Regist
0ec0: 72 79 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  ry AssemblyFolde
0ed0: 72 73 5b 45 78 5d 0d 0a 20 20 20 20 20 20 20 20  rs[Ex]..        
0ee0: 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
0ef0: 79 20 3d 20 30 78 31 30 2c 20 20 20 20 20 20 20  y = 0x10,       
0f00: 20 20 20 20 20 2f 2f 20 6d 61 63 68 69 6e 65 2e       // machine.
0f10: 63 6f 6e 66 69 67 20 64 61 74 61 20 70 72 6f 76  config data prov
0f20: 69 64 65 72 0d 0a 20 20 20 20 20 20 20 20 56 73  ider..        Vs
0f30: 50 61 63 6b 61 67 65 20 3d 20 30 78 32 30 2c 20  Package = 0x20, 
0f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f50: 20 20 20 2f 2f 20 52 65 67 69 73 74 72 79 20 56     // Registry V
0f60: 53 20 70 61 63 6b 61 67 65 0d 0a 20 20 20 20 20  S package..     
0f70: 20 20 20 56 73 50 61 63 6b 61 67 65 47 6c 6f 62     VsPackageGlob
0f80: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
0f90: 3d 20 30 78 34 30 2c 20 2f 2f 20 47 41 43 20 53  = 0x40, // GAC S
0fa0: 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64  QLite.Designer.d
0fb0: 6c 6c 0d 0a 20 20 20 20 20 20 20 20 56 73 44 61  ll..        VsDa
0fc0: 74 61 53 6f 75 72 63 65 20 3d 20 30 78 38 30 2c  taSource = 0x80,
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fe0: 20 2f 2f 20 52 65 67 69 73 74 72 79 20 56 53 20   // Registry VS 
0ff0: 64 61 74 61 20 73 6f 75 72 63 65 0d 0a 20 20 20  data source..   
1000: 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69       VsDataProvi
1010: 64 65 72 20 3d 20 30 78 31 30 30 2c 20 20 20 20  der = 0x100,    
1020: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 52 65 67            // Reg
1030: 69 73 74 72 79 20 56 53 20 64 61 74 61 20 70 72  istry VS data pr
1040: 6f 76 69 64 65 72 0d 0a 20 20 20 20 20 20 20 20  ovider..        
1050: 56 73 44 65 76 45 6e 76 53 65 74 75 70 20 3d 20  VsDevEnvSetup = 
1060: 30 78 32 30 30 2c 20 20 20 20 20 20 20 20 20 20  0x200,          
1070: 20 20 20 20 20 2f 2f 20 52 75 6e 73 20 56 53 20       // Runs VS 
1080: 69 6e 20 22 2f 73 65 74 75 70 22 20 6d 6f 64 65  in "/setup" mode
1090: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
10a0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1100: 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d 70 6f     #region Compo
1110: 73 69 74 65 20 56 61 6c 75 65 73 0d 0a 20 20 20  site Values..   
1120: 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 47 6c       FrameworkGl
1130: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
1140: 65 20 3d 20 43 6f 72 65 47 6c 6f 62 61 6c 41 73  e = CoreGlobalAs
1150: 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 0d 0a 20  semblyCache |.. 
1160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1180: 20 20 20 20 20 20 4c 69 6e 71 47 6c 6f 62 61 6c        LinqGlobal
1190: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 0d  AssemblyCache |.
11a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c0: 20 20 20 20 20 20 20 20 45 66 36 47 6c 6f 62 61          Ef6Globa
11d0: 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 0d  lAssemblyCache,.
11e0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
11f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1230: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 46 72  //....        Fr
1240: 61 6d 65 77 6f 72 6b 20 3d 20 46 72 61 6d 65 77  amework = Framew
1250: 6f 72 6b 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c  orkGlobalAssembl
1260: 79 43 61 63 68 65 20 7c 20 41 73 73 65 6d 62 6c  yCache | Assembl
1270: 79 46 6f 6c 64 65 72 73 20 7c 0d 0a 20 20 20 20  yFolders |..    
1280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1290: 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
12a0: 79 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  y,....        //
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1300: 20 56 73 52 65 67 69 73 74 72 79 20 3d 20 56 73   VsRegistry = Vs
1310: 50 61 63 6b 61 67 65 20 7c 20 56 73 44 61 74 61  Package | VsData
1320: 53 6f 75 72 63 65 20 7c 20 56 73 44 61 74 61 50  Source | VsDataP
1330: 72 6f 76 69 64 65 72 2c 0d 0a 0d 0a 20 20 20 20  rovider,....    
1340: 20 20 20 20 56 73 20 3d 20 56 73 52 65 67 69 73      Vs = VsRegis
1350: 74 72 79 20 7c 20 56 73 50 61 63 6b 61 67 65 47  try | VsPackageG
1360: 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
1370: 68 65 20 7c 20 56 73 44 65 76 45 6e 76 53 65 74  he | VsDevEnvSet
1380: 75 70 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  up,....        /
1390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
13e0: 20 20 41 6c 6c 47 6c 6f 62 61 6c 41 73 73 65 6d    AllGlobalAssem
13f0: 62 6c 79 43 61 63 68 65 20 3d 20 46 72 61 6d 65  blyCache = Frame
1400: 77 6f 72 6b 47 6c 6f 62 61 6c 41 73 73 65 6d 62  workGlobalAssemb
1410: 6c 79 43 61 63 68 65 20 7c 0d 0a 20 20 20 20 20  lyCache |..     
1420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1430: 20 20 20 20 20 20 20 20 20 20 20 20 56 73 50 61              VsPa
1440: 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d  ckageGlobalAssem
1450: 62 6c 79 43 61 63 68 65 2c 0d 0a 0d 0a 20 20 20  blyCache,....   
1460: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
14b0: 20 20 20 20 20 20 20 20 41 6c 6c 52 65 67 69 73          AllRegis
14c0: 74 72 79 20 3d 20 41 73 73 65 6d 62 6c 79 46 6f  try = AssemblyFo
14d0: 6c 64 65 72 73 20 7c 20 56 73 52 65 67 69 73 74  lders | VsRegist
14e0: 72 79 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ry,....        /
14f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1530: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1540: 20 20 53 74 61 6e 64 61 72 64 20 3d 20 44 62 50    Standard = DbP
1550: 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 20 7c  roviderFactory |
1560: 20 56 73 52 65 67 69 73 74 72 79 2c 0d 0a 0d 0a   VsRegistry,....
1570: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
15c0: 0a 0d 0a 20 20 20 20 20 20 20 20 41 6c 6c 20 3d  ...        All =
15d0: 20 46 72 61 6d 65 77 6f 72 6b 20 7c 20 56 73 2c   Framework | Vs,
15e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1630: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 41  ///....        A
1640: 6c 6c 45 78 63 65 70 74 47 6c 6f 62 61 6c 41 73  llExceptGlobalAs
1650: 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 41 6c  semblyCache = Al
1660: 6c 20 26 20 7e 41 6c 6c 47 6c 6f 62 61 6c 41 73  l & ~AllGlobalAs
1670: 73 65 6d 62 6c 79 43 61 63 68 65 2c 0d 0a 20 20  semblyCache,..  
1680: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1690: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
16f0: 72 65 67 69 6f 6e 20 53 75 67 67 65 73 74 65 64  region Suggested
1700: 20 44 65 66 61 75 6c 74 20 56 61 6c 75 65 73 0d   Default Values.
1710: 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74  .        Default
1720: 20 3d 20 41 6c 6c 0d 0a 20 20 20 20 20 20 20 20   = All..        
1730: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
1740: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
1750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1790: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61  ////....    [Fla
17a0: 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69  gs()]..    publi
17b0: 63 20 65 6e 75 6d 20 50 72 6f 76 69 64 65 72 46  c enum ProviderF
17c0: 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lags..    {..   
17d0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f 72       #region Nor
17e0: 6d 61 6c 20 56 61 6c 75 65 73 0d 0a 20 20 20 20  mal Values..    
17f0: 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d      None = 0x0,.
1800: 0a 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 45  .        SystemE
1810: 66 36 4d 75 73 74 42 65 47 6c 6f 62 61 6c 20 3d  f6MustBeGlobal =
1820: 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 44   0x1,..        D
1830: 69 64 4c 69 6e 71 46 6f 72 63 65 54 72 61 63 65  idLinqForceTrace
1840: 20 3d 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20   = 0x2,..       
1850: 20 44 69 64 45 66 36 46 6f 72 63 65 54 72 61 63   DidEf6ForceTrac
1860: 65 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20  e = 0x4,..      
1870: 20 20 44 69 64 45 66 36 52 65 73 6f 6c 76 65 54    DidEf6ResolveT
1880: 72 61 63 65 20 3d 20 30 78 38 2c 0d 0a 20 20 20  race = 0x8,..   
1890: 20 20 20 20 20 46 6f 72 63 65 4c 69 6e 71 45 6e       ForceLinqEn
18a0: 61 62 6c 65 64 20 3d 20 30 78 31 30 2c 0d 0a 20  abled = 0x10,.. 
18b0: 20 20 20 20 20 20 20 46 6f 72 63 65 4c 69 6e 71         ForceLinq
18c0: 44 69 73 61 62 6c 65 64 20 3d 20 30 78 32 30 2c  Disabled = 0x20,
18d0: 0d 0a 20 20 20 20 20 20 20 20 46 6f 72 63 65 45  ..        ForceE
18e0: 66 36 45 6e 61 62 6c 65 64 20 3d 20 30 78 34 30  f6Enabled = 0x40
18f0: 2c 0d 0a 20 20 20 20 20 20 20 20 46 6f 72 63 65  ,..        Force
1900: 45 66 36 44 69 73 61 62 6c 65 64 20 3d 20 30 78  Ef6Disabled = 0x
1910: 38 30 2c 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  80,..        #en
1920: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1930: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1980: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 75        #region Su
1990: 67 67 65 73 74 65 64 20 44 65 66 61 75 6c 74 20  ggested Default 
19a0: 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20  Values..        
19b0: 44 65 66 61 75 6c 74 20 3d 20 4e 6f 6e 65 0d 0a  Default = None..
19c0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
19d0: 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  on..    }....   
19e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
19f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1a30: 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20      [Flags()].. 
1a40: 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 54     public enum T
1a50: 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20  racePriority..  
1a60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
1a70: 67 69 6f 6e 20 4e 6f 72 6d 61 6c 20 56 61 6c 75  gion Normal Valu
1a80: 65 73 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e 65  es..        None
1a90: 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20 20   = 0x0,..       
1aa0: 20 4c 6f 77 65 73 74 20 3d 20 30 78 31 2c 0d 0a   Lowest = 0x1,..
1ab0: 20 20 20 20 20 20 20 20 4c 6f 77 65 72 20 3d 20          Lower = 
1ac0: 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f  0x2,..        Lo
1ad0: 77 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20  w = 0x4,..      
1ae0: 20 20 4d 65 64 69 75 6d 4c 6f 77 20 3d 20 30 78    MediumLow = 0x
1af0: 38 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69  8,..        Medi
1b00: 75 6d 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20 20  um = 0x10,..    
1b10: 20 20 20 20 4d 65 64 69 75 6d 48 69 67 68 20 3d      MediumHigh =
1b20: 20 30 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x20,..        
1b30: 48 69 67 68 20 3d 20 30 78 34 30 2c 0d 0a 20 20  High = 0x40,..  
1b40: 20 20 20 20 20 20 48 69 67 68 65 72 20 3d 20 30        Higher = 0
1b50: 78 38 30 2c 0d 0a 20 20 20 20 20 20 20 20 48 69  x80,..        Hi
1b60: 67 68 65 73 74 20 3d 20 30 78 31 30 30 2c 0d 0a  ghest = 0x100,..
1b70: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1b80: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1be0: 20 23 72 65 67 69 6f 6e 20 53 75 67 67 65 73 74   #region Suggest
1bf0: 65 64 20 44 65 66 61 75 6c 74 20 46 6c 61 67 73  ed Default Flags
1c00: 0d 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c  ..        Defaul
1c10: 74 20 3d 20 4d 65 64 69 75 6d 0d 0a 20 20 20 20  t = Medium..    
1c20: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1c30: 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
1c40: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
1c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c90: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1ca0: 23 72 65 67 69 6f 6e 20 49 6e 73 74 61 6c 6c 65  #region Installe
1cb0: 72 20 43 6c 61 73 73 0d 0a 23 69 66 20 4e 45 54  r Class..#if NET
1cc0: 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c  _40 || NET_45 ||
1cd0: 20 4e 45 54 5f 34 35 31 20 7c 7c 20 4e 45 54 5f   NET_451 || NET_
1ce0: 34 35 32 20 7c 7c 20 4e 45 54 5f 34 36 20 7c 7c  452 || NET_46 ||
1cf0: 20 4e 45 54 5f 34 36 31 20 7c 7c 20 4e 45 54 5f   NET_461 || NET_
1d00: 34 36 32 20 7c 7c 20 4e 45 54 5f 34 37 20 7c 7c  462 || NET_47 ||
1d10: 20 4e 45 54 5f 34 37 31 20 7c 7c 20 4e 45 54 5f   NET_471 || NET_
1d20: 34 37 32 0d 0a 20 20 20 20 5b 53 65 63 75 72 69  472..    [Securi
1d30: 74 79 43 72 69 74 69 63 61 6c 28 29 5d 0d 0a 23  tyCritical()]..#
1d40: 65 6c 73 65 0d 0a 20 20 20 20 5b 53 65 63 75 72  else..    [Secur
1d50: 69 74 79 50 65 72 6d 69 73 73 69 6f 6e 28 53 65  ityPermission(Se
1d60: 63 75 72 69 74 79 41 63 74 69 6f 6e 2e 4c 69 6e  curityAction.Lin
1d70: 6b 44 65 6d 61 6e 64 2c 20 55 6e 6d 61 6e 61 67  kDemand, Unmanag
1d80: 65 64 43 6f 64 65 20 3d 20 74 72 75 65 29 5d 0d  edCode = true)].
1d90: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 69 6e 74  .#endif..    int
1da0: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63 6c 61  ernal static cla
1db0: 73 73 20 49 6e 73 74 61 6c 6c 65 72 0d 0a 20 20  ss Installer..  
1dc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
1dd0: 67 69 6f 6e 20 55 6e 73 61 66 65 20 4e 61 74 69  gion Unsafe Nati
1de0: 76 65 20 4d 65 74 68 6f 64 73 20 43 6c 61 73 73  ve Methods Class
1df0: 0d 0a 20 20 20 20 20 20 20 20 5b 53 75 70 70 72  ..        [Suppr
1e00: 65 73 73 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65  essUnmanagedCode
1e10: 53 65 63 75 72 69 74 79 28 29 5d 0d 0a 20 20 20  Security()]..   
1e20: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
1e30: 6c 65 64 20 63 6c 61 73 73 20 55 6e 73 61 66 65  led class Unsafe
1e40: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 0d 0a 20  NativeMethods.. 
1e50: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49         {..#if WI
1e60: 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20  NDOWS..         
1e70: 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76     #region Nativ
1e80: 65 20 57 69 6e 33 32 20 43 6f 6e 73 74 61 6e 74  e Win32 Constant
1e90: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
1ea0: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74  rivate const int
1eb0: 20 4d 41 58 5f 50 41 54 48 20 3d 20 32 36 30 3b   MAX_PATH = 260;
1ec0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f10: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1f20: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
1f30: 20 69 6e 74 20 43 53 49 44 4c 5f 53 59 53 54 45   int CSIDL_SYSTE
1f40: 4d 58 38 36 20 3d 20 30 78 30 30 32 39 3b 0d 0a  MX86 = 0x0029;..
1f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1fb0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69   private const i
1fc0: 6e 74 20 53 48 47 46 50 5f 54 59 50 45 5f 43 55  nt SHGFP_TYPE_CU
1fd0: 52 52 45 4e 54 20 3d 20 30 3b 0d 0a 0d 0a 20 20  RRENT = 0;....  
1fe0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
2040: 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 53  vate const int S
2050: 5f 4f 4b 20 3d 20 30 3b 20 2f 2a 20 48 52 45 53  _OK = 0; /* HRES
2060: 55 4c 54 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  ULT */..        
2070: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20e0: 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76 65 20   #region Native 
20f0: 57 69 6e 64 6f 77 73 20 4d 65 74 68 6f 64 73 0d  Windows Methods.
2100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 44 6c  .            [Dl
2110: 6c 49 6d 70 6f 72 74 28 22 73 68 66 6f 6c 64 65  lImport("shfolde
2120: 72 2e 64 6c 6c 22 2c 0d 0a 20 20 20 20 20 20 20  r.dll",..       
2130: 20 20 20 20 20 20 20 20 20 43 61 6c 6c 69 6e 67           Calling
2140: 43 6f 6e 76 65 6e 74 69 6f 6e 20 3d 20 43 61 6c  Convention = Cal
2150: 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 2e 57  lingConvention.W
2160: 69 6e 61 70 69 2c 0d 0a 20 20 20 20 20 20 20 20  inapi,..        
2170: 20 20 20 20 20 20 20 20 43 68 61 72 53 65 74 20          CharSet 
2180: 3d 20 43 68 61 72 53 65 74 2e 41 75 74 6f 2c 20  = CharSet.Auto, 
2190: 42 65 73 74 46 69 74 4d 61 70 70 69 6e 67 20 3d  BestFitMapping =
21a0: 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20   false,..       
21b0: 20 20 20 20 20 20 20 20 20 54 68 72 6f 77 4f 6e           ThrowOn
21c0: 55 6e 6d 61 70 70 61 62 6c 65 43 68 61 72 20 3d  UnmappableChar =
21d0: 20 74 72 75 65 2c 20 53 65 74 4c 61 73 74 45 72   true, SetLastEr
21e0: 72 6f 72 20 3d 20 74 72 75 65 29 5d 0d 0a 20 20  ror = true)]..  
21f0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2200: 65 20 73 74 61 74 69 63 20 65 78 74 65 72 6e 20  e static extern 
2210: 69 6e 74 20 53 48 47 65 74 46 6f 6c 64 65 72 50  int SHGetFolderP
2220: 61 74 68 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ath(..          
2230: 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 57 6e        IntPtr hWn
2240: 64 4f 77 6e 65 72 2c 20 69 6e 74 20 6e 46 6f 6c  dOwner, int nFol
2250: 64 65 72 2c 20 49 6e 74 50 74 72 20 68 54 6f 6b  der, IntPtr hTok
2260: 65 6e 2c 20 75 69 6e 74 20 66 6c 61 67 73 2c 0d  en, uint flags,.
2270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2280: 20 49 6e 74 50 74 72 20 62 75 66 66 65 72 20 2f   IntPtr buffer /
2290: 2a 20 3e 3d 20 4d 41 58 5f 50 41 54 48 20 2a 2f  * >= MAX_PATH */
22a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
22b0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
22c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
22d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
2320: 67 69 6f 6e 20 50 75 62 6c 69 63 20 57 72 61 70  gion Public Wrap
2330: 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  per Methods..   
2340: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2350: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
2360: 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  tSystemDirectory
2370: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
2380: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2390: 20 20 20 49 6e 74 50 74 72 20 62 75 66 66 65 72     IntPtr buffer
23a0: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
23b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23c0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
23d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
23f0: 75 66 66 65 72 20 3d 20 4d 61 72 73 68 61 6c 2e  uffer = Marshal.
2400: 41 6c 6c 6f 63 43 6f 54 61 73 6b 4d 65 6d 28 0d  AllocCoTaskMem(.
2410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2420: 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
2430: 63 68 61 72 29 20 2a 20 28 4d 41 58 5f 50 41 54  char) * (MAX_PAT
2440: 48 20 2b 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20  H + 1));....    
2450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2460: 69 66 20 28 62 75 66 66 65 72 20 21 3d 20 49 6e  if (buffer != In
2470: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
2480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2490: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
24b0: 48 47 65 74 46 6f 6c 64 65 72 50 61 74 68 28 49  HGetFolderPath(I
24c0: 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20  ntPtr.Zero,..   
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 53 49               CSI
24f0: 44 4c 5f 53 59 53 54 45 4d 58 38 36 2c 20 49 6e  DL_SYSTEMX86, In
2500: 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20  tPtr.Zero,..    
2510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2520: 20 20 20 20 20 20 20 20 20 20 20 20 53 48 47 46              SHGF
2530: 50 5f 54 59 50 45 5f 43 55 52 52 45 4e 54 2c 20  P_TYPE_CURRENT, 
2540: 62 75 66 66 65 72 29 20 3d 3d 20 53 5f 4f 4b 29  buffer) == S_OK)
2550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2560: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2580: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2590: 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72  Marshal.PtrToStr
25a0: 69 6e 67 41 75 74 6f 28 62 75 66 66 65 72 29 3b  ingAuto(buffer);
25b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2600: 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
2610: 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
2620: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2640: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2650: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 54 4f             // TO
2660: 44 4f 3a 20 49 73 20 74 68 69 73 20 74 68 65 20  DO: Is this the 
2670: 72 69 67 68 74 20 65 72 72 6f 72 20 68 61 6e 64  right error hand
2680: 6c 69 6e 67 20 73 6f 6c 75 74 69 6f 6e 0d 0a 20  ling solution.. 
2690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a0: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 75     //       to u
26b0: 73 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74  se at this point
26c0: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
26d0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
26e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
26f0: 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2700: 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2710: 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
2720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2730: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
2740: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
2750: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
2760: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2780: 43 6f 75 6c 64 20 6e 6f 74 20 67 65 74 20 73 79  Could not get sy
2790: 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79 3a 20  stem directory: 
27a0: 7b 30 7d 22 2c 20 65 29 2c 0d 0a 20 20 20 20 20  {0}", e),..     
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c0: 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
27d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
27e0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 3b            throw;
27f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2800: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2810: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
2820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2840: 20 20 20 20 20 69 66 20 28 62 75 66 66 65 72 20       if (buffer 
2850: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
2860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2870: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2890: 4d 61 72 73 68 61 6c 2e 46 72 65 65 43 6f 54 61  Marshal.FreeCoTa
28a0: 73 6b 4d 65 6d 28 62 75 66 66 65 72 29 3b 0d 0a  skMem(buffer);..
28b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c0: 20 20 20 20 20 20 20 20 62 75 66 66 65 72 20 3d          buffer =
28d0: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2900: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2910: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2920: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
2930: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2940: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2950: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
2960: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2970: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2980: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
29d0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
29e0: 61 74 65 20 48 65 6c 70 65 72 20 43 6c 61 73 73  ate Helper Class
29f0: 65 73 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  es..        #reg
2a00: 69 6f 6e 20 4f 62 6a 65 63 74 48 65 6c 70 65 72  ion ObjectHelper
2a10: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
2a20: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 63  private static c
2a30: 6c 61 73 73 20 4f 62 6a 65 63 74 48 65 6c 70 65  lass ObjectHelpe
2a40: 72 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  r..        {..  
2a50: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2a60: 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 72 65   static bool Are
2a70: 45 71 75 61 6c 28 0d 0a 20 20 20 20 20 20 20 20  Equal(..        
2a80: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
2a90: 61 6c 75 65 31 2c 0d 0a 20 20 20 20 20 20 20 20  alue1,..        
2aa0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
2ab0: 61 6c 75 65 32 0d 0a 20 20 20 20 20 20 20 20 20  alue2..         
2ac0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2ad0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ae0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 76 61           if ((va
2af0: 6c 75 65 31 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  lue1 == null) ||
2b00: 20 28 76 61 6c 75 65 32 20 3d 3d 20 6e 75 6c 6c   (value2 == null
2b10: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2b20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
2b30: 28 76 61 6c 75 65 31 20 3d 3d 20 6e 75 6c 6c 29  (value1 == null)
2b40: 20 26 26 20 28 76 61 6c 75 65 32 20 3d 3d 20 6e   && (value2 == n
2b50: 75 6c 6c 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ull));....      
2b60: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4f 62            if (Ob
2b70: 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71  ject.ReferenceEq
2b80: 75 61 6c 73 28 76 61 6c 75 65 31 2c 20 76 61 6c  uals(value1, val
2b90: 75 65 32 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ue2))..         
2ba0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2bb0: 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  n true;....     
2bc0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2bd0: 6e 20 76 61 6c 75 65 31 2e 45 71 75 61 6c 73 28  n value1.Equals(
2be0: 76 61 6c 75 65 32 29 3b 0d 0a 20 20 20 20 20 20  value2);..      
2bf0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2c00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
2c10: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2c20: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2c70: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 6e 79       #region Any
2c80: 50 61 69 72 20 43 6c 61 73 73 0d 0a 20 20 20 20  Pair Class..    
2c90: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
2ca0: 65 64 20 63 6c 61 73 73 20 41 6e 79 50 61 69 72  ed class AnyPair
2cb0: 3c 54 31 2c 20 54 32 3e 20 3a 0d 0a 20 20 20 20  <T1, T2> :..    
2cc0: 20 20 20 20 20 20 20 20 49 43 6f 6d 70 61 72 65          ICompare
2cd0: 72 3c 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32  r<AnyPair<T1, T2
2ce0: 3e 3e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  >>,..           
2cf0: 20 49 43 6f 6d 70 61 72 61 62 6c 65 3c 41 6e 79   IComparable<Any
2d00: 50 61 69 72 3c 54 31 2c 20 54 32 3e 3e 2c 0d 0a  Pair<T1, T2>>,..
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 49 43 6f 6d              ICom
2d20: 70 61 72 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20  parable,..      
2d30: 20 20 20 20 20 20 49 45 71 75 61 74 61 62 6c 65        IEquatable
2d40: 3c 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32 3e  <AnyPair<T1, T2>
2d50: 3e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  >,..            
2d60: 49 45 71 75 61 6c 69 74 79 43 6f 6d 70 61 72 65  IEqualityCompare
2d70: 72 3c 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32  r<AnyPair<T1, T2
2d80: 3e 3e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  >>,..           
2d90: 20 49 43 6c 6f 6e 65 61 62 6c 65 0d 0a 20 20 20   ICloneable..   
2da0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2db0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
2dc0: 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
2dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
2de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
2df0: 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 20 63 6f  WARNING: This co
2e00: 6e 73 74 72 75 63 74 6f 72 20 70 72 6f 64 75 63  nstructor produc
2e10: 65 73 20 61 6e 20 69 6d 6d 75 74 61 62 6c 65 20  es an immutable 
2e20: 22 65 6d 70 74 79 22 20 70 61 69 72 0d 0a 20 20  "empty" pair..  
2e30: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2e40: 20 20 20 20 20 20 6f 62 6a 65 63 74 2e 0d 0a 20        object... 
2e50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2e60: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2e70: 63 20 41 6e 79 50 61 69 72 28 29 0d 0a 20 20 20  c AnyPair()..   
2e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62               : b
2e90: 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ase()..         
2ea0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2eb0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
2ec0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
2ed0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2ee0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f20: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2f30: 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e 79        public Any
2f40: 50 61 69 72 28 54 31 20 78 29 0d 0a 20 20 20 20  Pair(T1 x)..    
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
2f60: 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  is()..          
2f70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f80: 20 20 20 20 20 74 68 69 73 2e 78 20 3d 20 78 3b       this.x = x;
2f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2fa0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
3000: 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72    public AnyPair
3010: 28 54 31 20 78 2c 20 54 32 20 79 29 0d 0a 20 20  (T1 x, T2 y)..  
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
3030: 74 68 69 73 28 78 29 0d 0a 20 20 20 20 20 20 20  this(x)..       
3040: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3050: 20 20 20 20 20 20 20 20 74 68 69 73 2e 79 20 3d          this.y =
3060: 20 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   y;..           
3070: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3080: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
3090: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
30a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
30e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
30f0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
3100: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
3110: 20 20 20 20 70 72 69 76 61 74 65 20 54 31 20 78      private T1 x
3120: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
3130: 75 62 6c 69 63 20 54 31 20 58 0d 0a 20 20 20 20  ublic T1 X..    
3140: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3150: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
3160: 20 72 65 74 75 72 6e 20 78 3b 20 7d 0d 0a 20 20   return x; }..  
3170: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
3180: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
3190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
31d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
31e0: 69 76 61 74 65 20 54 32 20 79 3b 0d 0a 20 20 20  ivate T2 y;..   
31f0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
3200: 54 32 20 59 0d 0a 20 20 20 20 20 20 20 20 20 20  T2 Y..          
3210: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3220: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
3230: 6e 20 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  n y; }..        
3240: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
3250: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
3260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
3270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32c0: 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e 4f  #region System.O
32d0: 62 6a 65 63 74 20 4f 76 65 72 72 69 64 65 73 0d  bject Overrides.
32e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
32f0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  lic override boo
3300: 6c 20 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20  l Equals(..     
3310: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
3320: 74 20 6f 62 6a 0d 0a 20 20 20 20 20 20 20 20 20  t obj..         
3330: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
3340: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3350: 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
3360: 3c 54 31 2c 20 54 32 3e 20 61 6e 79 50 61 69 72  <T1, T2> anyPair
3370: 20 3d 20 6f 62 6a 20 61 73 20 41 6e 79 50 61 69   = obj as AnyPai
3380: 72 3c 54 31 2c 20 54 32 3e 3b 0d 0a 0d 0a 20 20  r<T1, T2>;....  
3390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
33a0: 20 28 61 6e 79 50 61 69 72 20 21 3d 20 6e 75 6c   (anyPair != nul
33b0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
33c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
33e0: 4f 62 6a 65 63 74 48 65 6c 70 65 72 2e 41 72 65  ObjectHelper.Are
33f0: 45 71 75 61 6c 28 58 2c 20 61 6e 79 50 61 69 72  Equal(X, anyPair
3400: 2e 58 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  .X))..          
3410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
3420: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
3430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3440: 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74 48 65     if (!ObjectHe
3450: 6c 70 65 72 2e 41 72 65 45 71 75 61 6c 28 59 2c  lper.AreEqual(Y,
3460: 20 61 6e 79 50 61 69 72 2e 59 29 29 0d 0a 20 20   anyPair.Y))..  
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3480: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
3490: 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
34a0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
34b0: 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
34c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34e0: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
34f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3500: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
3510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
3560: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
3570: 69 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0d 0a  ing ToString()..
3580: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
35a0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
35b0: 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 54 68 65 20     // TODO: The 
35c0: 64 65 6c 69 6d 69 74 65 72 20 68 65 72 65 20 69  delimiter here i
35d0: 73 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 20  s hard-coded to 
35e0: 61 20 73 70 61 63 65 2e 20 20 54 68 69 73 0d 0a  a space.  This..
35f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3600: 2f 2f 20 20 20 20 20 20 20 6d 61 79 20 6e 65 65  //       may nee
3610: 64 20 74 6f 20 62 65 20 63 68 61 6e 67 65 64 2c  d to be changed,
3620: 20 65 2e 67 2e 20 69 66 20 74 68 65 20 75 73 65   e.g. if the use
3630: 2d 63 61 73 65 73 20 66 6f 72 0d 0a 20 20 20 20  -cases for..    
3640: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
3650: 20 20 20 20 20 74 68 69 73 20 63 6c 61 73 73 20       this class 
3660: 63 68 61 6e 67 65 2e 0d 0a 20 20 20 20 20 20 20  change...       
3670: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3680: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
3690: 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  urn String.Forma
36a0: 74 28 22 7b 30 7d 20 7b 31 7d 22 2c 20 58 2c 20  t("{0} {1}", X, 
36b0: 59 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Y);..           
36c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
36d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
36e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3710: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3720: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
3730: 72 69 64 65 20 69 6e 74 20 47 65 74 48 61 73 68  ride int GetHash
3740: 43 6f 64 65 28 29 0d 0a 20 20 20 20 20 20 20 20  Code()..        
3750: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3760: 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 75 6c         int resul
3770: 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  t = 0;..        
3780: 20 20 20 20 20 20 20 20 54 31 20 78 20 3d 20 58          T1 x = X
3790: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
37a0: 20 20 20 20 20 69 66 20 28 78 20 21 3d 20 6e 75       if (x != nu
37b0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
37c0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
37d0: 5e 3d 20 78 2e 47 65 74 48 61 73 68 43 6f 64 65  ^= x.GetHashCode
37e0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
37f0: 20 20 20 20 20 20 20 54 32 20 79 20 3d 20 59 3b         T2 y = Y;
3800: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3810: 20 20 20 20 69 66 20 28 79 20 21 3d 20 6e 75 6c      if (y != nul
3820: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
3830: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 5e          result ^
3840: 3d 20 79 2e 47 65 74 48 61 73 68 43 6f 64 65 28  = y.GetHashCode(
3850: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
3860: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
3870: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
3880: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
3890: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
38a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
38b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
38f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
3900: 65 67 69 6f 6e 20 49 43 6f 6d 70 61 72 65 72 3c  egion IComparer<
3910: 41 6e 79 50 61 69 72 3c 54 31 2c 54 32 3e 3e 20  AnyPair<T1,T2>> 
3920: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
3930: 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20       public int 
3940: 43 6f 6d 70 61 72 65 28 0d 0a 20 20 20 20 20 20  Compare(..      
3950: 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69            AnyPai
3960: 72 3c 54 31 2c 20 54 32 3e 20 78 2c 0d 0a 20 20  r<T1, T2> x,..  
3970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 6e                An
3980: 79 50 61 69 72 3c 54 31 2c 20 54 32 3e 20 79 0d  yPair<T1, T2> y.
3990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
39a0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
39b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
39c0: 20 20 20 69 66 20 28 28 78 20 3d 3d 20 6e 75 6c     if ((x == nul
39d0: 6c 29 20 26 26 20 28 79 20 3d 3d 20 6e 75 6c 6c  l) && (y == null
39e0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
39f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3a00: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3a10: 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n 0;..          
3a20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3a30: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
3a40: 20 28 78 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20   (x == null)..  
3a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
3a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3a70: 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d       return -1;.
3a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3a90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3aa0: 20 20 20 20 65 6c 73 65 20 69 66 20 28 79 20 3d      else if (y =
3ab0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
3ac0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ae0: 72 65 74 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20  return 1;..     
3af0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
3b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
3b10: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
3b20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3b30: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 72             int r
3b40: 65 73 75 6c 74 20 3d 20 43 6f 6d 70 61 72 65 72  esult = Comparer
3b50: 3c 54 31 3e 2e 44 65 66 61 75 6c 74 2e 43 6f 6d  <T1>.Default.Com
3b60: 70 61 72 65 28 78 2e 58 2c 20 79 2e 58 29 3b 0d  pare(x.X, y.X);.
3b70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3b80: 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
3b90: 74 20 21 3d 20 30 29 0d 0a 20 20 20 20 20 20 20  t != 0)..       
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bb0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
3bc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3bd0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f         return Co
3be0: 6d 70 61 72 65 72 3c 54 32 3e 2e 44 65 66 61 75  mparer<T2>.Defau
3bf0: 6c 74 2e 43 6f 6d 70 61 72 65 28 78 2e 59 2c 20  lt.Compare(x.Y, 
3c00: 79 2e 59 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  y.Y);..         
3c10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3c20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3c30: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
3c40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
3c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
3ca0: 20 20 23 72 65 67 69 6f 6e 20 49 43 6f 6d 70 61    #region ICompa
3cb0: 72 61 62 6c 65 3c 41 6e 79 50 61 69 72 3c 54 31  rable<AnyPair<T1
3cc0: 2c 54 32 3e 3e 20 4d 65 6d 62 65 72 73 0d 0a 20  ,T2>> Members.. 
3cd0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
3ce0: 63 20 69 6e 74 20 43 6f 6d 70 61 72 65 54 6f 28  c int CompareTo(
3cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3d00: 20 20 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32    AnyPair<T1, T2
3d10: 3e 20 6f 74 68 65 72 0d 0a 20 20 20 20 20 20 20  > other..       
3d20: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
3d30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3d40: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3d50: 6e 20 43 6f 6d 70 61 72 65 28 74 68 69 73 2c 20  n Compare(this, 
3d60: 6f 74 68 65 72 29 3b 0d 0a 20 20 20 20 20 20 20  other);..       
3d70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
3d80: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
3d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
3da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3de0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
3df0: 20 23 72 65 67 69 6f 6e 20 49 43 6f 6d 70 61 72   #region ICompar
3e00: 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20  able Members..  
3e10: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
3e20: 20 69 6e 74 20 43 6f 6d 70 61 72 65 54 6f 28 0d   int CompareTo(.
3e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3e40: 20 6f 62 6a 65 63 74 20 6f 62 6a 0d 0a 20 20 20   object obj..   
3e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
3e80: 6e 79 50 61 69 72 3c 54 31 2c 20 54 32 3e 20 61  nyPair<T1, T2> a
3e90: 6e 79 50 61 69 72 20 3d 20 6f 62 6a 20 61 73 20  nyPair = obj as 
3ea0: 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32 3e 3b  AnyPair<T1, T2>;
3eb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3ec0: 20 20 20 20 69 66 20 28 61 6e 79 50 61 69 72 20      if (anyPair 
3ed0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
3ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
3ef0: 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
3f00: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a  Exception();....
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f20: 72 65 74 75 72 6e 20 43 6f 6d 70 61 72 65 54 6f  return CompareTo
3f30: 28 61 6e 79 50 61 69 72 29 3b 0d 0a 20 20 20 20  (anyPair);..    
3f40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
3f50: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
3f60: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
3f70: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fb0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3fc0: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 45 71 75      #region IEqu
3fd0: 61 74 61 62 6c 65 3c 41 6e 79 50 61 69 72 3c 54  atable<AnyPair<T
3fe0: 31 2c 54 32 3e 3e 20 4d 65 6d 62 65 72 73 0d 0a  1,T2>> Members..
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
4000: 69 63 20 62 6f 6f 6c 20 45 71 75 61 6c 73 28 0d  ic bool Equals(.
4010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4020: 20 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32 3e   AnyPair<T1, T2>
4030: 20 6f 74 68 65 72 0d 0a 20 20 20 20 20 20 20 20   other..        
4040: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
4050: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4060: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4070: 20 43 6f 6d 70 61 72 65 54 6f 28 6f 74 68 65 72   CompareTo(other
4080: 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  ) == 0;..       
4090: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
40a0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
40b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
40c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
40d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
40e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
40f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4100: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
4110: 20 23 72 65 67 69 6f 6e 20 49 45 71 75 61 6c 69   #region IEquali
4120: 74 79 43 6f 6d 70 61 72 65 72 3c 41 6e 79 50 61  tyComparer<AnyPa
4130: 69 72 3c 54 31 2c 54 32 3e 3e 20 4d 65 6d 62 65  ir<T1,T2>> Membe
4140: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
4150: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 45 71 75 61  public bool Equa
4160: 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ls(..           
4170: 20 20 20 20 20 41 6e 79 50 61 69 72 3c 54 31 2c       AnyPair<T1,
4180: 20 54 32 3e 20 78 2c 0d 0a 20 20 20 20 20 20 20   T2> x,..       
4190: 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
41a0: 3c 54 31 2c 20 54 32 3e 20 79 0d 0a 20 20 20 20  <T1, T2> y..    
41b0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
41c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
41d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
41e0: 74 75 72 6e 20 4f 62 6a 65 63 74 48 65 6c 70 65  turn ObjectHelpe
41f0: 72 2e 41 72 65 45 71 75 61 6c 28 78 2c 20 79 29  r.AreEqual(x, y)
4200: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
4210: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4260: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4270: 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 47 65     public int Ge
4280: 74 48 61 73 68 43 6f 64 65 28 0d 0a 20 20 20 20  tHashCode(..    
4290: 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
42a0: 61 69 72 3c 54 31 2c 20 54 32 3e 20 6f 62 6a 0d  air<T1, T2> obj.
42b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
42c0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
42d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
42e0: 20 20 20 72 65 74 75 72 6e 20 28 6f 62 6a 20 21     return (obj !
42f0: 3d 20 6e 75 6c 6c 29 20 3f 20 6f 62 6a 2e 47 65  = null) ? obj.Ge
4300: 74 48 61 73 68 43 6f 64 65 28 29 20 3a 20 30 3b  tHashCode() : 0;
4310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
4330: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
4340: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
4390: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
43a0: 6e 20 49 43 6c 6f 6e 65 61 62 6c 65 20 4d 65 6d  n ICloneable Mem
43b0: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  bers..          
43c0: 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20    public object 
43d0: 43 6c 6f 6e 65 28 29 0d 0a 20 20 20 20 20 20 20  Clone()..       
43e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
43f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
4400: 65 77 20 41 6e 79 50 61 69 72 3c 54 31 2c 20 54  ew AnyPair<T1, T
4410: 32 3e 28 58 2c 20 59 29 3b 0d 0a 20 20 20 20 20  2>(X, Y);..     
4420: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4430: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
4440: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
4450: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
4460: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
4470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44b0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
44c0: 65 67 69 6f 6e 20 54 72 61 63 65 4f 70 73 20 43  egion TraceOps C
44d0: 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
44e0: 69 76 61 74 65 20 73 74 61 74 69 63 20 63 6c 61  ivate static cla
44f0: 73 73 20 54 72 61 63 65 4f 70 73 0d 0a 20 20 20  ss TraceOps..   
4500: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4510: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
4520: 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20  ate Constants.. 
4530: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
4540: 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
4550: 44 65 66 61 75 6c 74 44 65 62 75 67 46 6f 72 6d  DefaultDebugForm
4560: 61 74 20 3d 20 22 23 7b 30 3a 30 30 30 7d 20 40  at = "#{0:000} @
4570: 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 20 20 20   {1}: {2}";..   
4580: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
4590: 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65   const string De
45a0: 66 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74  faultTraceFormat
45b0: 20 3d 20 22 23 7b 30 3a 30 30 30 7d 20 40 20 7b   = "#{0:000} @ {
45c0: 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20  1}: {2}";....   
45d0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
45e0: 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 49 73   const string Is
45f0: 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f 75 74  o8601DateTimeOut
4600: 70 75 74 46 6f 72 6d 61 74 20 3d 0d 0a 20 20 20  putFormat =..   
4610: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 79 79               "yy
4620: 79 79 2e 4d 4d 2e 64 64 54 48 48 3a 6d 6d 3a 73  yy.MM.ddTHH:mm:s
4630: 73 2e 66 66 66 66 66 66 66 22 3b 0d 0a 20 20 20  s.fffffff";..   
4640: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
4650: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
4660: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
4670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46a0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
46b0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
46c0: 69 76 61 74 65 20 53 74 61 74 69 63 20 44 61 74  ivate Static Dat
46d0: 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  a..            p
46e0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62  rivate static ob
46f0: 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20  ject syncRoot = 
4700: 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 20  new object();.. 
4710: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
4720: 74 65 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e  te static long n
4730: 65 78 74 44 65 62 75 67 49 64 3b 0d 0a 20 20 20  extDebugId;..   
4740: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
4750: 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78   static long nex
4760: 74 54 72 61 63 65 49 64 3b 0d 0a 20 20 20 20 20  tTraceId;..     
4770: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
4780: 74 61 74 69 63 20 49 4c 69 73 74 3c 54 72 61 63  tatic IList<Trac
4790: 65 4c 69 73 74 65 6e 65 72 3e 20 64 65 62 75 67  eListener> debug
47a0: 4c 69 73 74 65 6e 65 72 73 3b 0d 0a 20 20 20 20  Listeners;..    
47b0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
47c0: 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f  static TracePrio
47d0: 72 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 69  rity debugPriori
47e0: 74 79 20 3d 20 54 72 61 63 65 50 72 69 6f 72 69  ty = TracePriori
47f0: 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20  ty.Default;..   
4800: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
4810: 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69   static TracePri
4820: 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
4830: 69 74 79 20 3d 20 54 72 61 63 65 50 72 69 6f 72  ity = TracePrior
4840: 69 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20  ity.Default;..  
4850: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
4860: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
4870: 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 44 65  debugFormat = De
4880: 66 61 75 6c 74 44 65 62 75 67 46 6f 72 6d 61 74  faultDebugFormat
4890: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
48a0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
48b0: 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74  ring traceFormat
48c0: 20 3d 20 44 65 66 61 75 6c 74 54 72 61 63 65 46   = DefaultTraceF
48d0: 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
48e0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
48f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4940: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
4950: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
4960: 53 74 61 74 69 63 20 50 72 6f 70 65 72 74 69 65  Static Propertie
4970: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
4980: 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 72 61  ublic static Tra
4990: 63 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 67  cePriority Debug
49a0: 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  Priority..      
49b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
49c0: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c           get { l
49d0: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
49e0: 20 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 69   return debugPri
49f0: 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20  ority; } }..    
4a00: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
4a10: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
4a20: 29 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74  ) { debugPriorit
4a30: 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a  y = value; } }..
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
4a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
4a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4aa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4ab0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 72  public static Tr
4ac0: 61 63 65 50 72 69 6f 72 69 74 79 20 54 72 61 63  acePriority Trac
4ad0: 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20  ePriority..     
4ae0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4af0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
4b00: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
4b10: 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 72  { return tracePr
4b20: 69 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20  iority; } }..   
4b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
4b40: 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f   { lock (syncRoo
4b50: 74 29 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69  t) { tracePriori
4b60: 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d  ty = value; } }.
4b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bd0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
4be0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
4bf0: 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d 61  tring DebugForma
4c00: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
4c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4c20: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
4c30: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
4c40: 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 20   debugFormat; } 
4c50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
4c60: 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73     set { lock (s
4c70: 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62 75 67  yncRoot) { debug
4c80: 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20  Format = value; 
4c90: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
4ca0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4cb0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cf0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4d00: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
4d10: 69 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 46  ic string TraceF
4d20: 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20  ormat..         
4d30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4d40: 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b        get { lock
4d50: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65   (syncRoot) { re
4d60: 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 74  turn traceFormat
4d70: 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ; } }..         
4d80: 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63         set { loc
4d90: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74  k (syncRoot) { t
4da0: 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c  raceFormat = val
4db0: 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ue; } }..       
4dc0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4dd0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
4de0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e30: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
4e40: 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 61 63   #region Interac
4e50: 74 69 76 65 20 53 75 70 70 6f 72 74 20 4d 65 74  tive Support Met
4e60: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
4e70: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
4e80: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
4e90: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
4ea0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
4eb0: 20 73 74 61 74 69 63 20 44 69 61 6c 6f 67 52 65   static DialogRe
4ec0: 73 75 6c 74 20 53 68 6f 77 4d 65 73 73 61 67 65  sult ShowMessage
4ed0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4ee0: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
4ef0: 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d   tracePriority,.
4f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4f10: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64   TraceCallback d
4f20: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
4f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
4f40: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61  raceCallback tra
4f50: 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
4f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
4f70: 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c 0d  embly assembly,.
4f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4f90: 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
4fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4fb0: 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
4fc0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
4fd0: 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 42 75      MessageBoxBu
4fe0: 74 74 6f 6e 73 20 62 75 74 74 6f 6e 73 2c 0d 0a  ttons buttons,..
4ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5000: 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 20 69  MessageBoxIcon i
5010: 63 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  con..           
5020: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
5030: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5040: 20 20 20 20 20 20 20 44 69 61 6c 6f 67 52 65 73         DialogRes
5050: 75 6c 74 20 72 65 73 75 6c 74 20 3d 20 44 69 61  ult result = Dia
5060: 6c 6f 67 52 65 73 75 6c 74 2e 4f 4b 3b 0d 0a 0d  logResult.OK;...
5070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5080: 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74   DebugAndTrace(t
5090: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
50a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50b0: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
50c0: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
50d0: 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f   message, catego
50e0: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
50f0: 20 20 20 20 20 20 20 20 69 66 20 28 53 79 73 74          if (Syst
5100: 65 6d 49 6e 66 6f 72 6d 61 74 69 6f 6e 2e 55 73  emInformation.Us
5110: 65 72 49 6e 74 65 72 61 63 74 69 76 65 29 0d 0a  erInteractive)..
5120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5130: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5140: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 69         string ti
5150: 74 6c 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c  tle = GetAssembl
5160: 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c 79 29  yTitle(assembly)
5170: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5180: 20 20 20 20 20 20 20 20 20 69 66 20 28 74 69 74           if (tit
5190: 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
51a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51b0: 20 20 20 20 20 74 69 74 6c 65 20 3d 20 41 70 70       title = App
51c0: 6c 69 63 61 74 69 6f 6e 2e 50 72 6f 64 75 63 74  lication.Product
51d0: 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
51e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
51f0: 75 6c 74 20 3d 20 4d 65 73 73 61 67 65 42 6f 78  ult = MessageBox
5200: 2e 53 68 6f 77 28 6d 65 73 73 61 67 65 2c 20 74  .Show(message, t
5210: 69 74 6c 65 2c 20 62 75 74 74 6f 6e 73 2c 20 69  itle, buttons, i
5220: 63 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  con);....       
5230: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65 62               Deb
5240: 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63 65  ugAndTrace(trace
5250: 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20  Priority,..     
5260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5270: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
5280: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
5290: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
52a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
52b0: 20 20 20 20 20 20 20 20 20 22 55 73 65 72 20 63           "User c
52c0: 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20  hoice of {0}.", 
52d0: 46 6f 72 44 69 73 70 6c 61 79 28 72 65 73 75 6c  ForDisplay(resul
52e0: 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
52f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
5300: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
5310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5320: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
5330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5340: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
5350: 20 20 20 20 20 44 65 62 75 67 41 6e 64 54 72 61       DebugAndTra
5360: 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74 79  ce(tracePriority
5370: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5380: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
5390: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
53a0: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
53b0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
53c0: 20 20 20 20 20 20 20 20 20 22 44 65 66 61 75 6c           "Defaul
53d0: 74 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e  t choice of {0}.
53e0: 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65  ", ForDisplay(re
53f0: 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  sult)),..       
5400: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
5410: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
5420: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5430: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
5440: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5450: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
5460: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
54a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
54b0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
54c0: 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 69     #region Traci
54d0: 6e 67 20 53 75 70 70 6f 72 74 20 4d 65 74 68 6f  ng Support Metho
54e0: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
54f0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
5500: 69 64 20 53 65 74 75 70 44 65 62 75 67 4c 69 73  id SetupDebugLis
5510: 74 65 6e 65 72 73 28 29 0d 0a 20 20 20 20 20 20  teners()..      
5520: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5530: 20 20 20 20 20 20 20 20 20 69 66 20 28 64 65 62           if (deb
5540: 75 67 4c 69 73 74 65 6e 65 72 73 20 3d 3d 20 6e  ugListeners == n
5550: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5560: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 4c            debugL
5570: 69 73 74 65 6e 65 72 73 20 3d 20 6e 65 77 20 4c  isteners = new L
5580: 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e 65  ist<TraceListene
5590: 72 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r>();....       
55a0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 4c 69           debugLi
55b0: 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20  steners.Add(new 
55c0: 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74  ConsoleTraceList
55d0: 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  ener());..      
55e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
55f0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
5640: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
5650: 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78   static long Nex
5660: 74 44 65 62 75 67 49 64 28 29 0d 0a 20 20 20 20  tDebugId()..    
5670: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5680: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5690: 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e  n Interlocked.In
56a0: 63 72 65 6d 65 6e 74 28 72 65 66 20 6e 65 78 74  crement(ref next
56b0: 44 65 62 75 67 49 64 29 3b 0d 0a 20 20 20 20 20  DebugId);..     
56c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
56d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
56e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5720: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
5730: 63 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65  c static long Ne
5740: 78 74 54 72 61 63 65 49 64 28 29 0d 0a 20 20 20  xtTraceId()..   
5750: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5760: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5770: 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49  rn Interlocked.I
5780: 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 6e 65 78  ncrement(ref nex
5790: 74 54 72 61 63 65 49 64 29 3b 0d 0a 20 20 20 20  tTraceId);..    
57a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
57b0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
57c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
5800: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
5810: 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
5820: 20 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54   TimeStamp(DateT
5830: 69 6d 65 20 64 61 74 65 54 69 6d 65 29 0d 0a 20  ime dateTime).. 
5840: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5860: 74 75 72 6e 20 64 61 74 65 54 69 6d 65 2e 54 6f  turn dateTime.To
5870: 53 74 72 69 6e 67 28 49 73 6f 38 36 30 31 44 61  String(Iso8601Da
5880: 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d  teTimeOutputForm
5890: 61 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  at);..          
58a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
58b0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
58c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58f0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5900: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
5910: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
5920: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
5930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5940: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
5950: 6e 67 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65  ng GetMethodName
5960: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5970: 20 20 20 53 74 61 63 6b 54 72 61 63 65 20 73 74     StackTrace st
5980: 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20  ackTrace,..     
5990: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
59a0: 65 76 65 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  evel..          
59b0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
59c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
59d0: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
59e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a00: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5a10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
5a20: 4f 54 45 3a 20 49 66 20 61 20 76 61 6c 69 64 20  OTE: If a valid 
5a30: 73 74 61 63 6b 20 74 72 61 63 65 20 77 61 73 20  stack trace was 
5a40: 6e 6f 74 20 73 75 70 70 6c 69 65 64 20 62 79 20  not supplied by 
5a50: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
5a60: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
5a70: 20 20 63 61 6c 6c 65 72 2c 20 63 72 65 61 74 65    caller, create
5a80: 20 6f 6e 65 20 6e 6f 77 20 62 61 73 65 64 20 6f   one now based o
5a90: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20  n the current.. 
5aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ab0: 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63     //       exec
5ac0: 75 74 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20 20  ution stack...  
5ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ae0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
5af0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
5b00: 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c 6c  ackTrace == null
5b10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5b20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b40: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
5b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5b60: 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
5b70: 63 75 72 72 65 6e 74 20 65 78 65 63 75 74 69 6f  current executio
5b80: 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20  n stack...      
5b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ba0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
5bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
5bc0: 61 63 6b 54 72 61 63 65 20 3d 20 6e 65 77 20 53  ackTrace = new S
5bd0: 74 61 63 6b 54 72 61 63 65 28 29 3b 0d 0a 0d 0a  tackTrace();....
5be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5bf0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c10: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77      // NOTE: Alw
5c20: 61 79 73 20 73 6b 69 70 20 74 68 69 73 20 63 61  ays skip this ca
5c30: 6c 6c 20 66 72 61 6d 65 20 77 68 65 6e 20 77 65  ll frame when we
5c40: 20 63 61 70 74 75 72 65 0d 0a 20 20 20 20 20 20   capture..      
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c60: 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 73    //       the s
5c70: 74 61 63 6b 20 74 72 61 63 65 2e 0d 0a 20 20 20  tack trace...   
5c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c90: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
5ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5cb0: 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 20 20 20 20 20   level++;..     
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5cd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5ce0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d00: 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65  // NOTE: Get the
5d10: 20 73 70 65 63 69 66 69 65 64 20 73 74 61 63 6b   specified stack
5d20: 20 66 72 61 6d 65 20 28 61 6c 77 61 79 73 20 61   frame (always a
5d30: 64 64 20 6f 6e 65 20 74 6f 0d 0a 20 20 20 20 20  dd one to..     
5d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5d50: 2f 20 20 20 20 20 20 20 73 6b 69 70 20 74 68 69  /       skip thi
5d60: 73 20 6d 65 74 68 6f 64 29 2e 0d 0a 20 20 20 20  s method)...    
5d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d80: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
5d90: 20 20 20 20 20 20 20 20 53 74 61 63 6b 46 72 61          StackFra
5da0: 6d 65 20 73 74 61 63 6b 46 72 61 6d 65 20 3d 20  me stackFrame = 
5db0: 73 74 61 63 6b 54 72 61 63 65 2e 47 65 74 46 72  stackTrace.GetFr
5dc0: 61 6d 65 28 6c 65 76 65 6c 29 3b 0d 0a 0d 0a 20  ame(level);.... 
5dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5de0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
5df0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
5e00: 54 45 3a 20 47 65 74 20 74 68 65 20 6d 65 74 68  TE: Get the meth
5e10: 6f 64 20 66 6f 72 20 74 68 65 20 73 74 61 63 6b  od for the stack
5e20: 20 66 72 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20   frame...       
5e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
5e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5e50: 20 20 20 20 20 4d 65 74 68 6f 64 42 61 73 65 20       MethodBase 
5e60: 6d 65 74 68 6f 64 42 61 73 65 20 3d 20 73 74 61  methodBase = sta
5e70: 63 6b 46 72 61 6d 65 2e 47 65 74 4d 65 74 68 6f  ckFrame.GetMetho
5e80: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
5e90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
5ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5eb0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74      // NOTE: Get
5ec0: 20 74 68 65 20 74 79 70 65 20 66 6f 72 20 74 68   the type for th
5ed0: 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  e method...     
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5ef0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
5f00: 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70 65         Type type
5f10: 20 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e 44 65   = methodBase.De
5f20: 63 6c 61 72 69 6e 67 54 79 70 65 3b 0d 0a 0d 0a  claringType;....
5f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f40: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5f50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
5f60: 4f 54 45 3a 20 47 65 74 20 74 68 65 20 6e 61 6d  OTE: Get the nam
5f70: 65 20 6f 66 20 74 68 65 20 6d 65 74 68 6f 64 2e  e of the method.
5f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5f90: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
5fb0: 72 69 6e 67 20 6e 61 6d 65 20 3d 20 6d 65 74 68  ring name = meth
5fc0: 6f 64 42 61 73 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a  odBase.Name;....
5fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5fe0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
6000: 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20  OTE: Return the 
6010: 70 72 6f 70 65 72 6c 79 20 66 6f 72 6d 61 74 74  properly formatt
6020: 65 64 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20  ed result...    
6030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6040: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
6050: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
6060: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
6070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6080: 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32         "{0}{1}{2
6090: 7d 22 2c 20 74 79 70 65 2e 4e 61 6d 65 2c 20 54  }", type.Name, T
60a0: 79 70 65 2e 44 65 6c 69 6d 69 74 65 72 2c 20 6e  ype.Delimiter, n
60b0: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
60c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
60d0: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
60e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
60f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6100: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
6110: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
6120: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6130: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
6140: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
6150: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6160: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
61b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
61c0: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 44 65  c static void De
61d0: 62 75 67 43 6f 72 65 28 0d 0a 20 20 20 20 20 20  bugCore(..      
61e0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
61f0: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
6200: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
6210: 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
6220: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
6230: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
6250: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 2f 2a  ck (syncRoot) /*
6260: 20 54 52 41 4e 53 41 43 54 49 4f 4e 41 4c 20 2a   TRANSACTIONAL *
6270: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
6280: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6290: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 65            if (de
62a0: 62 75 67 4c 69 73 74 65 6e 65 72 73 20 21 3d 20  bugListeners != 
62b0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
62c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
62d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62e0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 54        foreach (T
62f0: 72 61 63 65 4c 69 73 74 65 6e 65 72 20 6c 69 73  raceListener lis
6300: 74 65 6e 65 72 20 69 6e 20 64 65 62 75 67 4c 69  tener in debugLi
6310: 73 74 65 6e 65 72 73 29 0d 0a 20 20 20 20 20 20  steners)..      
6320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6330: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6350: 20 6c 69 73 74 65 6e 65 72 2e 57 72 69 74 65 4c   listener.WriteL
6360: 69 6e 65 28 6d 65 73 73 61 67 65 2c 20 63 61 74  ine(message, cat
6370: 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
6380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6390: 20 20 20 20 20 6c 69 73 74 65 6e 65 72 2e 46 6c       listener.Fl
63a0: 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ush();..        
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
63d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
63e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
63f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
6400: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
6410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
6460: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
6470: 54 72 61 63 65 43 6f 72 65 28 0d 0a 20 20 20 20  TraceCore(..    
6480: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
6490: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
64a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
64b0: 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20  ing category..  
64c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
64d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
64e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64f0: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
6500: 2f 2a 20 54 52 41 4e 53 41 43 54 49 4f 4e 41 4c  /* TRANSACTIONAL
6510: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
6520: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6530: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
6540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6550: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 72 69      // NOTE: Wri
6560: 74 65 20 74 68 65 20 6d 65 73 73 61 67 65 20 74  te the message t
6570: 6f 20 61 6c 6c 20 74 68 65 20 61 63 74 69 76 65  o all the active
6580: 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20   trace..        
6590: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
65a0: 20 20 20 20 20 6c 69 73 74 65 6e 65 72 73 2e 0d       listeners..
65b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
65c0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
65d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
65e0: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65 73  ce.WriteLine(mes
65f0: 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b  sage, category);
6600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6610: 20 20 20 20 20 20 54 72 61 63 65 2e 46 6c 75 73        Trace.Flus
6620: 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  h();..          
6630: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6640: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6650: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
66a0: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
66b0: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
66c0: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
66d0: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
66e0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
66f0: 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72  tring DebugAndTr
6700: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
6710: 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
6720: 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74  ity tracePriorit
6730: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
6740: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
6750: 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  k debugCallback,
6760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6770: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    TraceCallback 
6780: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67a0: 45 78 63 65 70 74 69 6f 6e 20 65 78 63 65 70 74  Exception except
67b0: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
67c0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
67d0: 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  egory..         
67e0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
67f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6800: 20 20 20 20 20 20 20 20 20 69 66 20 28 65 78 63           if (exc
6810: 65 70 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d  eption != null).
6820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6830: 20 20 20 20 20 72 65 74 75 72 6e 20 44 65 62 75       return Debu
6840: 67 41 6e 64 54 72 61 63 65 28 74 72 61 63 65 50  gAndTrace(traceP
6850: 72 69 6f 72 69 74 79 2c 20 64 65 62 75 67 43 61  riority, debugCa
6860: 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
6870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6880: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
6890: 6e 65 77 20 53 74 61 63 6b 54 72 61 63 65 28 65  new StackTrace(e
68a0: 78 63 65 70 74 69 6f 6e 2c 20 74 72 75 65 29 2c  xception, true),
68b0: 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0,..           
68c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78 63               exc
68d0: 65 70 74 69 6f 6e 2e 54 6f 53 74 72 69 6e 67 28  eption.ToString(
68e0: 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  ), category);...
68f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6900: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
6910: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6920: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
6930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6970: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
6980: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
6990: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
69a0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
69b0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
69c0: 61 74 69 63 20 73 74 72 69 6e 67 20 44 65 62 75  atic string Debu
69d0: 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
69e0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
69f0: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
6a00: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
6a10: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
6a20: 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c  allback debugCal
6a30: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
6a40: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
6a50: 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
6a60: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
6a70: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
6a80: 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
6a90: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
6aa0: 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
6ab0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
6ac0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6ad0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6ae0: 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d   DebugAndTrace(.
6af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6b00: 20 20 20 20 20 74 72 61 63 65 50 72 69 6f 72 69       tracePriori
6b10: 74 79 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  ty, debugCallbac
6b20: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
6b30: 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20 20 20  , null, 1,..    
6b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b50: 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72  message, categor
6b60: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
6b70: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
6b80: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6bd0: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
6be0: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
6bf0: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
6c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
6c10: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
6c20: 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61 63 65  ng DebugAndTrace
6c30: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
6c40: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
6c50: 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d   tracePriority,.
6c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6c70: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64   TraceCallback d
6c80: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
6c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
6ca0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61  raceCallback tra
6cb0: 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
6cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61               Sta
6cd0: 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72 61  ckTrace stackTra
6ce0: 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce,..           
6cf0: 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 2c 0d       int level,.
6d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6d10: 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
6d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6d30: 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
6d40: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
6d50: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
6d60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6d70: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
6d80: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
6d90: 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20 74 68  : Always skip th
6da0: 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20 69 66  is call frame if
6db0: 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63 65   the stack trace
6dc0: 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20   is..           
6dd0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 67 6f       //       go
6de0: 69 6e 67 20 74 6f 20 62 65 20 63 61 70 74 75 72  ing to be captur
6df0: 65 64 20 62 79 20 47 65 74 4d 65 74 68 6f 64 4e  ed by GetMethodN
6e00: 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ame...          
6e10: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
6e20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
6e30: 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c 6c  ackTrace == null
6e40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6e50: 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b 3b 0d         level++;.
6e60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6e70: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
6e80: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
6e90: 46 6f 72 6d 61 74 20 74 68 65 20 6d 65 73 73 61  Format the messa
6ea0: 67 65 20 66 6f 72 20 64 69 73 70 6c 61 79 20 28  ge for display (
6eb0: 6f 6e 63 65 29 2e 0d 0a 20 20 20 20 20 20 20 20  once)...        
6ec0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
6ed0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
6ee0: 6e 67 20 66 6f 72 6d 61 74 74 65 64 20 3d 20 53  ng formatted = S
6ef0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
6f00: 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }: {1}",..      
6f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
6f20: 74 4d 65 74 68 6f 64 4e 61 6d 65 28 73 74 61 63  tMethodName(stac
6f30: 6b 54 72 61 63 65 2c 20 6c 65 76 65 6c 29 2c 20  kTrace, level), 
6f40: 6d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20  message);....   
6f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
6f60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6f70: 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65   // NOTE: If the
6f80: 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20   debug callback 
6f90: 69 73 20 69 6e 76 61 6c 69 64 20 6f 72 20 74 68  is invalid or th
6fa0: 65 20 74 72 61 63 65 20 70 72 69 6f 72 69 74 79  e trace priority
6fb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6fc0: 20 20 2f 2f 20 20 20 20 20 20 20 6f 66 20 74 68    //       of th
6fd0: 69 73 20 6d 65 73 73 61 67 65 20 69 73 20 6c 65  is message is le
6fe0: 73 73 20 74 68 61 6e 20 77 68 61 74 20 77 65 20  ss than what we 
6ff0: 63 75 72 72 65 6e 74 6c 79 20 77 61 6e 74 20 74  currently want t
7000: 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  o..             
7010: 20 20 20 2f 2f 20 20 20 20 20 20 20 64 65 62 75     //       debu
7020: 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20 20 20  g, skip it...   
7030: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
7040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7050: 20 69 66 20 28 28 64 65 62 75 67 43 61 6c 6c 62   if ((debugCallb
7060: 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d  ack != null) &&.
7070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7080: 20 20 20 20 20 28 74 72 61 63 65 50 72 69 6f 72       (tracePrior
7090: 69 74 79 20 3e 3d 20 44 65 62 75 67 50 72 69 6f  ity >= DebugPrio
70a0: 72 69 74 79 29 29 0d 0a 20 20 20 20 20 20 20 20  rity))..        
70b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
70c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
70d0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
70e0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
70f0: 49 6e 76 6f 6b 65 20 74 68 65 20 64 65 62 75 67  Invoke the debug
7100: 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74   callback with t
7110: 68 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a 20 20  he formatted..  
7120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7130: 20 20 2f 2f 20 20 20 20 20 20 20 6d 65 73 73 61    //       messa
7140: 67 65 20 61 6e 64 20 74 68 65 20 63 61 74 65 67  ge and the categ
7150: 6f 72 79 20 73 70 65 63 69 66 69 65 64 20 62 79  ory specified by
7160: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
7170: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
7180: 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20     caller...    
7190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
71a0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
71b0: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
71c0: 6c 62 61 63 6b 28 66 6f 72 6d 61 74 74 65 64 2c  lback(formatted,
71d0: 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20   category);..   
71e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
71f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7200: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
7210: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
7220: 66 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c  f the trace call
7230: 62 61 63 6b 20 69 73 20 69 6e 76 61 6c 69 64 20  back is invalid 
7240: 6f 72 20 74 68 65 20 74 72 61 63 65 20 70 72 69  or the trace pri
7250: 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20  ority..         
7260: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
7270: 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67 65 20  of this message 
7280: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77 68 61  is less than wha
7290: 74 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20 77  t we currently w
72a0: 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  ant to..        
72b0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
72c0: 20 74 72 61 63 65 2c 20 73 6b 69 70 20 69 74 2e   trace, skip it.
72d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
72e0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
72f0: 20 20 20 20 20 20 69 66 20 28 28 74 72 61 63 65        if ((trace
7300: 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c  Callback != null
7310: 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
7320: 20 20 20 20 20 20 20 20 20 20 28 74 72 61 63 65            (trace
7330: 50 72 69 6f 72 69 74 79 20 3e 3d 20 54 72 61 63  Priority >= Trac
7340: 65 50 72 69 6f 72 69 74 79 29 29 0d 0a 20 20 20  ePriority))..   
7350: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
7360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7370: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
7380: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
7390: 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20  OTE: Invoke the 
73a0: 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 20 77  trace callback w
73b0: 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74 74 65  ith the formatte
73c0: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
73d0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
73e0: 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68 65 20  message and the 
73f0: 63 61 74 65 67 6f 72 79 20 73 70 65 63 69 66 69  category specifi
7400: 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20  ed by the..     
7410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7420: 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d  /       caller..
7430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7440: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
7450: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
7460: 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61  ceCallback(forma
7470: 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29 3b  tted, category);
7480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7490: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
74a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 65         return me
74b0: 73 73 61 67 65 3b 0d 0a 20 20 20 20 20 20 20 20  ssage;..        
74c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
74d0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
74e0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
74f0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
7500: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7550: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
7560: 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20  on MockRegistry 
7570: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
7580: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
7590: 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ass MockRegistry
75a0: 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a   : IDisposable..
75b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
75c0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
75d0: 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
75e0: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
75f0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
7600: 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  try()..         
7610: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7620: 20 20 20 20 20 20 77 68 61 74 49 66 20 3d 20 74        whatIf = t
7630: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
7640: 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79 20 3d        readOnly =
7650: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
7660: 20 20 20 20 20 20 20 20 73 61 66 65 20 3d 20 74          safe = t
7670: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
7680: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
7690: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
76a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
76b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
76c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
76d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
76e0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
76f0: 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20  kRegistry(..    
7700: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
7710: 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20   whatIf..       
7720: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
7730: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
7740: 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  is()..          
7750: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7760: 20 20 20 20 20 74 68 69 73 2e 77 68 61 74 49 66       this.whatIf
7770: 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20   = whatIf;..    
7780: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7790: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
77a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
77f0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28  ic MockRegistry(
7800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7810: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
7820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7830: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20  bool readOnly.. 
7840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
7850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7860: 20 20 3a 20 74 68 69 73 28 77 68 61 74 49 66 29    : this(whatIf)
7870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
7880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7890: 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20 3d   this.readOnly =
78a0: 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20   readOnly;..    
78b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
78c0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
78d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7910: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
7920: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28  ic MockRegistry(
7930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7940: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
7950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7960: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a  bool readOnly,..
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7980: 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20  bool safe..     
7990: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
79b0: 74 68 69 73 28 77 68 61 74 49 66 2c 20 72 65 61  this(whatIf, rea
79c0: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
79d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
79e0: 20 20 20 20 20 20 20 74 68 69 73 2e 73 61 66 65         this.safe
79f0: 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20   = safe;..      
7a00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7a10: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
7a20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
7a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a70: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
7a80: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
7a90: 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
7aa0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
7ab0: 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20   bool whatIf;.. 
7ac0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
7ad0: 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20  c bool WhatIf.. 
7ae0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
7b00: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
7b10: 64 28 29 3b 20 72 65 74 75 72 6e 20 77 68 61 74  d(); return what
7b20: 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  If; }..         
7b30: 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65         set { Che
7b40: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 77 68  ckDisposed(); wh
7b50: 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  atIf = value; }.
7b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7b70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
7b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7bc0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7bd0: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 72 65   private bool re
7be0: 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20  adOnly;..       
7bf0: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
7c00: 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20   ReadOnly..     
7c10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7c20: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
7c30: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
7c40: 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e 6c 79   return readOnly
7c50: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
7c60: 20 20 20 20 20 73 65 74 20 7b 20 43 68 65 63 6b       set { Check
7c70: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 61 64  Disposed(); read
7c80: 4f 6e 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Only = value; }.
7c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
7cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cf0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7d00: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 73 61   private bool sa
7d10: 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe;..           
7d20: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61 66   public bool Saf
7d30: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
7d40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7d50: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
7d60: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
7d70: 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  safe; }..       
7d80: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43           set { C
7d90: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
7da0: 73 61 66 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  safe = value; }.
7db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7dc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
7dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e10: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7e20: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
7e30: 69 73 74 72 79 4b 65 79 20 63 6c 61 73 73 65 73  istryKey classes
7e40: 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  Root;..         
7e50: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
7e60: 67 69 73 74 72 79 4b 65 79 20 43 6c 61 73 73 65  gistryKey Classe
7e70: 73 52 6f 6f 74 0d 0a 20 20 20 20 20 20 20 20 20  sRoot..         
7e80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7e90: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
7ea0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ec0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
7ed0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
7ee0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6c            if (cl
7ef0: 61 73 73 65 73 52 6f 6f 74 20 3d 3d 20 6e 75 6c  assesRoot == nul
7f00: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7f10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f30: 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d     classesRoot =
7f40: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
7f50: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f70: 20 20 20 52 65 67 69 73 74 72 79 2e 43 6c 61 73     Registry.Clas
7f80: 73 65 73 52 6f 6f 74 2c 20 77 68 61 74 49 66 2c  sesRoot, whatIf,
7f90: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
7fa0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7fb0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fd0: 72 65 74 75 72 6e 20 63 6c 61 73 73 65 73 52 6f  return classesRo
7fe0: 6f 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ot;..           
7ff0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8000: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8010: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8050: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8060: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
8070: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
8080: 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a  currentConfig;..
8090: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
80a0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
80b0: 65 79 20 43 75 72 72 65 6e 74 43 6f 6e 66 69 67  ey CurrentConfig
80c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
80d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
80e0: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20   get..          
80f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8100: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
8110: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
8120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8130: 20 20 20 20 20 69 66 20 28 63 75 72 72 65 6e 74       if (current
8140: 43 6f 6e 66 69 67 20 3d 3d 20 6e 75 6c 6c 29 0d  Config == null).
8150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8160: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8180: 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20  currentConfig = 
8190: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
81a0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
81b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81c0: 20 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65    Registry.Curre
81d0: 6e 74 43 6f 6e 66 69 67 2c 20 77 68 61 74 49 66  ntConfig, whatIf
81e0: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
81f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8200: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8220: 20 72 65 74 75 72 6e 20 63 75 72 72 65 6e 74 43   return currentC
8230: 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20 20 20 20  onfig;..        
8240: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8250: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8260: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
82b0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
82c0: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
82d0: 65 79 20 63 75 72 72 65 6e 74 55 73 65 72 3b 0d  ey currentUser;.
82e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
82f0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
8300: 4b 65 79 20 43 75 72 72 65 6e 74 55 73 65 72 0d  Key CurrentUser.
8310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8330: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  get..           
8340: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8350: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
8360: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8380: 20 20 20 20 69 66 20 28 63 75 72 72 65 6e 74 55      if (currentU
8390: 73 65 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ser == null)..  
83a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
83c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72               cur
83d0: 72 65 6e 74 55 73 65 72 20 3d 20 6e 65 77 20 4d  rentUser = new M
83e0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
83f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8400: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
8410: 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65  istry.CurrentUse
8420: 72 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  r, whatIf, readO
8430: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20  nly, safe);..   
8440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8450: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8460: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8470: 20 63 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20   currentUser;.. 
8480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
84a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
84b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
8500: 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65    private MockRe
8510: 67 69 73 74 72 79 4b 65 79 20 64 79 6e 44 61 74  gistryKey dynDat
8520: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
8530: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
8540: 74 72 79 4b 65 79 20 44 79 6e 44 61 74 61 0d 0a  tryKey DynData..
8550: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
8570: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
8580: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8590: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
85a0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
85b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85c0: 20 20 20 69 66 20 28 64 79 6e 44 61 74 61 20 3d     if (dynData =
85d0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8600: 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61 20          dynData 
8610: 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  = new MockRegist
8620: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
8630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8640: 20 20 20 20 52 65 67 69 73 74 72 79 2e 44 79 6e      Registry.Dyn
8650: 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72 65  Data, whatIf, re
8660: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a  adOnly, safe);..
8670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8680: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8690: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
86a0: 75 72 6e 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20  urn dynData;..  
86b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
86c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
86d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
86e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
86f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8720: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8730: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
8740: 69 73 74 72 79 4b 65 79 20 6c 6f 63 61 6c 4d 61  istryKey localMa
8750: 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20  chine;..        
8760: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
8770: 65 67 69 73 74 72 79 4b 65 79 20 4c 6f 63 61 6c  egistryKey Local
8780: 4d 61 63 68 69 6e 65 0d 0a 20 20 20 20 20 20 20  Machine..       
8790: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
87a0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
87b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
87c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87d0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
87e0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
87f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8800: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 3d 20  localMachine == 
8810: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8820: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8840: 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69        localMachi
8850: 6e 65 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ne = new MockReg
8860: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
8870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8880: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
8890: 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 20 77 68  LocalMachine, wh
88a0: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
88b0: 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  safe);..        
88c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
88d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
88e0: 20 20 20 20 20 72 65 74 75 72 6e 20 6c 6f 63 61       return loca
88f0: 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20  lMachine;..     
8900: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8910: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8920: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
8930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
8970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
8980: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
8990: 72 79 4b 65 79 20 70 65 72 66 6f 72 6d 61 6e 63  ryKey performanc
89a0: 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  eData;..        
89b0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
89c0: 65 67 69 73 74 72 79 4b 65 79 20 50 65 72 66 6f  egistryKey Perfo
89d0: 72 6d 61 6e 63 65 44 61 74 61 0d 0a 20 20 20 20  rmanceData..    
89e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
89f0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
8a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8a20: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
8a30: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
8a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
8a50: 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61  f (performanceDa
8a60: 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ta == null)..   
8a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8a90: 20 20 20 20 20 20 20 20 20 20 20 20 70 65 72 66              perf
8aa0: 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e 65  ormanceData = ne
8ab0: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
8ac0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
8ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ae0: 52 65 67 69 73 74 72 79 2e 50 65 72 66 6f 72 6d  Registry.Perform
8af0: 61 6e 63 65 44 61 74 61 2c 20 77 68 61 74 49 66  anceData, whatIf
8b00: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
8b10: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8b20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b40: 20 72 65 74 75 72 6e 20 70 65 72 66 6f 72 6d 61   return performa
8b50: 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20  nceData;..      
8b60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8b70: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8b80: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
8b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
8bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
8be0: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72  vate MockRegistr
8bf0: 79 4b 65 79 20 75 73 65 72 73 3b 0d 0a 20 20 20  yKey users;..   
8c00: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
8c10: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
8c20: 55 73 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  Users..         
8c30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8c40: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
8c50: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c70: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
8c80: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
8c90: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75 73            if (us
8ca0: 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ers == null)..  
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65               use
8ce0: 72 73 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67  rs = new MockReg
8cf0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d10: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
8d20: 55 73 65 72 73 2c 20 77 68 61 74 49 66 2c 20 72  Users, whatIf, r
8d30: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
8d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8d50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
8d70: 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20 20 20  turn users;..   
8d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
8d90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8da0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
8db0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
8dc0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e00: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8e10: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
8e20: 50 75 62 6c 69 63 20 22 52 65 67 69 73 74 72 79  Public "Registry
8e30: 22 20 4d 65 74 68 6f 64 73 0d 0a 23 69 66 20 66  " Methods..#if f
8e40: 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alse..          
8e50: 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20    public object 
8e60: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
8e70: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
8e80: 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  g keyName,..    
8e90: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
8ea0: 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20  ng valueName,.. 
8eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
8ec0: 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c  bject defaultVal
8ed0: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..            
8ee0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
8ef0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8f00: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
8f10: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
8f20: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8f30: 20 52 65 67 69 73 74 72 79 2e 47 65 74 56 61 6c   Registry.GetVal
8f40: 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75  ue(keyName, valu
8f50: 65 4e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61  eName, defaultVa
8f60: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
8f70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8f80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8fc0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8fd0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
8fe0: 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  id SetValue(..  
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
9000: 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20  ring keyName,.. 
9010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
9020: 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c  tring valueName,
9030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9040: 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a    object value..
9050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9060: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9080: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9090: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
90a0: 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c      CheckReadOnl
90b0: 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
90c0: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
90d0: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
90e0: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
90f0: 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65 79 4e  ry.SetValue(keyN
9100: 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20  ame, valueName, 
9110: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
9120: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9130: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9180: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9190: 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a  void SetValue(..
91a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91b0: 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d  string keyName,.
91c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
91d0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d   string valueNam
91e0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
91f0: 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
9200: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9210: 20 20 20 52 65 67 69 73 74 72 79 56 61 6c 75 65     RegistryValue
9220: 4b 69 6e 64 20 76 61 6c 75 65 4b 69 6e 64 0d 0a  Kind valueKind..
9230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9240: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9260: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9270: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9280: 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c      CheckReadOnl
9290: 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
92a0: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
92b0: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
92c0: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
92d0: 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65 79 4e  ry.SetValue(keyN
92e0: 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20  ame, valueName, 
92f0: 76 61 6c 75 65 2c 20 76 61 6c 75 65 4b 69 6e 64  value, valueKind
9300: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9310: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
9320: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
9330: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
9340: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9380: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9390: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
93a0: 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ate Methods..   
93b0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
93c0: 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64 4f   void CheckReadO
93d0: 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  nly()..         
93e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
93f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
9400: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
9410: 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79  E: In "read-only
9420: 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c  " mode, we disal
9430: 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61 63  low all write ac
9440: 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  cess...         
9450: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
9460: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
9470: 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20  readOnly)..     
9480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9490: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
94a0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
94b0: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
94c0: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
94d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
94e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
94f0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
9500: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9550: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
9560: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
9570: 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
9580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
9590: 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
95a0: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
95b0: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
95c0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a  eckDisposed() /*
95d0: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
95e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
95f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64            if (!d
9600: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
9610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9620: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
9630: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
9640: 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65  ew ObjectDispose
9650: 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  dException(..   
9660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9670: 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69   typeof(MockRegi
9680: 73 74 72 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  stry).Name);..  
9690: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
96a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
96b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
96f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
9700: 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
9710: 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
9720: 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20  id Dispose(..   
9730: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
9740: 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20  l disposing..   
9750: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
9760: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9780: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
9790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
97a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
97b0: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
97c0: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
97d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97f0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
9820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9830: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
9840: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
9850: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
9860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9870: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9890: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98b0: 20 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f 74   if (classesRoot
98c0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9900: 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 2e 43 6c    classesRoot.Cl
9910: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
9920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9930: 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20      classesRoot 
9940: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
9950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9960: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
9970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9980: 20 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20   (currentConfig 
9990: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
99a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99d0: 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 2e 43   currentConfig.C
99e0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a00: 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66       currentConf
9a10: 69 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ig = null;..    
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a50: 20 69 66 20 28 63 75 72 72 65 6e 74 55 73 65 72   if (currentUser
9a60: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a80: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9aa0: 20 20 63 75 72 72 65 6e 74 55 73 65 72 2e 43 6c    currentUser.Cl
9ab0: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 20      currentUser 
9ae0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9b20: 20 28 64 79 6e 44 61 74 61 20 21 3d 20 6e 75 6c   (dynData != nul
9b30: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b60: 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61             dynDa
9b70: 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  ta.Close();..   
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b90: 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61           dynData
9ba0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
9bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
9bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9be0: 66 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20  f (localMachine 
9bf0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c30: 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 2e 43 6c   localMachine.Cl
9c40: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
9c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c60: 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65      localMachine
9c70: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9cb0: 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61  f (performanceDa
9cc0: 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ta != null)..   
9cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ce0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d00: 20 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44      performanceD
9d10: 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ata.Close();..  
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d30: 20 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72            perfor
9d40: 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e 75 6c 6c  manceData = null
9d50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9d60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d80: 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72          if (user
9d90: 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
9da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9db0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9dd0: 20 20 20 75 73 65 72 73 2e 43 6c 6f 73 65 28 29     users.Close()
9de0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
9e00: 73 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  sers = null;..  
9e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
9e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9e50: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
9e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e90: 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d    // release unm
9ea0: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
9eb0: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
9ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
9ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ef0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9f00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
9f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f20: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
9f30: 73 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20  s object is now 
9f40: 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20  disposed...     
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9f60: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
9f70: 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
9f80: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
9f90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
9fa0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9fb0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
9fc0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
9fd0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a010: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
a020: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73      #region IDis
a030: 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d  posable Members.
a040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a050: 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65  lic void Dispose
a060: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
a070: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a080: 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29     Dispose(true)
a090: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a0a0: 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69     GC.SuppressFi
a0b0: 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20  nalize(this);.. 
a0c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a0d0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
a0e0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
a0f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a130: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a140: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44         #region D
a150: 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20  estructor..     
a160: 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69         ~MockRegi
a170: 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20  stry()..        
a180: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a190: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66         Dispose(f
a1a0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
a1b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
a1c0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
a1d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
a1e0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
a1f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a240: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
a250: 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  on MockRegistryK
a260: 65 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ey Class..      
a270: 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65    internal seale
a280: 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69  d class MockRegi
a290: 73 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70 6f  stryKey : IDispo
a2a0: 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b  sable..        {
a2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
a2c0: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
a2d0: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
a2e0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
a2f0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
a300: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
a310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a320: 20 20 77 68 61 74 49 66 20 3d 20 74 72 75 65 3b    whatIf = true;
a330: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a340: 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75    readOnly = tru
a350: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
a360: 20 20 20 20 73 61 66 65 20 3d 20 74 72 75 65 3b      safe = true;
a370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a380: 20 20 6e 6f 43 6c 6f 73 65 20 3d 20 66 61 6c 73    noClose = fals
a390: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
a3a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
a3b0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
a3c0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a410: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
a420: 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74  ion Public Const
a430: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
a440: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
a450: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
a460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
a470: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20  gistryKey key.. 
a480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
a490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a4a0: 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20    : this()..    
a4b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a4c0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
a4d0: 6b 65 79 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20  key = key;..    
a4e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a4f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a540: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a550: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
a560: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
a570: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
a580: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
a590: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
a5a0: 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20  bKeyName..      
a5b0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
a5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
a5d0: 68 69 73 28 6b 65 79 29 0d 0a 20 20 20 20 20 20  his(key)..      
a5e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a5f0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 75           this.su
a600: 62 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65  bKeyName = subKe
a610: 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
a620: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a630: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a670: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a680: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
a690: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
a6a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a6b0: 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79   RegistryKey key
a6c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a6d0: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
a6e0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
a6f0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
a700: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
a710: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
a720: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65         : this(ke
a730: 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a  y, subKeyName)..
a740: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
a760: 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61  his.whatIf = wha
a770: 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf;..          
a780: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a790: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a7e0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
a7f0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
a800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
a810: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
a820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a830: 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
a840: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
a850: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
a860: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a870: 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79     bool readOnly
a880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a890: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
a8a0: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c       : this(key,
a8b0: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61   subKeyName, wha
a8c0: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
a8d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a8e0: 20 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e       this.readOn
a8f0: 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a  ly = readOnly;..
a900: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
a920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a960: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a970: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
a980: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
a990: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
a9a0: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
a9b0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
a9c0: 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20  g subKeyName,.. 
a9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
a9e0: 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
a9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
aa00: 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20  l readOnly,..   
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
aa20: 6c 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20  l safe..        
aa30: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
aa40: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
aa50: 73 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d  s(key, subKeyNam
aa60: 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  e, whatIf, readO
aa70: 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nly)..          
aa80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
aa90: 20 20 20 20 20 74 68 69 73 2e 73 61 66 65 20 3d       this.safe =
aaa0: 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20   safe;..        
aab0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
aac0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
aad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab00: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
ab10: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
ab20: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
ab30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ab40: 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79   RegistryKey key
ab50: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ab60: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a     bool whatIf..
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ab90: 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e     : this(key, n
aba0: 75 6c 6c 2c 20 77 68 61 74 49 66 29 0d 0a 20 20  ull, whatIf)..  
abb0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
abd0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
abe0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
abf0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ac00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ac40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
ac50: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
ac60: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
ac70: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
ac80: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
ac90: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
aca0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
acb0: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f        bool readO
acc0: 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nly..           
acd0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
ace0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
acf0: 65 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66  ey, null, whatIf
ad00: 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20  , readOnly)..   
ad10: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ad20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
ad30: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
ad40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ad50: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
ad60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
ada0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
adb0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
adc0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
add0: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
ade0: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
adf0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
ae00: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
ae10: 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e       bool readOn
ae20: 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly,..           
ae30: 20 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a       bool safe..
ae40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ae60: 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e     : this(key, n
ae70: 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ull, whatIf, rea
ae80: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20  dOnly, safe)..  
ae90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
aeb0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
aec0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
aed0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
aee0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
aef0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
af00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af30: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
af40: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
af50: 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  lic Methods..   
af60: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
af70: 76 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20  void Close()..  
af80: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
af90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
afa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
afb0: 20 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73   // NOTE: No dis
afc0: 70 6f 73 65 64 20 63 68 65 63 6b 20 68 65 72 65  posed check here
afd0: 20 62 65 63 61 75 73 65 20 63 61 6c 6c 69 6e 67   because calling
afe0: 20 74 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20   this method..  
aff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
b000: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65         should be
b010: 20 6a 75 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69   just like calli
b020: 6e 67 20 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20  ng Dispose...   
b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
b040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b050: 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d   Dispose(true);.
b060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
b080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0c0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
b0d0: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73   public void Dis
b0e0: 61 62 6c 65 43 6c 6f 73 65 28 29 0d 0a 20 20 20  ableClose()..   
b0f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b100: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
b110: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
b120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b130: 6e 6f 43 6c 6f 73 65 20 3d 20 74 72 75 65 3b 0d  noClose = true;.
b140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
b160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
b1b0: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 52 65 73   public void Res
b1c0: 65 74 53 75 62 4b 65 79 4e 61 6d 65 28 0d 0a 20  etSubKeyName(.. 
b1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
b1e0: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
b1f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b200: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
b210: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b220: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
b230: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
b240: 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 75 62          this.sub
b250: 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79  KeyName = subKey
b260: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
b270: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
b280: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b2d0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
b2e0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c  ckRegistryKey Cl
b2f0: 6f 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  one(..          
b300: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
b310: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
b320: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
b330: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
b340: 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20      bool safe.. 
b350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
b360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
b370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b380: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
b390: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b3a0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
b3b0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
b3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b3d0: 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65        key, subKe
b3e0: 79 4e 61 6d 65 2c 20 74 68 69 73 2e 77 68 61 74  yName, this.what
b3f0: 49 66 20 7c 7c 20 77 68 61 74 49 66 2c 20 74 68  If || whatIf, th
b400: 69 73 2e 72 65 61 64 4f 6e 6c 79 20 7c 7c 0d 0a  is.readOnly ||..
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b420: 20 20 20 20 72 65 61 64 4f 6e 6c 79 2c 20 74 68      readOnly, th
b430: 69 73 2e 73 61 66 65 20 7c 7c 20 73 61 66 65 29  is.safe || safe)
b440: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
b450: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
b4b0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
b4c0: 67 69 73 74 72 79 4b 65 79 20 43 72 65 61 74 65  gistryKey Create
b4d0: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
b4e0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
b4f0: 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20  subKeyName..    
b500: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
b510: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
b530: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b550: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b  CheckReadOnly();
b560: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b570: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
b580: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
b590: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
b5a0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
b5b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77 68            if (wh
b5c0: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
b5d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
b5f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b600: 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41        // HACK: A
b610: 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74  ttempt to open t
b620: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 75 62  he specified sub
b630: 2d 6b 65 79 2e 20 20 49 66 20 74 68 69 73 0d 0a  -key.  If this..
b640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b650: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 61 69      //       fai
b660: 6c 73 2c 20 77 65 27 6c 6c 20 73 69 6d 70 6c 79  ls, we'll simply
b670: 20 72 65 74 75 72 6e 20 74 68 65 20 77 72 61 70   return the wrap
b680: 70 65 64 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20  ped root key..  
b690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6a0: 20 20 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c    //       itsel
b6b0: 66 20 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65  f since no write
b6c0: 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e  s are allowed in
b6d0: 20 22 77 68 61 74 2d 69 66 22 0d 0a 20 20 20 20   "what-if"..    
b6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6f0: 2f 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 61 6e  //       mode an
b700: 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20  yhow...         
b710: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
b720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b730: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73     RegistryKey s
b740: 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e  ubKey = key.Open
b750: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
b760: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
b770: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
b780: 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ubKey != null)..
b790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b7c0: 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65  eturn new MockRe
b7d0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7f0: 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
b800: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
b810: 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20  , safe);..      
b820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
b830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b840: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
b850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
b860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b870: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
b880: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
b890: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
b8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8b0: 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61     key, subKeyNa
b8c0: 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  me, whatIf, read
b8d0: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20  Only, safe);..  
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8f0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
b900: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b910: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
b920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
b930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b940: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
b950: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
b960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b970: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43 72            key.Cr
b980: 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  eateSubKey(subKe
b990: 79 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 20  yName), whatIf, 
b9a0: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b  readOnly, safe);
b9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b9c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
b9d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
b9e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
b9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba20: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
ba30: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
ba40: 20 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a   DeleteSubKey(..
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba60: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
ba70: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
ba80: 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
ba90: 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20  Missing..       
baa0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
bab0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
bac0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
bad0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
bae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
baf0: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
bb00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bb10: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
bb20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
bb30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
bb40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bb50: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
bb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb70: 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 53 75      key.DeleteSu
bb80: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c  bKey(subKeyName,
bb90: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29   throwOnMissing)
bba0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
bbb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc00: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
bc10: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
bc20: 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
bc30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bc40: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
bc50: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
bc60: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
bc70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bc80: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
bc90: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
bca0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
bcb0: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
bcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
bcd0: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
bce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bcf0: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
bd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
bd10: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd30: 6b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  key.DeleteSubKey
bd40: 54 72 65 65 28 73 75 62 4b 65 79 4e 61 6d 65 29  Tree(subKeyName)
bd50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
bd60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bd70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bdb0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
bdc0: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
bdd0: 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20  eleteValue(..   
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
bdf0: 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
be00: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
be10: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a  throwOnMissing..
be20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be30: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
be40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
be50: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
be60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
be70: 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c      CheckReadOnl
be80: 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
be90: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
bea0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
beb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
bec0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
bed0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
bee0: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
bef0: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44             key.D
bf00: 65 6c 65 74 65 56 61 6c 75 65 28 6e 61 6d 65 2c  eleteValue(name,
bf10: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29   throwOnMissing)
bf20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
bf30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf80: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
bf90: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
bfa0: 5b 5d 20 47 65 74 53 75 62 4b 65 79 4e 61 6d 65  [] GetSubKeyName
bfb0: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s()..           
bfc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
bfd0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
bfe0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
bff0: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
c000: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
c010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c020: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
c030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c040: 74 75 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b  turn key.GetSubK
c050: 65 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20  eyNames();..    
c060: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
c070: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
c080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
c0c0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
c0d0: 69 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c  ic object GetVal
c0e0: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
c0f0: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
c100: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c110: 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c     object defaul
c120: 74 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20  tValue..        
c130: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
c140: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c150: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
c160: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
c170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c180: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
c190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1a0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
c1b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c1c0: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
c1d0: 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65  etValue(name, de
c1e0: 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20  faultValue);..  
c1f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
c200: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
c210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
c250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
c260: 62 6c 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65  blic string[] Ge
c270: 74 56 61 6c 75 65 4e 61 6d 65 73 28 29 0d 0a 20  tValueNames().. 
c280: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
c2a0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
c2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c2c0: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
c2d0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
c2e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
c2f0: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
c300: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b          return k
c310: 65 79 2e 47 65 74 56 61 6c 75 65 4e 61 6d 65 73  ey.GetValueNames
c320: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
c330: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
c340: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
c350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c380: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
c390: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
c3a0: 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e  RegistryKey Open
c3b0: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
c3c0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
c3d0: 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20  subKeyName..    
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
c3f0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
c410: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
c420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c430: 20 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75 62    return OpenSub
c440: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20  Key(subKeyName, 
c450: 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  false);..       
c460: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
c470: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
c480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
c4c0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
c4d0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
c4e0: 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
c4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
c500: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
c510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c520: 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d 0a   bool writable..
c530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c540: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
c550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c560: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
c570: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
c580: 20 20 20 20 20 20 69 66 20 28 77 72 69 74 61 62        if (writab
c590: 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le)..           
c5a0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
c5b0: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
c5d0: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
c600: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c610: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73     RegistryKey s
c620: 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e  ubKey = key.Open
c630: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
c650: 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 20  KeyName, whatIf 
c660: 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61 62  ? false : writab
c670: 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  le);....        
c680: 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
c690: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6b0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
c6c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c6d0: 20 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b   return new Mock
c6e0: 52 65 67 69 73 74 72 79 4b 65 79 28 73 75 62 4b  RegistryKey(subK
c6f0: 65 79 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ey, whatIf, read
c700: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20  Only, safe);..  
c710: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
c720: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
c730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
c770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
c780: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c  blic void SetVal
c790: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
c7a0: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
c7b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c7c0: 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d     object value.
c7d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c7e0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
c7f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
c800: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
c810: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
c820: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
c830: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
c840: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
c850: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c870: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
c880: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
c890: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
c8b0: 53 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76  SetValue(name, v
c8c0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
c8d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
c8e0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
c8f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
c900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c940: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c950: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50  #region Public P
c960: 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20  roperties..     
c970: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
c980: 72 69 6e 67 20 4e 61 6d 65 0d 0a 20 20 20 20 20  ring Name..     
c990: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c9a0: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
c9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
c9c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c9d0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
c9e0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
ca00: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
ca30: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
ca40: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
ca50: 72 6e 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  rn !String.IsNul
ca60: 6c 4f 72 45 6d 70 74 79 28 73 75 62 4b 65 79 4e  lOrEmpty(subKeyN
ca70: 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ame) ?..        
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca90: 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4a  RegistryHelper.J
caa0: 6f 69 6e 4b 65 79 4e 61 6d 65 73 28 6b 65 79 2e  oinKeyNames(key.
cab0: 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e 61 6d 65  Name, subKeyName
cac0: 29 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) :..           
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
cae0: 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  .Name;..        
caf0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
cb00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
cb10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
cb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
cb60: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
cb70: 74 65 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b  te RegistryKey k
cb80: 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey;..           
cb90: 20 70 75 62 6c 69 63 20 52 65 67 69 73 74 72 79   public Registry
cba0: 4b 65 79 20 4b 65 79 0d 0a 20 20 20 20 20 20 20  Key Key..       
cbb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cbc0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
cbd0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 43  eckDisposed(); C
cbe0: 68 65 63 6b 53 61 66 65 28 29 3b 20 72 65 74 75  heckSafe(); retu
cbf0: 72 6e 20 6b 65 79 3b 20 7d 0d 0a 20 20 20 20 20  rn key; }..     
cc00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
cc10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
cc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
cc60: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
cc70: 74 65 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79  te string subKey
cc80: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
cc90: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
cca0: 20 53 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20   SubKeyName..   
ccb0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ccc0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
ccd0: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
cce0: 29 3b 20 72 65 74 75 72 6e 20 73 75 62 4b 65 79  ); return subKey
ccf0: 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
cd00: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
cd10: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
cd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
cd60: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
cd70: 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20   bool whatIf;.. 
cd80: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
cd90: 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20  c bool WhatIf.. 
cda0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
cdc0: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
cdd0: 64 28 29 3b 20 72 65 74 75 72 6e 20 77 68 61 74  d(); return what
cde0: 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  If; }..         
cdf0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
ce00: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
ce10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce40: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
ce50: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
ce60: 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20  ool readOnly;.. 
ce70: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
ce80: 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d  c bool ReadOnly.
ce90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ceb0: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
cec0: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 72 65  sed(); return re
ced0: 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20 20  adOnly; }..     
cee0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
cef0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
cf00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
cf40: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
cf50: 63 20 62 6f 6f 6c 20 73 61 66 65 3b 0d 0a 20 20  c bool safe;..  
cf60: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
cf70: 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20 20 20 20   bool Safe..    
cf80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
cf90: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
cfa0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
cfb0: 3b 20 72 65 74 75 72 6e 20 73 61 66 65 3b 20 7d  ; return safe; }
cfc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
cfd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
cfe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d020: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
d030: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 6e 6f    public bool no
d040: 43 6c 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  Close;..        
d050: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
d060: 4e 6f 43 6c 6f 73 65 0d 0a 20 20 20 20 20 20 20  NoClose..       
d070: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d080: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
d090: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
d0a0: 65 74 75 72 6e 20 6e 6f 43 6c 6f 73 65 3b 20 7d  eturn noClose; }
d0b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
d0c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
d0d0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
d0e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
d0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d130: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
d140: 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64  n Private Method
d150: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
d160: 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
d170: 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a 20 20 20  kReadOnly()..   
d180: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d190: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1b0: 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 72 65 61  // NOTE: In "rea
d1c0: 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c 20 77 65  d-only" mode, we
d1d0: 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 77 72   disallow all wr
d1e0: 69 74 65 20 61 63 63 65 73 73 2e 0d 0a 20 20 20  ite access...   
d1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
d200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d210: 20 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d   if (!readOnly).
d220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d230: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
d240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d250: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
d260: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
d270: 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ion();..        
d280: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
d290: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
d2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
d2e0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
d2f0: 76 6f 69 64 20 43 68 65 63 6b 53 61 66 65 28 29  void CheckSafe()
d300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
d310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d320: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
d330: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e       // NOTE: In
d340: 20 22 73 61 66 65 22 20 6d 6f 64 65 2c 20 77 65   "safe" mode, we
d350: 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 64 69   disallow all di
d360: 72 65 63 74 20 61 63 63 65 73 73 20 74 6f 20 74  rect access to t
d370: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
d380: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e      //       con
d390: 74 61 69 6e 65 64 20 72 65 67 69 73 74 72 79 20  tained registry 
d3a0: 6b 65 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  key...          
d3b0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
d3c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 73            if (!s
d3d0: 61 66 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  afe)..          
d3e0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
d3f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d400: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
d410: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
d420: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20  xception();..   
d430: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d440: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
d450: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
d460: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
d470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
d4b0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 79 73       #region Sys
d4c0: 74 65 6d 2e 4f 62 6a 65 63 74 20 4f 76 65 72 72  tem.Object Overr
d4d0: 69 64 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ides..          
d4e0: 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
d4f0: 65 20 73 74 72 69 6e 67 20 54 6f 53 74 72 69 6e  e string ToStrin
d500: 67 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g()..           
d510: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d520: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
d530: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
d540: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
d550: 68 69 73 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  his.Name;..     
d560: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
d570: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
d580: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5d0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
d5e0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
d5f0: 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73  c Static Methods
d600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
d610: 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c  blic static bool
d620: 20 4e 61 6d 65 45 71 75 61 6c 73 28 0d 0a 20 20   NameEquals(..  
d630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
d640: 72 69 6e 67 20 6e 61 6d 65 31 2c 0d 0a 20 20 20  ring name1,..   
d650: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
d660: 69 6e 67 20 6e 61 6d 65 32 0d 0a 20 20 20 20 20  ing name2..     
d670: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
d680: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d690: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
d6a0: 75 72 6e 20 53 74 72 69 6e 67 2e 45 71 75 61 6c  urn String.Equal
d6b0: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
d6c0: 20 20 20 20 20 20 20 20 6e 61 6d 65 31 2c 20 6e          name1, n
d6d0: 61 6d 65 32 2c 20 53 74 72 69 6e 67 43 6f 6d 70  ame2, StringComp
d6e0: 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
d6f0: 6e 6f 72 65 43 61 73 65 29 3b 0d 0a 20 20 20 20  noreCase);..    
d700: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d710: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
d720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d760: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
d770: 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 56  ic static bool V
d780: 61 6c 75 65 45 71 75 61 6c 73 28 0d 0a 20 20 20  alueEquals(..   
d790: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
d7a0: 65 63 74 20 76 61 6c 75 65 31 2c 0d 0a 20 20 20  ect value1,..   
d7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
d7c0: 65 63 74 20 76 61 6c 75 65 32 0d 0a 20 20 20 20  ect value2..    
d7d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
d7e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d800: 20 28 28 76 61 6c 75 65 31 20 3d 3d 20 6e 75 6c   ((value1 == nul
d810: 6c 29 20 7c 7c 20 28 76 61 6c 75 65 32 20 3d 3d  l) || (value2 ==
d820: 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
d830: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
d840: 75 72 6e 20 28 28 76 61 6c 75 65 31 20 3d 3d 20  urn ((value1 == 
d850: 6e 75 6c 6c 29 20 26 26 20 28 76 61 6c 75 65 32  null) && (value2
d860: 20 3d 3d 20 6e 75 6c 6c 29 29 3b 0d 0a 0d 0a 20   == null));.... 
d870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
d880: 66 20 28 4f 62 6a 65 63 74 2e 52 65 66 65 72 65  f (Object.Refere
d890: 6e 63 65 45 71 75 61 6c 73 28 76 61 6c 75 65 31  nceEquals(value1
d8a0: 2c 20 76 61 6c 75 65 32 29 29 0d 0a 20 20 20 20  , value2))..    
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8c0: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a  return true;....
d8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8e0: 54 79 70 65 20 74 79 70 65 31 20 3d 20 76 61 6c  Type type1 = val
d8f0: 75 65 31 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a  ue1.GetType();..
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d910: 54 79 70 65 20 74 79 70 65 32 20 3d 20 76 61 6c  Type type2 = val
d920: 75 65 32 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a  ue2.GetType();..
d930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d940: 20 20 69 66 20 28 21 4f 62 6a 65 63 74 2e 52 65    if (!Object.Re
d950: 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 74 79  ferenceEquals(ty
d960: 70 65 31 2c 20 74 79 70 65 32 29 29 0d 0a 20 20  pe1, type2))..  
d970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d980: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
d990: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d9a0: 20 20 20 69 66 20 28 74 79 70 65 31 20 3d 3d 20     if (type1 == 
d9b0: 74 79 70 65 6f 66 28 69 6e 74 29 29 20 2f 2f 20  typeof(int)) // 
d9c0: 44 57 6f 72 64 0d 0a 20 20 20 20 20 20 20 20 20  DWord..         
d9d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
d9f0: 74 75 72 6e 20 28 28 69 6e 74 29 76 61 6c 75 65  turn ((int)value
da00: 31 20 3d 3d 20 28 69 6e 74 29 76 61 6c 75 65 32  1 == (int)value2
da10: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
da20: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
da30: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
da40: 74 79 70 65 31 20 3d 3d 20 74 79 70 65 6f 66 28  type1 == typeof(
da50: 6c 6f 6e 67 29 29 20 2f 2f 20 51 57 6f 72 64 0d  long)) // QWord.
da60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
da80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
da90: 28 6c 6f 6e 67 29 76 61 6c 75 65 31 20 3d 3d 20  (long)value1 == 
daa0: 28 6c 6f 6e 67 29 76 61 6c 75 65 32 29 3b 0d 0a  (long)value2);..
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dac0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
dad0: 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65     else if (type
dae0: 31 20 3d 3d 20 74 79 70 65 6f 66 28 73 74 72 69  1 == typeof(stri
daf0: 6e 67 29 29 20 2f 2f 20 53 74 72 69 6e 67 20 2f  ng)) // String /
db00: 20 45 78 70 61 6e 64 53 74 72 69 6e 67 0d 0a 20   ExpandString.. 
db10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
db20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
db30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
db40: 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20  ing.Equals(..   
db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db60: 20 20 20 20 20 28 73 74 72 69 6e 67 29 76 61 6c       (string)val
db70: 75 65 31 2c 20 28 73 74 72 69 6e 67 29 76 61 6c  ue1, (string)val
db80: 75 65 32 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ue2,..          
db90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
dba0: 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
dbb0: 72 64 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 20 20  rdinal);..      
dbc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
dbe0: 65 20 69 66 20 28 74 79 70 65 31 20 3d 3d 20 74  e if (type1 == t
dbf0: 79 70 65 6f 66 28 73 74 72 69 6e 67 5b 5d 29 29  ypeof(string[]))
dc00: 20 2f 2f 20 4d 75 6c 74 69 53 74 72 69 6e 67 0d   // MultiString.
dc10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dc20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
dc30: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
dc40: 20 61 72 72 61 79 31 20 3d 20 28 73 74 72 69 6e   array1 = (strin
dc50: 67 5b 5d 29 76 61 6c 75 65 31 3b 0d 0a 20 20 20  g[])value1;..   
dc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc70: 20 73 74 72 69 6e 67 5b 5d 20 61 72 72 61 79 32   string[] array2
dc80: 20 3d 20 28 73 74 72 69 6e 67 5b 5d 29 76 61 6c   = (string[])val
dc90: 75 65 32 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue2;....        
dca0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
dcb0: 6c 65 6e 67 74 68 31 20 3d 20 61 72 72 61 79 31  length1 = array1
dcc0: 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  .Length;....    
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 69 66 20 28 6c 65 6e 67 74 68 31 20 21 3d 20 61  if (length1 != a
dcf0: 72 72 61 79 32 2e 4c 65 6e 67 74 68 29 0d 0a 20  rray2.Length).. 
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd10: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
dd20: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
dd40: 28 69 6e 74 20 69 6e 64 65 78 31 20 3d 20 30 3b  (int index1 = 0;
dd50: 20 69 6e 64 65 78 31 20 3c 20 6c 65 6e 67 74 68   index1 < length
dd60: 31 3b 20 69 6e 64 65 78 31 2b 2b 29 0d 0a 20 20  1; index1++)..  
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
dda0: 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
ddb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddd0: 20 20 61 72 72 61 79 31 5b 69 6e 64 65 78 31 5d    array1[index1]
dde0: 2c 20 61 72 72 61 79 32 5b 69 6e 64 65 78 31 5d  , array2[index1]
ddf0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de10: 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
de20: 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20  son.Ordinal)).. 
de30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
de70: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
de80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
de90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dea0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
dec0: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
ded0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
def0: 73 65 20 69 66 20 28 74 79 70 65 31 20 3d 3d 20  se if (type1 == 
df00: 74 79 70 65 6f 66 28 62 79 74 65 5b 5d 29 29 20  typeof(byte[])) 
df10: 2f 2f 20 42 69 6e 61 72 79 0d 0a 20 20 20 20 20  // Binary..     
df20: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df40: 20 20 62 79 74 65 5b 5d 20 61 72 72 61 79 31 20    byte[] array1 
df50: 3d 20 28 62 79 74 65 5b 5d 29 76 61 6c 75 65 31  = (byte[])value1
df60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
df70: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 61 72         byte[] ar
df80: 72 61 79 32 20 3d 20 28 62 79 74 65 5b 5d 29 76  ray2 = (byte[])v
df90: 61 6c 75 65 32 3b 0d 0a 0d 0a 20 20 20 20 20 20  alue2;....      
dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
dfb0: 74 20 6c 65 6e 67 74 68 31 20 3d 20 61 72 72 61  t length1 = arra
dfc0: 79 31 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  y1.Length;....  
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfe0: 20 20 69 66 20 28 6c 65 6e 67 74 68 31 20 21 3d    if (length1 !=
dff0: 20 61 72 72 61 79 32 2e 4c 65 6e 67 74 68 29 0d   array2.Length).
e000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e010: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
e020: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
e030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
e040: 72 20 28 69 6e 74 20 69 6e 64 65 78 31 20 3d 20  r (int index1 = 
e050: 30 3b 20 69 6e 64 65 78 31 20 3c 20 6c 65 6e 67  0; index1 < leng
e060: 74 68 31 3b 20 69 6e 64 65 78 31 2b 2b 29 0d 0a  th1; index1++)..
e070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e080: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 72 61          if (arra
e090: 79 31 5b 69 6e 64 65 78 31 5d 20 21 3d 20 61 72  y1[index1] != ar
e0a0: 72 61 79 32 5b 69 6e 64 65 78 31 5d 29 0d 0a 20  ray2[index1]).. 
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
e0d0: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0f0: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
e100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
e110: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e120: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
e130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e140: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
e150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e190: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
e1a0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
e1b0: 69 6e 74 20 56 61 6c 75 65 48 61 73 68 43 6f 64  int ValueHashCod
e1c0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
e1d0: 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
e1e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e1f0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
e200: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e210: 20 20 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d      int result =
e220: 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   0;....         
e230: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
e240: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
e250: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e270: 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 76 61    Type type = va
e280: 6c 75 65 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a  lue.GetType();..
e290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e2a0: 20 20 20 20 20 20 69 66 20 28 28 74 79 70 65 20        if ((type 
e2b0: 3d 3d 20 74 79 70 65 6f 66 28 69 6e 74 29 29 20  == typeof(int)) 
e2c0: 7c 7c 20 2f 2f 20 44 57 6f 72 64 0d 0a 20 20 20  || // DWord..   
e2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2e0: 20 20 20 20 20 28 74 79 70 65 20 3d 3d 20 74 79       (type == ty
e2f0: 70 65 6f 66 28 6c 6f 6e 67 29 29 20 7c 7c 20 2f  peof(long)) || /
e300: 2f 20 51 57 6f 72 64 0d 0a 20 20 20 20 20 20 20  / QWord..       
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e320: 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66   (type == typeof
e330: 28 73 74 72 69 6e 67 29 29 29 20 2f 2f 20 53 74  (string))) // St
e340: 72 69 6e 67 20 2f 20 45 78 70 61 6e 64 53 74 72  ring / ExpandStr
e350: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
e360: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e380: 20 20 20 20 72 65 73 75 6c 74 20 3d 20 76 61 6c      result = val
e390: 75 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28 29  ue.GetHashCode()
e3a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e3b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
e3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
e3d0: 73 65 20 69 66 20 28 28 74 79 70 65 20 3d 3d 20  se if ((type == 
e3e0: 74 79 70 65 6f 66 28 73 74 72 69 6e 67 5b 5d 29  typeof(string[])
e3f0: 29 20 7c 7c 20 2f 2f 20 4d 75 6c 74 69 53 74 72  ) || // MultiStr
e400: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
e410: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 79               (ty
e420: 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 62 79 74  pe == typeof(byt
e430: 65 5b 5d 29 29 29 20 2f 2f 20 42 69 6e 61 72 79  e[]))) // Binary
e440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e450: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e470: 20 41 72 72 61 79 20 61 72 72 61 79 20 3d 20 28   Array array = (
e480: 41 72 72 61 79 29 76 61 6c 75 65 3b 0d 0a 20 20  Array)value;..  
e490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4a0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68        int length
e4b0: 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74 68 3b   = array.Length;
e4c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
e4e0: 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20  (int index = 0; 
e4f0: 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20  index < length; 
e500: 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
e510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e520: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e540: 20 6f 62 6a 65 63 74 20 65 6c 65 6d 65 6e 74 20   object element 
e550: 3d 20 61 72 72 61 79 2e 47 65 74 56 61 6c 75 65  = array.GetValue
e560: 28 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20  (index);....    
e570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e580: 20 20 20 20 20 20 20 20 69 66 20 28 65 6c 65 6d          if (elem
e590: 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent == null)..  
e5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
e5c0: 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
e5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5e0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 5e 3d         result ^=
e5f0: 20 65 6c 65 6d 65 6e 74 2e 47 65 74 48 61 73 68   element.GetHash
e600: 43 6f 64 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  Code();..       
e610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e620: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
e630: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e640: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e660: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
e670: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
e680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
e690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e6e0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
e6f0: 72 69 6e 67 20 56 61 6c 75 65 54 6f 53 74 72 69  ring ValueToStri
e700: 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng(..           
e710: 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
e720: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
e730: 20 20 20 20 73 74 72 69 6e 67 20 64 65 6c 69 6d      string delim
e740: 69 74 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  iter,..         
e750: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 75         string nu
e760: 6c 6c 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  llValue..       
e770: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
e780: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e790: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
e7a0: 67 20 72 65 73 75 6c 74 20 3d 20 6e 75 6c 6c 3b  g result = null;
e7b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e7c0: 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 21 3d      if (value !=
e7d0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
e7e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
e800: 79 70 65 20 74 79 70 65 20 3d 20 76 61 6c 75 65  ype type = value
e810: 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a 20  .GetType();.... 
e820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e830: 20 20 20 69 66 20 28 28 74 79 70 65 20 3d 3d 20     if ((type == 
e840: 74 79 70 65 6f 66 28 69 6e 74 29 29 20 7c 7c 20  typeof(int)) || 
e850: 2f 2f 20 44 57 6f 72 64 0d 0a 20 20 20 20 20 20  // DWord..      
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e870: 20 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f    (type == typeo
e880: 66 28 6c 6f 6e 67 29 29 20 7c 7c 20 2f 2f 20 51  f(long)) || // Q
e890: 57 6f 72 64 0d 0a 20 20 20 20 20 20 20 20 20 20  Word..          
e8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74                (t
e8b0: 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 73 74  ype == typeof(st
e8c0: 72 69 6e 67 29 29 29 20 2f 2f 20 53 74 72 69 6e  ring))) // Strin
e8d0: 67 20 2f 20 45 78 70 61 6e 64 53 74 72 69 6e 67  g / ExpandString
e8e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e8f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e910: 20 72 65 73 75 6c 74 20 3d 20 76 61 6c 75 65 2e   result = value.
e920: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
e930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e940: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
e950: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
e960: 28 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66  ((type == typeof
e970: 28 73 74 72 69 6e 67 5b 5d 29 29 20 7c 7c 20 2f  (string[])) || /
e980: 2f 20 4d 75 6c 74 69 53 74 72 69 6e 67 0d 0a 20  / MultiString.. 
e990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9a0: 20 20 20 20 20 20 20 28 74 79 70 65 20 3d 3d 20         (type == 
e9b0: 74 79 70 65 6f 66 28 62 79 74 65 5b 5d 29 29 29  typeof(byte[])))
e9c0: 20 2f 2f 20 42 69 6e 61 72 79 0d 0a 20 20 20 20   // Binary..    
e9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e9f0: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
ea00: 67 42 75 69 6c 64 65 72 20 62 75 69 6c 64 65 72  gBuilder builder
ea10: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
ea20: 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20  lder();..       
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea40: 20 41 72 72 61 79 20 61 72 72 61 79 20 3d 20 28   Array array = (
ea50: 41 72 72 61 79 29 76 61 6c 75 65 3b 0d 0a 20 20  Array)value;..  
ea60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea70: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68        int length
ea80: 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74 68 3b   = array.Length;
ea90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
eab0: 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20  (int index = 0; 
eac0: 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20  index < length; 
ead0: 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eaf0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
eb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb10: 20 69 66 20 28 28 69 6e 64 65 78 20 3e 20 30 29   if ((index > 0)
eb20: 20 26 26 20 28 64 65 6c 69 6d 69 74 65 72 20 21   && (delimiter !
eb30: 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
eb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb50: 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65            builde
eb60: 72 2e 41 70 70 65 6e 64 28 64 65 6c 69 6d 69 74  r.Append(delimit
eb70: 65 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  er);....        
eb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb90: 20 20 20 20 6f 62 6a 65 63 74 20 65 6c 65 6d 65      object eleme
eba0: 6e 74 20 3d 20 61 72 72 61 79 2e 47 65 74 56 61  nt = array.GetVa
ebb0: 6c 75 65 28 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  lue(index);.... 
ebc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebd0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
ebe0: 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d  lement == null).
ebf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ec00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
ec10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec30: 69 66 20 28 6e 75 6c 6c 56 61 6c 75 65 20 21 3d  if (nullValue !=
ec40: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec60: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c              buil
ec70: 64 65 72 2e 41 70 70 65 6e 64 28 6e 75 6c 6c 56  der.Append(nullV
ec80: 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  alue);....      
ec90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eca0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
ecb0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
ecc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecd0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecf0: 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
ed00: 28 65 6c 65 6d 65 6e 74 2e 54 6f 53 74 72 69 6e  (element.ToStrin
ed10: 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
ed30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ed40: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
ed50: 6c 74 20 3d 20 62 75 69 6c 64 65 72 2e 54 6f 53  lt = builder.ToS
ed60: 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20  tring();..      
ed70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
ed80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ed90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
eda0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
edb0: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
edc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
edd0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
ede0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee10: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
ee20: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
ee30: 74 69 63 20 62 6f 6f 6c 20 45 71 75 61 6c 73 28  tic bool Equals(
ee40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ee50: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
ee60: 79 20 6b 65 79 31 2c 0d 0a 20 20 20 20 20 20 20  y key1,..       
ee70: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
ee80: 69 73 74 72 79 4b 65 79 20 6b 65 79 32 0d 0a 20  istryKey key2.. 
ee90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
eea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
eeb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eec0: 20 69 66 20 28 28 6b 65 79 31 20 3d 3d 20 6e 75   if ((key1 == nu
eed0: 6c 6c 29 20 7c 7c 20 28 6b 65 79 32 20 3d 3d 20  ll) || (key2 == 
eee0: 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
eef0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
ef00: 72 6e 20 28 28 6b 65 79 31 20 3d 3d 20 6e 75 6c  rn ((key1 == nul
ef10: 6c 29 20 26 26 20 28 6b 65 79 32 20 3d 3d 20 6e  l) && (key2 == n
ef20: 75 6c 6c 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ull));....      
ef30: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4f 62            if (Ob
ef40: 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71  ject.ReferenceEq
ef50: 75 61 6c 73 28 6b 65 79 31 2c 20 6b 65 79 32 29  uals(key1, key2)
ef60: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ef70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
ef80: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
ef90: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4e 61         return Na
efa0: 6d 65 45 71 75 61 6c 73 28 6b 65 79 31 2e 4e 61  meEquals(key1.Na
efb0: 6d 65 2c 20 6b 65 79 32 2e 4e 61 6d 65 29 3b 0d  me, key2.Name);.
efc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
efd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
efe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f020: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f030: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
f040: 6e 74 20 47 65 74 48 61 73 68 43 6f 64 65 28 0d  nt GetHashCode(.
f050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f060: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
f070: 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20   key..          
f080: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
f090: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f0a0: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
f0b0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
f0c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0e0: 20 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 6b   string name = k
f0f0: 65 79 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ey.Name;....    
f100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f110: 69 66 20 28 6e 61 6d 65 20 21 3d 20 6e 75 6c 6c  if (name != null
f120: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
f130: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
f140: 6e 20 6e 61 6d 65 2e 47 65 74 48 61 73 68 43 6f  n name.GetHashCo
f150: 64 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  de();..         
f160: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
f170: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
f180: 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  rn 0;..         
f190: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
f1a0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
f1b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
f1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
f200: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
f210: 72 65 67 69 6f 6e 20 49 6d 70 6c 69 63 69 74 20  region Implicit 
f220: 43 6f 6e 76 65 72 73 69 6f 6e 20 4f 70 65 72 61  Conversion Opera
f230: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
f240: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
f250: 20 20 2f 2f 20 42 55 47 42 55 47 3a 20 52 65 6d    // BUGBUG: Rem
f260: 6f 76 65 20 6d 65 3f 20 20 54 68 69 73 20 73 68  ove me?  This sh
f270: 6f 75 6c 64 20 62 65 20 73 61 66 65 20 62 65 63  ould be safe bec
f280: 61 75 73 65 20 69 6e 20 22 77 68 61 74 2d 69 66  ause in "what-if
f290: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  "..            /
f2a0: 2f 20 20 20 20 20 20 20 20 20 6d 6f 64 65 20 61  /         mode a
f2b0: 6c 6c 20 6b 65 79 73 20 61 72 65 20 6f 70 65 6e  ll keys are open
f2c0: 65 64 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20  ed read-only... 
f2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
f2e0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
f2f0: 63 20 73 74 61 74 69 63 20 69 6d 70 6c 69 63 69  c static implici
f300: 74 20 6f 70 65 72 61 74 6f 72 20 52 65 67 69 73  t operator Regis
f310: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
f320: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
f330: 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20  istryKey key..  
f340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
f350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
f360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f370: 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e  return (key != n
f380: 75 6c 6c 29 20 3f 20 6b 65 79 2e 4b 65 79 20 3a  ull) ? key.Key :
f390: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
f3a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
f3b0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
f3c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
f3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f410: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f420: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
f430: 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
f440: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  mbers..         
f450: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
f460: 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20  disposed;..     
f470: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
f480: 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65  oid CheckDispose
f490: 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  d() /* throw */.
f4a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
f4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4c0: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
f4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4e0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f500: 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44  hrow new ObjectD
f510: 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e  isposedException
f520: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
f530: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 4d 6f         typeof(Mo
f540: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 29 2e 4e  ckRegistryKey).N
f550: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
f560: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f570: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
f580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5b0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
f5c0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 2f         private /
f5d0: 2a 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74  * protected virt
f5e0: 75 61 6c 20 2a 2f 20 76 6f 69 64 20 44 69 73 70  ual */ void Disp
f5f0: 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ose(..          
f600: 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 73 70 6f        bool dispo
f610: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
f620: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
f630: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f640: 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
f650: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
f660: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
f680: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
f690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
f6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6e0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
f700: 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72  ispose managed r
f710: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
f720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f730: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
f740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
f760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f770: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
f780: 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
f790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7c0: 20 20 20 69 66 20 28 21 6e 6f 43 6c 6f 73 65 29     if (!noClose)
f7d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7f0: 20 20 6b 65 79 2e 43 6c 6f 73 65 28 29 3b 0d 0a    key.Close();..
f800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
f820: 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  y = null;..     
f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f840: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
f850: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
f860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f870: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
f880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
f8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f8b0: 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61  / release unmana
f8c0: 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65  ged resources he
f8d0: 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20  re.....         
f8e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
f8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f910: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f920: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
f930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f940: 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6f   // NOTE: This o
f950: 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64 69 73  bject is now dis
f960: 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  posed...        
f970: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
f980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f990: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
f9a0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
f9b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
f9c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
f9d0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
f9e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa30: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
fa40: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
fa50: 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20  able Members..  
fa60: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
fa70: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d   void Dispose().
fa80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
fa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
faa0: 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a  Dispose(true);..
fab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fac0: 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c  GC.SuppressFinal
fad0: 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20  ize(this);..    
fae0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
faf0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
fb00: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
fb10: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
fb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb50: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
fb60: 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74      #region Dest
fb70: 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20  ructor..        
fb80: 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73 74 72      ~MockRegistr
fb90: 79 4b 65 79 28 29 0d 0a 20 20 20 20 20 20 20 20  yKey()..        
fba0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
fbb0: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66         Dispose(f
fbc0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
fbd0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
fbe0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
fbf0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
fc00: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
fc10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
fc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
fc60: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
fc70: 6f 6e 20 52 65 67 69 73 74 72 79 52 6f 6f 74 4b  on RegistryRootK
fc80: 65 79 4e 61 6d 65 73 20 43 6c 61 73 73 0d 0a 20  eyNames Class.. 
fc90: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
fca0: 74 61 74 69 63 20 63 6c 61 73 73 20 52 65 67 69  tatic class Regi
fcb0: 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73  stryRootKeyNames
fcc0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
fcd0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
fce0: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 48 4b 45  const string HKE
fcf0: 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f 54 20 3d  Y_CLASSES_ROOT =
fd00: 20 22 48 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52   "HKEY_CLASSES_R
fd10: 4f 4f 54 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  OOT";..         
fd20: 20 20 20 70 75 62 6c 69 63 20 63 6f 6e 73 74 20     public const 
fd30: 73 74 72 69 6e 67 20 48 4b 43 52 20 3d 20 22 48  string HKCR = "H
fd40: 4b 43 52 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  KCR";....       
fd50: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
fd60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd90: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
fda0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 63          public c
fdb0: 6f 6e 73 74 20 73 74 72 69 6e 67 20 48 4b 45 59  onst string HKEY
fdc0: 5f 43 55 52 52 45 4e 54 5f 43 4f 4e 46 49 47 20  _CURRENT_CONFIG 
fdd0: 3d 20 22 48 4b 45 59 5f 43 55 52 52 45 4e 54 5f  = "HKEY_CURRENT_
fde0: 43 4f 4e 46 49 47 22 3b 0d 0a 20 20 20 20 20 20  CONFIG";..      
fdf0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 63 6f 6e        public con
fe00: 73 74 20 73 74 72 69 6e 67 20 48 4b 43 43 20 3d  st string HKCC =
fe10: 20 22 48 4b 43 43 22 3b 0d 0a 0d 0a 20 20 20 20   "HKCC";....    
fe20: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
fe30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
fe70: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
fe80: 63 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 48  c const string H
fe90: 4b 45 59 5f 43 55 52 52 45 4e 54 5f 55 53 45 52  KEY_CURRENT_USER
fea0: 20 3d 20 22 48 4b 45 59 5f 43 55 52 52 45 4e 54   = "HKEY_CURRENT
feb0: 5f 55 53 45 52 22 3b 0d 0a 20 20 20 20 20 20 20  _USER";..       
fec0: 20 20 20 20 20 70 75 62 6c 69 63 20 63 6f 6e 73       public cons
fed0: 74 20 73 74 72 69 6e 67 20 48 4b 43 55 20 3d 20  t string HKCU = 
fee0: 22 48 4b 43 55 22 3b 0d 0a 0d 0a 20 20 20 20 20  "HKCU";....     
fef0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
ff00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
ff40: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
ff50: 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 48 4b   const string HK
ff60: 45 59 5f 44 59 4e 5f 44 41 54 41 20 3d 20 22 48  EY_DYN_DATA = "H
ff70: 4b 45 59 5f 44 59 4e 5f 44 41 54 41 22 3b 0d 0a  KEY_DYN_DATA";..
ff80: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
ff90: 69 63 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  ic const string 
ffa0: 48 4b 44 44 20 3d 20 22 48 4b 44 44 22 3b 0d 0a  HKDD = "HKDD";..
ffb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
ffc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ffd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ffe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10000 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
10010 20 70 75 62 6c 69 63 20 63 6f 6e 73 74 20 73 74   public const st
10020 72 69 6e 67 20 48 4b 45 59 5f 4c 4f 43 41 4c 5f  ring HKEY_LOCAL_
10030 4d 41 43 48 49 4e 45 20 3d 20 22 48 4b 45 59 5f  MACHINE = "HKEY_
10040 4c 4f 43 41 4c 5f 4d 41 43 48 49 4e 45 22 3b 0d  LOCAL_MACHINE";.
10050 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
10060 6c 69 63 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  lic const string
10070 20 48 4b 4c 4d 20 3d 20 22 48 4b 4c 4d 22 3b 0d   HKLM = "HKLM";.
10080 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
10090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
100e0 20 20 70 75 62 6c 69 63 20 63 6f 6e 73 74 20 73    public const s
100f0 74 72 69 6e 67 20 48 4b 45 59 5f 50 45 52 46 4f  tring HKEY_PERFO
10100 52 4d 41 4e 43 45 5f 44 41 54 41 20 3d 20 22 48  RMANCE_DATA = "H
10110 4b 45 59 5f 50 45 52 46 4f 52 4d 41 4e 43 45 5f  KEY_PERFORMANCE_
10120 44 41 54 41 22 3b 0d 0a 20 20 20 20 20 20 20 20  DATA";..        
10130 20 20 20 20 70 75 62 6c 69 63 20 63 6f 6e 73 74      public const
10140 20 73 74 72 69 6e 67 20 48 4b 50 44 20 3d 20 22   string HKPD = "
10150 48 4b 50 44 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  HKPD";....      
10160 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
10170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
101b0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
101c0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 48 4b 45  const string HKE
101d0 59 5f 55 53 45 52 53 20 3d 20 22 48 4b 45 59 5f  Y_USERS = "HKEY_
101e0 55 53 45 52 53 22 3b 0d 0a 20 20 20 20 20 20 20  USERS";..       
101f0 20 20 20 20 20 70 75 62 6c 69 63 20 63 6f 6e 73       public cons
10200 74 20 73 74 72 69 6e 67 20 48 4b 55 20 3d 20 22  t string HKU = "
10210 48 4b 55 22 3b 0d 0a 20 20 20 20 20 20 20 20 7d  HKU";..        }
10220 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
10230 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
10240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10280 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
10290 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73     #region Regis
102a0 74 72 79 48 65 6c 70 65 72 20 43 6c 61 73 73 0d  tryHelper Class.
102b0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
102c0 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
102d0 74 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ts..        priv
102e0 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 4b  ate const char K
102f0 65 79 4e 61 6d 65 53 65 70 61 72 61 74 6f 72 20  eyNameSeparator 
10300 3d 20 27 5c 5c 27 3b 0d 0a 0d 0a 20 20 20 20 20  = '\\';....     
10310 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
10320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
10360 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
10370 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 63 68  atic readonly ch
10380 61 72 5b 5d 20 4b 65 79 4e 61 6d 65 53 65 70 61  ar[] KeyNameSepa
10390 72 61 74 6f 72 73 20 3d 20 7b 0d 0a 20 20 20 20  rators = {..    
103a0 20 20 20 20 20 20 20 20 4b 65 79 4e 61 6d 65 53          KeyNameS
103b0 65 70 61 72 61 74 6f 72 0d 0a 20 20 20 20 20 20  eparator..      
103c0 20 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20 23 65    };..        #e
103d0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
103e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
103f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
10430 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
10440 74 61 74 69 63 20 63 6c 61 73 73 20 52 65 67 69  tatic class Regi
10450 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20 20 20  stryHelper..    
10460 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10470 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
10480 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  te Data..       
10490 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
104a0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
104b0 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 73 79  is is used to sy
104c0 6e 63 68 72 6f 6e 69 7a 65 20 61 63 63 65 73 73  nchronize access
104d0 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6f 66 20   to the list of 
104e0 6c 6f 67 67 65 64 0d 0a 20 20 20 20 20 20 20 20  logged..        
104f0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77 72 69      //       wri
10500 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 28 6a  te operations (j
10510 75 73 74 20 62 65 6c 6f 77 29 2e 0d 0a 20 20 20  ust below)...   
10520 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
10530 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
10540 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73   static object s
10550 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62  yncRoot = new ob
10560 6a 65 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ject();....     
10570 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
10580 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
10590 54 68 69 73 20 69 73 20 74 68 65 20 6c 69 73 74  This is the list
105a0 20 6f 66 20 72 65 67 69 73 74 72 79 20 77 72 69   of registry wri
105b0 74 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 77 68  te operations wh
105c0 65 6e 20 69 74 20 69 73 0d 0a 20 20 20 20 20 20  en it is..      
105d0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73        //       s
105e0 65 74 20 74 6f 20 6e 6f 6e 2d 6e 75 6c 6c 2e 0d  et to non-null..
105f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
10600 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
10610 76 61 74 65 20 73 74 61 74 69 63 20 52 65 67 69  vate static Regi
10620 73 74 72 79 4f 70 65 72 61 74 69 6f 6e 4c 69 73  stryOperationLis
10630 74 20 6f 70 65 72 61 74 69 6f 6e 4c 69 73 74 3b  t operationList;
10640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
10650 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
10660 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
10670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
106a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
106b0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
106c0 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63  on Public Static
106d0 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
106e0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
106f0 20 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69   static MockRegi
10700 73 74 72 79 20 72 65 61 64 4f 6e 6c 79 52 65 67  stry readOnlyReg
10710 69 73 74 72 79 3b 0d 0a 20 20 20 20 20 20 20 20  istry;..        
10720 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
10730 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 52  c MockRegistry R
10740 65 61 64 4f 6e 6c 79 52 65 67 69 73 74 72 79 0d  eadOnlyRegistry.
10750 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10770 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 65 61  get { return rea
10780 64 4f 6e 6c 79 52 65 67 69 73 74 72 79 3b 20 7d  dOnlyRegistry; }
10790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
107a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
107b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
107c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
107d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
107e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
107f0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
10800 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
10810 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65   MockRegistry re
10820 61 64 57 72 69 74 65 52 65 67 69 73 74 72 79 3b  adWriteRegistry;
10830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
10840 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b  blic static Mock
10850 52 65 67 69 73 74 72 79 20 52 65 61 64 57 72 69  Registry ReadWri
10860 74 65 52 65 67 69 73 74 72 79 0d 0a 20 20 20 20  teRegistry..    
10870 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10880 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
10890 20 72 65 74 75 72 6e 20 72 65 61 64 57 72 69 74   return readWrit
108a0 65 52 65 67 69 73 74 72 79 3b 20 7d 0d 0a 20 20  eRegistry; }..  
108b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
108c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
108d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
10910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
10920 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
10930 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b   subKeysCreated;
10940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
10950 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20  blic static int 
10960 53 75 62 4b 65 79 73 43 72 65 61 74 65 64 0d 0a  SubKeysCreated..
10970 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
10990 65 74 20 7b 20 72 65 74 75 72 6e 20 73 75 62 4b  et { return subK
109a0 65 79 73 43 72 65 61 74 65 64 3b 20 7d 0d 0a 20  eysCreated; }.. 
109b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
109c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
109d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
10a10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
10a20 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
10a30 74 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64  t subKeysDeleted
10a40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
10a50 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74  ublic static int
10a60 20 53 75 62 4b 65 79 73 44 65 6c 65 74 65 64 0d   SubKeysDeleted.
10a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
10a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a90 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 75 62  get { return sub
10aa0 4b 65 79 73 44 65 6c 65 74 65 64 3b 20 7d 0d 0a  KeysDeleted; }..
10ab0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
10ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
10ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10b20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
10b30 6e 74 20 6b 65 79 56 61 6c 75 65 73 52 65 61 64  nt keyValuesRead
10b40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
10b50 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74  ublic static int
10b60 20 4b 65 79 56 61 6c 75 65 73 52 65 61 64 0d 0a   KeyValuesRead..
10b70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
10b90 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79 56  et { return keyV
10ba0 61 6c 75 65 73 52 65 61 64 3b 20 7d 0d 0a 20 20  aluesRead; }..  
10bb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
10bc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
10bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
10c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
10c20 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
10c30 20 6b 65 79 56 61 6c 75 65 73 57 72 69 74 74 65   keyValuesWritte
10c40 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
10c50 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e  public static in
10c60 74 20 4b 65 79 56 61 6c 75 65 73 57 72 69 74 74  t KeyValuesWritt
10c70 65 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  en..            
10c80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10c90 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
10ca0 6b 65 79 56 61 6c 75 65 73 57 72 69 74 74 65 6e  keyValuesWritten
10cb0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
10cc0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
10cd0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
10ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d10 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
10d20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
10d30 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65  tic int keyValue
10d40 73 44 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20  sDeleted;..     
10d50 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
10d60 61 74 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75  atic int KeyValu
10d70 65 73 44 65 6c 65 74 65 64 0d 0a 20 20 20 20 20  esDeleted..     
10d80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10d90 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
10da0 72 65 74 75 72 6e 20 6b 65 79 56 61 6c 75 65 73  return keyValues
10db0 44 65 6c 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20  Deleted; }..    
10dc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
10dd0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
10de0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
10df0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
10e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e30 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
10e40 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
10e50 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64  ic Static Method
10e60 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
10e70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
10e80 64 20 45 6e 61 62 6c 65 4f 72 44 69 73 61 62 6c  d EnableOrDisabl
10e90 65 4f 70 65 72 61 74 69 6f 6e 4c 69 73 74 28 0d  eOperationList(.
10ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10eb0 20 62 6f 6f 6c 20 65 6e 61 62 6c 65 0d 0a 20 20   bool enable..  
10ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
10ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
10ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ef0 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
10f00 2f 2a 20 54 52 41 4e 53 41 43 54 49 4f 4e 41 4c  /* TRANSACTIONAL
10f10 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
10f20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10f30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10f40 65 6e 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20  enable)..       
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 20 20 20 20 20 20 69 66 20 28 6f 70 65 72          if (oper
10f80 61 74 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c  ationList == nul
10f90 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
10fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fb0 6f 70 65 72 61 74 69 6f 6e 4c 69 73 74 20 3d 20  operationList = 
10fc0 6e 65 77 20 52 65 67 69 73 74 72 79 4f 70 65 72  new RegistryOper
10fd0 61 74 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20  ationList();..  
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ff0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
11000 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
11010 20 28 6f 70 65 72 61 74 69 6f 6e 4c 69 73 74 20   (operationList 
11020 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
11030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11050 20 20 20 20 20 20 20 20 20 6f 70 65 72 61 74 69           operati
11060 6f 6e 4c 69 73 74 2e 44 69 73 70 6f 73 65 28 29  onList.Dispose()
11070 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11080 20 20 20 20 20 20 20 20 20 20 20 6f 70 65 72 61             opera
11090 74 69 6f 6e 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b  tionList = null;
110a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
110b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
110c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
110d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
110e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
110f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
11130 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
11140 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 52  ic static void R
11150 65 69 6e 69 74 69 61 6c 69 7a 65 44 65 66 61 75  einitializeDefau
11160 6c 74 52 65 67 69 73 74 72 69 65 73 28 0d 0a 20  ltRegistries(.. 
11170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
11180 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
111a0 6c 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20  l safe..        
111b0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
111c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
111d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
111e0 61 64 4f 6e 6c 79 52 65 67 69 73 74 72 79 20 21  adOnlyRegistry !
111f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
11200 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11220 72 65 61 64 4f 6e 6c 79 52 65 67 69 73 74 72 79  readOnlyRegistry
11230 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
11240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11250 20 72 65 61 64 4f 6e 6c 79 52 65 67 69 73 74 72   readOnlyRegistr
11260 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  y = null;..     
11270 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11290 69 66 20 28 72 65 61 64 57 72 69 74 65 52 65 67  if (readWriteReg
112a0 69 73 74 72 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a  istry != null)..
112b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
112d0 20 20 20 20 20 20 20 72 65 61 64 57 72 69 74 65         readWrite
112e0 52 65 67 69 73 74 72 79 2e 44 69 73 70 6f 73 65  Registry.Dispose
112f0 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
11300 20 20 20 20 20 20 20 20 20 72 65 61 64 57 72 69           readWri
11310 74 65 52 65 67 69 73 74 72 79 20 3d 20 6e 75 6c  teRegistry = nul
11320 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
11330 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
11340 20 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c           readOnl
11350 79 52 65 67 69 73 74 72 79 20 3d 20 6e 65 77 20  yRegistry = new 
11360 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 77 68 61  MockRegistry(wha
11370 74 49 66 2c 20 74 72 75 65 2c 20 73 61 66 65 29  tIf, true, safe)
11380 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11390 20 20 20 72 65 61 64 57 72 69 74 65 52 65 67 69     readWriteRegi
113a0 73 74 72 79 20 3d 20 6e 65 77 20 4d 6f 63 6b 52  stry = new MockR
113b0 65 67 69 73 74 72 79 28 77 68 61 74 49 66 2c 20  egistry(whatIf, 
113c0 66 61 6c 73 65 2c 20 73 61 66 65 29 3b 0d 0a 20  false, safe);.. 
113d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
113e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
113f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
11430 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
11440 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63  ublic static Moc
11450 6b 52 65 67 69 73 74 72 79 4b 65 79 20 47 65 74  kRegistryKey Get
11460 52 65 61 64 4f 6e 6c 79 52 6f 6f 74 4b 65 79 28  ReadOnlyRootKey(
11470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11480 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 0d 0a 20    string name.. 
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
114a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
114b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
114c0 20 72 65 74 75 72 6e 20 47 65 74 52 6f 6f 74 4b   return GetRootK
114d0 65 79 28 72 65 61 64 4f 6e 6c 79 52 65 67 69 73  ey(readOnlyRegis
114e0 74 72 79 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20  try, name);..   
114f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
11500 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
11510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
11550 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
11560 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52  lic static MockR
11570 65 67 69 73 74 72 79 4b 65 79 20 47 65 74 52 65  egistryKey GetRe
11580 61 64 57 72 69 74 65 52 6f 6f 74 4b 65 79 28 0d  adWriteRootKey(.
11590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
115a0 20 73 74 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20   string name..  
115b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
115c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115e0 72 65 74 75 72 6e 20 47 65 74 52 6f 6f 74 4b 65  return GetRootKe
115f0 79 28 72 65 61 64 57 72 69 74 65 52 65 67 69 73  y(readWriteRegis
11600 74 72 79 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20  try, name);..   
11610 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
11620 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
11630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
11670 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
11680 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52  lic static MockR
11690 65 67 69 73 74 72 79 4b 65 79 20 47 65 74 52 6f  egistryKey GetRo
116a0 6f 74 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  otKey(..        
116b0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
116c0 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a  stry registry,..
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116e0 73 74 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20 20  string name..   
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
11700 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11720 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20 6e  f (registry == n
11730 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
11740 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11750 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
11760 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4d 6f            if (Mo
11770 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e 4e 61  ckRegistryKey.Na
11780 6d 65 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20  meEquals(..     
11790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117a0 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73 74 72     name, Registr
117b0 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48 4b  yRootKeyNames.HK
117c0 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f 54 29  EY_CLASSES_ROOT)
117d0 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
117e0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
117f0 69 73 74 72 79 4b 65 79 2e 4e 61 6d 65 45 71 75  istryKey.NameEqu
11800 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  als(..          
11810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
11820 6d 65 2c 20 52 65 67 69 73 74 72 79 52 6f 6f 74  me, RegistryRoot
11830 4b 65 79 4e 61 6d 65 73 2e 48 4b 43 52 29 29 0d  KeyNames.HKCR)).
11840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11850 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11860 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
11870 65 67 69 73 74 72 79 2e 43 6c 61 73 73 65 73 52  egistry.ClassesR
11880 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  oot;..          
11890 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
118a0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
118b0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
118c0 79 2e 4e 61 6d 65 45 71 75 61 6c 73 28 0d 0a 20  y.NameEquals(.. 
118d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118e0 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 52 65 67         name, Reg
118f0 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65  istryRootKeyName
11900 73 2e 48 4b 45 59 5f 43 55 52 52 45 4e 54 5f 43  s.HKEY_CURRENT_C
11910 4f 4e 46 49 47 29 20 7c 7c 0d 0a 20 20 20 20 20  ONFIG) ||..     
11920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
11930 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e 4e  ockRegistryKey.N
11940 61 6d 65 45 71 75 61 6c 73 28 0d 0a 20 20 20 20  ameEquals(..    
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11960 20 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73 74      name, Regist
11970 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48  ryRootKeyNames.H
11980 4b 43 43 29 29 0d 0a 20 20 20 20 20 20 20 20 20  KCC))..         
11990 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
119b0 74 75 72 6e 20 72 65 67 69 73 74 72 79 2e 43 75  turn registry.Cu
119c0 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20  rrentConfig;..  
119d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
119e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
119f0 20 65 6c 73 65 20 69 66 20 28 4d 6f 63 6b 52 65   else if (MockRe
11a00 67 69 73 74 72 79 4b 65 79 2e 4e 61 6d 65 45 71  gistryKey.NameEq
11a10 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20  uals(..         
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
11a30 61 6d 65 2c 20 52 65 67 69 73 74 72 79 52 6f 6f  ame, RegistryRoo
11a40 74 4b 65 79 4e 61 6d 65 73 2e 48 4b 45 59 5f 43  tKeyNames.HKEY_C
11a50 55 52 52 45 4e 54 5f 55 53 45 52 29 20 7c 7c 0d  URRENT_USER) ||.
11a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11a70 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
11a80 79 4b 65 79 2e 4e 61 6d 65 45 71 75 61 6c 73 28  yKey.NameEquals(
11a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11aa0 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20            name, 
11ab0 52 65 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e  RegistryRootKeyN
11ac0 61 6d 65 73 2e 48 4b 43 55 29 29 0d 0a 20 20 20  ames.HKCU))..   
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11af0 20 20 20 20 72 65 74 75 72 6e 20 72 65 67 69 73      return regis
11b00 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 3b  try.CurrentUser;
11b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11b20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
11b30 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 6f       else if (Mo
11b40 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e 4e 61  ckRegistryKey.Na
11b50 6d 65 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20  meEquals(..     
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b70 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73 74 72     name, Registr
11b80 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48 4b  yRootKeyNames.HK
11b90 45 59 5f 44 59 4e 5f 44 41 54 41 29 20 7c 7c 0d  EY_DYN_DATA) ||.
11ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11bb0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
11bc0 79 4b 65 79 2e 4e 61 6d 65 45 71 75 61 6c 73 28  yKey.NameEquals(
11bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11be0 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20            name, 
11bf0 52 65 67 69 73 74 72 79 52 6f 6f 74 4b 65 79 4e  RegistryRootKeyN
11c00 61 6d 65 73 2e 48 4b 44 44 29 29 0d 0a 20 20 20  ames.HKDD))..   
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c30 20 20 20 20 72 65 74 75 72 6e 20 72 65 67 69 73      return regis
11c40 74 72 79 2e 44 79 6e 44 61 74 61 3b 0d 0a 20 20  try.DynData;..  
11c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11c70 20 65 6c 73 65 20 69 66 20 28 4d 6f 63 6b 52 65   else if (MockRe
11c80 67 69 73 74 72 79 4b 65 79 2e 4e 61 6d 65 45 71  gistryKey.NameEq
11c90 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20  uals(..         
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
11cb0 61 6d 65 2c 20 52 65 67 69 73 74 72 79 52 6f 6f  ame, RegistryRoo
11cc0 74 4b 65 79 4e 61 6d 65 73 2e 48 4b 45 59 5f 4c  tKeyNames.HKEY_L
11cd0 4f 43 41 4c 5f 4d 41 43 48 49 4e 45 29 20 7c 7c  OCAL_MACHINE) ||
11ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11cf0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
11d00 72 79 4b 65 79 2e 4e 61 6d 65 45 71 75 61 6c 73  ryKey.NameEquals
11d10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11d20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c             name,
11d30 20 52 65 67 69 73 74 72 79 52 6f 6f 74 4b 65 79   RegistryRootKey
11d40 4e 61 6d 65 73 2e 48 4b 4c 4d 29 29 0d 0a 20 20  Names.HKLM))..  
11d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11d70 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 67 69       return regi
11d80 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e  stry.LocalMachin
11d90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
11da0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11db0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
11dc0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e  MockRegistryKey.
11dd0 4e 61 6d 65 45 71 75 61 6c 73 28 0d 0a 20 20 20  NameEquals(..   
11de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11df0 20 20 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73       name, Regis
11e00 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e  tryRootKeyNames.
11e10 48 4b 45 59 5f 50 45 52 46 4f 52 4d 41 4e 43 45  HKEY_PERFORMANCE
11e20 5f 44 41 54 41 29 20 7c 7c 0d 0a 20 20 20 20 20  _DATA) ||..     
11e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
11e40 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e 4e  ockRegistryKey.N
11e50 61 6d 65 45 71 75 61 6c 73 28 0d 0a 20 20 20 20  ameEquals(..    
11e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e70 20 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73 74      name, Regist
11e80 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48  ryRootKeyNames.H
11e90 4b 50 44 29 29 0d 0a 20 20 20 20 20 20 20 20 20  KPD))..         
11ea0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11ec0 74 75 72 6e 20 72 65 67 69 73 74 72 79 2e 50 65  turn registry.Pe
11ed0 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 3b 0d 0a  rformanceData;..
11ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ef0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
11f00 20 20 20 65 6c 73 65 20 69 66 20 28 4d 6f 63 6b     else if (Mock
11f10 52 65 67 69 73 74 72 79 4b 65 79 2e 4e 61 6d 65  RegistryKey.Name
11f20 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20  Equals(..       
11f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f40 20 6e 61 6d 65 2c 20 52 65 67 69 73 74 72 79 52   name, RegistryR
11f50 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e 48 4b 45 59  ootKeyNames.HKEY
11f60 5f 55 53 45 52 53 29 20 7c 7c 0d 0a 20 20 20 20  _USERS) ||..    
11f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f80 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e  MockRegistryKey.
11f90 4e 61 6d 65 45 71 75 61 6c 73 28 0d 0a 20 20 20  NameEquals(..   
11fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fb0 20 20 20 20 20 6e 61 6d 65 2c 20 52 65 67 69 73       name, Regis
11fc0 74 72 79 52 6f 6f 74 4b 65 79 4e 61 6d 65 73 2e  tryRootKeyNames.
11fd0 48 4b 55 29 29 0d 0a 20 20 20 20 20 20 20 20 20  HKU))..         
11fe0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
12000 74 75 72 6e 20 72 65 67 69 73 74 72 79 2e 55 73  turn registry.Us
12010 65 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ers;..          
12020 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12030 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
12040 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
12050 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
12060 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
12070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
120a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
120b0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
120c0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 4a 6f  static string Jo
120d0 69 6e 4b 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20  inKeyNames(..   
120e0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72               par
120f0 61 6d 73 20 73 74 72 69 6e 67 5b 5d 20 6e 61 6d  ams string[] nam
12100 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
12110 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
12120 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12130 20 20 20 20 20 20 69 66 20 28 28 6e 61 6d 65 73        if ((names
12140 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 6e 61   == null) || (na
12150 6d 65 73 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29  mes.Length == 0)
12160 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12170 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
12180 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
12190 20 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69         StringBui
121a0 6c 64 65 72 20 62 75 69 6c 64 65 72 20 3d 20 6e  lder builder = n
121b0 65 77 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ew StringBuilder
121c0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
121d0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
121e0 73 74 72 69 6e 67 20 6e 61 6d 65 20 69 6e 20 6e  string name in n
121f0 61 6d 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ames)..         
12200 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
12220 20 28 6e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d   (name == null).
12230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12240 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
12250 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
12260 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
12270 20 6e 65 77 4e 61 6d 65 20 3d 20 6e 61 6d 65 2e   newName = name.
12280 54 72 69 6d 28 4b 65 79 4e 61 6d 65 53 65 70 61  Trim(KeyNameSepa
12290 72 61 74 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  rator);....     
122a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
122b0 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
122c0 4f 72 45 6d 70 74 79 28 6e 65 77 4e 61 6d 65 29  OrEmpty(newName)
122d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
122e0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
122f0 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
12300 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
12310 62 75 69 6c 64 65 72 2e 4c 65 6e 67 74 68 20 3e  builder.Length >
12320 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
12330 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69               bui
12340 6c 64 65 72 2e 41 70 70 65 6e 64 28 4b 65 79 4e  lder.Append(KeyN
12350 61 6d 65 53 65 70 61 72 61 74 6f 72 29 3b 0d 0a  ameSeparator);..
12360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12370 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
12380 70 65 6e 64 28 6e 65 77 4e 61 6d 65 29 3b 0d 0a  pend(newName);..
12390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
123b0 20 20 20 20 20 72 65 74 75 72 6e 20 62 75 69 6c       return buil
123c0 64 65 72 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  der.ToString();.
123d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
123e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
123f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12430 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
12440 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
12450 74 72 69 6e 67 20 4a 6f 69 6e 4b 65 79 4e 61 6d  tring JoinKeyNam
12460 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
12470 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
12480 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
12490 20 20 20 20 20 20 20 20 20 20 20 70 61 72 61 6d             param
124a0 73 20 73 74 72 69 6e 67 5b 5d 20 6e 61 6d 65 73  s string[] names
124b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
124c0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
124d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
124e0 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
124f0 74 20 3d 20 4a 6f 69 6e 4b 65 79 4e 61 6d 65 73  t = JoinKeyNames
12500 28 6e 61 6d 65 73 29 3b 0d 0a 0d 0a 20 20 20 20  (names);....    
12510 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
12520 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key != null)..  
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12540 20 20 72 65 73 75 6c 74 20 3d 20 4a 6f 69 6e 4b    result = JoinK
12550 65 79 4e 61 6d 65 73 28 6b 65 79 2e 4e 61 6d 65  eyNames(key.Name
12560 2c 20 72 65 73 75 6c 74 29 3b 0d 0a 0d 0a 20 20  , result);....  
12570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
12580 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
12590 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
125a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
125b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
125f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
12600 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
12610 6e 67 5b 5d 20 53 70 6c 69 74 4b 65 79 4e 61 6d  ng[] SplitKeyNam
12620 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
12630 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
12640 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
12650 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
12660 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12670 20 20 20 20 20 20 69 66 20 28 6b 65 79 4e 61 6d        if (keyNam
12680 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
12690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126a0 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126c0 72 65 74 75 72 6e 20 6b 65 79 4e 61 6d 65 2e 53  return keyName.S
126d0 70 6c 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20  plit(..         
126e0 20 20 20 20 20 20 20 20 20 20 20 4b 65 79 4e 61             KeyNa
126f0 6d 65 53 65 70 61 72 61 74 6f 72 73 2c 20 53 74  meSeparators, St
12700 72 69 6e 67 53 70 6c 69 74 4f 70 74 69 6f 6e 73  ringSplitOptions
12710 2e 52 65 6d 6f 76 65 45 6d 70 74 79 45 6e 74 72  .RemoveEmptyEntr
12720 69 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ies);..         
12730 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12740 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
12750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12780 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
12790 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
127a0 61 74 69 63 20 73 74 72 69 6e 67 20 4c 61 73 74  atic string Last
127b0 53 75 62 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  SubKeyName(..   
127c0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
127d0 69 6e 67 20 6b 65 79 4e 61 6d 65 0d 0a 20 20 20  ing keyName..   
127e0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
127f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
12810 74 72 69 6e 67 5b 5d 20 73 75 62 4b 65 79 4e 61  tring[] subKeyNa
12820 6d 65 73 20 3d 20 53 70 6c 69 74 4b 65 79 4e 61  mes = SplitKeyNa
12830 6d 65 28 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  me(keyName);....
12840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12850 69 66 20 28 28 73 75 62 4b 65 79 4e 61 6d 65 73  if ((subKeyNames
12860 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 75   == null) || (su
12870 62 4b 65 79 4e 61 6d 65 73 2e 4c 65 6e 67 74 68  bKeyNames.Length
12880 20 3d 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20   == 0))..       
12890 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
128a0 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
128b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
128c0 75 72 6e 20 73 75 62 4b 65 79 4e 61 6d 65 73 5b  urn subKeyNames[
128d0 73 75 62 4b 65 79 4e 61 6d 65 73 2e 4c 65 6e 67  subKeyNames.Leng
128e0 74 68 20 2d 20 31 5d 3b 0d 0a 20 20 20 20 20 20  th - 1];..      
128f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12900 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
12910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
12950 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
12960 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
12970 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
12980 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
12990 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
129a0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
129b0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
129d0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
129e0 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
129f0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
12a00 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
12a10 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
12a20 77 72 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  writable,..     
12a30 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
12a40 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
12a50 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
12a60 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
12a70 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
12a80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12a90 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
12aa0 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
12ab0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
12ad0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
12ae0 72 61 63 65 28 77 72 69 74 61 62 6c 65 20 3f 0d  race(writable ?.
12af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12b00 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
12b10 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 20 3a  iority.Highest :
12b20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48   TracePriority.H
12b30 69 67 68 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  igher,..        
12b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b50 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
12b60 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
12b70 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b90 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d        "rootKey =
12ba0 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65   {0}, subKeyName
12bb0 20 3d 20 7b 31 7d 2c 20 77 72 69 74 61 62 6c 65   = {1}, writable
12bc0 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20   = {2}",..      
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12be0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f    ForDisplay(roo
12bf0 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61  tKey), ForDispla
12c00 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 0d 0a  y(subKeyName),..
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
12c30 61 79 28 77 72 69 74 61 62 6c 65 29 29 2c 20 74  ay(writable)), t
12c40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
12c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12c70 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
12c80 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
12c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
12ca0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12cc0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
12cd0 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61     // HACK: Alwa
12ce0 79 73 20 66 6f 72 62 69 64 20 77 72 69 74 61 62  ys forbid writab
12cf0 6c 65 20 61 63 63 65 73 73 20 77 68 65 6e 20 6f  le access when o
12d00 70 65 72 61 74 69 6e 67 20 69 6e 0d 0a 20 20 20  perating in..   
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12d20 20 20 20 20 20 20 22 77 68 61 74 2d 69 66 22 20        "what-if" 
12d30 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  mode...         
12d40 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
12d50 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
12d60 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
12d70 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62   rootKey.OpenSub
12d80 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
12d90 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
12da0 4e 61 6d 65 2c 20 77 68 61 74 49 66 20 3f 20 66  Name, whatIf ? f
12db0 61 6c 73 65 20 3a 20 77 72 69 74 61 62 6c 65 29  alse : writable)
12dc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12dd0 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b 65 79       return (key
12de0 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20   != null) ?..   
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e00 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
12e10 79 4b 65 79 28 6b 65 79 2c 20 77 68 61 74 49 66  yKey(key, whatIf
12e20 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 20  , false, false) 
12e30 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  : null;..       
12e40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
12e50 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
12e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
12ea0 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
12eb0 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
12ec0 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
12ed0 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
12ee0 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d   public static M
12ef0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43  ockRegistryKey C
12f00 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  reateSubKey(..  
12f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
12f20 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
12f30 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
12f40 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
12f50 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
12f60 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
12f70 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
12f80 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
12f90 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
12fa0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
12fb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12fc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
12fd0 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
12fe0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
13000 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
13010 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
13020 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
13050 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
13060 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
13070 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
13080 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f              "roo
13090 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b  tKey = {0}, subK
130a0 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a  eyName = {1}",..
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130c0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
130d0 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72  ay(rootKey), For
130e0 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61  Display(subKeyNa
130f0 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
13100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13110 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
13120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13130 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
13140 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
13150 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
13160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
13170 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
13180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13190 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
131a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
131b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131d0 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61     // HACK: Alwa
131e0 79 73 20 6f 70 65 6e 20 61 20 6b 65 79 2c 20 72  ys open a key, r
131f0 61 74 68 65 72 20 74 68 61 6e 20 63 72 65 61 74  ather than creat
13200 69 6e 67 20 6f 6e 65 20 77 68 65 6e 0d 0a 20 20  ing one when..  
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13220 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61    //       opera
13230 74 69 6e 67 20 69 6e 20 22 77 68 61 74 2d 69 66  ting in "what-if
13240 22 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  " mode...       
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
13260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13270 20 20 20 20 20 69 66 20 28 77 68 61 74 49 66 29       if (whatIf)
13280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13290 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132b0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
132c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
132d0 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20 74 6f  HACK: Attempt to
132e0 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63 69 66   open the specif
132f0 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20 49 66  ied sub-key.  If
13300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13310 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
13320 20 20 20 74 68 69 73 20 66 61 69 6c 73 2c 20 77     this fails, w
13330 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65  e will simply re
13340 74 75 72 6e 20 74 68 65 20 72 6f 6f 74 0d 0a 20  turn the root.. 
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
13370 6b 65 79 20 69 74 73 65 6c 66 20 73 69 6e 63 65  key itself since
13380 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65 20 61   no writes are a
13390 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20 20 20 20 20  llowed in..     
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133b0 20 20 20 2f 2f 20 20 20 20 20 20 20 22 77 68 61     //       "wha
133c0 74 2d 69 66 22 20 6d 6f 64 65 20 61 6e 79 68 6f  t-if" mode anyho
133d0 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w...            
133e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13400 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
13410 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f  stryKey key = ro
13420 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79  otKey.OpenSubKey
13430 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  (subKeyName);...
13440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13450 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
13460 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
13470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13480 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65         return ke
13490 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
134a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
134b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
134c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47            // BUG
134d0 46 49 58 3a 20 54 68 65 20 72 65 67 69 73 74 72  FIX: The registr
134e0 79 20 6b 65 79 20 77 65 20 61 72 65 20 73 75 70  y key we are sup
134f0 70 6f 73 65 64 20 74 6f 20 63 72 65 61 74 65 0d  posed to create.
13500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13510 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
13520 20 20 20 20 64 6f 65 73 20 6e 6f 74 20 65 78 69      does not exi
13530 73 74 20 61 6e 64 20 77 65 20 63 61 6e 6e 6f 74  st and we cannot
13540 20 63 72 65 61 74 65 20 69 74 20 73 69 6e 63 65   create it since
13550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13560 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
13570 20 20 20 20 20 74 68 69 73 20 69 73 20 22 77 68       this is "wh
13580 61 74 2d 69 66 22 20 6d 6f 64 65 2e 20 20 54 68  at-if" mode.  Th
13590 65 20 70 72 6f 62 6c 65 6d 20 68 65 72 65 20 69  e problem here i
135a0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
135b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
135c0 20 20 20 20 20 20 74 68 69 73 20 77 69 6c 6c 20        this will 
135d0 68 61 76 65 20 61 20 22 73 69 64 65 2d 65 66 66  have a "side-eff
135e0 65 63 74 22 20 6f 66 20 64 69 73 63 61 72 64 69  ect" of discardi
135f0 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
13600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
13610 20 20 20 20 20 20 20 61 6e 79 20 73 75 62 2d 6b         any sub-k
13620 65 79 20 6e 61 6d 65 20 76 61 6c 75 65 20 66 72  ey name value fr
13630 6f 6d 20 77 69 74 68 69 6e 20 74 68 65 20 72 6f  om within the ro
13640 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot..            
13650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
13660 20 20 20 20 20 20 20 6b 65 79 20 73 70 65 63 69         key speci
13670 66 69 65 64 20 62 79 20 74 68 65 20 63 61 6c 6c  fied by the call
13680 65 72 20 28 61 6e 64 20 74 68 65 6e 20 70 61 73  er (and then pas
13690 73 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sed..           
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
136b0 20 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 4d          to the M
136c0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63  ockRegistryKey c
136d0 6f 6e 73 74 72 75 63 74 6f 72 29 2e 20 20 53 69  onstructor).  Si
136e0 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nce..           
136f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
13700 20 20 20 20 20 20 20 20 77 65 20 73 74 69 6c 6c          we still
13710 20 77 61 6e 74 20 74 6f 20 75 73 65 20 74 68 61   want to use tha
13720 74 20 72 65 67 69 73 74 72 79 20 6b 65 79 2c 20  t registry key, 
13730 77 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  we..            
13740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
13750 20 20 20 20 20 20 20 6e 65 65 64 20 74 6f 20 6d         need to m
13760 69 67 72 61 74 65 20 74 68 61 74 20 73 75 62 2d  igrate that sub-
13770 6b 65 79 20 6e 61 6d 65 20 66 72 6f 6d 20 74 68  key name from th
13780 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
13790 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
137a0 20 20 20 20 20 20 72 6f 6f 74 20 6b 65 79 2c 20        root key, 
137b0 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 69 74 20  by combining it 
137c0 77 69 74 68 20 74 68 65 20 73 75 62 2d 6b 65 79  with the sub-key
137d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
137e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
137f0 20 20 20 20 20 6e 61 6d 65 20 73 70 65 63 69 66       name specif
13800 69 65 64 20 62 79 20 74 68 65 20 63 61 6c 6c 65  ied by the calle
13810 72 20 61 6e 64 20 75 73 65 20 74 68 65 20 6e 65  r and use the ne
13820 77 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  w..             
13830 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
13840 20 20 20 20 20 20 63 6f 6d 62 69 6e 65 64 20 73        combined s
13850 75 62 2d 6b 65 79 20 6e 61 6d 65 20 66 6f 72 20  ub-key name for 
13860 74 68 65 20 63 6f 6e 73 74 72 75 63 74 6f 72 2e  the constructor.
13870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13880 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77        string new
138b0 53 75 62 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62  SubKeyName = sub
138c0 4b 65 79 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  KeyName;....    
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138e0 20 20 20 20 41 64 6a 75 73 74 53 75 62 4b 65 79      AdjustSubKey
138f0 4e 61 6d 65 46 6f 72 57 68 61 74 49 66 28 72 6f  NameForWhatIf(ro
13900 6f 74 4b 65 79 2c 20 72 65 66 20 6e 65 77 53 75  otKey, ref newSu
13910 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  bKeyName);....  
13920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13930 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
13940 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
13950 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
13970 6f 6f 74 4b 65 79 2c 20 6e 65 77 53 75 62 4b 65  ootKey, newSubKe
13980 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 66  yName, whatIf, f
13990 61 6c 73 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20  alse, false);.. 
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
139c0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
13a00 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65  eturn new MockRe
13a10 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a30 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e          rootKey.
13a40 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
13a50 4b 65 79 4e 61 6d 65 29 2c 20 77 68 61 74 49 66  KeyName), whatIf
13a60 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20  , false,..      
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a80 20 20 20 20 20 20 66 61 6c 73 65 29 3b 0d 0a 20        false);.. 
13a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13aa0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
13ab0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
13ac0 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79           finally
13ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13ae0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13af0 20 20 20 20 20 20 20 20 20 4d 61 79 62 65 4c 6f           MaybeLo
13b00 67 4f 70 65 72 61 74 69 6f 6e 28 47 65 74 4d 65  gOperation(GetMe
13b10 74 68 6f 64 4e 61 6d 65 28 29 2c 20 72 6f 6f 74  thodName(), root
13b20 4b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29  Key, subKeyName)
13b30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13b40 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73           subKeys
13b50 43 72 65 61 74 65 64 2b 2b 3b 0d 0a 20 20 20 20  Created++;..    
13b60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13b70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
13b80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
13b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
13bd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
13be0 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
13bf0 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
13c00 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
13c10 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
13c20 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65  atic void Delete
13c30 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
13c40 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
13c50 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
13c60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13c70 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
13c80 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
13c90 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
13ca0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
13cc0 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
13cd0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
13ce0 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
13cf0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
13d00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13d10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
13d20 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
13d30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
13d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d50 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
13d60 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
13d70 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
13d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d90 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
13da0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
13db0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
13dc0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f               "ro
13de0 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62  otKey = {0}, sub
13df0 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d  KeyName = {1}",.
13e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13e10 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
13e20 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f  lay(rootKey), Fo
13e30 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e  rDisplay(subKeyN
13e40 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
13e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e60 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
13e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13e80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
13e90 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
13ea0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
13eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ec0 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
13ed0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
13ee0 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
13f00 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65  tKey.DeleteSubKe
13f10 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68  y(subKeyName, th
13f20 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a  rowOnMissing);..
13f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13f40 20 20 4d 61 79 62 65 4c 6f 67 4f 70 65 72 61 74    MaybeLogOperat
13f50 69 6f 6e 28 47 65 74 4d 65 74 68 6f 64 4e 61 6d  ion(GetMethodNam
13f60 65 28 29 2c 20 72 6f 6f 74 4b 65 79 2c 20 73 75  e(), rootKey, su
13f70 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  bKeyName);....  
13f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
13f90 62 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b 3b 0d  bKeysDeleted++;.
13fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
13fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
13fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14000 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
14010 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
14020 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
14030 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
14040 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
14050 73 74 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65  static void Dele
14060 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
14070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
14080 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
14090 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
140a0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
140b0 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
140c0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
140d0 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
140e0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
140f0 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
14100 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
14110 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14120 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
14130 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
14140 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
14170 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
14180 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141a0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
141b0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
141c0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
141d0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f               "ro
141f0 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62  otKey = {0}, sub
14200 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d  KeyName = {1}",.
14210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14220 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
14230 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f  lay(rootKey), Fo
14240 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e  rDisplay(subKeyN
14250 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14270 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
14280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14290 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
142a0 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
142b0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
142c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142d0 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
142e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
142f0 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
14300 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
14310 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65  tKey.DeleteSubKe
14320 79 54 72 65 65 28 73 75 62 4b 65 79 4e 61 6d 65  yTree(subKeyName
14330 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14340 20 20 20 20 20 20 4d 61 79 62 65 4c 6f 67 4f 70        MaybeLogOp
14350 65 72 61 74 69 6f 6e 28 47 65 74 4d 65 74 68 6f  eration(GetMetho
14360 64 4e 61 6d 65 28 29 2c 20 72 6f 6f 74 4b 65 79  dName(), rootKey
14370 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  , subKeyName);..
14380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14390 20 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64    subKeysDeleted
143a0 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
143b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
143c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
143d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
143e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
143f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14400 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
14410 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
14420 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
14430 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
14440 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
14450 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
14460 67 5b 5d 20 47 65 74 53 75 62 4b 65 79 4e 61 6d  g[] GetSubKeyNam
14470 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
14480 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
14490 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
144a0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
144b0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
144c0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
144d0 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
144e0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
144f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14500 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
14510 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
14520 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
14540 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
14550 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
14560 74 79 2e 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  ty.High,..      
14570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14580 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
14590 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
145a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b          "key = {
145d0 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  0}", ForDisplay(
145e0 6b 65 79 29 29 2c 20 74 72 61 63 65 43 61 74 65  key)), traceCate
145f0 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
14600 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
14610 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
14620 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
14630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14640 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
14650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14660 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65     return key.Ge
14670 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b 0d  tSubKeyNames();.
14680 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
14690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
146a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
146b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
146c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
146d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
146e0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
146f0 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
14700 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
14710 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
14720 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
14730 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 47 65  static object Ge
14740 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
14750 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
14760 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
14770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
14780 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
147a0 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65  ect defaultValue
147b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
147c0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
147d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
147e0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
147f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
14800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
14810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14820 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
14830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
14840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14850 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
14860 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
14870 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 2c  cePriority.High,
14880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14890 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
148a0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
148b0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
148c0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
148d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148e0 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65  "key = {0}, name
148f0 20 3d 20 7b 31 7d 2c 20 64 65 66 61 75 6c 74 56   = {1}, defaultV
14900 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20  alue = {2}",..  
14910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14920 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
14930 28 6b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61  (key), ForDispla
14940 79 28 6e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  y(name),..      
14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14960 20 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 66    ForDisplay(def
14970 61 75 6c 74 56 61 6c 75 65 29 29 2c 20 74 72 61  aultValue)), tra
14980 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
14990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
149a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
149b0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
149c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
149d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
149e0 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
149f0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
14a00 76 61 6c 75 65 20 3d 20 6b 65 79 2e 47 65 74 56  value = key.GetV
14a10 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66 61 75  alue(name, defau
14a20 6c 74 56 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20  ltValue);....   
14a30 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
14a40 56 61 6c 75 65 73 52 65 61 64 2b 2b 3b 0d 0a 0d  ValuesRead++;...
14a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14a60 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
14a70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
14a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
14a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ad0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14ae0 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
14af0 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
14b00 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
14b10 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
14b20 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 56 61  tatic void SetVa
14b30 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
14b40 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
14b50 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
14b60 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
14b70 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
14b80 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
14b90 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20   value,..       
14ba0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
14bb0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
14bc0 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
14bd0 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
14be0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
14bf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14c00 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
14c10 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
14c20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
14c30 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
14c40 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
14c50 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
14c60 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c80 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
14c90 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
14ca0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
14cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14cc0 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20           "key = 
14cd0 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c  {0}, name = {1},
14ce0 20 76 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a   value = {2}",..
14cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d00 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
14d10 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69 73 70  ay(key), ForDisp
14d20 6c 61 79 28 6e 61 6d 65 29 2c 20 46 6f 72 44 69  lay(name), ForDi
14d30 73 70 6c 61 79 28 76 61 6c 75 65 29 29 2c 0d 0a  splay(value)),..
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d50 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
14d60 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
14d70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
14d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
14d90 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14db0 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14dd0 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
14de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14df0 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61   key.SetValue(na
14e00 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20  me, value);.... 
14e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
14e20 61 79 62 65 4c 6f 67 4f 70 65 72 61 74 69 6f 6e  aybeLogOperation
14e30 28 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 29  (GetMethodName()
14e40 2c 20 6b 65 79 2c 20 6e 61 6d 65 2c 20 76 61 6c  , key, name, val
14e50 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
14e60 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75 65          keyValue
14e70 73 57 72 69 74 74 65 6e 2b 2b 3b 0d 0a 20 20 20  sWritten++;..   
14e80 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
14e90 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
14ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
14ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
14ef0 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
14f00 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
14f10 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
14f20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
14f30 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56 61  ic void DeleteVa
14f40 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
14f50 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
14f60 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
14f70 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
14f80 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
14f90 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
14fa0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fc0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
14fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
14fe0 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
14ff0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
15000 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
15010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15020 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
15030 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15050 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
15060 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
15070 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
15080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15090 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
150a0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
150b0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
150c0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150e0 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65  "key = {0}, name
150f0 20 3d 20 7b 31 7d 22 2c 20 46 6f 72 44 69 73 70   = {1}", ForDisp
15100 6c 61 79 28 6b 65 79 29 2c 0d 0a 20 20 20 20 20  lay(key),..     
15110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15120 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61     ForDisplay(na
15130 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
15140 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
15150 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
15160 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
15170 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
15180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15190 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
151b0 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
151c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
151d0 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 6e  ey.DeleteValue(n
151e0 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  ame, throwOnMiss
151f0 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ing);....       
15200 20 20 20 20 20 20 20 20 20 4d 61 79 62 65 4c 6f           MaybeLo
15210 67 4f 70 65 72 61 74 69 6f 6e 28 47 65 74 4d 65  gOperation(GetMe
15220 74 68 6f 64 4e 61 6d 65 28 29 2c 20 6b 65 79 2c  thodName(), key,
15230 20 6e 61 6d 65 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d   name, null);...
15240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15250 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65   keyValuesDelete
15260 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d++;..          
15270 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15280 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
15290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
152a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
152b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
152c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
152d0 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
152e0 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
152f0 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
15300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
15310 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20  blic static int 
15320 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 4c 69  WriteOperationLi
15330 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st(..           
15340 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
15350 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
15360 20 20 20 20 20 20 20 62 6f 6f 6c 20 68 65 61 64         bool head
15370 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
15380 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
15390 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
153a0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
153b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
153c0 20 20 20 20 20 69 6e 74 20 63 6f 75 6e 74 20 3d       int count =
153d0 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   0;....         
153e0 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
153f0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
15400 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  fileName))..    
15410 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15430 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
15440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15450 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15470 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
15480 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
15490 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
154a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154b0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
154c0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
154d0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
154e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154f0 20 20 20 20 20 20 22 4f 70 65 72 61 74 69 6f 6e        "Operation
15500 20 6c 6f 67 20 66 69 6c 65 20 6e 61 6d 65 20 6e   log file name n
15510 6f 74 20 73 65 74 2e 22 2c 0d 0a 20 20 20 20 20  ot set.",..     
15520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15530 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
15540 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
15550 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
15560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15570 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 75 6e       return coun
15580 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
15590 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
155a0 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73           lock (s
155b0 79 6e 63 52 6f 6f 74 29 20 2f 2a 20 54 52 41 4e  yncRoot) /* TRAN
155c0 53 41 43 54 49 4f 4e 41 4c 20 2a 2f 0d 0a 20 20  SACTIONAL */..  
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
155e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
155f0 20 20 20 20 20 69 66 20 28 6f 70 65 72 61 74 69       if (operati
15600 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  onList == null).
15610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15620 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15640 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15660 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15680 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
15690 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
156a0 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
156b0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
156c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156d0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
156e0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
156f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15710 20 20 20 22 4f 70 65 72 61 74 69 6f 6e 20 6c 69     "Operation li
15720 73 74 20 69 73 20 69 6e 76 61 6c 69 64 2e 22 2c  st is invalid.",
15730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15750 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
15760 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15770 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
15780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15790 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
157a0 6f 75 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ount;..         
157b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
157c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157d0 20 20 20 20 75 73 69 6e 67 20 28 53 74 72 65 61      using (Strea
157e0 6d 57 72 69 74 65 72 20 73 74 72 65 61 6d 57 72  mWriter streamWr
157f0 69 74 65 72 20 3d 20 6e 65 77 20 53 74 72 65 61  iter = new Strea
15800 6d 57 72 69 74 65 72 28 0d 0a 20 20 20 20 20 20  mWriter(..      
15810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15820 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 29 29        fileName))
15830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15840 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15860 20 69 66 20 28 68 65 61 64 65 72 29 0d 0a 20 20   if (header)..  
15870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15880 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158a0 20 20 20 20 20 73 74 72 65 61 6d 57 72 69 74 65       streamWrite
158b0 72 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20  r.WriteLine(..  
158c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
158e0 67 69 73 74 72 79 4f 70 65 72 61 74 69 6f 6e 2e  gistryOperation.
158f0 47 65 74 48 65 61 64 65 72 4c 69 6e 65 28 29 29  GetHeaderLine())
15900 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15910 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
15920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15930 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
15940 28 52 65 67 69 73 74 72 79 4f 70 65 72 61 74 69  (RegistryOperati
15950 6f 6e 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  on operation in 
15960 6f 70 65 72 61 74 69 6f 6e 4c 69 73 74 29 0d 0a  operationList)..
15970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15980 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159a0 20 20 20 20 20 20 20 69 66 20 28 6f 70 65 72 61         if (opera
159b0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tion == null).. 
159c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
159e0 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a00 20 20 20 20 20 20 20 20 73 74 72 65 61 6d 57 72          streamWr
15a10 69 74 65 72 2e 57 72 69 74 65 4c 69 6e 65 28 6f  iter.WriteLine(o
15a20 70 65 72 61 74 69 6f 6e 2e 54 6f 53 74 72 69 6e  peration.ToStrin
15a30 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g());..         
15a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a50 20 20 20 63 6f 75 6e 74 2b 2b 3b 0d 0a 20 20 20     count++;..   
15a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
15a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a90 20 20 73 74 72 65 61 6d 57 72 69 74 65 72 2e 46    streamWriter.F
15aa0 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20  lush();..       
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
15ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ad0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
15ae0 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
15af0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
15b00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15b10 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
15b20 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
15b30 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
15b40 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
15b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b60 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
15b70 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
15b80 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
15b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ba0 20 20 20 20 20 20 20 22 57 72 6f 74 65 20 7b 30         "Wrote {0
15bb0 7d 20 6f 70 65 72 61 74 69 6f 6e 73 20 74 6f 20  } operations to 
15bc0 6c 6f 67 20 66 69 6c 65 2e 22 2c 0d 0a 20 20 20  log file.",..   
15bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15be0 20 20 20 20 20 63 6f 75 6e 74 29 2c 20 74 72 61       count), tra
15bf0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
15c10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15c20 20 20 20 72 65 74 75 72 6e 20 63 6f 75 6e 74 3b     return count;
15c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
15c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
15c50 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
15c60 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
15c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
15cb0 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
15cc0 6e 20 50 72 69 76 61 74 65 20 53 74 61 74 69 63  n Private Static
15cd0 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
15ce0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
15cf0 61 74 69 63 20 76 6f 69 64 20 41 64 6a 75 73 74  atic void Adjust
15d00 53 75 62 4b 65 79 4e 61 6d 65 46 6f 72 57 68 61  SubKeyNameForWha
15d10 74 49 66 28 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf(..          
15d20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
15d30 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d50 72 65 66 20 73 74 72 69 6e 67 20 73 75 62 4b 65  ref string subKe
15d60 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
15d70 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
15d80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15d90 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
15da0 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
15db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dc0 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
15de0 72 69 6e 67 20 72 6f 6f 74 4b 65 79 53 75 62 4b  ring rootKeySubK
15df0 65 79 4e 61 6d 65 20 3d 20 72 6f 6f 74 4b 65 79  eyName = rootKey
15e00 2e 53 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 0d 0a  .SubKeyName;....
15e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e20 69 66 20 28 72 6f 6f 74 4b 65 79 53 75 62 4b 65  if (rootKeySubKe
15e30 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  yName == null)..
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e50 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
15e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
15e70 75 62 4b 65 79 4e 61 6d 65 20 3d 20 28 73 75 62  ubKeyName = (sub
15e80 4b 65 79 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  KeyName != null)
15e90 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
15ea0 20 20 20 20 20 20 20 20 4a 6f 69 6e 4b 65 79 4e          JoinKeyN
15eb0 61 6d 65 73 28 72 6f 6f 74 4b 65 79 53 75 62 4b  ames(rootKeySubK
15ec0 65 79 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e 61  eyName, subKeyNa
15ed0 6d 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20 20  me) :..         
15ee0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
15ef0 65 79 53 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20  eySubKeyName;.. 
15f00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
15f10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
15f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
15f60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
15f70 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
15f80 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
15f90 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
15fa0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
15fb0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
15fc0 4d 65 74 68 6f 64 4e 61 6d 65 28 29 0d 0a 20 20  MethodName()..  
15fd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
15ff0 75 72 6e 20 54 72 61 63 65 4f 70 73 2e 47 65 74  urn TraceOps.Get
16000 4d 65 74 68 6f 64 4e 61 6d 65 28 6e 75 6c 6c 2c  MethodName(null,
16010 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   1);..          
16020 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
16030 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
16040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16070 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
16080 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
16090 61 74 69 63 20 76 6f 69 64 20 4d 61 79 62 65 4c  atic void MaybeL
160a0 6f 67 4f 70 65 72 61 74 69 6f 6e 28 0d 0a 20 20  ogOperation(..  
160b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
160c0 72 69 6e 67 20 6d 65 74 68 6f 64 4e 61 6d 65 2c  ring methodName,
160d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
160e0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
160f0 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
16100 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
16110 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
16120 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
16130 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16140 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 79               May
16150 62 65 4c 6f 67 4f 70 65 72 61 74 69 6f 6e 28 6d  beLogOperation(m
16160 65 74 68 6f 64 4e 61 6d 65 2c 20 6b 65 79 2c 20  ethodName, key, 
16170 73 75 62 4b 65 79 4e 61 6d 65 2c 20 6e 75 6c 6c  subKeyName, null
16180 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
16190 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
161a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
161b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
161f0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
16200 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 4d 61  e static void Ma
16210 79 62 65 4c 6f 67 4f 70 65 72 61 74 69 6f 6e 28  ybeLogOperation(
16220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16230 20 20 73 74 72 69 6e 67 20 6d 65 74 68 6f 64 4e    string methodN
16240 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
16250 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
16260 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
16270 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
16280 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20  ng valueName,.. 
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
162a0 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20  bject value..   
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
162c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
162e0 61 79 62 65 4c 6f 67 4f 70 65 72 61 74 69 6f 6e  aybeLogOperation
162f0 28 6d 65 74 68 6f 64 4e 61 6d 65 2c 20 6b 65 79  (methodName, key
16300 2c 20 6e 75 6c 6c 2c 20 76 61 6c 75 65 4e 61 6d  , null, valueNam
16310 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  e, value);..    
16320 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
16330 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
16340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
16380 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
16390 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
163a0 4d 61 79 62 65 4c 6f 67 4f 70 65 72 61 74 69 6f  MaybeLogOperatio
163b0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
163c0 20 20 20 20 73 74 72 69 6e 67 20 6d 65 74 68 6f      string metho
163d0 64 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  dName,..        
163e0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
163f0 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
16410 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
16420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16430 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61    string valueNa
16440 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
16450 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
16460 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
16470 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
16480 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16490 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52       lock (syncR
164a0 6f 6f 74 29 20 2f 2a 20 54 52 41 4e 53 41 43 54  oot) /* TRANSACT
164b0 49 4f 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20 20  IONAL */..      
164c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
164d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164e0 20 69 66 20 28 6f 70 65 72 61 74 69 6f 6e 4c 69   if (operationLi
164f0 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st == null)..   
16500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16510 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
16520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16530 20 20 20 20 69 66 20 28 6d 65 74 68 6f 64 4e 61      if (methodNa
16540 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
16550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16560 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16570 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
16580 6e 67 20 74 79 70 65 50 72 65 66 69 78 20 3d 20  ng typePrefix = 
16590 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
165a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165b0 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
165c0 7b 31 7d 22 2c 20 74 79 70 65 6f 66 28 52 65 67  {1}", typeof(Reg
165d0 69 73 74 72 79 48 65 6c 70 65 72 29 2e 4e 61 6d  istryHelper).Nam
165e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
165f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16600 54 79 70 65 2e 44 65 6c 69 6d 69 74 65 72 29 3b  Type.Delimiter);
16610 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16620 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
16630 6d 65 74 68 6f 64 4e 61 6d 65 2e 53 74 61 72 74  methodName.Start
16640 73 57 69 74 68 28 0d 0a 20 20 20 20 20 20 20 20  sWith(..        
16650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16660 20 20 20 20 20 20 20 20 74 79 70 65 50 72 65 66          typePref
16670 69 78 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  ix, StringCompar
16680 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a  ison.Ordinal))..
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
166b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166c0 20 20 20 20 20 20 20 6d 65 74 68 6f 64 4e 61 6d         methodNam
166d0 65 20 3d 20 6d 65 74 68 6f 64 4e 61 6d 65 2e 53  e = methodName.S
166e0 75 62 73 74 72 69 6e 67 28 0d 0a 20 20 20 20 20  ubstring(..     
166f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16700 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 50             typeP
16710 72 65 66 69 78 2e 4c 65 6e 67 74 68 29 3b 0d 0a  refix.Length);..
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16730 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
16740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
16750 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16760 20 20 20 20 20 20 20 20 6f 70 65 72 61 74 69 6f          operatio
16770 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 52 65  nList.Add(new Re
16780 67 69 73 74 72 79 4f 70 65 72 61 74 69 6f 6e 28  gistryOperation(
16790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
167a0 20 20 20 20 20 20 20 20 20 20 6d 65 74 68 6f 64            method
167b0 4e 61 6d 65 2c 20 6b 65 79 2c 20 73 75 62 4b 65  Name, key, subKe
167c0 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65  yName, valueName
167d0 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20  , value));..    
167e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
167f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
16800 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
16810 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
16820 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
16830 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
16840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16880 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
16890 20 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73 74    #region Regist
168a0 72 79 4f 70 65 72 61 74 69 6f 6e 4c 69 73 74 20  ryOperationList 
168b0 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 5b  Class..        [
168c0 53 65 72 69 61 6c 69 7a 61 62 6c 65 28 29 5d 0d  Serializable()].
168d0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
168e0 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 52 65   sealed class Re
168f0 67 69 73 74 72 79 4f 70 65 72 61 74 69 6f 6e 4c  gistryOperationL
16900 69 73 74 20 3a 0d 0a 20 20 20 20 20 20 20 20 20  ist :..         
16910 20 20 20 4c 69 73 74 3c 52 65 67 69 73 74 72 79     List<Registry
16920 4f 70 65 72 61 74 69 6f 6e 3e 2c 20 49 44 69 73  Operation>, IDis
16930 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  posable..       
16940 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16950 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
16960 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
16970 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
16980 52 65 67 69 73 74 72 79 4f 70 65 72 61 74 69 6f  RegistryOperatio
16990 6e 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20  nList()..       
169a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
169b0 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
169c0 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
169d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
169e0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
169f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
16a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16a50 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
16a60 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
16a70 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  mbers..         
16a80 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
16a90 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20  disposed;..     
16aa0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
16ab0 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65  oid CheckDispose
16ac0 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  d() /* throw */.
16ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16af0 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
16b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b10 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
16b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
16b30 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44  hrow new ObjectD
16b40 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e  isposedException
16b50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16b60 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 52 65         typeof(Re
16b70 67 69 73 74 72 79 4f 70 65 72 61 74 69 6f 6e 4c  gistryOperationL
16b80 69 73 74 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20  ist).Name);..   
16b90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
16ba0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
16bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
16bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
16c00 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65  vate /* protecte
16c10 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69  d virtual */ voi
16c20 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20 20  d Dispose(..    
16c30 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
16c40 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20   disposing..    
16c50 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
16c60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16c80 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
16ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16cb0 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 69       if (disposi
16cc0 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng)..           
16cd0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
16ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cf0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d10 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
16d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d30 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e    // dispose man
16d40 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
16d50 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
16d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d90 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
16da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16db0 66 6f 72 65 61 63 68 20 28 52 65 67 69 73 74 72  foreach (Registr
16dc0 79 4f 70 65 72 61 74 69 6f 6e 20 6f 70 65 72 61  yOperation opera
16dd0 74 69 6f 6e 20 69 6e 20 74 68 69 73 29 0d 0a 20  tion in this).. 
16de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16df0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e10 20 20 20 20 20 20 69 66 20 28 6f 70 65 72 61 74        if (operat
16e20 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
16e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
16e50 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
16e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e70 20 20 20 20 20 20 20 6f 70 65 72 61 74 69 6f 6e         operation
16e80 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ea0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ec0 20 20 43 6c 65 61 72 28 29 3b 0d 0a 20 20 20 20    Clear();..    
16ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ee0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
16ef0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
16f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
16f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16f30 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
16f40 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
16f50 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f70 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
16fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16fb0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
16fc0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
16fd0 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e  This object is n
16fe0 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  ow disposed...  
16ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17000 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
17010 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
17020 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
17030 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
17040 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
17050 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
17060 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
17070 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
17080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
170a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
170b0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
170c0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
170d0 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
170e0 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
170f0 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
17100 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ose()..         
17110 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17120 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
17130 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
17140 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
17150 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
17160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
17170 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
17180 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
17190 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
171a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
171b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
171c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
171d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
171e0 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
171f0 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
17200 20 20 20 20 20 20 20 20 20 20 7e 52 65 67 69 73            ~Regis
17210 74 72 79 4f 70 65 72 61 74 69 6f 6e 4c 69 73 74  tryOperationList
17220 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
17230 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17240 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65     Dispose(false
17250 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
17260 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
17270 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
17280 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
17290 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
172a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
172b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
172c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
172d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
172e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
172f0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 52         #region R
17300 65 67 69 73 74 72 79 4f 70 65 72 61 74 69 6f 6e  egistryOperation
17310 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
17320 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
17330 6c 61 73 73 20 52 65 67 69 73 74 72 79 4f 70 65  lass RegistryOpe
17340 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ration..        
17350 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
17360 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
17370 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20  onstants..      
17380 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
17390 6e 73 74 20 63 68 61 72 20 46 69 65 6c 64 44 65  nst char FieldDe
173a0 6c 69 6d 69 74 65 72 20 3d 20 27 5c 74 27 3b 0d  limiter = '\t';.
173b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
173c0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
173d0 67 20 4c 69 73 74 45 6c 65 6d 65 6e 74 44 65 6c  g ListElementDel
173e0 69 6d 69 74 65 72 20 3d 20 22 2c 20 22 3b 0d 0a  imiter = ", ";..
173f0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
17400 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
17410 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
17420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17450 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
17460 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
17470 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
17480 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
17490 20 20 70 75 62 6c 69 63 20 52 65 67 69 73 74 72    public Registr
174a0 79 4f 70 65 72 61 74 69 6f 6e 28 0d 0a 20 20 20  yOperation(..   
174b0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
174c0 69 6e 67 20 6d 65 74 68 6f 64 4e 61 6d 65 2c 0d  ing methodName,.
174d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
174e0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
174f0 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
17500 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
17510 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
17520 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
17530 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20  g valueName,..  
17540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
17550 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20  ject value..    
17560 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
17570 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
17590 69 73 2e 6d 65 74 68 6f 64 4e 61 6d 65 20 3d 20  is.methodName = 
175a0 6d 65 74 68 6f 64 4e 61 6d 65 3b 0d 0a 20 20 20  methodName;..   
175b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
175c0 73 2e 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 73  s.subKeyName = s
175d0 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  ubKeyName;..    
175e0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
175f0 2e 76 61 6c 75 65 4e 61 6d 65 20 3d 20 76 61 6c  .valueName = val
17600 75 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  ueName;..       
17610 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 61           this.va
17620 6c 75 65 20 3d 20 76 61 6c 75 65 3b 0d 0a 0d 0a  lue = value;....
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17640 53 65 74 4b 65 79 28 6b 65 79 29 3b 0d 0a 20 20  SetKey(key);..  
17650 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
17660 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
17670 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
17680 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
17690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
176a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
176b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
176c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
176d0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
176e0 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20  ivate Methods.. 
176f0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
17700 74 65 20 76 6f 69 64 20 53 65 74 4b 65 79 28 0d  te void SetKey(.
17710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17720 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
17730 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20   key..          
17740 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
17750 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17760 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
17770 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
17780 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177a0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
177b0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
177c0 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73  : Make sure this
177d0 20 63 6f 70 79 20 6f 66 20 74 68 65 20 72 6f 6f   copy of the roo
177e0 74 20 72 65 67 69 73 74 72 79 20 6b 65 79 0d 0a  t registry key..
177f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17800 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6e      //       can
17810 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20 61  not be used to a
17820 63 63 69 64 65 6e 74 61 6c 6c 79 20 6d 61 6b 65  ccidentally make
17830 20 72 65 67 69 73 74 72 79 0d 0a 20 20 20 20 20   registry..     
17840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17850 2f 20 20 20 20 20 20 20 63 68 61 6e 67 65 73 2e  /       changes.
17860 20 20 41 6c 73 6f 2c 20 70 72 65 76 65 6e 74 20    Also, prevent 
17870 74 68 69 73 20 4d 6f 63 6b 52 65 67 69 73 74 72  this MockRegistr
17880 79 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20  yKey..          
17890 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
178a0 20 20 20 6f 62 6a 65 63 74 20 66 72 6f 6d 20 63     object from c
178b0 6c 6f 73 69 6e 67 20 69 74 73 20 75 6e 64 65 72  losing its under
178c0 6c 79 69 6e 67 20 72 65 67 69 73 74 72 79 0d 0a  lying registry..
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178e0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6b 65 79      //       key
178f0 20 61 73 20 77 65 20 77 69 6c 6c 20 6e 65 65 64   as we will need
17900 20 69 74 20 6c 61 74 65 72 2e 20 20 54 68 69 73   it later.  This
17910 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 20   instance..     
17920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17930 2f 20 20 20 20 20 20 20 77 69 6c 6c 20 63 6c 6f  /       will clo
17940 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  se it...        
17950 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 20 20 20 74 68 69 73 2e 6b 65 79 20 3d 20 6b      this.key = k
17980 65 79 2e 43 6c 6f 6e 65 28 74 72 75 65 2c 20 74  ey.Clone(true, t
17990 72 75 65 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20  rue, true);.... 
179a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179b0 20 20 20 6b 65 79 2e 44 69 73 61 62 6c 65 43 6c     key.DisableCl
179c0 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
179d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
179e0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
179f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17a00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17a10 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b 65 79          this.key
17a20 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
17a30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
17a40 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
17a50 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
17a60 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
17a70 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
17a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ab0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
17ac0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
17ad0 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
17ae0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
17af0 61 74 65 20 73 74 72 69 6e 67 20 6d 65 74 68 6f  ate string metho
17b00 64 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  dName;..        
17b10 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
17b20 67 20 4d 65 74 68 6f 64 4e 61 6d 65 0d 0a 20 20  g MethodName..  
17b30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17b40 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
17b50 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
17b60 28 29 3b 20 72 65 74 75 72 6e 20 6d 65 74 68 6f  (); return metho
17b70 64 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  dName; }..      
17b80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
17b90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
17ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
17be0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
17bf0 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
17c00 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20  y key;..        
17c10 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
17c20 65 67 69 73 74 72 79 4b 65 79 20 4b 65 79 0d 0a  egistryKey Key..
17c30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
17c50 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
17c60 65 64 28 29 3b 20 72 65 74 75 72 6e 20 6b 65 79  ed(); return key
17c70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
17c80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
17c90 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
17ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17cd0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
17ce0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
17cf0 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d  ing subKeyName;.
17d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
17d10 6c 69 63 20 73 74 72 69 6e 67 20 53 75 62 4b 65  lic string SubKe
17d20 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
17d30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17d40 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
17d50 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
17d60 75 72 6e 20 73 75 62 4b 65 79 4e 61 6d 65 3b 20  urn subKeyName; 
17d70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
17d80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17dd0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
17de0 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
17df0 67 20 76 61 6c 75 65 4e 61 6d 65 3b 0d 0a 20 20  g valueName;..  
17e00 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
17e10 20 73 74 72 69 6e 67 20 56 61 6c 75 65 4e 61 6d   string ValueNam
17e20 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
17e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e40 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
17e50 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
17e60 76 61 6c 75 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20  valueName; }..  
17e70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
17e80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
17e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
17ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
17ee0 69 76 61 74 65 20 6f 62 6a 65 63 74 20 76 61 6c  ivate object val
17ef0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17f00 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20 56   public object V
17f10 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
17f20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17f30 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
17f40 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
17f50 72 6e 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20  rn value; }..   
17f60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
17f70 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
17f80 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
17f90 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
17fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17fd0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
17fe0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
17ff0 6c 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f  lic Static Metho
18000 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
18010 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
18020 72 69 6e 67 20 47 65 74 48 65 61 64 65 72 4c 69  ring GetHeaderLi
18030 6e 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ne()..          
18040 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18050 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
18060 65 72 20 62 75 69 6c 64 65 72 20 3d 20 6e 65 77  er builder = new
18070 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29   StringBuilder()
18080 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18090 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70       builder.App
180a0 65 6e 64 28 22 4d 65 74 68 6f 64 4e 61 6d 65 22  end("MethodName"
180b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
180c0 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65      builder.Appe
180d0 6e 64 28 46 69 65 6c 64 44 65 6c 69 6d 69 74 65  nd(FieldDelimite
180e0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
180f0 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70 70       builder.App
18100 65 6e 64 28 22 4b 65 79 22 29 3b 0d 0a 20 20 20  end("Key");..   
18110 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69               bui
18120 6c 64 65 72 2e 41 70 70 65 6e 64 28 46 69 65 6c  lder.Append(Fiel
18130 64 44 65 6c 69 6d 69 74 65 72 29 3b 0d 0a 20 20  dDelimiter);..  
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75                bu
18150 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 53 75  ilder.Append("Su
18160 62 4b 65 79 4e 61 6d 65 22 29 3b 0d 0a 20 20 20  bKeyName");..   
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69               bui
18180 6c 64 65 72 2e 41 70 70 65 6e 64 28 46 69 65 6c  lder.Append(Fiel
18190 64 44 65 6c 69 6d 69 74 65 72 29 3b 0d 0a 20 20  dDelimiter);..  
181a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75                bu
181b0 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 56 61  ilder.Append("Va
181c0 6c 75 65 4e 61 6d 65 22 29 3b 0d 0a 20 20 20 20  lueName");..    
181d0 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c              buil
181e0 64 65 72 2e 41 70 70 65 6e 64 28 46 69 65 6c 64  der.Append(Field
181f0 44 65 6c 69 6d 69 74 65 72 29 3b 0d 0a 20 20 20  Delimiter);..   
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69               bui
18210 6c 64 65 72 2e 41 70 70 65 6e 64 28 22 56 61 6c  lder.Append("Val
18220 75 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ue");....       
18230 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
18240 62 75 69 6c 64 65 72 2e 54 6f 53 74 72 69 6e 67  builder.ToString
18250 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
18260 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18270 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
18280 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
18290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
182d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
182e0 67 69 6f 6e 20 53 79 73 74 65 6d 2e 4f 62 6a 65  gion System.Obje
182f0 63 74 20 4f 76 65 72 72 69 64 65 73 0d 0a 20 20  ct Overrides..  
18300 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
18310 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
18320 20 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20 20   ToString()..   
18330 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
18340 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
18350 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
18360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18370 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 62 75  StringBuilder bu
18380 69 6c 64 65 72 20 3d 20 6e 65 77 20 53 74 72 69  ilder = new Stri
18390 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a  ngBuilder();....
183a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183b0 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 46  builder.Append(F
183c0 6f 72 44 69 73 70 6c 61 79 28 6d 65 74 68 6f 64  orDisplay(method
183d0 4e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20 20  Name));..       
183e0 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65 72           builder
183f0 2e 41 70 70 65 6e 64 28 46 69 65 6c 64 44 65 6c  .Append(FieldDel
18400 69 6d 69 74 65 72 29 3b 0d 0a 20 20 20 20 20 20  imiter);..      
18410 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 65            builde
18420 72 2e 41 70 70 65 6e 64 28 46 6f 72 44 69 73 70  r.Append(ForDisp
18430 6c 61 79 28 6b 65 79 29 29 3b 0d 0a 20 20 20 20  lay(key));..    
18440 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c              buil
18450 64 65 72 2e 41 70 70 65 6e 64 28 46 69 65 6c 64  der.Append(Field
18460 44 65 6c 69 6d 69 74 65 72 29 3b 0d 0a 20 20 20  Delimiter);..   
18470 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69               bui
18480 6c 64 65 72 2e 41 70 70 65 6e 64 28 46 6f 72 44  lder.Append(ForD
18490 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
184a0 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e));..          
184b0 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41 70        builder.Ap
184c0 70 65 6e 64 28 46 69 65 6c 64 44 65 6c 69 6d 69  pend(FieldDelimi
184d0 74 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ter);..         
184e0 20 20 20 20 20 20 20 62 75 69 6c 64 65 72 2e 41         builder.A
184f0 70 70 65 6e 64 28 46 6f 72 44 69 73 70 6c 61 79  ppend(ForDisplay
18500 28 76 61 6c 75 65 4e 61 6d 65 29 29 3b 0d 0a 20  (valueName));.. 
18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
18520 75 69 6c 64 65 72 2e 41 70 70 65 6e 64 28 46 69  uilder.Append(Fi
18530 65 6c 64 44 65 6c 69 6d 69 74 65 72 29 3b 0d 0a  eldDelimiter);..
18540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18550 20 20 62 75 69 6c 64 65 72 2e 41 70 70 65 6e 64    builder.Append
18560 28 46 6f 72 44 69 73 70 6c 61 79 28 4d 6f 63 6b  (ForDisplay(Mock
18570 52 65 67 69 73 74 72 79 4b 65 79 2e 56 61 6c 75  RegistryKey.Valu
18580 65 54 6f 53 74 72 69 6e 67 28 0d 0a 20 20 20 20  eToString(..    
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185a0 76 61 6c 75 65 2c 20 4c 69 73 74 45 6c 65 6d 65  value, ListEleme
185b0 6e 74 44 65 6c 69 6d 69 74 65 72 2c 20 44 69 73  ntDelimiter, Dis
185c0 70 6c 61 79 4e 75 6c 6c 29 29 29 3b 0d 0a 0d 0a  playNull)));....
185d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185e0 72 65 74 75 72 6e 20 62 75 69 6c 64 65 72 2e 54  return builder.T
185f0 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
18600 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18610 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
18620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
18660 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
18670 69 63 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  ic override bool
18680 20 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20   Equals(..      
18690 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
186a0 20 6f 62 6a 0d 0a 20 20 20 20 20 20 20 20 20 20   obj..          
186b0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
186c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
186d0 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
186e0 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
186f0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
18700 73 74 72 79 4f 70 65 72 61 74 69 6f 6e 20 6f 70  stryOperation op
18710 65 72 61 74 69 6f 6e 20 3d 20 6f 62 6a 20 61 73  eration = obj as
18720 20 52 65 67 69 73 74 72 79 4f 70 65 72 61 74 69   RegistryOperati
18730 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  on;....         
18740 20 20 20 20 20 20 20 69 66 20 28 6f 70 65 72 61         if (opera
18750 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tion == null).. 
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18770 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
18780 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18790 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
187a0 45 71 75 61 6c 73 28 6f 70 65 72 61 74 69 6f 6e  Equals(operation
187b0 2e 6d 65 74 68 6f 64 4e 61 6d 65 2c 20 6d 65 74  .methodName, met
187c0 68 6f 64 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  hodName))..     
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
187e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
187f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18800 69 66 20 28 21 4d 6f 63 6b 52 65 67 69 73 74 72  if (!MockRegistr
18810 79 4b 65 79 2e 45 71 75 61 6c 73 28 6f 70 65 72  yKey.Equals(oper
18820 61 74 69 6f 6e 2e 6b 65 79 2c 20 6b 65 79 29 29  ation.key, key))
18830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18840 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
18850 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
18860 20 20 20 20 20 20 20 69 66 20 28 21 4d 6f 63 6b         if (!Mock
18870 52 65 67 69 73 74 72 79 4b 65 79 2e 4e 61 6d 65  RegistryKey.Name
18880 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20  Equals(..       
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188a0 20 6f 70 65 72 61 74 69 6f 6e 2e 73 75 62 4b 65   operation.subKe
188b0 79 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e 61 6d  yName, subKeyNam
188c0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
188d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
188e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
188f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
18900 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18920 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
18930 6c 73 28 6f 70 65 72 61 74 69 6f 6e 2e 76 61 6c  ls(operation.val
18940 75 65 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d  ueName, valueNam
18950 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
18960 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
18970 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
18980 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 4d            if (!M
18990 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e 56  ockRegistryKey.V
189a0 61 6c 75 65 45 71 75 61 6c 73 28 6f 70 65 72 61  alueEquals(opera
189b0 74 69 6f 6e 2e 76 61 6c 75 65 2c 20 76 61 6c 75  tion.value, valu
189c0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
189d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
189e0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
189f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18a00 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
18a10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18a20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
18a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18a70 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
18a80 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 48  verride int GetH
18a90 61 73 68 43 6f 64 65 28 29 0d 0a 20 20 20 20 20  ashCode()..     
18aa0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18ab0 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
18ac0 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
18ae0 74 20 72 65 73 75 6c 74 20 3d 20 30 3b 0d 0a 0d  t result = 0;...
18af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18b00 20 69 66 20 28 6d 65 74 68 6f 64 4e 61 6d 65 20   if (methodName 
18b10 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
18b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18b30 73 75 6c 74 20 5e 3d 20 6d 65 74 68 6f 64 4e 61  sult ^= methodNa
18b40 6d 65 2e 47 65 74 48 61 73 68 43 6f 64 65 28 29  me.GetHashCode()
18b50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18b60 20 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 4d       result ^= M
18b70 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 2e 47  ockRegistryKey.G
18b80 65 74 48 61 73 68 43 6f 64 65 28 6b 65 79 29 3b  etHashCode(key);
18b90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18ba0 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 4e 61      if (subKeyNa
18bb0 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bd0 20 72 65 73 75 6c 74 20 5e 3d 20 73 75 62 4b 65   result ^= subKe
18be0 79 4e 61 6d 65 2e 47 65 74 48 61 73 68 43 6f 64  yName.GetHashCod
18bf0 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
18c00 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
18c10 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  eName != null)..
18c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c30 20 20 20 20 72 65 73 75 6c 74 20 5e 3d 20 76 61      result ^= va
18c40 6c 75 65 4e 61 6d 65 2e 47 65 74 48 61 73 68 43  lueName.GetHashC
18c50 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ode();....      
18c60 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
18c70 20 5e 3d 20 4d 6f 63 6b 52 65 67 69 73 74 72 79   ^= MockRegistry
18c80 4b 65 79 2e 56 61 6c 75 65 48 61 73 68 43 6f 64  Key.ValueHashCod
18c90 65 28 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20  e(value);....   
18ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
18cb0 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
18cc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
18cd0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
18ce0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
18cf0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
18d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d30 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
18d40 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69       #region IDi
18d50 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72  sposable "Patter
18d60 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20  n" Members..    
18d70 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
18d80 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a  bool disposed;..
18d90 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
18da0 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69  ate void CheckDi
18db0 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f  sposed() /* thro
18dc0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
18dd0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18de0 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73       if (!dispos
18df0 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
18e00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
18e10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18e20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
18e30 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
18e40 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
18e50 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
18e60 6f 66 28 52 65 67 69 73 74 72 79 4f 70 65 72 61  of(RegistryOpera
18e70 74 69 6f 6e 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  tion).Name);..  
18e80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
18e90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
18ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
18ef0 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
18f00 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
18f10 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20  id Dispose(..   
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
18f30 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20  l disposing..   
18f40 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
18f50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18f70 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
18f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18fa0 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
18fb0 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
18fc0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fe0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
18ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19000 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
19010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19020 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
19030 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
19040 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19060 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
19070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19080 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
19090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190a0 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c   if (key != null
190b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
190c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190e0 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43 6c            key.Cl
190f0 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d      key = null;.
19120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19130 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19150 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
19160 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
19170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
19190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
191a0 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
191b0 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
191c0 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
191d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
191f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19200 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19220 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
19230 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
19240 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e  This object is n
19250 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  ow disposed...  
19260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19270 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
19280 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
19290 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
192a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
192b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
192c0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
192d0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
192e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
192f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19320 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
19330 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
19340 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
19350 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
19360 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
19370 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ose()..         
19380 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19390 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
193a0 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
193b0 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
193c0 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
193d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
193e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
193f0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
19400 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
19410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
19450 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
19460 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
19470 20 20 20 20 20 20 20 20 20 20 7e 52 65 67 69 73            ~Regis
19480 74 72 79 4f 70 65 72 61 74 69 6f 6e 28 29 0d 0a  tryOperation()..
19490 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
194a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
194b0 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a  ispose(false);..
194c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
194d0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
194e0 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
194f0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
19500 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
19510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19550 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
19560 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69 6e     #region Strin
19570 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20  gList Class..   
19580 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
19590 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67  led class String
195a0 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73 74 72 69  List : List<stri
195b0 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ng>..        {..
195c0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
195d0 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28 29 0d  ic StringList().
195e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
195f0 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20   : base()..     
19600 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19610 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
19620 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
19630 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19640 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
19650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
19690 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
196a0 20 53 74 72 69 6e 67 4c 69 73 74 28 49 45 6e 75   StringList(IEnu
196b0 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e 67 3e 20  merable<string> 
196c0 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20  collection)..   
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62               : b
196e0 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d  ase(collection).
196f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19710 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
19720 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
19730 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19740 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
19750 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
197a0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
197b0 6f 6e 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e  on StringDiction
197c0 61 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  ary Class..     
197d0 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
197e0 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67 44 69  d class StringDi
197f0 63 74 69 6f 6e 61 72 79 20 3a 20 44 69 63 74 69  ctionary : Dicti
19800 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 73 74  onary<string, st
19810 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b  ring>..        {
19820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
19830 62 6c 69 63 20 53 74 72 69 6e 67 44 69 63 74 69  blic StringDicti
19840 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20 20 20 20  onary()..       
19850 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19860 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
19870 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
19880 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
19890 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
198a0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
198b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
198c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
198d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
198e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
198f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
19900 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69     #region Versi
19910 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20  onList Class..  
19920 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
19930 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73 69  aled class Versi
19940 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74 3c 56 65  onList : List<Ve
19950 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20 20 20 20  rsion>..        
19960 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
19970 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73  ublic VersionLis
19980 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t()..           
19990 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20       : base().. 
199a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
199c0 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
199d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
199e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
199f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
19a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
19a40 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74  blic VersionList
19a50 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 56 65 72  (IEnumerable<Ver
19a60 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e  sion> collection
19a70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19a80 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63     : base(collec
19a90 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20  tion)..         
19aa0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19ab0 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
19ac0 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
19ad0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
19ae0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
19af0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
19b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b40 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
19b50 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e   #region Version
19b60 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  Map Class..     
19b70 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
19b80 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e 4d  d class VersionM
19b90 61 70 20 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c  ap : Dictionary<
19ba0 73 74 72 69 6e 67 2c 20 56 65 72 73 69 6f 6e 4c  string, VersionL
19bb0 69 73 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ist>..        {.
19bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
19bd0 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 28 29  lic VersionMap()
19be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
19bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19c00 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
19c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
19c20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
19c30 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
19c40 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
19c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
19ca0 69 6f 6e 20 50 61 63 6b 61 67 65 20 43 6c 61 73  ion Package Clas
19cb0 73 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72  s..        inter
19cc0 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73 73  nal sealed class
19cd0 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20   Package..      
19ce0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19cf0 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
19d00 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
19d10 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
19d20 20 50 61 63 6b 61 67 65 28 29 0d 0a 20 20 20 20   Package()..    
19d30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19d40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
19d50 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
19d60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19d70 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
19d80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19dd0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
19de0 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
19df0 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
19e00 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
19e10 65 20 73 74 72 69 6e 67 20 70 72 6f 76 69 64 65  e string provide
19e20 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b 0d  rInvariantName;.
19e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
19e40 6c 69 63 20 73 74 72 69 6e 67 20 50 72 6f 76 69  lic string Provi
19e50 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  derInvariantName
19e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
19e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19e80 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 72   get { return pr
19e90 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e  oviderInvariantN
19ea0 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
19eb0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70 72          set { pr
19ec0 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e  oviderInvariantN
19ed0 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
19ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
19f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19f50 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 66  private string f
19f60 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b 0d  actoryTypeName;.
19f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
19f80 6c 69 63 20 73 74 72 69 6e 67 20 46 61 63 74 6f  lic string Facto
19f90 72 79 54 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20  ryTypeName..    
19fa0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19fb0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
19fc0 20 72 65 74 75 72 6e 20 66 61 63 74 6f 72 79 54   return factoryT
19fd0 79 70 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ypeName; }..    
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
19ff0 7b 20 66 61 63 74 6f 72 79 54 79 70 65 4e 61 6d  { factoryTypeNam
1a000 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
1a010 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1a020 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1a030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1a070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1a080 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61  ivate AssemblyNa
1a090 6d 65 20 70 72 6f 76 69 64 65 72 41 73 73 65 6d  me providerAssem
1a0a0 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  blyName;..      
1a0b0 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73        public Ass
1a0c0 65 6d 62 6c 79 4e 61 6d 65 20 50 72 6f 76 69 64  emblyName Provid
1a0d0 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a  erAssemblyName..
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1a100 65 74 20 7b 20 72 65 74 75 72 6e 20 70 72 6f 76  et { return prov
1a110 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  iderAssemblyName
1a120 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1a130 20 20 20 20 20 73 65 74 20 7b 20 70 72 6f 76 69       set { provi
1a140 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  derAssemblyName 
1a150 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1a160 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1a170 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1a180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1a1d0 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  ate AssemblyName
1a1e0 20 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c   designerAssembl
1a1f0 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
1a200 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
1a210 62 6c 79 4e 61 6d 65 20 44 65 73 69 67 6e 65 72  blyName Designer
1a220 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20 20  AssemblyName..  
1a230 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a240 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1a250 20 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e   { return design
1a260 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 20  erAssemblyName; 
1a270 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1a280 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65     set { designe
1a290 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20  rAssemblyName = 
1a2a0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1a2b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a2c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1a2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1a310 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1a320 65 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73  e bool globalAss
1a330 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20 20  emblyCache;..   
1a340 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1a350 62 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65 6d  bool GlobalAssem
1a360 62 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20 20  blyCache..      
1a370 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a380 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1a390 65 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73 65  eturn globalAsse
1a3a0 6d 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20 20  mblyCache; }..  
1a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1a3c0 74 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62  t { globalAssemb
1a3d0 6c 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65 3b  lyCache = value;
1a3e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1a3f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1a400 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1a410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a440 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1a450 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64      private Guid
1a460 20 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20 20   packageId;..   
1a470 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1a480 47 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d 0a  Guid PackageId..
1a490 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1a4b0 65 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63 6b  et { return pack
1a4c0 61 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20  ageId; }..      
1a4d0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1a4e0 70 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c 75  packageId = valu
1a4f0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1a500 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1a510 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1a520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a550 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1a560 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75        private Gu
1a570 69 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a 20  id serviceId;.. 
1a580 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1a590 63 20 47 75 69 64 20 53 65 72 76 69 63 65 49 64  c Guid ServiceId
1a5a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1a5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a5c0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 65   get { return se
1a5d0 72 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20  rviceId; }..    
1a5e0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1a5f0 7b 20 73 65 72 76 69 63 65 49 64 20 3d 20 76 61  { serviceId = va
1a600 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1a610 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1a620 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1a630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a660 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1a670 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1a680 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65 49  Guid dataSourceI
1a690 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
1a6a0 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61  public Guid Data
1a6b0 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20  SourceId..      
1a6c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a6d0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1a6e0 65 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63 65  eturn dataSource
1a6f0 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  Id; }..         
1a700 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74         set { dat
1a710 61 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c 75  aSourceId = valu
1a720 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1a730 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1a740 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1a750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a780 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1a790 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75        private Gu
1a7a0 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 49  id dataProviderI
1a7b0 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
1a7c0 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61  public Guid Data
1a7d0 50 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20 20  ProviderId..    
1a7e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a7f0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1a800 20 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f 76   return dataProv
1a810 69 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20 20  iderId; }..     
1a820 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1a830 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64 20   dataProviderId 
1a840 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1a850 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1a860 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1a870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1a8c0 61 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74 54  ate Guid adoNetT
1a8d0 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20 20  echnologyId;..  
1a8e0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1a8f0 20 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63 68   Guid AdoNetTech
1a900 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20 20  nologyId..      
1a910 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a920 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1a930 65 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63 68  eturn adoNetTech
1a940 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20 20  nologyId; }..   
1a950 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1a960 20 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c   { adoNetTechnol
1a970 6f 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d  ogyId = value; }
1a980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1a990 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
1a9a0 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
1a9b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
1a9c0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1a9d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1a9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1aa20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e       #region Con
1aa30 66 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73 73  figuration Class
1aa40 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1aa50 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43  e sealed class C
1aa60 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20  onfiguration..  
1aa70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1aa80 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
1aa90 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a  vate Constants..
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1aab0 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 53  ate const char S
1aac0 77 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20 20  witch = '-';..  
1aad0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1aae0 65 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c 74  e const char Alt
1aaf0 53 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a 0d  Switch = '/';...
1ab00 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1ab10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ab60 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
1ab70 65 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20 53  eadonly char[] S
1ab80 77 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d 0a  witchChars = {..
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aba0 53 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74 63  Switch, AltSwitc
1abb0 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  h..            }
1abc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1abd0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1abe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1abf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac10 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1ac20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
1ac30 74 20 73 74 72 69 6e 67 20 49 6e 76 61 72 69 61  t string Invaria
1ac40 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  ntName = "System
1ac50 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a  .Data.SQLite";..
1ac60 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1ac70 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
1ac80 20 45 66 36 49 6e 76 61 72 69 61 6e 74 4e 61 6d   Ef6InvariantNam
1ac90 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61  e = "System.Data
1aca0 2e 53 51 4c 69 74 65 2e 45 46 36 22 3b 0d 0a 0d  .SQLite.EF6";...
1acb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1acc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1acd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ace0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1acf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ad10 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1ad20 72 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70 65  ring FactoryType
1ad30 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20  Name =..        
1ad40 20 20 20 20 20 20 20 20 22 53 79 73 74 65 6d 2e          "System.
1ad50 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
1ad60 74 65 46 61 63 74 6f 72 79 22 3b 0d 0a 0d 0a 20  teFactory";.... 
1ad70 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1ad80 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
1ad90 45 66 36 46 61 63 74 6f 72 79 54 79 70 65 4e 61  Ef6FactoryTypeNa
1ada0 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  me =..          
1adb0 20 20 20 20 20 20 22 53 79 73 74 65 6d 2e 44 61        "System.Da
1adc0 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 53 51  ta.SQLite.EF6.SQ
1add0 4c 69 74 65 50 72 6f 76 69 64 65 72 46 61 63 74  LiteProviderFact
1ade0 6f 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory";..         
1adf0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1ae00 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1ae10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ae60 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
1ae70 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20  Static Data..   
1ae80 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1ae90 20 73 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79   static Assembly
1aea0 20 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62   systemEf6Assemb
1aeb0 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly;..           
1aec0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1aed0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1aee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1af20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
1af30 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61  egion Private Da
1af40 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ta..            
1af50 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79  private Assembly
1af60 4e 61 6d 65 20 63 6f 72 65 41 73 73 65 6d 62 6c  Name coreAssembl
1af70 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
1af80 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65      private Asse
1af90 6d 62 6c 79 4e 61 6d 65 20 6c 69 6e 71 41 73 73  mblyName linqAss
1afa0 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
1afb0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1afc0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 65 66 36  AssemblyName ef6
1afd0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20  AssemblyName;.. 
1afe0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1aff0 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  te AssemblyName 
1b000 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  designerAssembly
1b010 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
1b020 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1b030 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1b040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b080 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b090 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
1b0a0 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
1b0b0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1b0c0 65 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28  e Configuration(
1b0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b0e0 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d    Assembly assem
1b0f0 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  bly,..          
1b100 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f 67        string log
1b110 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
1b120 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1b130 67 20 72 65 67 69 73 74 72 79 4c 6f 67 46 69 6c  g registryLogFil
1b140 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
1b150 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
1b160 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
1b170 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1b180 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d  g coreFileName,.
1b190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b1a0 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
1b1b0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
1b1c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 66         string ef
1b1d0 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  6FileName,..    
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1b1f0 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng designerFileN
1b200 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
1b210 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 67        string reg
1b220 69 73 74 72 79 56 65 72 73 69 6f 6e 2c 0d 0a 20  istryVersion,.. 
1b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1b240 74 72 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73  tring configVers
1b250 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
1b260 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 73 56        string vsV
1b270 65 72 73 69 6f 6e 53 75 66 66 69 78 2c 0d 0a 20  ersionSuffix,.. 
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1b290 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d 61  tring debugForma
1b2a0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1b2b0 20 20 20 20 73 74 72 69 6e 67 20 74 72 61 63 65      string trace
1b2c0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1b2d0 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
1b2e0 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61  Flags installFla
1b2f0 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
1b300 20 20 20 20 20 50 72 6f 76 69 64 65 72 46 6c 61       ProviderFla
1b310 67 73 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73  gs providerFlags
1b320 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b330 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1b340 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 2c 0d   debugPriority,.
1b350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b360 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
1b370 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
1b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1b390 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
1b3b0 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20  ol install,..   
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1b3d0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
1b3e0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
1b3f0 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  oRuntimeVersion,
1b400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b410 20 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70    bool noDesktop
1b420 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b430 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63     bool noCompac
1b440 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1b450 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78      bool noNetFx
1b460 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20,..           
1b470 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46       bool noNetF
1b480 78 33 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  x35,..          
1b490 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74        bool noNet
1b4a0 46 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  Fx40,..         
1b4b0 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65         bool noNe
1b4c0 74 46 78 34 35 2c 0d 0a 20 20 20 20 20 20 20 20  tFx45,..        
1b4d0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e          bool noN
1b4e0 65 74 46 78 34 35 31 2c 0d 0a 20 20 20 20 20 20  etFx451,..      
1b4f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
1b500 6f 4e 65 74 46 78 34 35 32 2c 0d 0a 20 20 20 20  oNetFx452,..    
1b510 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1b520 20 6e 6f 4e 65 74 46 78 34 36 2c 0d 0a 20 20 20   noNetFx46,..   
1b530 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1b540 6c 20 6e 6f 4e 65 74 46 78 34 36 31 2c 0d 0a 20  l noNetFx461,.. 
1b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1b560 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 32 2c 0d  ool noNetFx462,.
1b570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b580 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 37 2c   bool noNetFx47,
1b590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b5a0 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 37    bool noNetFx47
1b5b0 31 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1,..            
1b5c0 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78      bool noNetFx
1b5d0 34 37 32 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  472,..          
1b5e0 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
1b5f0 30 30 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  005,..          
1b600 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
1b610 30 30 38 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  008,..          
1b620 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
1b630 30 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  010,..          
1b640 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
1b650 30 31 32 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  012,..          
1b660 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
1b670 30 31 33 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  013,..          
1b680 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
1b690 30 31 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  015,..          
1b6a0 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32        bool noVs2
1b6b0 30 31 37 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  017,..          
1b6c0 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 54 72 61        bool noTra
1b6d0 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce,..           
1b6e0 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73       bool noCons
1b6f0 6f 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ole,..          
1b700 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67        bool noLog
1b710 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b720 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
1b730 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
1b740 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
1b750 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
1b760 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 65 62 75         bool debu
1b770 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
1b780 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
1b790 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b7a0 20 20 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d     bool confirm.
1b7b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b7c0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
1b7d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b7e0 20 20 20 74 68 69 73 2e 61 73 73 65 6d 62 6c 79     this.assembly
1b7f0 20 3d 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20   = assembly;..  
1b800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1b810 69 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d  is.logFileName =
1b820 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20   logFileName;.. 
1b830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b840 68 69 73 2e 72 65 67 69 73 74 72 79 4c 6f 67 46  his.registryLogF
1b850 69 6c 65 4e 61 6d 65 20 3d 20 72 65 67 69 73 74  ileName = regist
1b860 72 79 4c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a  ryLogFileName;..
1b870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b880 74 68 69 73 2e 64 69 72 65 63 74 6f 72 79 20 3d  this.directory =
1b890 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20   directory;..   
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1b8b0 73 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  s.coreFileName =
1b8c0 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a   coreFileName;..
1b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8e0 74 68 69 73 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d  this.linqFileNam
1b8f0 65 20 3d 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  e = linqFileName
1b900 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1b910 20 20 20 74 68 69 73 2e 65 66 36 46 69 6c 65 4e     this.ef6FileN
1b920 61 6d 65 20 3d 20 65 66 36 46 69 6c 65 4e 61 6d  ame = ef6FileNam
1b930 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b940 20 20 20 20 74 68 69 73 2e 64 65 73 69 67 6e 65      this.designe
1b950 72 46 69 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69  rFileName = desi
1b960 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  gnerFileName;.. 
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b980 68 69 73 2e 72 65 67 69 73 74 72 79 56 65 72 73  his.registryVers
1b990 69 6f 6e 20 3d 20 72 65 67 69 73 74 72 79 56 65  ion = registryVe
1b9a0 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
1b9b0 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e          this.con
1b9c0 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 63 6f 6e  figVersion = con
1b9d0 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  figVersion;..   
1b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1b9f0 73 2e 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69  s.vsVersionSuffi
1ba00 78 20 3d 20 76 73 56 65 72 73 69 6f 6e 53 75 66  x = vsVersionSuf
1ba10 66 69 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  fix;..          
1ba20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62 75 67        this.debug
1ba30 46 6f 72 6d 61 74 20 3d 20 64 65 62 75 67 46 6f  Format = debugFo
1ba40 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
1ba50 20 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63         this.trac
1ba60 65 46 6f 72 6d 61 74 20 3d 20 74 72 61 63 65 46  eFormat = traceF
1ba70 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
1ba80 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73          this.ins
1ba90 74 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74  tallFlags = inst
1baa0 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20  allFlags;..     
1bab0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
1bac0 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 3d 20  providerFlags = 
1bad0 70 72 6f 76 69 64 65 72 46 6c 61 67 73 3b 0d 0a  providerFlags;..
1bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baf0 74 68 69 73 2e 64 65 62 75 67 50 72 69 6f 72 69  this.debugPriori
1bb00 74 79 20 3d 20 64 65 62 75 67 50 72 69 6f 72 69  ty = debugPriori
1bb10 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
1bb20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65 50       this.traceP
1bb30 72 69 6f 72 69 74 79 20 3d 20 74 72 61 63 65 50  riority = traceP
1bb40 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20  riority;..      
1bb50 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 70            this.p
1bb60 65 72 55 73 65 72 20 3d 20 70 65 72 55 73 65 72  erUser = perUser
1bb70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1bb80 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 20     this.install 
1bb90 3d 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20  = install;..    
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1bbb0 2e 77 6f 77 36 34 20 3d 20 77 6f 77 36 34 3b 0d  .wow64 = wow64;.
1bbc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bbd0 20 74 68 69 73 2e 6e 6f 52 75 6e 74 69 6d 65 56   this.noRuntimeV
1bbe0 65 72 73 69 6f 6e 20 3d 20 6e 6f 52 75 6e 74 69  ersion = noRunti
1bbf0 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  meVersion;..    
1bc00 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1bc10 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 6e 6f 44  .noDesktop = noD
1bc20 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20  esktop;..       
1bc30 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
1bc40 43 6f 6d 70 61 63 74 20 3d 20 6e 6f 43 6f 6d 70  Compact = noComp
1bc50 61 63 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  act;..          
1bc60 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74        this.noNet
1bc70 46 78 32 30 20 3d 20 6e 6f 4e 65 74 46 78 32 30  Fx20 = noNetFx20
1bc80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1bc90 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 33     this.noNetFx3
1bca0 35 20 3d 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a  5 = noNetFx35;..
1bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcc0 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d  this.noNetFx40 =
1bcd0 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20   noNetFx40;..   
1bce0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1bcf0 73 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20 6e 6f  s.noNetFx45 = no
1bd00 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20  NetFx45;..      
1bd10 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
1bd20 6f 4e 65 74 46 78 34 35 31 20 3d 20 6e 6f 4e 65  oNetFx451 = noNe
1bd30 74 46 78 34 35 31 3b 0d 0a 20 20 20 20 20 20 20  tFx451;..       
1bd40 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
1bd50 4e 65 74 46 78 34 35 32 20 3d 20 6e 6f 4e 65 74  NetFx452 = noNet
1bd60 46 78 34 35 32 3b 0d 0a 20 20 20 20 20 20 20 20  Fx452;..        
1bd70 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e          this.noN
1bd80 65 74 46 78 34 36 20 3d 20 6e 6f 4e 65 74 46 78  etFx46 = noNetFx
1bd90 34 36 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  46;..           
1bda0 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46       this.noNetF
1bdb0 78 34 36 31 20 3d 20 6e 6f 4e 65 74 46 78 34 36  x461 = noNetFx46
1bdc0 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1;..            
1bdd0 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78      this.noNetFx
1bde0 34 36 32 20 3d 20 6e 6f 4e 65 74 46 78 34 36 32  462 = noNetFx462
1bdf0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1be00 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34     this.noNetFx4
1be10 37 20 3d 20 6e 6f 4e 65 74 46 78 34 37 3b 0d 0a  7 = noNetFx47;..
1be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be30 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 37 31 20  this.noNetFx471 
1be40 3d 20 6e 6f 4e 65 74 46 78 34 37 31 3b 0d 0a 20  = noNetFx471;.. 
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1be60 68 69 73 2e 6e 6f 4e 65 74 46 78 34 37 32 20 3d  his.noNetFx472 =
1be70 20 6e 6f 4e 65 74 46 78 34 37 32 3b 0d 0a 20 20   noNetFx472;..  
1be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1be90 69 73 2e 6e 6f 56 73 32 30 30 35 20 3d 20 6e 6f  is.noVs2005 = no
1bea0 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20 20  Vs2005;..       
1beb0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
1bec0 56 73 32 30 30 38 20 3d 20 6e 6f 56 73 32 30 30  Vs2008 = noVs200
1bed0 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  8;..            
1bee0 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31      this.noVs201
1bef0 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20  0 = noVs2010;.. 
1bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1bf10 68 69 73 2e 6e 6f 56 73 32 30 31 32 20 3d 20 6e  his.noVs2012 = n
1bf20 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20 20 20 20  oVs2012;..      
1bf30 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
1bf40 6f 56 73 32 30 31 33 20 3d 20 6e 6f 56 73 32 30  oVs2013 = noVs20
1bf50 31 33 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  13;..           
1bf60 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30       this.noVs20
1bf70 31 35 20 3d 20 6e 6f 56 73 32 30 31 35 3b 0d 0a  15 = noVs2015;..
1bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf90 74 68 69 73 2e 6e 6f 56 73 32 30 31 37 20 3d 20  this.noVs2017 = 
1bfa0 6e 6f 56 73 32 30 31 37 3b 0d 0a 20 20 20 20 20  noVs2017;..     
1bfb0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
1bfc0 6e 6f 54 72 61 63 65 20 3d 20 6e 6f 54 72 61 63  noTrace = noTrac
1bfd0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1bfe0 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6e 73 6f      this.noConso
1bff0 6c 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d  le = noConsole;.
1c000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c010 20 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f   this.noLog = no
1c020 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Log;..          
1c030 20 20 20 20 20 20 74 68 69 73 2e 74 68 72 6f 77        this.throw
1c040 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 74 68 72 6f  OnMissing = thro
1c050 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20  wOnMissing;..   
1c060 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1c070 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49  s.whatIf = whatI
1c080 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
1c090 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 20 3d      this.debug =
1c0a0 20 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20   debug;..       
1c0b0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 65           this.ve
1c0c0 72 62 6f 73 65 20 3d 20 76 65 72 62 6f 73 65 3b  rbose = verbose;
1c0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c0e0 20 20 74 68 69 73 2e 63 6f 6e 66 69 72 6d 20 3d    this.confirm =
1c0f0 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20   confirm;..     
1c100 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1c110 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1c120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c170 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1c180 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
1c190 74 65 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64  te Static Method
1c1a0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
1c1b0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
1c1c0 69 64 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c  id GetDefaultFil
1c1d0 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20  eNames(..       
1c1e0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
1c1f0 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ing directory,..
1c200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c210 72 65 66 20 73 74 72 69 6e 67 20 63 6f 72 65 46  ref string coreF
1c220 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
1c230 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
1c240 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
1c250 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1c260 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
1c270 66 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  f6FileName,..   
1c280 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
1c290 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72   string designer
1c2a0 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
1c2b0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1c2c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1c2e0 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 3d 20  thisAssembly == 
1c2f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1c300 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1c310 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
1c320 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory 
1c330 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65 63 74  = Path.GetDirect
1c340 6f 72 79 4e 61 6d 65 28 74 68 69 73 41 73 73 65  oryName(thisAsse
1c350 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 0d  mbly.Location);.
1c360 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c370 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
1c380 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65  NullOrEmpty(dire
1c390 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1c3b0 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
1c3c0 20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65          coreFile
1c3d0 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
1c3e0 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ine(directory,..
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c400 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f      Installer.Co
1c410 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c430 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50  linqFileName = P
1c440 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
1c450 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
1c460 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
1c470 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e 61  aller.LinqFileNa
1c480 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
1c490 20 20 20 20 20 20 20 20 65 66 36 46 69 6c 65 4e          ef6FileN
1c4a0 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
1c4b0 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ne(directory,.. 
1c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4d0 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 45 66 36     Installer.Ef6
1c4e0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
1c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1c500 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
1c510 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
1c520 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
1c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
1c540 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72  staller.Designer
1c550 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  FileName);..    
1c560 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1c570 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1c580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1c5d0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
1c5e0 43 68 65 63 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20  CheckOption(..  
1c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1c600 66 20 73 74 72 69 6e 67 20 61 72 67 0d 0a 20 20  f string arg..  
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
1c620 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c640 73 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d 20  string result = 
1c650 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  arg;....        
1c660 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
1c670 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
1c680 79 28 72 65 73 75 6c 74 29 29 0d 0a 20 20 20 20  y(result))..    
1c690 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1c6c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1c6d0 54 45 3a 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6c  TE: Remove all l
1c6e0 65 61 64 69 6e 67 20 73 77 69 74 63 68 20 63 68  eading switch ch
1c6f0 61 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ars...          
1c700 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c720 20 20 72 65 73 75 6c 74 20 3d 20 72 65 73 75 6c    result = resul
1c730 74 2e 54 72 69 6d 53 74 61 72 74 28 53 77 69 74  t.TrimStart(Swit
1c740 63 68 43 68 61 72 73 29 3b 0d 0a 0d 0a 20 20 20  chChars);....   
1c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c760 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1c770 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1c780 3a 20 48 6f 77 20 6d 61 6e 79 20 63 68 61 72 73  : How many chars
1c790 20 77 65 72 65 20 72 65 6d 6f 76 65 64 3f 0d 0a   were removed?..
1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7b0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1c7c0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
1c7d0 63 6f 75 6e 74 20 3d 20 61 72 67 2e 4c 65 6e 67  count = arg.Leng
1c7e0 74 68 20 2d 20 72 65 73 75 6c 74 2e 4c 65 6e 67  th - result.Leng
1c7f0 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  th;....         
1c800 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c820 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 61 73 20     // NOTE: Was 
1c830 74 68 65 72 65 20 61 74 20 6c 65 61 73 74 20 6f  there at least o
1c840 6e 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne?..           
1c850 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c870 20 69 66 20 28 63 6f 75 6e 74 20 3e 20 30 29 0d   if (count > 0).
1c880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c890 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8b0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1c8c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1c8d0 4f 54 45 3a 20 4f 6b 2c 20 72 65 70 6c 61 63 65  OTE: Ok, replace
1c8e0 20 74 68 65 69 72 20 6f 72 69 67 69 6e 61 6c 0d   their original.
1c8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c900 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1c910 20 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20    argument...   
1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c930 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c950 20 61 72 67 20 3d 20 72 65 73 75 6c 74 3b 0d 0a   arg = result;..
1c960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c970 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c990 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 59        // NOTE: Y
1c9a0 65 73 2c 20 74 68 69 73 20 69 73 20 61 20 73 77  es, this is a sw
1c9b0 69 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20 20  itch...         
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c9d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1c9e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1c9f0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
1ca00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1ca30 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1ca40 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1ca50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1ca60 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1ca70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1caa0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1cab0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1cac0 69 63 20 62 6f 6f 6c 20 4d 61 74 63 68 4f 70 74  ic bool MatchOpt
1cad0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
1cae0 20 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67        string arg
1caf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1cb00 20 20 20 73 74 72 69 6e 67 20 6f 70 74 69 6f 6e     string option
1cb10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cb20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
1cb30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1cb40 20 20 20 20 69 66 20 28 28 61 72 67 20 3d 3d 20      if ((arg == 
1cb50 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70 74 69 6f 6e  null) || (option
1cb60 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb80 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
1cb90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cba0 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 43   return String.C
1cbb0 6f 6d 70 61 72 65 28 61 72 67 2c 20 30 2c 20 6f  ompare(arg, 0, o
1cbc0 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20 20 20 20  ption, 0,..     
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1cbe0 72 67 2e 4c 65 6e 67 74 68 2c 20 53 74 72 69 6e  rg.Length, Strin
1cbf0 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
1cc00 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
1cc10 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
1cc20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1cc30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1cc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1cc80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1cc90 61 74 69 63 20 62 6f 6f 6c 3f 20 50 61 72 73 65  atic bool? Parse
1cca0 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20 20 20 20  Boolean(..      
1ccb0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1ccc0 20 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20 20   text..         
1ccd0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1cce0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ccf0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
1cd00 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
1cd10 74 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20  ty(text))..     
1cd20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd40 20 20 62 6f 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d    bool value;...
1cd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cd60 20 20 20 20 20 69 66 20 28 62 6f 6f 6c 2e 54 72       if (bool.Tr
1cd70 79 50 61 72 73 65 28 74 65 78 74 2c 20 6f 75 74  yParse(text, out
1cd80 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20   value))..      
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cda0 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
1cdb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cdc0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1cdd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
1cde0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
1cdf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1ce00 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1ce10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1ce50 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1ce60 69 63 20 6f 62 6a 65 63 74 20 50 61 72 73 65 45  ic object ParseE
1ce70 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  num(..          
1ce80 20 20 20 20 20 20 54 79 70 65 20 65 6e 75 6d 54        Type enumT
1ce90 79 70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ype,..          
1cea0 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78        string tex
1ceb0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1cec0 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d      bool noCase.
1ced0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cee0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
1cef0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1cf00 20 20 20 69 66 20 28 28 65 6e 75 6d 54 79 70 65     if ((enumType
1cf10 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e   == null) || !en
1cf20 75 6d 54 79 70 65 2e 49 73 45 6e 75 6d 29 0d 0a  umType.IsEnum)..
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf40 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
1cf50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cf60 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
1cf70 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65  IsNullOrEmpty(te
1cf80 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  xt))..          
1cf90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
1cfb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cfc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfe0 20 72 65 74 75 72 6e 20 45 6e 75 6d 2e 50 61 72   return Enum.Par
1cff0 73 65 28 65 6e 75 6d 54 79 70 65 2c 20 74 65 78  se(enumType, tex
1d000 74 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a 20 20 20  t, noCase);..   
1d010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d020 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1d030 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
1d040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d050 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d070 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
1d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d090 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d0a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1d0b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1d0c0 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
1d0d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1d0e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1d0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d120 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1d130 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1d140 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 53 79  static bool IsSy
1d150 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 47  stemEf6AssemblyG
1d160 6c 6f 62 61 6c 28 29 0d 0a 20 20 20 20 20 20 20  lobal()..       
1d170 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d180 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73 74          if (syst
1d190 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 20 3d 3d  emEf6Assembly ==
1d1a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1d1c0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
1d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1d1e0 75 72 6e 20 73 79 73 74 65 6d 45 66 36 41 73 73  urn systemEf6Ass
1d1f0 65 6d 62 6c 79 2e 47 6c 6f 62 61 6c 41 73 73 65  embly.GlobalAsse
1d200 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20 20 20  mblyCache;..    
1d210 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1d220 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1d230 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
1d240 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1d250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d280 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1d290 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
1d2a0 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64  ic Static Method
1d2b0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
1d2c0 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
1d2d0 64 20 42 72 65 61 6b 49 6e 74 6f 44 65 62 75 67  d BreakIntoDebug
1d2e0 67 65 72 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ger()..         
1d2f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d300 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
1d310 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20 20  iteLine(..      
1d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
1d330 74 74 61 63 68 20 61 20 64 65 62 75 67 67 65 72  ttach a debugger
1d340 20 74 6f 20 70 72 6f 63 65 73 73 20 7b 30 7d 20   to process {0} 
1d350 61 6e 64 20 70 72 65 73 73 20 22 20 2b 0d 0a 20  and press " +.. 
1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d370 20 20 20 22 61 6e 79 20 6b 65 79 20 74 6f 20 63     "any key to c
1d380 6f 6e 74 69 6e 75 65 2e 22 2c 20 28 74 68 69 73  ontinue.", (this
1d390 50 72 6f 63 65 73 73 20 21 3d 20 6e 75 6c 6c 29  Process != null)
1d3a0 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
1d3b0 20 20 20 20 20 20 20 20 74 68 69 73 50 72 6f 63          thisProc
1d3c0 65 73 73 2e 49 64 2e 54 6f 53 74 72 69 6e 67 28  ess.Id.ToString(
1d3d0 29 20 3a 20 22 3c 75 6e 6b 6e 6f 77 6e 3e 22 29  ) : "<unknown>")
1d3e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d3f0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1d400 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d420 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79   Console.ReadKey
1d430 28 74 72 75 65 29 3b 20 2f 2a 20 74 68 72 6f 77  (true); /* throw
1d440 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1d450 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d460 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 49          catch (I
1d470 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
1d480 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f 6e  xception) // Con
1d490 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 20  sole.ReadKey..  
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1d4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d4c0 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
1d4d0 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
1d4e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1d4f0 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 67            Debugg
1d500 65 72 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20 20  er.Break();..   
1d510 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1d520 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1d530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1d570 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1d580 6c 69 63 20 73 74 61 74 69 63 20 43 6f 6e 66 69  lic static Confi
1d590 67 75 72 61 74 69 6f 6e 20 43 72 65 61 74 65 44  guration CreateD
1d5a0 65 66 61 75 6c 74 28 29 0d 0a 20 20 20 20 20 20  efault()..      
1d5b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d5c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1d5d0 64 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c  directory = null
1d5e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1d5f0 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69     string coreFi
1d600 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  leName = null;..
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d620 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e  string linqFileN
1d630 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ame = null;..   
1d640 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
1d650 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 20  ing ef6FileName 
1d660 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
1d670 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1d680 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
1d690 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 44              GetD
1d6b0 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28  efaultFileNames(
1d6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d6d0 20 20 20 20 20 20 72 65 66 20 64 69 72 65 63 74        ref direct
1d6e0 6f 72 79 2c 20 72 65 66 20 63 6f 72 65 46 69 6c  ory, ref coreFil
1d6f0 65 4e 61 6d 65 2c 20 72 65 66 20 6c 69 6e 71 46  eName, ref linqF
1d700 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
1d710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1d720 66 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 20 72  f ef6FileName, r
1d730 65 66 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ef designerFileN
1d740 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
1d750 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1d760 6e 65 77 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  new Configuratio
1d770 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
1d780 20 20 20 20 20 20 20 20 74 68 69 73 41 73 73 65          thisAsse
1d790 6d 62 6c 79 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  mbly, null, null
1d7a0 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 63 6f 72  , directory, cor
1d7b0 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  eFileName,..    
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7d0 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 20 65 66  linqFileName, ef
1d7e0 36 46 69 6c 65 4e 61 6d 65 2c 20 64 65 73 69 67  6FileName, desig
1d7f0 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20 6e 75 6c  nerFileName, nul
1d800 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  l, null,..      
1d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75                nu
1d820 6c 6c 2c 20 54 72 61 63 65 4f 70 73 2e 44 65 62  ll, TraceOps.Deb
1d830 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f  ugFormat, TraceO
1d840 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c 0d  ps.TraceFormat,.
1d850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d860 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
1d870 73 2e 44 65 66 61 75 6c 74 2c 20 50 72 6f 76 69  s.Default, Provi
1d880 64 65 72 46 6c 61 67 73 2e 44 65 66 61 75 6c 74  derFlags.Default
1d890 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d8a0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
1d8b0 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 20 54 72  rity.Default, Tr
1d8c0 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61  acePriority.Defa
1d8d0 75 6c 74 2c 20 66 61 6c 73 65 2c 20 74 72 75 65  ult, false, true
1d8e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d8f0 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61         false, fa
1d900 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
1d910 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
1d920 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a   false, false,..
1d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d940 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65      false, false
1d950 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
1d960 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
1d970 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20  lse, false,..   
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d990 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
1d9a0 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
1d9b0 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
1d9c0 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20  , false,..      
1d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61                fa
1d9e0 6c 73 65 2c 20 66 61 6c 73 65 2c 20 74 72 75 65  lse, false, true
1d9f0 2c 20 74 72 75 65 2c 20 66 61 6c 73 65 2c 20 66  , true, false, f
1da00 61 6c 73 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20  alse, false);.. 
1da10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1da20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1da30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1da70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
1da80 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
1da90 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
1daa0 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
1dab0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1dac0 61 74 69 63 20 62 6f 6f 6c 20 46 72 6f 6d 41 72  atic bool FromAr
1dad0 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
1dae0 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
1daf0 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
1db00 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74       bool strict
1db10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1db20 20 20 20 72 65 66 20 43 6f 6e 66 69 67 75 72 61     ref Configura
1db30 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  tion configurati
1db40 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
1db50 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
1db60 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
1db70 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1db80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1db90 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1dbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dbc0 20 20 20 20 20 69 66 20 28 61 72 67 73 20 3d 3d       if (args ==
1dbd0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbf0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a  return true;....
1dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc10 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
1dc20 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ation == null)..
1dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc40 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1dc50 61 74 69 6f 6e 20 3d 20 43 6f 6e 66 69 67 75 72  ation = Configur
1dc60 61 74 69 6f 6e 2e 43 72 65 61 74 65 44 65 66 61  ation.CreateDefa
1dc70 75 6c 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ult();....      
1dc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1dc90 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 67 73 2e  t length = args.
1dca0 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
1dcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1dcc0 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
1dcd0 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74  0; index < lengt
1dce0 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  h; index++)..   
1dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1dd10 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1dd20 6e 67 20 61 72 67 20 3d 20 61 72 67 73 5b 69 6e  ng arg = args[in
1dd30 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex];....       
1dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd50 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1dd70 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6e 79 20 61  NOTE: Skip any a
1dd80 72 67 75 6d 65 6e 74 20 74 68 61 74 20 69 73 20  rgument that is 
1dd90 6e 75 6c 6c 20 28 3f 29 20 6f 72 20 61 6e 20 65  null (?) or an e
1dda0 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mpty..          
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1ddc0 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a         string...
1ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dde0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de00 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
1de10 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 61 72 67  sNullOrEmpty(arg
1de20 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de40 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
1de50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de60 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de80 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 61 72 65   // NOTE: We are
1de90 20 67 6f 69 6e 67 20 74 6f 20 6d 6f 64 69 66 79   going to modify
1dea0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 61 72   the original ar
1deb0 67 75 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  gument..        
1dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ded0 2f 2f 20 20 20 20 20 20 20 62 79 20 72 65 6d 6f  //       by remo
1dee0 76 69 6e 67 20 61 6e 79 20 6c 65 61 64 69 6e 67  ving any leading
1def0 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 63 74 65   option characte
1df00 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs;..           
1df10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1df20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
1df30 20 77 65 20 75 73 65 20 61 20 6e 65 77 20 73 74   we use a new st
1df40 72 69 6e 67 20 74 6f 20 68 6f 6c 64 20 74 68 65  ring to hold the
1df50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1df60 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1df70 20 20 20 6d 6f 64 69 66 69 65 64 20 61 72 67 75     modified argu
1df80 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  ment...         
1df90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dfa0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1dfb0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1dfc0 67 20 6e 65 77 41 72 67 20 3d 20 61 72 67 3b 0d  g newArg = arg;.
1dfd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1dfe0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e000 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1e010 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65  All the supporte
1e020 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  d command line o
1e030 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20  ptions must..   
1e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e050 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 65       //       be
1e060 67 69 6e 20 77 69 74 68 20 61 6e 20 6f 70 74 69  gin with an opti
1e070 6f 6e 20 63 68 61 72 61 63 74 65 72 20 28 65 2e  on character (e.
1e080 67 2e 20 61 20 6d 69 6e 75 73 0d 0a 20 20 20 20  g. a minus..    
1e090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 72 20      //       or 
1e0b0 66 6f 72 77 61 72 64 20 73 6c 61 73 68 29 3b 20  forward slash); 
1e0c0 61 74 74 65 6d 70 74 20 74 6f 20 76 61 6c 69 64  attempt to valid
1e0d0 61 74 65 20 74 68 61 74 0d 0a 20 20 20 20 20 20  ate that..      
1e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0f0 20 20 2f 2f 20 20 20 20 20 20 20 6e 6f 77 2e 20    //       now. 
1e100 20 49 66 20 77 65 20 66 61 69 6c 20 69 6e 20 73   If we fail in s
1e110 74 72 69 63 74 20 6d 6f 64 65 2c 20 77 65 20 61  trict mode, we a
1e120 72 65 20 64 6f 6e 65 3b 0d 0a 20 20 20 20 20 20  re done;..      
1e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e140 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68 65 72    //       other
1e150 77 69 73 65 2c 20 6a 75 73 74 20 73 6b 69 70 20  wise, just skip 
1e160 74 68 69 73 20 61 72 67 75 6d 65 6e 74 20 61 6e  this argument an
1e170 64 20 61 64 76 61 6e 63 65 0d 0a 20 20 20 20 20  d advance..     
1e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e190 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 74     //       to t
1e1a0 68 65 20 6e 65 78 74 20 6f 6e 65 2e 0d 0a 20 20  he next one...  
1e1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1e1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1e0 20 20 69 66 20 28 21 43 68 65 63 6b 4f 70 74 69    if (!CheckOpti
1e1f0 6f 6e 28 72 65 66 20 6e 65 77 41 72 67 29 29 0d  on(ref newArg)).
1e200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e210 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e230 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1e240 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1e250 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
1e260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e270 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
1e280 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
1e290 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
1e2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e2c0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1e2d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55                "U
1e300 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61  nsupported comma
1e310 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd line argument
1e320 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
1e330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e340 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1e350 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65  lay(arg)), trace
1e360 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e380 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
1e390 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
1e3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1e3c0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3e0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e400 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e420 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e440 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65  // NOTE: All the
1e450 20 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61   supported comma
1e460 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20  nd line options 
1e470 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  must..          
1e480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e490 20 20 20 20 20 20 20 68 61 76 65 20 61 20 76 61         have a va
1e4a0 6c 75 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  lue; therefore, 
1e4b0 61 74 74 65 6d 70 74 20 74 6f 20 61 64 76 61 6e  attempt to advan
1e4c0 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1e4e0 20 20 20 20 20 74 6f 20 69 74 20 6e 6f 77 2e 20       to it now. 
1e4f0 20 49 66 20 77 65 20 66 61 69 6c 2c 20 77 65 20   If we fail, we 
1e500 61 72 65 20 64 6f 6e 65 2e 0d 0a 20 20 20 20 20  are done...     
1e510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e520 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1e530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1e540 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20  ndex++;....     
1e550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e560 20 20 20 69 66 20 28 69 6e 64 65 78 20 3e 3d 20     if (index >= 
1e570 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20  length)..       
1e580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e590 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5b0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
1e5c0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
1e5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
1e600 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
1e610 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1e640 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1e650 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e670 20 20 20 20 20 20 22 4d 69 73 73 69 6e 67 20 76        "Missing v
1e680 61 6c 75 65 20 66 6f 72 20 6f 70 74 69 6f 6e 3a  alue for option:
1e690 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6b0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1e6c0 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65 43  ay(arg)), traceC
1e6d0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6f0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
1e700 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
1e710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e720 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1e730 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
1e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e750 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
1e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e770 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1e780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e790 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1e7a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1e7b0 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 74 65  OTE: Grab the te
1e7c0 78 74 75 61 6c 20 76 61 6c 75 65 20 6f 66 20 74  xtual value of t
1e7d0 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  his command line
1e7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e7f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1e800 20 20 20 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20     option...    
1e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e820 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1e830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e840 73 74 72 69 6e 67 20 74 65 78 74 20 3d 20 61 72  string text = ar
1e850 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20  gs[index];....  
1e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e870 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e890 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 67 75 72    // NOTE: Figur
1e8a0 65 20 6f 75 74 20 77 68 69 63 68 20 63 6f 6d 6d  e out which comm
1e8b0 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20  and line option 
1e8c0 74 68 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20  this is..       
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8e0 20 2f 2f 20 20 20 20 20 20 20 28 62 61 73 65 64   //       (based
1e8f0 20 6f 6e 20 61 20 70 61 72 74 69 61 6c 20 6e 61   on a partial na
1e900 6d 65 20 6d 61 74 63 68 29 20 61 6e 64 20 74 68  me match) and th
1e910 65 6e 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20  en try..        
1e920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e930 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 6e 74 65  //       to inte
1e940 72 70 72 65 74 20 74 68 65 20 74 65 78 74 75 61  rpret the textua
1e950 6c 20 76 61 6c 75 65 20 61 73 20 74 68 65 20 63  l value as the c
1e960 6f 72 72 65 63 74 0d 0a 20 20 20 20 20 20 20 20  orrect..        
1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e980 2f 2f 20 20 20 20 20 20 20 74 79 70 65 2e 0d 0a  //       type...
1e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9c0 20 20 20 20 69 66 20 28 4d 61 74 63 68 4f 70 74      if (MatchOpt
1e9d0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 62 72 65  ion(newArg, "bre
1e9e0 61 6b 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ak"))..         
1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1ea00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
1ea20 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
1ea30 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
1ea40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ea50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1ea60 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
1ea70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1ea90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eab0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
1eac0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1ead0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eaf0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
1eb00 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
1eb10 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb40 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1eb50 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1eb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb80 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
1eb90 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
1eba0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebc0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1ebd0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
1ebe0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
1ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec10 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1ec20 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec40 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
1ec50 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1ec80 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
1ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eca0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1ecb0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1ece0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecf0 20 69 66 20 28 28 62 6f 6f 6c 29 76 61 6c 75 65   if ((bool)value
1ed00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed20 20 20 20 42 72 65 61 6b 49 6e 74 6f 44 65 62 75     BreakIntoDebu
1ed30 67 67 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20  gger();..       
1ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1ed60 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1ed70 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
1ed80 28 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 67  (newArg, "config
1ed90 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20  Version"))..    
1eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edd0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1ede0 2e 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d  .configVersion =
1edf0 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
1ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1ee20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
1ee30 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
1ee40 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 72 6d  newArg, "confirm
1ee50 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
1ee60 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1ee70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1ee90 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
1eea0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
1eeb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1eed0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
1eee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
1ef30 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
1ef40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ef50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef60 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1ef70 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
1ef80 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
1ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1efb0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1efc0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eff0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
1f000 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
1f010 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1f020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f030 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1f040 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
1f050 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
1f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f080 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1f090 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0b0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
1f0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1f0f0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
1f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f110 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1f120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1f140 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1f150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1f160 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e  onfiguration.con
1f170 66 69 72 6d 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  firm = (bool)val
1f180 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1b0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
1f1c0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
1f1d0 41 72 67 2c 20 22 63 6f 72 65 46 69 6c 65 4e 61  Arg, "coreFileNa
1f1e0 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  me"))..         
1f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1f200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1f220 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65  nfiguration.core
1f230 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b  FileName = text;
1f240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f250 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f270 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
1f280 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
1f290 2c 20 22 64 65 62 75 67 22 29 29 0d 0a 20 20 20  , "debug"))..   
1f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2d0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
1f2e0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
1f2f0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f310 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
1f320 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1f330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f340 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f360 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1f370 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1f380 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
1f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1f3b0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
1f3c0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
1f3d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3f0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1f400 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1f410 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1f420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f430 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
1f440 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
1f450 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
1f460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f480 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
1f490 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
1f4a0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f4d0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1f500 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
1f510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1f530 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
1f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1f560 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f580 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5a0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1f5b0 74 69 6f 6e 2e 64 65 62 75 67 20 3d 20 28 62 6f  tion.debug = (bo
1f5c0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
1f5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1f600 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
1f610 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75  on(newArg, "debu
1f620 67 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20 20  gFormat"))..    
1f630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f640 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1f670 2e 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 74  .debugFormat = t
1f680 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
1f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6a0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1f6b0 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75  Format = configu
1f6c0 72 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d  ration.debugForm
1f6d0 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
1f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1f6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f700 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
1f710 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
1f720 41 72 67 2c 20 22 64 65 62 75 67 50 72 69 6f 72  Arg, "debugPrior
1f730 69 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ity"))..        
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f750 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1f770 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61  bject value = Pa
1f780 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20  rseEnum(..      
1f790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7a0 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
1f7b0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c  (TracePriority),
1f7c0 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d   text, true);...
1f7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1f7f0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
1f800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1f820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f840 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
1f850 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
1f860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f880 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1f890 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
1f8a0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f8d0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1f8e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f910 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76    "Invalid {0} v
1f920 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
1f930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f950 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
1f960 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
1f970 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
1f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f990 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f9a0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1f9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1f9d0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
1f9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1fa00 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1fa30 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
1fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa70 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1fa80 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69  tion.debugPriori
1fa90 74 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72  ty = (TracePrior
1faa0 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ity)value;..    
1fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fac0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1fad0 2e 44 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d  .DebugPriority =
1fae0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
1faf0 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20  ebugPriority;.. 
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb30 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
1fb40 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
1fb50 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
1fb60 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
1fb70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb90 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1fba0 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e  iguration.design
1fbb0 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  erFileName = tex
1fbc0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
1fbd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbf0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1fc00 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
1fc10 72 67 2c 20 22 64 69 72 65 63 74 6f 72 79 22 29  rg, "directory")
1fc20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1fc30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc50 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1fc60 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
1fc70 79 20 3d 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20  y = text;....   
1fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc90 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcb0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1fcc0 3a 20 2a 53 50 45 43 49 41 4c 2a 20 4d 75 73 74  : *SPECIAL* Must
1fcd0 20 72 65 66 72 65 73 68 20 74 68 65 20 66 69 6c   refresh the fil
1fce0 65 20 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20  e names..       
1fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd00 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 65       //       he
1fd10 72 65 20 62 65 63 61 75 73 65 20 74 68 65 20 75  re because the u
1fd20 6e 64 65 72 6c 79 69 6e 67 20 64 69 72 65 63 74  nderlying direct
1fd30 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
1fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd50 20 2f 2f 20 20 20 20 20 20 20 68 61 73 20 63 68   //       has ch
1fd60 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  anged...        
1fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd80 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fda0 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46      string coreF
1fdb0 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67  ileName = config
1fdc0 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65  uration.coreFile
1fdd0 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
1fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdf0 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
1fe00 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
1fe10 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  oreFileName)).. 
1fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1fe40 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  oreFileName = Pa
1fe50 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 63  th.GetFileName(c
1fe60 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  oreFileName);...
1fe70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fe80 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1fe90 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
1fea0 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61  Empty(coreFileNa
1feb0 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
1fec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fed0 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61        coreFileNa
1fee0 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 43  me = Installer.C
1fef0 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  oreFileName;....
1ff00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff10 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1ff20 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69  iguration.coreFi
1ff30 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
1ff40 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  mbine(..        
1ff50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff60 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1ff70 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c  ation.directory,
1ff80 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d   coreFileName);.
1ff90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1ffb0 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61  tring linqFileNa
1ffc0 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  me = configurati
1ffd0 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b  on.linqFileName;
1ffe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20000 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
20010 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69  llOrEmpty(linqFi
20020 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
20030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20040 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69            linqFi
20050 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65  leName = Path.Ge
20060 74 46 69 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69  tFileName(linqFi
20070 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
20080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20090 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
200a0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
200b0 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d  (linqFileName)).
200c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
200d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200e0 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
200f0 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69  Installer.LinqFi
20100 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
20110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20120 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
20130 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d  tion.linqFileNam
20140 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
20150 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
20160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20170 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
20180 2e 64 69 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71  .directory, linq
20190 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
201a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201b0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
201c0 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 63   ef6FileName = c
201d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 65 66 36  onfiguration.ef6
201e0 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
201f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20200 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
20210 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
20220 74 79 28 65 66 36 46 69 6c 65 4e 61 6d 65 29 29  ty(ef6FileName))
20230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20250 20 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20    ef6FileName = 
20260 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
20270 28 65 66 36 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  (ef6FileName);..
20280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
202a0 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
202b0 72 45 6d 70 74 79 28 65 66 36 46 69 6c 65 4e 61  rEmpty(ef6FileNa
202c0 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
202d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202e0 20 20 20 20 20 20 65 66 36 46 69 6c 65 4e 61 6d        ef6FileNam
202f0 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 45 66  e = Installer.Ef
20300 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  6FileName;....  
20310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20320 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
20330 75 72 61 74 69 6f 6e 2e 65 66 36 46 69 6c 65 4e  uration.ef6FileN
20340 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
20350 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
20360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20370 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
20380 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 65 66  on.directory, ef
20390 36 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  6FileName);.... 
203a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
203c0 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
203d0 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  me = configurati
203e0 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  on.designerFileN
203f0 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
20400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20410 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
20420 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65  IsNullOrEmpty(de
20430 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29  signerFileName))
20440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20460 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61    designerFileNa
20470 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  me = Path.GetFil
20480 65 4e 61 6d 65 28 64 65 73 69 67 6e 65 72 46 69  eName(designerFi
20490 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
204a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204b0 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
204c0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
204d0 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  (designerFileNam
204e0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
204f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20500 20 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c       designerFil
20510 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65  eName = Installe
20520 72 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  r.DesignerFileNa
20530 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
20540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20550 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
20560 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .designerFileNam
20570 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
20580 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
20590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205a0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
205b0 2e 64 69 72 65 63 74 6f 72 79 2c 20 64 65 73 69  .directory, desi
205c0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  gnerFileName);..
205d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
205f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20600 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
20610 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
20620 22 65 66 36 46 69 6c 65 4e 61 6d 65 22 29 29 0d  "ef6FileName")).
20630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20640 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20660 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
20670 61 74 69 6f 6e 2e 65 66 36 46 69 6c 65 4e 61 6d  ation.ef6FileNam
20680 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  e = text;..     
20690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
206b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
206c0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
206d0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74  on(newArg, "inst
206e0 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20 20 20 20  all"))..        
206f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20700 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
20720 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
20730 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
20740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20760 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
20770 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
20780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20790 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
207a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207b0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
207c0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
207d0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
207e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207f0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
20800 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
20810 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
20820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20840 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
20850 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
20860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20880 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
20890 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
208a0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
208b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208c0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
208d0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
208e0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
208f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20910 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
20920 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
20930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20940 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
20950 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
20960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20970 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
20980 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
20990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
209b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
209c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
209e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209f0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
20a00 69 6e 73 74 61 6c 6c 20 3d 20 28 62 6f 6f 6c 29  install = (bool)
20a10 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
20a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
20a40 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
20a50 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
20a60 6e 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c  newArg, "install
20a70 46 6c 61 67 73 22 29 29 0d 0a 20 20 20 20 20 20  Flags"))..      
20a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ab0 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
20ac0 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20  ParseEnum(..    
20ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ae0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
20af0 6f 66 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29  of(InstallFlags)
20b00 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a  , text, true);..
20b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
20b30 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
20b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
20b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b80 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
20b90 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
20ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bc0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
20bd0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
20be0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c10 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
20c20 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
20c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c50 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
20c60 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
20c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c90 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
20ca0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
20cb0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
20cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cd0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
20ce0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
20cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
20d10 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
20d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
20d40 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
20d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d70 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
20d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20db0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
20dc0 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 46 6c 61  ation.installFla
20dd0 67 73 20 3d 20 28 49 6e 73 74 61 6c 6c 46 6c 61  gs = (InstallFla
20de0 67 73 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  gs)value;..     
20df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
20e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
20e20 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
20e30 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 69 6e 71  on(newArg, "linq
20e40 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20  FileName"))..   
20e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e80 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
20e90 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  n.linqFileName =
20ea0 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
20eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ec0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
20ed0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
20ee0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
20ef0 6e 65 77 41 72 67 2c 20 22 6c 6f 67 46 69 6c 65  newArg, "logFile
20f00 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20  Name"))..       
20f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f40 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f  configuration.lo
20f50 67 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74  gFileName = text
20f60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
20f70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
20f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f90 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
20fa0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
20fb0 67 2c 20 22 6e 6f 43 6f 6d 70 61 63 74 22 29 29  g, "noCompact"))
20fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20fd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ff0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
21000 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
21010 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
21020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21030 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
21040 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
21050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21060 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21080 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
21090 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
210a0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
210b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210d0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
210e0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
210f0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
21100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21110 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
21120 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
21130 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
21140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
21160 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
21170 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
21180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211a0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
211b0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
211c0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
211d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
211f0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
21200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21220 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
21230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21250 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
21260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21280 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
21290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
212b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
212d0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70  iguration.noComp
212e0 61 63 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  act = (bool)valu
212f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
21300 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
21310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21320 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
21330 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
21340 72 67 2c 20 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29  rg, "noConsole")
21350 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
21360 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21380 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
21390 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
213a0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
213b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
213d0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
213e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
21420 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
21430 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
21440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21460 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
21470 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
21480 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
21490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
214b0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
214c0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
214d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214f0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
21500 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
21510 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21530 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
21540 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
21550 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
21560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21580 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
21590 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
215a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215b0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
215c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215e0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
215f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
21600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21610 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
21620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21630 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
21640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21650 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
21660 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e  figuration.noCon
21670 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  sole = (bool)val
21680 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
21690 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
216a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216b0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
216c0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
216d0 41 72 67 2c 20 22 6e 6f 44 65 73 6b 74 6f 70 22  Arg, "noDesktop"
216e0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
216f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21710 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
21720 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
21730 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
21740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21750 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
21760 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
21770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21780 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
217b0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
217c0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
217d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217f0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
21800 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
21810 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
21820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
21840 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
21850 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
21860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21880 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
21890 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
218a0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
218b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218c0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
218d0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
218e0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
218f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21910 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
21920 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21940 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
21950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21970 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
21980 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
21990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219a0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
219b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
219c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
219d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
219e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
219f0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 44 65  nfiguration.noDe
21a00 73 6b 74 6f 70 20 3d 20 28 62 6f 6f 6c 29 76 61  sktop = (bool)va
21a10 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
21a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
21a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21a40 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
21a50 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
21a60 77 41 72 67 2c 20 22 6e 6f 4c 6f 67 22 29 29 0d  wArg, "noLog")).
21a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21a80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21aa0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
21ab0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
21ac0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
21ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ae0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
21af0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
21b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b30 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
21b40 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
21b50 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
21b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b80 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
21b90 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
21ba0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
21bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bc0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
21bd0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
21be0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
21bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
21c10 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
21c20 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
21c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c50 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
21c60 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
21c70 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
21c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
21ca0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
21cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cd0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
21ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d00 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
21d10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
21d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d30 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
21d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d70 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
21d80 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d  guration.noLog =
21d90 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
21da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21db0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
21dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21dd0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
21de0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
21df0 6e 6f 4e 65 74 46 78 32 30 22 29 29 0d 0a 20 20  noNetFx20"))..  
21e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e30 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
21e40 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
21e50 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
21e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e70 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
21e80 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
21e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ea0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ec0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
21ed0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
21ee0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
21ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
21f10 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
21f20 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
21f30 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
21f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f50 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
21f60 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
21f70 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
21f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f90 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
21fa0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
21fb0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
21fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fe0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
21ff0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
22000 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
22010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22020 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
22030 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
22040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
22060 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
22070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
22090 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
220a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220c0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
220d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
220f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22100 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
22110 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20  ation.noNetFx20 
22120 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
22130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22140 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
22150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22160 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
22170 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
22180 22 6e 6f 4e 65 74 46 78 33 35 22 29 29 0d 0a 20  "noNetFx35")).. 
22190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
221b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221c0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
221d0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
221e0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
221f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22200 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
22210 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
22220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22230 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22250 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
22260 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
22270 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
22280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
222a0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
222b0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
222c0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
222d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
222f0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
22300 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
22310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22320 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
22330 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
22340 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
22350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22370 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
22380 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
22390 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
223a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
223c0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
223d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
223f0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
22400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22420 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
22430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22450 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
22460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22470 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22490 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
224a0 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35  ration.noNetFx35
224b0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
224c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
224d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
224e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224f0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
22500 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
22510 20 22 6e 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a   "noNetFx40"))..
22520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22530 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22550 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
22560 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
22570 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
22580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22590 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
225a0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
225b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
225d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225e0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
225f0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
22600 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22630 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
22640 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
22650 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
22660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22670 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
22680 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
22690 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
226a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
226c0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
226d0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
226e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22700 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
22710 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
22720 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
22730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22740 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
22750 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
22760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22780 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
22790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227b0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
227c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
227d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227e0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
227f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22800 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
22810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22820 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
22830 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34  uration.noNetFx4
22840 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  0 = (bool)value;
22850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22860 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
22870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22880 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
22890 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
228a0 2c 20 22 6e 6f 4e 65 74 46 78 34 35 22 29 29 0d  , "noNetFx45")).
228b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
228c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
228d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
228f0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
22900 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
22910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22920 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
22930 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
22940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22950 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22970 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
22980 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
22990 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
229a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229c0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
229d0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
229e0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
229f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a00 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
22a10 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
22a20 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
22a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
22a50 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
22a60 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
22a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a90 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
22aa0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
22ab0 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
22ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
22ae0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
22af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b10 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
22b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b40 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
22b50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b70 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
22b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bb0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
22bc0 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78  guration.noNetFx
22bd0 34 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  45 = (bool)value
22be0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
22bf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
22c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c10 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
22c20 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
22c30 67 2c 20 22 6e 6f 4e 65 74 46 78 34 35 31 22 29  g, "noNetFx451")
22c40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
22c50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c70 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
22c80 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
22c90 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
22cc0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
22cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ce0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
22d10 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
22d20 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d50 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
22d60 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
22d70 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
22d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d90 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
22da0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
22db0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22de0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
22df0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
22e00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
22e30 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
22e40 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
22e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e70 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
22e80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ea0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ed0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
22ee0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f00 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
22f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
22f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22f40 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
22f50 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
22f60 46 78 34 35 31 20 3d 20 28 62 6f 6f 6c 29 76 61  Fx451 = (bool)va
22f70 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
22f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
22f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22fa0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
22fb0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
22fc0 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 35  wArg, "noNetFx45
22fd0 32 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  2"))..          
22fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
22ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23000 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
23010 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
23020 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
23030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
23050 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
23060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
23080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230a0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
230b0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
230c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
230d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230e0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
230f0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
23100 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
23110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23130 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
23140 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
23150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23170 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
23180 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
23190 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
231a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231b0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
231c0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
231d0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
231e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23200 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23210 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23230 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
23240 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
23250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23260 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
23270 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
23280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23290 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
232a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
232b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
232c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
232d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
232f0 4e 65 74 46 78 34 35 32 20 3d 20 28 62 6f 6f 6c  NetFx452 = (bool
23300 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23320 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23330 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
23340 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
23350 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46  (newArg, "noNetF
23360 78 34 36 22 29 29 0d 0a 20 20 20 20 20 20 20 20  x46"))..        
23370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23380 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
233a0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
233b0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
233c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
233d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233e0 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
233f0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
23400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23410 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23430 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
23440 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
23450 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
23460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23470 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
23480 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
23490 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
234a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234c0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
234d0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
234e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
234f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23500 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
23510 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
23520 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
23530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23540 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
23550 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
23560 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
23570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23590 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
235a0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
235b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235c0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
235d0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
235e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
23600 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
23610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23620 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
23630 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
23640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23650 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
23660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23670 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
23680 6e 6f 4e 65 74 46 78 34 36 20 3d 20 28 62 6f 6f  noNetFx46 = (boo
23690 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
236a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
236c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
236d0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
236e0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74  n(newArg, "noNet
236f0 46 78 34 36 31 22 29 29 0d 0a 20 20 20 20 20 20  Fx461"))..      
23700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23710 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23730 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
23740 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
23750 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23770 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
23780 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
23790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
237b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237c0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
237d0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
237e0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
237f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23800 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
23810 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
23820 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
23830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23850 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
23860 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
23870 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
23880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23890 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
238a0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
238b0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
238c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
238e0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
238f0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
23900 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23920 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
23930 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
23940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23950 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
23960 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
23970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23980 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23990 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
239a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
239c0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
239d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
239f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a00 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
23a10 6e 2e 6e 6f 4e 65 74 46 78 34 36 31 20 3d 20 28  n.noNetFx461 = (
23a20 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
23a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a60 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
23a70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
23a80 4e 65 74 46 78 34 36 32 22 29 29 0d 0a 20 20 20  NetFx462"))..   
23a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23aa0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ac0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
23ad0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
23ae0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
23af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b00 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
23b10 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
23b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b50 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
23b60 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
23b70 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
23b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b90 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
23ba0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
23bb0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
23bc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23be0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
23bf0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
23c00 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
23c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
23c30 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
23c40 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
23c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c70 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
23c80 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
23c90 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cb0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
23cc0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
23cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
23cf0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
23d20 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
23d50 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
23d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d90 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
23da0 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 36 32 20  tion.noNetFx462 
23db0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
23dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23dd0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23df0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
23e00 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
23e10 22 6e 6f 4e 65 74 46 78 34 37 22 29 29 0d 0a 20  "noNetFx47")).. 
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e50 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
23e60 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
23e70 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
23e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e90 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
23ea0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
23eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ec0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ee0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
23ef0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
23f00 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
23f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
23f30 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
23f40 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
23f50 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
23f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f70 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
23f80 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
23f90 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
23fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fb0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
23fc0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
23fd0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
23fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24000 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
24010 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
24020 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
24030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24040 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
24050 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
24080 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
24090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240b0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
240c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
240d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240e0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
240f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24100 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24120 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
24130 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 37  ration.noNetFx47
24140 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
24150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24160 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
24170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24180 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
24190 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
241a0 20 22 6e 6f 4e 65 74 46 78 34 37 31 22 29 29 0d   "noNetFx471")).
241b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
241c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
241f0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
24200 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
24210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24220 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
24230 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24250 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24270 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
24280 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
24290 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
242a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242c0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
242d0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
242e0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
242f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24300 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
24310 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
24320 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
24350 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
24360 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
24370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24390 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
243a0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
243b0 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
243c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
243e0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
243f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24410 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24440 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
24450 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24470 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
24480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24490 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
244a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244b0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
244c0 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78  guration.noNetFx
244d0 34 37 31 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  471 = (bool)valu
244e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
244f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24510 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
24520 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
24530 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 37 32 22  rg, "noNetFx472"
24540 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
24550 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24570 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
24580 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
24590 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
245a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
245c0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
245d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
24610 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
24620 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
24630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24650 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
24660 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
24670 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
24680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
246a0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
246b0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
246c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246e0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
246f0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
24700 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
24710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24720 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
24730 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
24740 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
24750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24770 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
24780 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247a0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
247b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
247c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247d0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
247e0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
247f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24800 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
24810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24820 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
24830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
24850 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
24860 74 46 78 34 37 32 20 3d 20 28 62 6f 6f 6c 29 76  tFx472 = (bool)v
24870 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
24880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
24890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
248a0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
248b0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
248c0 65 77 41 72 67 2c 20 22 6e 6f 52 75 6e 74 69 6d  ewArg, "noRuntim
248d0 65 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20  eVersion"))..   
248e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24910 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
24920 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
24930 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
24940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24950 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
24960 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24980 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249a0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
249b0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
249c0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
249d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249e0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
249f0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
24a00 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
24a10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a30 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
24a40 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
24a50 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
24a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a70 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
24a80 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
24a90 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ac0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
24ad0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
24ae0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
24af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b00 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24b10 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
24b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
24b40 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
24b70 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
24ba0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
24bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bc0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24be0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
24bf0 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65  tion.noRuntimeVe
24c00 72 73 69 6f 6e 20 3d 20 28 62 6f 6f 6c 29 76 61  rsion = (bool)va
24c10 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
24c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24c40 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
24c50 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
24c60 77 41 72 67 2c 20 22 6e 6f 54 72 61 63 65 22 29  wArg, "noTrace")
24c70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24c80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ca0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
24cb0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
24cc0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
24cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ce0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
24cf0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
24d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
24d40 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
24d50 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
24d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d80 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
24d90 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
24da0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
24db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
24dd0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
24de0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
24df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e10 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
24e20 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
24e30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e50 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
24e60 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
24e70 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
24e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ea0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
24eb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ed0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
24ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f00 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
24f10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f30 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
24f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
24f80 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61  figuration.noTra
24f90 63 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  ce = (bool)value
24fa0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
24fb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
24fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fd0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
24fe0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
24ff0 67 2c 20 22 6e 6f 56 73 32 30 30 35 22 29 29 0d  g, "noVs2005")).
25000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25010 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25030 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
25040 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
25050 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
25060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25070 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
25080 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
25090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
250b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250c0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
250d0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
250e0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
250f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25110 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
25120 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
25130 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
25140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25150 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
25160 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
25170 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
25180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
251a0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
251b0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
251c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
251d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251e0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
251f0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
25200 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
25210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25230 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
25240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25260 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
25270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25290 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
252a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
252b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252c0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
252d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
252f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25300 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
25310 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30  guration.noVs200
25320 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  5 = (bool)value;
25330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25340 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25360 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
25370 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
25380 2c 20 22 6e 6f 56 73 32 30 30 38 22 29 29 0d 0a  , "noVs2008"))..
25390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
253b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253c0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
253d0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
253e0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
253f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25400 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
25410 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
25420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25430 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25450 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
25460 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
25470 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
25480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254a0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
254b0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
254c0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
254d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
254f0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
25500 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
25510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
25530 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
25540 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
25550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25570 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
25580 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
25590 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
255a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
255c0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
255d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255f0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
25600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25620 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
25630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25650 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
25660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25670 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
25680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25690 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
256a0 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38  uration.noVs2008
256b0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
256c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
256d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
256e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256f0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
25700 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
25710 20 22 6e 6f 56 73 32 30 31 30 22 29 29 0d 0a 20   "noVs2010")).. 
25720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25730 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25750 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
25760 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
25770 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
25780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25790 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
257a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
257b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
257d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257e0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
257f0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
25800 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
25810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
25830 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
25840 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
25850 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25870 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
25880 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
25890 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
258a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258b0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
258c0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
258d0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
258e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25900 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
25910 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
25920 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25940 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
25950 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
25960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25980 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
25990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259b0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
259c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
259d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259e0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
259f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
25a30 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20  ration.noVs2010 
25a40 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
25a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
25a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a80 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
25a90 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
25aa0 22 6e 6f 56 73 32 30 31 32 22 29 29 0d 0a 20 20  "noVs2012"))..  
25ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ac0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ae0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
25af0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
25b00 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
25b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
25b30 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
25b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b70 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
25b80 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
25b90 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
25ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
25bc0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
25bd0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
25be0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
25bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c00 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
25c10 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
25c20 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
25c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c40 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
25c50 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
25c60 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
25c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c90 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
25ca0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
25cb0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
25cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cd0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
25ce0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
25cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
25d10 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
25d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25d40 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
25d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d70 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
25d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
25da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25db0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
25dc0 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20 3d  ation.noVs2012 =
25dd0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
25de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25df0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
25e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e10 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
25e20 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
25e30 6e 6f 56 73 32 30 31 33 22 29 29 0d 0a 20 20 20  noVs2013"))..   
25e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e70 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
25e80 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
25e90 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
25ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25eb0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
25ec0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
25ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ee0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f00 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
25f10 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
25f20 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
25f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f40 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
25f50 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
25f60 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
25f70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
25fa0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
25fb0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
25fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fd0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
25fe0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
25ff0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
26000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26020 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
26030 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
26040 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
26050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26060 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
26070 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
26080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26090 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
260a0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
260b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
260d0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
260e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
26100 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
26110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26120 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26140 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
26150 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 33 20 3d 20  tion.noVs2013 = 
26160 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
26170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26180 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261a0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
261b0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
261c0 6f 56 73 32 30 31 35 22 29 29 0d 0a 20 20 20 20  oVs2015"))..    
261d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
261f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26200 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
26210 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
26220 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
26230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26240 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
26250 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
26260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26270 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26290 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
262a0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
262b0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
262c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262d0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
262e0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
262f0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
26300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26320 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
26330 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
26340 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
26350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26360 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
26370 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
26380 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
26390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263b0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
263c0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
263d0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
263e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
26400 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
26410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26420 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26430 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
26440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26450 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
26460 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
26470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
26490 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
264a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
264c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264d0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
264e0 69 6f 6e 2e 6e 6f 56 73 32 30 31 35 20 3d 20 28  ion.noVs2015 = (
264f0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
26500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26510 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
26520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26530 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
26540 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
26550 56 73 32 30 31 37 22 29 29 0d 0a 20 20 20 20 20  Vs2017"))..     
26560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26570 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26590 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
265a0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
265b0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
265c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265d0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
265e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
265f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26600 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26620 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
26630 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
26640 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
26650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26660 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
26670 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
26680 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
26690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
266a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266b0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
266c0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
266d0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
266e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266f0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
26700 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
26710 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
26720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
26740 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
26750 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
26760 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
26770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26780 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
26790 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
267a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
267c0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
267d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
267f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
26800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26810 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
26820 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
26830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26840 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26860 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
26870 6f 6e 2e 6e 6f 56 73 32 30 31 37 20 3d 20 28 62  on.noVs2017 = (b
26880 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
26890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
268b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
268c0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
268d0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 70 65 72  ion(newArg, "per
268e0 55 73 65 72 22 29 29 0d 0a 20 20 20 20 20 20 20  User"))..       
268f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26900 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26920 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
26930 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
26940 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26960 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
26970 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
26980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26990 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
269a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269b0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
269c0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
269d0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
269e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269f0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
26a00 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
26a10 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
26a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a40 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
26a50 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
26a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a80 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
26a90 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
26aa0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
26ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
26ad0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
26ae0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
26af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b10 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
26b20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
26b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b40 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
26b50 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
26b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
26b80 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
26b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ba0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
26bb0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bf0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
26c00 2e 70 65 72 55 73 65 72 20 3d 20 28 62 6f 6f 6c  .perUser = (bool
26c10 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
26c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c30 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
26c40 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
26c50 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
26c60 28 6e 65 77 41 72 67 2c 20 22 70 72 6f 76 69 64  (newArg, "provid
26c70 65 72 46 6c 61 67 73 22 29 29 0d 0a 20 20 20 20  erFlags"))..    
26c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cb0 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
26cc0 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20  = ParseEnum(..  
26cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
26cf0 70 65 6f 66 28 50 72 6f 76 69 64 65 72 46 6c 61  peof(ProviderFla
26d00 67 73 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29  gs), text, true)
26d10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d30 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
26d40 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
26d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d80 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
26d90 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
26da0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
26db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26dc0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
26dd0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
26de0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
26df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e10 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
26e20 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
26e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e50 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
26e60 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  0} value: {1}",.
26e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e90 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
26ea0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
26eb0 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
26ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
26ee0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
26ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f10 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
26f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f40 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
26f50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f70 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
26f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fb0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
26fc0 67 75 72 61 74 69 6f 6e 2e 70 72 6f 76 69 64 65  guration.provide
26fd0 72 46 6c 61 67 73 20 3d 20 28 50 72 6f 76 69 64  rFlags = (Provid
26fe0 65 72 46 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a  erFlags)value;..
26ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27000 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
27010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27020 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
27030 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
27040 22 72 65 67 69 73 74 72 79 4c 6f 67 46 69 6c 65  "registryLogFile
27050 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20  Name"))..       
27060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27070 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27090 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 72 65  configuration.re
270a0 67 69 73 74 72 79 4c 6f 67 46 69 6c 65 4e 61 6d  gistryLogFileNam
270b0 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  e = text;..     
270c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
270e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
270f0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
27100 6f 6e 28 6e 65 77 41 72 67 2c 20 22 72 65 67 69  on(newArg, "regi
27110 73 74 72 79 56 65 72 73 69 6f 6e 22 29 29 0d 0a  stryVersion"))..
27120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27130 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27150 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
27160 74 69 6f 6e 2e 72 65 67 69 73 74 72 79 56 65 72  tion.registryVer
27170 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20  sion = text;..  
27180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27190 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
271a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271b0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
271c0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 73  ption(newArg, "s
271d0 74 72 69 63 74 22 29 29 0d 0a 20 20 20 20 20 20  trict"))..      
271e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27210 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
27220 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
27230 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
27240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27250 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
27260 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
27270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27280 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272a0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
272b0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
272c0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
272d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272e0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
272f0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
27300 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
27310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27330 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
27340 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
27350 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
27360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27370 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
27380 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
27390 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
273c0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
273d0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
273e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
273f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27400 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
27410 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
27420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27430 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
27440 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
27450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27460 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27470 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
27480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27490 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
274a0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
274b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
274d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
274f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27500 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c      // NOTE: All
27510 6f 77 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  ow the command l
27520 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ine arguments to
27530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
27550 20 20 20 20 20 20 20 6f 76 65 72 72 69 64 65 20         override 
27560 74 68 65 20 22 73 74 72 69 63 74 6e 65 73 73 22  the "strictness"
27570 20 73 65 74 74 69 6e 67 0d 0a 20 20 20 20 20 20   setting..      
27580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27590 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70        //       p
275a0 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63  rovided by our c
275b0 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  aller...        
275c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275d0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
275e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275f0 20 20 20 20 73 74 72 69 63 74 20 3d 20 28 62 6f      strict = (bo
27600 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
27610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27620 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
27630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
27640 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
27650 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 68 72 6f  on(newArg, "thro
27660 77 4f 6e 4d 69 73 73 69 6e 67 22 29 29 0d 0a 20  wOnMissing")).. 
27670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27680 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276a0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
276b0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
276c0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
276d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276e0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
276f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
27700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27710 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27730 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
27740 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
27750 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
27760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
27780 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
27790 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
277a0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
277b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
277d0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
277e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
277f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27800 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
27810 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
27820 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
27830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27850 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
27860 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
27870 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
27880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27890 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
278a0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
278b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
278d0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
278e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27900 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
27910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27930 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
27940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27950 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27970 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
27980 72 61 74 69 6f 6e 2e 74 68 72 6f 77 4f 6e 4d 69  ration.throwOnMi
27990 73 73 69 6e 67 20 3d 20 28 62 6f 6f 6c 29 76 61  ssing = (bool)va
279a0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
279b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
279c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
279d0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
279e0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
279f0 77 41 72 67 2c 20 22 74 72 61 63 65 46 6f 72 6d  wArg, "traceForm
27a00 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  at"))..         
27a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
27a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
27a40 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
27a50 65 46 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d  eFormat = text;.
27a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27a70 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
27a80 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61  ceOps.TraceForma
27a90 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  t = configuratio
27aa0 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a  n.traceFormat;..
27ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ac0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
27ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ae0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
27af0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
27b00 22 74 72 61 63 65 50 72 69 6f 72 69 74 79 22 29  "tracePriority")
27b10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27b20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b40 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
27b50 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e   value = ParseEn
27b60 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um(..           
27b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b80 20 20 20 20 20 74 79 70 65 6f 66 28 54 72 61 63       typeof(Trac
27b90 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65 78 74  ePriority), text
27ba0 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20  , true);....    
27bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bc0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
27bd0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
27be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bf0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c10 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
27c20 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
27c30 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
27c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c60 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
27c70 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
27c80 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
27c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ca0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
27cb0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
27cc0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
27cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
27cf0 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a  valid {0} value:
27d00 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
27d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
27d30 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
27d40 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
27d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d70 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
27d80 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
27d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27da0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
27db0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
27dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27dd0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27de0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
27df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e00 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
27e10 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
27e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e50 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
27e60 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20  tracePriority = 
27e70 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 76  (TracePriority)v
27e80 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
27e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ea0 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
27eb0 65 50 72 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66  ePriority = conf
27ec0 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50  iguration.traceP
27ed0 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20  riority;..      
27ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ef0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
27f00 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
27f10 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
27f20 6e 28 6e 65 77 41 72 67 2c 20 22 76 65 72 62 6f  n(newArg, "verbo
27f30 73 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  se"))..         
27f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
27f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
27f70 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
27f80 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
27f90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
27fb0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
27fc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
27fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28000 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
28010 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
28020 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28040 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
28050 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
28060 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
28070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28090 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
280a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
280b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280d0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
280e0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
280f0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
28100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28110 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
28120 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
28130 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
28140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28160 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
28170 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
28180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28190 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
281a0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
281b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
281d0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
281e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281f0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
28200 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
28210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28220 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
28230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28240 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76   configuration.v
28250 65 72 62 6f 73 65 20 3d 20 28 62 6f 6f 6c 29 76  erbose = (bool)v
28260 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
28270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
28280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28290 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
282a0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
282b0 65 77 41 72 67 2c 20 22 76 73 56 65 72 73 69 6f  ewArg, "vsVersio
282c0 6e 53 75 66 66 69 78 22 29 29 0d 0a 20 20 20 20  nSuffix"))..    
282d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
282f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28300 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
28310 2e 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78  .vsVersionSuffix
28320 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
28330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28340 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
28350 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
28360 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
28370 6e 28 6e 65 77 41 72 67 2c 20 22 77 68 61 74 49  n(newArg, "whatI
28380 66 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  f"))..          
28390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
283a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
283b0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
283c0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
283d0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
283e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
283f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
28400 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
28410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
28430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28450 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
28460 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
28470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28490 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
284a0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
284b0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
284c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
284f0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
28500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28520 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
28530 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
28540 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
28550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28560 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
28570 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
28580 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
28590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285b0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
285c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285e0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
285f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28610 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
28620 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
28630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28640 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
28650 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
28660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
28670 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28690 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68  configuration.wh
286a0 61 74 49 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  atIf = (bool)val
286b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
286c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
286d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286e0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
286f0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
28700 41 72 67 2c 20 22 77 6f 77 36 34 22 29 29 0d 0a  Arg, "wow64"))..
28710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28720 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28740 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
28750 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
28760 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
28770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28780 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
28790 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
287a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
287c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287d0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
287e0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
287f0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
28800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28820 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
28830 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
28840 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
28850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28860 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
28870 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
28880 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
28890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
288b0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
288c0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
288d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288f0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
28900 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
28910 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
28920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28930 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
28940 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
28950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28970 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
28980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
289b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
289c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289d0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
289e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a10 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
28a20 75 72 61 74 69 6f 6e 2e 77 6f 77 36 34 20 3d 20  uration.wow64 = 
28a30 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
28a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a50 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
28a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a70 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
28a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
28a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
28ab0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
28ac0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
28ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
28af0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
28b00 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
28b10 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
28b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b30 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
28b40 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
28b50 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
28b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b70 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64      "Unsupported
28b80 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70   command line op
28b90 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  tion: {0}",..   
28ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
28bc0 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74  Display(arg)), t
28bd0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
28be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
28c00 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
28c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28c30 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
28c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
28c60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c80 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
28c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ca0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
28cb0 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
28cc0 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
28cd0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
28cf0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
28d00 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
28d10 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
28d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d30 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
28d40 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
28d50 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65  ck, e, traceCate
28d60 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
28d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
28d80 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f  ror = "Failed to
28d90 20 6d 6f 64 69 66 79 20 63 6f 6e 66 69 67 75 72   modify configur
28da0 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
28db0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
28dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28dd0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
28de0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
28df0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
28e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
28e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
28e50 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
28e60 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
28e70 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
28e80 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
28e90 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
28ea0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28eb0 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73     string[] args
28ec0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28ed0 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e     Configuration
28ee0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d   configuration,.
28ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28f00 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20   bool strict,.. 
28f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28f20 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
28f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28f40 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
28f50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28f60 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
28f70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
28f90 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
28fa0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
28fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
28fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28fd0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
28fe0 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69  = "Invalid confi
28ff0 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20  guration.";..   
29000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29010 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
29020 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
29030 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29050 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
29060 6c 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  ly = configurati
29070 6f 6e 2e 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a  on.assembly;....
29080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29090 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
290a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
290b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
290c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
290d0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
290e0 3d 20 22 49 6e 76 61 6c 69 64 20 61 73 73 65 6d  = "Invalid assem
290f0 62 6c 79 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  bly.";..        
29100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29110 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
29120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29130 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29140 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29150 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  !configuration.n
29160 6f 54 72 61 63 65 29 0d 0a 20 20 20 20 20 20 20  oTrace)..       
29170 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
29180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29190 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
291a0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67  figuration.noLog
291b0 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
291c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291d0 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72   String.IsNullOr
291e0 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74  Empty(configurat
291f0 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29  ion.logFileName)
29200 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
29210 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29230 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
29240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29250 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
29260 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75  E: Use the defau
29270 6c 74 20 6c 6f 67 20 66 69 6c 65 20 6e 61 6d 65  lt log file name
29280 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
292a0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
292b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
292c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67  onfiguration.log
292d0 46 69 6c 65 4e 61 6d 65 20 3d 20 47 65 74 4c 6f  FileName = GetLo
292e0 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20  gFileName(..    
292f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29300 20 20 20 20 20 20 20 20 20 20 20 20 22 74 72 61              "tra
29310 63 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ce");..         
29320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
29330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29340 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
29350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29380 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
29390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
293a0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
293b0 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20  n.noConsole)..  
293c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
293e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293f0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
29400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29410 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e       // NOTE: In
29420 20 76 65 72 62 6f 73 65 20 6d 6f 64 65 2c 20 64   verbose mode, d
29430 65 62 75 67 20 6f 75 74 70 75 74 20 28 74 68 61  ebug output (tha
29440 74 20 6d 65 65 74 73 0d 0a 20 20 20 20 20 20 20  t meets..       
29450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29460 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
29470 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69  e configured pri
29480 6f 72 69 74 79 20 63 72 69 74 65 72 69 61 29 20  ority criteria) 
29490 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20  will be..       
294a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294b0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69       //       di
294c0 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63  splayed to the c
294d0 6f 6e 73 6f 6c 65 3b 20 6f 74 68 65 72 77 69 73  onsole; otherwis
294e0 65 2c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  e, trace..      
294f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29500 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
29510 75 74 70 75 74 20 28 74 68 61 74 20 6d 65 65 74  utput (that meet
29520 73 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64  s the configured
29530 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20   priority..     
29540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29550 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
29560 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c 20 62  criteria) will b
29570 65 20 64 69 73 70 6c 61 79 65 64 20 74 6f 20 74  e displayed to t
29580 68 65 20 63 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20  he console...   
29590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295a0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
295b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295c0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
295d0 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67  figuration.debug
295e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
295f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
29600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29620 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
29630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29640 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
29650 64 64 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74  dd the console t
29660 72 61 63 65 20 6c 69 73 74 65 6e 65 72 20 74 6f  race listener to
29670 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
29680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29690 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c        //       l
296a0 69 73 74 20 6f 66 20 74 72 61 63 65 20 6c 69 73  ist of trace lis
296b0 74 65 6e 65 72 73 20 6d 61 69 6e 74 61 69 6e 65  teners maintaine
296c0 64 20 62 79 0d 0a 20 20 20 20 20 20 20 20 20 20  d by..          
296d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296e0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
296f0 68 65 20 54 72 61 63 65 4f 70 73 20 63 6c 61 73  he TraceOps clas
29700 73 20 28 69 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73  s (i.e. only mes
29710 73 61 67 65 73 0d 0a 20 20 20 20 20 20 20 20 20  sages..         
29720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29730 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
29740 74 68 61 74 20 6d 65 65 74 20 74 68 65 20 64 65  that meet the de
29750 62 75 67 20 70 72 69 6f 72 69 74 79 20 77 69 6c  bug priority wil
29760 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20  l be..          
29770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29780 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73        //       s
29790 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f  een on the conso
297a0 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  le)...          
297b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
297d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297e0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
297f0 70 73 2e 53 65 74 75 70 44 65 62 75 67 4c 69 73  ps.SetupDebugLis
29800 74 65 6e 65 72 73 28 29 3b 0d 0a 20 20 20 20 20  teners();..     
29810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29820 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
29830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29840 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
29850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29860 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29880 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
29890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
298b0 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20  / NOTE: Add the 
298c0 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c 69  console trace li
298d0 73 74 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20  stener to the.. 
298e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
29900 2f 20 20 20 20 20 20 20 6c 69 73 74 20 6f 66 20  /       list of 
29910 62 75 69 6c 74 2d 69 6e 20 74 72 61 63 65 20 6c  built-in trace l
29920 69 73 74 65 6e 65 72 73 20 28 69 2e 65 2e 0d 0a  isteners (i.e...
29930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29950 2f 2f 20 20 20 20 20 20 20 6f 6e 6c 79 20 6d 65  //       only me
29960 73 73 61 67 65 73 20 74 68 61 74 20 6d 65 65 74  ssages that meet
29970 20 74 68 65 20 74 72 61 63 65 0d 0a 20 20 20 20   the trace..    
29980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29990 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
299a0 20 20 20 20 20 70 72 69 6f 72 69 74 79 20 77 69       priority wi
299b0 6c 6c 20 62 65 20 73 65 65 6e 20 6f 6e 20 74 68  ll be seen on th
299c0 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20  e console)...   
299d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
299f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a10 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73   Trace.Listeners
29a20 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65  .Add(new Console
29a30 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29  TraceListener())
29a40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
29a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29a70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
29a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
29aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
29ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29ae0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
29af0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c  onfiguration.noL
29b00 6f 67 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  og &&..         
29b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b20 20 20 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c     !String.IsNul
29b30 6c 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69 67 75  lOrEmpty(configu
29b40 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61  ration.logFileNa
29b50 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
29b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
29b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29b80 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
29b90 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64  ce.Listeners.Add
29ba0 28 6e 65 77 20 54 65 78 74 57 72 69 74 65 72 54  (new TextWriterT
29bb0 72 61 63 65 4c 69 73 74 65 6e 65 72 28 0d 0a 20  raceListener(.. 
29bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
29be0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67  onfiguration.log
29bf0 46 69 6c 65 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20  FileName));.... 
29c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
29c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
29c40 54 45 3a 20 54 65 63 68 6e 69 63 61 6c 6c 79 2c  TE: Technically,
29c50 20 77 65 20 63 72 65 61 74 65 64 20 74 68 65 20   we created the 
29c60 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20  log file...     
29c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c80 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
29c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ca0 20 20 20 20 20 20 20 66 69 6c 65 73 43 72 65 61         filesCrea
29cb0 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ted++;..        
29cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cd0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
29ce0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d00 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
29d10 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
29d20 20 44 75 6d 70 20 74 68 65 20 63 6f 6e 66 69 67   Dump the config
29d30 75 72 61 74 69 6f 6e 20 6e 6f 77 20 69 6e 20 63  uration now in c
29d40 61 73 65 20 77 65 20 6e 65 65 64 20 74 6f 0d 0a  ase we need to..
29d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d60 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 72 6f      //       tro
29d70 75 62 6c 65 73 68 6f 6f 74 20 61 6e 79 20 69 73  ubleshoot any is
29d80 73 75 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  sues...         
29d90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
29da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29db0 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
29dc0 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69  tion.debugPriori
29dd0 74 79 20 3c 3d 20 54 72 61 63 65 50 72 69 6f 72  ty <= TracePrior
29de0 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20  ity.Medium)..   
29df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e00 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
29e10 6f 6e 2e 44 75 6d 70 28 64 65 62 75 67 43 61 6c  on.Dump(debugCal
29e20 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20  lback);....     
29e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29e40 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
29e50 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3c  .tracePriority <
29e60 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  = TracePriority.
29e70 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20  Medium)..       
29e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e90 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44   configuration.D
29ea0 75 6d 70 28 74 72 61 63 65 43 61 6c 6c 62 61 63  ump(traceCallbac
29eb0 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  k);....         
29ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
29ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ee0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 77     // NOTE: Show
29ef0 20 77 68 65 72 65 20 77 65 20 61 72 65 20 72 75   where we are ru
29f00 6e 6e 69 6e 67 20 66 72 6f 6d 20 61 6e 64 20 68  nning from and h
29f10 6f 77 20 77 65 20 77 65 72 65 0d 0a 20 20 20 20  ow we were..    
29f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f30 2f 2f 20 20 20 20 20 20 20 69 6e 76 6f 6b 65 64  //       invoked
29f40 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29f50 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
29f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
29f70 74 72 69 6e 67 20 6c 6f 63 61 74 69 6f 6e 20 3d  tring location =
29f80 20 61 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69   assembly.Locati
29f90 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  on;....         
29fa0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
29fb0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
29fc0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
29fd0 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20  MediumLow,..    
29fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ff0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2a000 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2a010 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2a020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a030 20 20 20 20 20 20 20 20 20 20 22 52 75 6e 6e 69            "Runni
2a040 6e 67 20 65 78 65 63 75 74 61 62 6c 65 20 69 73  ng executable is
2a050 3a 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c  : {0}", ForDispl
2a060 61 79 28 6c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a  ay(location)),..
2a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a080 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
2a090 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
2a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2a0b0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2a0c0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2a0d0 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a  ity.MediumLow,..
2a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0f0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2a100 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2a110 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2a120 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4f                "O
2a140 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20  riginal command 
2a150 6c 69 6e 65 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a  line is: {0}",..
2a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a170 20 20 20 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d          Environm
2a180 65 6e 74 2e 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29  ent.CommandLine)
2a190 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
2a1a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2a1b0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2a1c0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
2a1d0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
2a1e0 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  diumLow,..      
2a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a200 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
2a210 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
2a220 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a240 20 20 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67          "Running
2a250 20 70 72 6f 63 65 73 73 20 69 73 20 7b 30 7d 2e   process is {0}.
2a260 22 2c 20 49 73 36 34 42 69 74 50 72 6f 63 65 73  ", Is64BitProces
2a270 73 28 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  s() ?..         
2a280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a290 20 20 20 22 36 34 2d 62 69 74 22 20 3a 20 22 33     "64-bit" : "3
2a2a0 32 2d 62 69 74 22 29 2c 20 74 72 61 63 65 43 61  2-bit"), traceCa
2a2b0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2d0 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
2a2e0 6f 6e 2e 77 68 61 74 49 66 29 0d 0a 20 20 20 20  on.whatIf)..    
2a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a300 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a310 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2a320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a330 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2a340 49 66 20 74 68 65 20 64 65 62 75 67 67 65 72 20  If the debugger 
2a350 69 73 20 61 74 74 61 63 68 65 64 20 61 6e 64 20  is attached and 
2a360 22 77 68 61 74 2d 69 66 22 0d 0a 20 20 20 20 20  "what-if"..     
2a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a380 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 65     //       mode
2a390 20 69 73 20 5b 6e 6f 77 5d 20 64 69 73 61 62 6c   is [now] disabl
2a3a0 65 64 2c 20 69 73 73 75 65 20 61 20 77 61 72 6e  ed, issue a warn
2a3b0 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
2a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a3d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a3e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 44 65            if (De
2a3f0 62 75 67 67 65 72 2e 49 73 41 74 74 61 63 68 65  bugger.IsAttache
2a400 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
2a410 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a430 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2a440 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2a450 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2a460 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
2a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a480 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2a490 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2a4a0 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
2a4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4c0 20 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72              "For
2a4d0 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c  ced to disable \
2a4e0 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20  "what-if\" mode 
2a4f0 77 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20  with " +..      
2a500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a510 20 20 20 20 20 20 20 20 20 20 22 64 65 62 75 67            "debug
2a520 67 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20  ger attached.", 
2a530 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2a540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a550 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a570 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2a580 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
2a590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a5b0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2a5c0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
2a5d0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
2a5e0 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
2a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a600 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2a610 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2a620 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
2a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a640 20 20 20 20 20 22 4e 6f 20 61 63 74 75 61 6c 20       "No actual 
2a650 63 68 61 6e 67 65 73 20 77 69 6c 6c 20 62 65 20  changes will be 
2a660 6d 61 64 65 20 74 6f 20 74 68 69 73 20 22 20 2b  made to this " +
2a670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
2a690 79 73 74 65 6d 20 62 65 63 61 75 73 65 20 5c 22  ystem because \"
2a6a0 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20 69  what-if\" mode i
2a6b0 73 20 65 6e 61 62 6c 65 64 2e 22 2c 0d 0a 20 20  s enabled.",..  
2a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
2a6e0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
2a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2a700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a710 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a730 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20  // NOTE: If the 
2a740 72 65 67 69 73 74 72 79 20 6c 6f 67 20 66 69 6c  registry log fil
2a750 65 20 6e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  e name has been 
2a760 73 65 74 2c 20 69 74 73 0d 0a 20 20 20 20 20 20  set, its..      
2a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a780 20 20 20 20 20 20 20 76 61 6c 75 65 20 77 69 6c         value wil
2a790 6c 20 62 65 20 75 73 65 64 20 76 65 72 62 61 74  l be used verbat
2a7a0 69 6d 20 61 73 20 74 68 65 20 70 6c 61 63 65 20  im as the place 
2a7b0 77 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 20  where..         
2a7c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2a7d0 20 20 20 20 61 6c 6c 20 72 65 67 69 73 74 72 79      all registry
2a7e0 20 77 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e   write operation
2a7f0 73 20 77 69 6c 6c 20 28 65 76 65 6e 74 75 61 6c  s will (eventual
2a800 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly)..           
2a810 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2a820 20 20 62 65 20 6c 6f 67 67 65 64 2e 20 20 4d 61    be logged.  Ma
2a830 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 67 69  ke sure the regi
2a840 73 74 72 79 20 68 65 6c 70 65 72 20 63 6c 61 73  stry helper clas
2a850 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
2a860 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2a870 68 61 73 20 61 20 76 61 6c 69 64 20 6f 70 65 72  has a valid oper
2a880 61 74 69 6f 6e 20 6c 69 73 74 3b 20 6f 74 68 65  ation list; othe
2a890 72 77 69 73 65 2c 20 69 74 20 77 69 6c 6c 0d 0a  rwise, it will..
2a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8b0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 6f 74      //       not
2a8c0 20 70 65 72 66 6f 72 6d 20 61 6e 79 20 6c 6f 67   perform any log
2a8d0 67 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  ging...         
2a8e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a900 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
2a910 74 69 6f 6e 2e 72 65 67 69 73 74 72 79 4c 6f 67  tion.registryLog
2a920 46 69 6c 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  FileName != null
2a930 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2a940 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a960 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2a970 2e 45 6e 61 62 6c 65 4f 72 44 69 73 61 62 6c 65  .EnableOrDisable
2a980 4f 70 65 72 61 74 69 6f 6e 4c 69 73 74 28 74 72  OperationList(tr
2a990 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
2a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9b0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
2a9c0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
2a9d0 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
2a9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
2aa00 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
2aa10 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
2aa20 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa40 20 20 20 20 20 20 20 20 22 52 65 67 69 73 74 72          "Registr
2aa50 79 20 6c 6f 67 67 69 6e 67 20 74 6f 20 66 69 6c  y logging to fil
2aa60 65 20 7b 30 7d 20 65 6e 61 62 6c 65 64 2e 22 2c  e {0} enabled.",
2aa70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
2aa90 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75  rDisplay(configu
2aaa0 72 61 74 69 6f 6e 2e 72 65 67 69 73 74 72 79 4c  ration.registryL
2aab0 6f 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  ogFileName)),.. 
2aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aad0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2aae0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
2aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2ab10 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab30 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65   // NOTE: If the
2ab40 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 68 61   command line ha
2ab50 73 20 6e 6f 74 20 62 65 65 6e 20 6d 61 6e 75 61  s not been manua
2ab60 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
2ab70 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2ab80 20 20 63 6f 6e 66 69 72 6d 65 64 20 28 69 2e 65    confirmed (i.e
2ab90 2e 20 76 69 61 20 74 68 65 20 65 78 70 6c 69 63  . via the explic
2aba0 69 74 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d  it command line.
2abb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2abc0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
2abd0 74 69 6f 6e 29 2c 20 74 68 65 6e 20 73 74 6f 70  tion), then stop
2abe0 20 70 72 6f 63 65 73 73 69 6e 67 20 6e 6f 77 2e   processing now.
2abf0 20 20 57 65 20 65 6e 66 6f 72 63 65 0d 0a 20 20    We enforce..  
2ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac10 20 20 2f 2f 20 20 20 20 20 20 20 74 68 69 73 20    //       this 
2ac20 72 75 6c 65 20 73 6f 20 74 68 61 74 20 73 69 6d  rule so that sim
2ac30 70 6c 79 20 64 6f 75 62 6c 65 2d 63 6c 69 63 6b  ply double-click
2ac40 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ing the..       
2ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2ac60 20 20 20 20 20 20 65 78 65 63 75 74 61 62 6c 65        executable
2ac70 20 77 69 6c 6c 20 6e 6f 74 20 72 65 73 75 6c 74   will not result
2ac80 20 69 6e 20 61 6e 79 20 63 68 61 6e 67 65 73 20   in any changes 
2ac90 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  being..         
2aca0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2acb0 20 20 20 20 6d 61 64 65 20 74 6f 20 74 68 65 20      made to the 
2acc0 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20  system...       
2acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2ace0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2acf0 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
2ad00 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 29  uration.confirm)
2ad10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ad20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad40 20 65 72 72 6f 72 20 3d 20 22 43 61 6e 6e 6f 74   error = "Cannot
2ad50 20 63 6f 6e 74 69 6e 75 65 2c 20 74 68 65 20 5c   continue, the \
2ad60 22 63 6f 6e 66 69 72 6d 5c 22 20 6f 70 74 69 6f  "confirm\" optio
2ad70 6e 20 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20  n is " +..      
2ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad90 20 20 20 20 20 20 22 6e 6f 74 20 65 6e 61 62 6c        "not enabl
2ada0 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed.";....       
2adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2adc0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2add0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ade0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ae00 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
2ae10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
2ae30 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
2ae40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2ae50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ae60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2ae70 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2ae80 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
2ae90 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
2aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aeb0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2aec0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65  traceCallback, e
2aed0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
2aee0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2aef0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2af00 20 22 46 61 69 6c 65 64 20 74 6f 20 70 72 6f 63   "Failed to proc
2af10 65 73 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ess configuratio
2af20 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
2af30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2af40 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2af50 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2af60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2af70 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2af80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2afb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2afc0 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
2afd0 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
2afe0 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
2aff0 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
2b000 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
2b010 62 6f 6f 6c 20 43 68 65 63 6b 52 75 6e 74 69 6d  bool CheckRuntim
2b020 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20  eVersion(..     
2b030 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69             Confi
2b040 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75  guration configu
2b050 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ration,..       
2b060 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74           bool st
2b070 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rict,..         
2b080 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2b090 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
2b0a0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2b0b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b0c0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
2b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b0f0 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
2b100 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
2b110 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2b120 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b140 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c    error = "Inval
2b150 69 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  id configuration
2b160 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .";..           
2b170 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2b180 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2b1b0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1d0 20 2f 2f 20 4e 4f 54 45 3a 20 57 68 61 74 20 76   // NOTE: What v
2b1e0 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 72 75  ersion of the ru
2b1f0 6e 74 69 6d 65 20 77 61 73 20 74 68 65 20 63 6f  ntime was the co
2b200 72 65 20 28 70 72 69 6d 61 72 79 29 0d 0a 20 20  re (primary)..  
2b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b220 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d    //       assem
2b230 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 61 67 61  bly compiled aga
2b240 69 6e 73 74 20 28 65 2e 67 2e 20 22 76 32 2e 30  inst (e.g. "v2.0
2b250 2e 35 30 37 32 37 22 20 6f 72 0d 0a 20 20 20 20  .50727" or..    
2b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b270 2f 2f 20 20 20 20 20 20 20 22 76 34 2e 30 2e 33  //       "v4.0.3
2b280 30 33 31 39 22 29 2e 0d 0a 20 20 20 20 20 20 20  0319")...       
2b290 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2b2a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b2b0 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65       string core
2b2c0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
2b2d0 69 6f 6e 20 3d 20 47 65 74 49 6d 61 67 65 52 75  ion = GetImageRu
2b2e0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20  ntimeVersion(.. 
2b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b300 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
2b310 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  tion.coreFileNam
2b320 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2b330 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2b340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b350 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 61     // NOTE: We a
2b360 6c 6c 6f 77 20 74 68 65 20 61 63 74 75 61 6c 20  llow the actual 
2b370 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 63 68  image runtime ch
2b380 65 63 6b 69 6e 67 20 74 6f 20 62 65 0d 0a 20 20  ecking to be..  
2b390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3a0 20 20 2f 2f 20 20 20 20 20 20 20 62 79 70 61 73    //       bypas
2b3b0 73 65 64 20 76 69 61 20 74 68 65 20 22 2d 6e 6f  sed via the "-no
2b3c0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 20  RuntimeVersion" 
2b3d0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20  command line..  
2b3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3f0 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f    //       optio
2b400 6e 2e 20 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20  n.  The command 
2b410 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 69 73 20 69  line option is i
2b420 6e 74 65 6e 64 65 64 20 66 6f 72 0d 0a 20 20 20  ntended for..   
2b430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b440 20 2f 2f 20 20 20 20 20 20 20 65 78 70 65 72 74   //       expert
2b450 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a 20 20 20 20   use only...    
2b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b470 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2b480 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
2b490 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74  iguration.noRunt
2b4a0 69 6d 65 56 65 72 73 69 6f 6e 29 0d 0a 20 20 20  imeVersion)..   
2b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b4d0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2b4e0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
2b4f0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
2b500 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20  .Medium,..      
2b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b520 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
2b530 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
2b540 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
2b550 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b570 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d  "Assembly is com
2b580 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e  piled for the .N
2b590 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
2b5a0 3b 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  ; " +..         
2b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5c0 20 20 20 22 68 6f 77 65 76 65 72 2c 20 69 6e 73     "however, ins
2b5d0 74 61 6c 6c 61 74 69 6f 6e 20 72 65 73 74 72 69  tallation restri
2b5e0 63 74 69 6f 6e 73 20 62 61 73 65 64 20 6f 6e 20  ctions based on 
2b5f0 74 68 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20  this " +..      
2b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b610 20 20 20 20 20 20 22 66 61 63 74 20 68 61 76 65        "fact have
2b620 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20 76   been disabled v
2b630 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  ia the command l
2b640 69 6e 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  ine.",..        
2b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b660 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e      coreImageRun
2b670 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 20 74 72  timeVersion), tr
2b680 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
2b690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b6a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b6b0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
2b6c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2b6f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 54              // T
2b700 4f 44 4f 3a 20 52 65 73 74 72 69 63 74 20 74 68  ODO: Restrict th
2b710 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
2b720 62 61 73 65 64 20 6f 6e 20 77 68 69 63 68 20 69  based on which i
2b730 6d 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20  mage..          
2b740 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2b750 20 20 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69     runtime versi
2b760 6f 6e 73 20 28 77 68 69 63 68 20 6d 6f 72 65 2d  ons (which more-
2b770 6f 72 2d 6c 65 73 73 20 63 6f 72 72 65 73 70 6f  or-less correspo
2b780 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nd..            
2b790 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2b7a0 20 74 6f 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f   to .NET Framewo
2b7b0 72 6b 20 76 65 72 73 69 6f 6e 73 29 20 61 72 65  rk versions) are
2b7c0 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 74 68   supported by th
2b7d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
2b7e0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2b7f0 76 65 72 73 69 6f 6e 73 20 6f 66 20 56 69 73 75  versions of Visu
2b800 61 6c 20 53 74 75 64 69 6f 20 74 68 61 74 20 61  al Studio that a
2b810 72 65 20 69 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20  re installed... 
2b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b830 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2b840 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
2b850 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
2b860 70 74 79 28 63 6f 72 65 49 6d 61 67 65 52 75 6e  pty(coreImageRun
2b870 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 0d 0a 20  timeVersion)).. 
2b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b890 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2b8b0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 63  ror = "invalid c
2b8c0 6f 72 65 20 66 69 6c 65 20 69 6d 61 67 65 20 72  ore file image r
2b8d0 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 22 3b  untime version";
2b8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b8f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2b900 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2b910 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b930 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72      else if (Str
2b940 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20  ing.Equals(..   
2b950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b960 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61           coreIma
2b970 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
2b980 2c 20 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74  , CLRv2ImageRunt
2b990 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  imeVersion,..   
2b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9b0 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43           StringC
2b9c0 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
2b9d0 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
2b9e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba00 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65  // NOTE: For the
2ba30 20 43 4c 52 20 76 32 2e 30 20 72 75 6e 74 69 6d   CLR v2.0 runtim
2ba40 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20  e, make sure we 
2ba50 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  disable..       
2ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba70 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61 74   //       any at
2ba80 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74 20  tempt to use it 
2ba90 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74 20  for things that 
2baa0 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20 20  require..       
2bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bac0 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73 73   //       an ass
2bad0 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66  embly compiled f
2bae0 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e 30 2e  or the CLR v4.0.
2baf0 20 20 49 74 20 69 73 0d 0a 20 20 20 20 20 20 20    It is..       
2bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb10 20 2f 2f 20 20 20 20 20 20 20 75 6e 63 65 72 74   //       uncert
2bb20 61 69 6e 20 69 66 20 74 68 69 73 20 69 73 20 61  ain if this is a
2bb30 63 74 75 61 6c 6c 79 20 61 20 70 72 6f 62 6c 65  ctually a proble
2bb40 6d 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  m in..          
2bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2bb60 20 20 20 20 20 20 20 70 72 61 63 74 69 63 65 20         practice 
2bb70 61 73 20 74 68 65 20 43 4c 52 20 76 34 2e 30 20  as the CLR v4.0 
2bb80 63 61 6e 20 6c 6f 61 64 20 61 6e 64 20 75 73 65  can load and use
2bb90 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20   an..           
2bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2bbb0 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 63        assembly c
2bbc0 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65  ompiled with the
2bbd0 20 43 4c 52 20 76 32 2e 30 3b 20 68 6f 77 65 76   CLR v2.0; howev
2bbe0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
2bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2bc00 20 20 20 20 20 20 73 69 6e 63 65 20 74 68 69 73        since this
2bc10 20 70 72 6f 6a 65 63 74 20 6f 66 66 65 72 73 20   project offers 
2bc20 62 6f 74 68 20 63 6f 6e 66 69 67 75 72 61 74 69  both configurati
2bc30 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ons,..          
2bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2bc50 20 20 20 20 20 20 20 77 65 20 63 75 72 72 65 6e         we curren
2bc60 74 6c 79 20 64 69 73 61 6c 6c 6f 77 20 74 68 69  tly disallow thi
2bc70 73 20 6d 69 73 6d 61 74 63 68 2e 0d 0a 20 20 20  s mismatch...   
2bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc90 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcb0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
2bcc0 6f 4e 65 74 46 78 34 30 20 3d 20 74 72 75 65 3b  oNetFx40 = true;
2bcd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bce0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
2bcf0 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34  uration.noNetFx4
2bd00 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  5 = true;..     
2bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
2bd30 2e 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20 74 72  .noNetFx451 = tr
2bd40 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2bd60 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
2bd70 46 78 34 35 32 20 3d 20 74 72 75 65 3b 0d 0a 20  Fx452 = true;.. 
2bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd90 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
2bda0 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 36 20 3d  tion.noNetFx46 =
2bdb0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2bdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bdd0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
2bde0 4e 65 74 46 78 34 36 31 20 3d 20 74 72 75 65 3b  NetFx461 = true;
2bdf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2be00 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
2be10 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34  uration.noNetFx4
2be20 36 32 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  62 = true;..    
2be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be40 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
2be50 6e 2e 6e 6f 4e 65 74 46 78 34 37 20 3d 20 74 72  n.noNetFx47 = tr
2be60 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2be70 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2be80 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
2be90 46 78 34 37 31 20 3d 20 74 72 75 65 3b 0d 0a 20  Fx471 = true;.. 
2bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2beb0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
2bec0 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 37 32 20  tion.noNetFx472 
2bed0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
2bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bef0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
2bf00 6f 56 73 32 30 31 30 20 3d 20 74 72 75 65 3b 0d  oVs2010 = true;.
2bf10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bf20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
2bf30 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20  ration.noVs2012 
2bf40 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
2bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf60 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
2bf70 6f 56 73 32 30 31 33 20 3d 20 74 72 75 65 3b 0d  oVs2013 = true;.
2bf80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bf90 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
2bfa0 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 35 20  ration.noVs2015 
2bfb0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
2bfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bfd0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
2bfe0 6f 56 73 32 30 31 37 20 3d 20 74 72 75 65 3b 0d  oVs2017 = true;.
2bff0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c000 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2c010 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2c020 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2c030 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20  Medium,..       
2c040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c050 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2c060 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2c070 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2c080 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2c0a0 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70  Assembly is comp
2c0b0 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45  iled for the .NE
2c0c0 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c  T Framework {0},
2c0d0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
2c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0f0 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74    "support for t
2c100 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
2c110 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73  k {1} is now dis
2c120 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20  abled.",..      
2c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c140 20 20 20 20 20 20 43 4c 52 76 32 49 6d 61 67 65        CLRv2Image
2c150 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20  RuntimeVersion, 
2c160 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv4ImageRuntim
2c170 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  eVersion),..    
2c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c190 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
2c1a0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
2c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2c1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1d0 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72      else if (Str
2c1e0 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20  ing.Equals(..   
2c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c200 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61           coreIma
2c210 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
2c220 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74  , CLRv4ImageRunt
2c230 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  imeVersion,..   
2c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c250 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43           StringC
2c260 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
2c270 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
2c280 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2c290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2a0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2c0 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65  // NOTE: For the
2c2d0 20 43 4c 52 20 76 34 2e 30 20 72 75 6e 74 69 6d   CLR v4.0 runtim
2c2e0 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20  e, make sure we 
2c2f0 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  disable..       
2c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c310 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61 74   //       any at
2c320 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74 20  tempt to use it 
2c330 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74 20  for things that 
2c340 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20 20  require..       
2c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c360 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73 73   //       an ass
2c370 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66  embly compiled f
2c380 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e  or the CLR v2.0.
2c390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c3a0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2c3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3c0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
2c3d0 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20  ion.noNetFx20 = 
2c3e0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
2c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2c400 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
2c410 65 74 46 78 33 35 20 3d 20 74 72 75 65 3b 0d 0a  etFx35 = true;..
2c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c430 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
2c440 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d  ation.noVs2005 =
2c450 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c470 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
2c480 56 73 32 30 30 38 20 3d 20 74 72 75 65 3b 0d 0a  Vs2008 = true;..
2c490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c4a0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2c4b0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2c4c0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
2c4d0 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  edium,..        
2c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4f0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2c500 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2c510 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2c520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
2c540 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69  ssembly is compi
2c550 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  led for the .NET
2c560 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20   Framework {0}, 
2c570 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
2c580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c590 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68   "support for th
2c5a0 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
2c5b0 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61   {1} is now disa
2c5c0 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20  bled.",..       
2c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5e0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
2c5f0 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv4ImageRuntim
2c600 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  eVersion),..    
2c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c620 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2c630 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e  ay(CLRv2ImageRun
2c640 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a  timeVersion)),..
2c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c660 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2c670 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
2c680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c690 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2c6a0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
2c6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2c6e0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2c6f0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c710 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 63 6f   "unsupported co
2c720 72 65 20 66 69 6c 65 20 69 6d 61 67 65 20 72 75  re file image ru
2c730 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 22 20  ntime version " 
2c740 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
2c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2c760 7b 30 7d 2c 20 6d 75 73 74 20 62 65 20 7b 31 7d  {0}, must be {1}
2c770 20 6f 72 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20   or {2}",..     
2c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c790 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
2c7a0 79 28 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69  y(coreImageRunti
2c7b0 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7d0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
2c7e0 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75  lay(CLRv2ImageRu
2c7f0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a  ntimeVersion),..
2c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c810 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
2c820 69 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67  isplay(CLRv4Imag
2c830 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
2c840 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c860 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c880 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2c890 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2c8a0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2c8b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2c8c0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
2c8d0 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
2c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c900 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
2c910 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
2c920 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
2c930 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
2c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
2c950 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
2c960 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74  ceCallback, e, t
2c970 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2c980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c990 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46        error = "F
2c9a0 61 69 6c 65 64 20 74 6f 20 63 68 65 63 6b 20 69  ailed to check i
2c9b0 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72  mage runtime ver
2c9c0 73 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  sion.";..       
2c9d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c9f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2ca00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2ca10 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2ca20 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
2ca30 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2ca40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca70 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2ca80 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
2ca90 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20  vate Methods..  
2caa0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2cab0 65 20 73 74 72 69 6e 67 20 47 65 74 49 6e 76 61  e string GetInva
2cac0 72 69 61 6e 74 4e 61 6d 65 28 0d 0a 20 20 20 20  riantName(..    
2cad0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2cae0 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20   trace..        
2caf0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2cb00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2cb10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2cb20 20 55 73 65 45 66 36 50 72 6f 76 69 64 65 72 28   UseEf6Provider(
2cb30 74 72 61 63 65 29 20 3f 0d 0a 20 20 20 20 20 20  trace) ?..      
2cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 66                Ef
2cb50 36 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20 3a  6InvariantName :
2cb60 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b 0d   InvariantName;.
2cb70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2cb80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2cb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cbd0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2cbe0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 49 73   private bool Is
2cbf0 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c  SystemEf6Assembl
2cc00 79 41 76 61 69 6c 61 62 6c 65 28 0d 0a 20 20 20  yAvailable(..   
2cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
2cc20 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20  l trace..       
2cc30 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2cc40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2cc50 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
2cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2cc80 20 20 20 20 20 20 20 69 66 20 28 73 79 73 74 65         if (syste
2cc90 6d 45 66 36 41 73 73 65 6d 62 6c 79 20 3d 3d 20  mEf6Assembly == 
2cca0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2ccb0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccd0 20 20 20 20 20 20 73 79 73 74 65 6d 45 66 36 41        systemEf6A
2cce0 73 73 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62  ssembly = Assemb
2ccf0 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c  ly.ReflectionOnl
2cd00 79 4c 6f 61 64 28 0d 0a 20 20 20 20 20 20 20 20  yLoad(..        
2cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd20 20 20 20 20 53 79 73 74 65 6d 45 66 36 41 73 73      SystemEf6Ass
2cd30 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 20 20 20  emblyName);..   
2cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2cd60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79            if (sy
2cd70 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 20  stemEf6Assembly 
2cd80 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
2cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2cda0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cdb0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61           if (tra
2cdc0 63 65 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  ce &&..         
2cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cde0 20 20 20 21 48 61 73 46 6c 61 67 73 28 50 72 6f     !HasFlags(Pro
2cdf0 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64 45 66  viderFlags.DidEf
2ce00 36 52 65 73 6f 6c 76 65 54 72 61 63 65 2c 20 74  6ResolveTrace, t
2ce10 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
2ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2ce30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2ce50 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
2ce60 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
2ce70 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
2ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce90 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2cea0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2ceb0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2cec0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cee0 20 20 20 20 20 20 20 20 20 20 20 22 45 6e 74 69             "Enti
2cef0 74 79 20 46 72 61 6d 65 77 6f 72 6b 20 36 20 61  ty Framework 6 a
2cf00 73 73 65 6d 62 6c 79 20 77 61 73 20 22 20 2b 0d  ssembly was " +.
2cf10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf30 20 22 72 65 73 6f 6c 76 65 64 20 74 6f 20 7b 30   "resolved to {0
2cf40 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  }.", ForDisplay(
2cf50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf70 20 20 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d    systemEf6Assem
2cf80 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 29 2c 0d  bly.Location)),.
2cf90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfb0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2cfc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfe0 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 7c 3d  providerFlags |=
2cff0 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44   ProviderFlags.D
2d000 69 64 45 66 36 52 65 73 6f 6c 76 65 54 72 61 63  idEf6ResolveTrac
2d010 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2d020 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2d030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d040 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d050 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
2d060 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2d080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d090 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
2d0a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2d0c0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
2d0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2d0e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d0f0 20 20 20 20 69 66 20 28 74 72 61 63 65 20 26 26      if (trace &&
2d100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d110 20 20 20 20 20 20 21 48 61 73 46 6c 61 67 73 28        !HasFlags(
2d120 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69  ProviderFlags.Di
2d130 64 45 66 36 52 65 73 6f 6c 76 65 54 72 61 63 65  dEf6ResolveTrace
2d140 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
2d150 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d170 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2d180 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2d190 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
2d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1b0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2d1c0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2d1d0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
2d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2d1f0 45 6e 74 69 74 79 20 46 72 61 6d 65 77 6f 72 6b  Entity Framework
2d200 20 36 20 61 73 73 65 6d 62 6c 79 20 77 61 73 20   6 assembly was 
2d210 6e 6f 74 20 72 65 73 6f 6c 76 65 64 2e 22 2c 0d  not resolved.",.
2d220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d230 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
2d240 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
2d250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d260 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 7c 3d  providerFlags |=
2d270 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44   ProviderFlags.D
2d280 69 64 45 66 36 52 65 73 6f 6c 76 65 54 72 61 63  idEf6ResolveTrac
2d290 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2d2a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d2b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d2c0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2d2d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2d2e0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2d2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2d300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d350 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d  #region Public M
2d360 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
2d370 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
2d380 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20  HasFlags(..     
2d390 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
2d3a0 6c 6c 46 6c 61 67 73 20 68 61 73 46 6c 61 67 73  llFlags hasFlags
2d3b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d3c0 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20 20 20     bool all..   
2d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
2d3e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2d400 66 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20  f (all)..       
2d410 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2d420 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61  urn ((installFla
2d430 67 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 3d  gs & hasFlags) =
2d440 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a 20 20  = hasFlags);..  
2d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
2d460 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
2d470 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
2d480 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20  (installFlags & 
2d490 68 61 73 46 6c 61 67 73 29 20 21 3d 20 49 6e 73  hasFlags) != Ins
2d4a0 74 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65 29 3b  tallFlags.None);
2d4b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2d4c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2d4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d510 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2d520 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 48 61    public bool Ha
2d530 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20  sFlags(..       
2d540 20 20 20 20 20 20 20 20 20 50 72 6f 76 69 64 65           Provide
2d550 72 46 6c 61 67 73 20 68 61 73 46 6c 61 67 73 2c  rFlags hasFlags,
2d560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d570 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20    bool all..    
2d580 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2d590 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2d5b0 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   (all)..        
2d5c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2d5d0 72 6e 20 28 28 70 72 6f 76 69 64 65 72 46 6c 61  rn ((providerFla
2d5e0 67 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 3d  gs & hasFlags) =
2d5f0 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a 20 20  = hasFlags);..  
2d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
2d610 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
2d620 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
2d630 28 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 26  (providerFlags &
2d640 20 68 61 73 46 6c 61 67 73 29 20 21 3d 20 50 72   hasFlags) != Pr
2d650 6f 76 69 64 65 72 46 6c 61 67 73 2e 4e 6f 6e 65  oviderFlags.None
2d660 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2d670 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2d680 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2d690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d6c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2d6d0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
2d6e0 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 65 64 28  IsLinqSupported(
2d6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d700 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20    bool trace..  
2d710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
2d720 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d740 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2d750 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 68 65      // NOTE: Che
2d760 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ck to see if the
2d770 20 63 61 6c 6c 65 72 20 68 61 73 20 66 6f 72 63   caller has forc
2d780 65 64 20 4c 49 4e 51 20 73 75 70 70 6f 72 74 20  ed LINQ support 
2d790 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  to..            
2d7a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 65 20      //       be 
2d7b0 65 6e 61 62 6c 65 64 20 2d 4f 52 2d 20 64 69 73  enabled -OR- dis
2d7c0 61 62 6c 65 64 2c 20 74 68 65 72 65 62 79 20 62  abled, thereby b
2d7d0 79 70 61 73 73 69 6e 67 20 74 68 65 20 6e 65 65  ypassing the nee
2d7e0 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
2d7f0 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 72 20     //       for 
2d800 22 61 75 74 6f 6d 61 74 69 63 20 64 65 74 65 63  "automatic detec
2d810 74 69 6f 6e 22 20 62 79 20 74 68 69 73 20 6d 65  tion" by this me
2d820 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2d830 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2d840 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 48             if (H
2d850 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72  asFlags(Provider
2d860 46 6c 61 67 73 2e 46 6f 72 63 65 4c 69 6e 71 45  Flags.ForceLinqE
2d870 6e 61 62 6c 65 64 2c 20 74 72 75 65 29 29 0d 0a  nabled, true))..
2d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d890 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d8a0 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65         if (trace
2d8b0 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
2d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 21 48 61               !Ha
2d8d0 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46  sFlags(ProviderF
2d8e0 6c 61 67 73 2e 44 69 64 4c 69 6e 71 46 6f 72 63  lags.DidLinqForc
2d8f0 65 54 72 61 63 65 2c 20 74 72 75 65 29 29 0d 0a  eTrace, true))..
2d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d910 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2d930 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2d940 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2d950 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
2d960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d970 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2d980 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2d990 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
2d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9b0 20 20 20 20 20 20 20 20 22 46 6f 72 63 65 64 20          "Forced 
2d9c0 74 6f 20 65 6e 61 62 6c 65 20 73 75 70 70 6f 72  to enable suppor
2d9d0 74 20 66 6f 72 20 5c 22 4c 69 6e 71 5c 22 2e 22  t for \"Linq\"."
2d9e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2da00 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2da10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2da20 20 20 20 20 20 20 20 20 20 20 70 72 6f 76 69 64            provid
2da30 65 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69  erFlags |= Provi
2da40 64 65 72 46 6c 61 67 73 2e 44 69 64 4c 69 6e 71  derFlags.DidLinq
2da50 46 6f 72 63 65 54 72 61 63 65 3b 0d 0a 20 20 20  ForceTrace;..   
2da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2da80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2da90 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2daa0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2dab0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
2dac0 69 66 20 28 48 61 73 46 6c 61 67 73 28 50 72 6f  if (HasFlags(Pro
2dad0 76 69 64 65 72 46 6c 61 67 73 2e 46 6f 72 63 65  viderFlags.Force
2dae0 4c 69 6e 71 44 69 73 61 62 6c 65 64 2c 20 74 72  LinqDisabled, tr
2daf0 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
2db00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2db10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2db20 28 74 72 61 63 65 20 26 26 0d 0a 20 20 20 20 20  (trace &&..     
2db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db40 20 20 20 21 48 61 73 46 6c 61 67 73 28 50 72 6f     !HasFlags(Pro
2db50 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64 4c 69  viderFlags.DidLi
2db60 6e 71 46 6f 72 63 65 54 72 61 63 65 2c 20 74 72  nqForceTrace, tr
2db70 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
2db80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2db90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dba0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
2dbb0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
2dbc0 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
2dbd0 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
2dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbf0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2dc00 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2dc10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
2dc30 6f 72 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65  orced to disable
2dc40 20 73 75 70 70 6f 72 74 20 66 6f 72 20 5c 22 4c   support for \"L
2dc50 69 6e 71 5c 22 2e 22 2c 0d 0a 20 20 20 20 20 20  inq\".",..      
2dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc70 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2dc80 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2dc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dca0 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 7c   providerFlags |
2dcb0 3d 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e  = ProviderFlags.
2dcc0 44 69 64 4c 69 6e 71 46 6f 72 63 65 54 72 61 63  DidLinqForceTrac
2dcd0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2dce0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd00 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2dd30 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2dd40 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2dd50 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72  : Return non-zer
2dd60 6f 20 69 66 20 74 68 65 20 53 79 73 74 65 6d 2e  o if the System.
2dd70 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
2dd80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dd90 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d    //       assem
2dda0 62 6c 79 20 73 68 6f 75 6c 64 20 62 65 20 70 72  bly should be pr
2ddb0 6f 63 65 73 73 65 64 20 64 75 72 69 6e 67 20 74  ocessed during t
2ddc0 68 65 20 69 6e 73 74 61 6c 6c 2e 0d 0a 20 20 20  he install...   
2ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2dde0 20 20 20 20 20 20 49 66 20 74 68 65 20 74 61 72        If the tar
2ddf0 67 65 74 20 69 73 20 56 69 73 75 61 6c 20 53 74  get is Visual St
2de00 75 64 69 6f 20 32 30 30 35 2c 20 74 68 69 73 20  udio 2005, this 
2de10 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  must..          
2de20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72        //       r
2de30 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20  eturn zero...   
2de40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2de50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2de60 20 72 65 74 75 72 6e 20 21 6e 6f 4e 65 74 46 78   return !noNetFx
2de70 33 35 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 30  35 || !noNetFx40
2de80 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35 20 7c   || !noNetFx45 |
2de90 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
2dea0 20 20 20 20 20 20 20 21 6e 6f 4e 65 74 46 78 34         !noNetFx4
2deb0 35 31 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35  51 || !noNetFx45
2dec0 32 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 36 20  2 || !noNetFx46 
2ded0 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
2dee0 20 20 20 20 20 20 20 20 21 6e 6f 4e 65 74 46 78          !noNetFx
2def0 34 36 31 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34  461 || !noNetFx4
2df00 36 32 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 37  62 || !noNetFx47
2df10 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
2df20 20 20 20 20 20 20 20 20 20 21 6e 6f 4e 65 74 46           !noNetF
2df30 78 34 37 31 20 7c 7c 20 21 6e 6f 4e 65 74 46 78  x471 || !noNetFx
2df40 34 37 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  472;..          
2df50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2df60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2df70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dfa0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2dfb0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
2dfc0 6c 20 49 73 45 66 36 53 75 70 70 6f 72 74 65 64  l IsEf6Supported
2dfd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2dfe0 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20     bool trace.. 
2dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
2e000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2e010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e020 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2e030 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 68       // NOTE: Ch
2e040 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
2e050 65 20 63 61 6c 6c 65 72 20 68 61 73 20 66 6f 72  e caller has for
2e060 63 65 64 20 45 46 36 20 73 75 70 70 6f 72 74 20  ced EF6 support 
2e070 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  to..            
2e080 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 65 20      //       be 
2e090 65 6e 61 62 6c 65 64 20 2d 4f 52 2d 20 64 69 73  enabled -OR- dis
2e0a0 61 62 6c 65 64 2c 20 74 68 65 72 65 62 79 20 62  abled, thereby b
2e0b0 79 70 61 73 73 69 6e 67 20 74 68 65 20 6e 65 65  ypassing the nee
2e0c0 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
2e0d0 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 72 20     //       for 
2e0e0 22 61 75 74 6f 6d 61 74 69 63 20 64 65 74 65 63  "automatic detec
2e0f0 74 69 6f 6e 22 20 62 79 20 74 68 69 73 20 6d 65  tion" by this me
2e100 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2e110 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2e120 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 48             if (H
2e130 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72  asFlags(Provider
2e140 46 6c 61 67 73 2e 46 6f 72 63 65 45 66 36 45 6e  Flags.ForceEf6En
2e150 61 62 6c 65 64 2c 20 74 72 75 65 29 29 0d 0a 20  abled, true)).. 
2e160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2e170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e180 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65 20        if (trace 
2e190 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
2e1a0 20 20 20 20 20 20 20 20 20 20 20 20 21 48 61 73              !Has
2e1b0 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c  Flags(ProviderFl
2e1c0 61 67 73 2e 44 69 64 45 66 36 46 6f 72 63 65 54  ags.DidEf6ForceT
2e1d0 72 61 63 65 2c 20 74 72 75 65 29 29 0d 0a 20 20  race, true))..  
2e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e200 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2e210 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
2e220 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
2e230 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20  y.MediumHigh,.. 
2e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e250 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2e260 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2e270 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
2e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e290 20 20 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f        "Forced to
2e2a0 20 65 6e 61 62 6c 65 20 73 75 70 70 6f 72 74 20   enable support 
2e2b0 66 6f 72 20 5c 22 45 66 36 5c 22 2e 22 2c 0d 0a  for \"Ef6\".",..
2e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2e2e0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2e2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e300 20 20 20 20 20 20 20 70 72 6f 76 69 64 65 72 46         providerF
2e310 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69 64 65 72  lags |= Provider
2e320 46 6c 61 67 73 2e 44 69 64 45 66 36 46 6f 72 63  Flags.DidEf6Forc
2e330 65 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20  eTrace;..       
2e340 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2e350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e360 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2e370 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2e380 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2e390 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
2e3a0 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65  HasFlags(Provide
2e3b0 72 46 6c 61 67 73 2e 46 6f 72 63 65 45 66 36 44  rFlags.ForceEf6D
2e3c0 69 73 61 62 6c 65 64 2c 20 74 72 75 65 29 29 0d  isabled, true)).
2e3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e3e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2e3f0 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63          if (trac
2e400 65 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  e &&..          
2e410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 48                !H
2e420 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72  asFlags(Provider
2e430 46 6c 61 67 73 2e 44 69 64 45 66 36 46 6f 72 63  Flags.DidEf6Forc
2e440 65 54 72 61 63 65 2c 20 74 72 75 65 29 29 0d 0a  eTrace, true))..
2e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e460 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2e480 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2e490 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2e4a0 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
2e4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2e4d0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2e4e0 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
2e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e500 20 20 20 20 20 20 20 20 22 46 6f 72 63 65 64 20          "Forced 
2e510 74 6f 20 64 69 73 61 62 6c 65 20 73 75 70 70 6f  to disable suppo
2e520 72 74 20 66 6f 72 20 5c 22 45 66 36 5c 22 2e 22  rt for \"Ef6\"."
2e530 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2e550 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2e560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e570 20 20 20 20 20 20 20 20 20 20 70 72 6f 76 69 64            provid
2e580 65 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69  erFlags |= Provi
2e590 64 65 72 46 6c 61 67 73 2e 44 69 64 45 66 36 46  derFlags.DidEf6F
2e5a0 6f 72 63 65 54 72 61 63 65 3b 0d 0a 20 20 20 20  orceTrace;..    
2e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e5d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2e5e0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2e5f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2e600 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2e610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e620 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e   // NOTE: Return
2e630 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
2e640 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
2e650 69 74 65 2e 45 46 36 0d 0a 20 20 20 20 20 20 20  ite.EF6..       
2e660 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2e670 20 20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75 6c    assembly shoul
2e680 64 20 62 65 20 70 72 6f 63 65 73 73 65 64 20 64  d be processed d
2e690 75 72 69 6e 67 20 74 68 65 20 69 6e 73 74 61 6c  uring the instal
2e6a0 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l...            
2e6b0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66 20      //       If 
2e6c0 74 68 65 20 74 61 72 67 65 74 20 69 73 20 56 69  the target is Vi
2e6d0 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 35  sual Studio 2005
2e6e0 20 6f 72 20 56 69 73 75 61 6c 0d 0a 20 20 20 20   or Visual..    
2e6f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2e700 20 20 20 20 20 53 74 75 64 69 6f 20 32 30 30 38       Studio 2008
2e710 2c 20 74 68 69 73 20 6d 75 73 74 20 72 65 74 75  , this must retu
2e720 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20  rn zero...      
2e730 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2e750 20 28 6e 6f 4e 65 74 46 78 34 30 20 26 26 0d 0a   (noNetFx40 &&..
2e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e770 20 20 20 20 6e 6f 4e 65 74 46 78 34 35 20 26 26      noNetFx45 &&
2e780 20 6e 6f 4e 65 74 46 78 34 35 31 20 26 26 20 6e   noNetFx451 && n
2e790 6f 4e 65 74 46 78 34 35 32 20 26 26 20 6e 6f 4e  oNetFx452 && noN
2e7a0 65 74 46 78 34 36 20 26 26 0d 0a 20 20 20 20 20  etFx46 &&..     
2e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
2e7c0 6f 4e 65 74 46 78 34 36 31 20 26 26 20 6e 6f 4e  oNetFx461 && noN
2e7d0 65 74 46 78 34 36 32 20 26 26 20 6e 6f 4e 65 74  etFx462 && noNet
2e7e0 46 78 34 37 20 26 26 20 6e 6f 4e 65 74 46 78 34  Fx47 && noNetFx4
2e7f0 37 31 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  71 &&..         
2e800 20 20 20 20 20 20 20 20 20 20 20 6e 6f 4e 65 74             noNet
2e810 46 78 34 37 32 29 0d 0a 20 20 20 20 20 20 20 20  Fx472)..        
2e820 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2e840 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2e850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2e860 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e870 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2e880 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2e890 41 6c 73 6f 2c 20 69 66 20 74 68 65 20 45 46 36  Also, if the EF6
2e8a0 20 63 6f 72 65 20 61 73 73 65 6d 62 6c 79 20 69   core assembly i
2e8b0 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 74  s unavailable, t
2e8c0 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  his..           
2e8d0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 75       //       mu
2e8e0 73 74 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d  st return zero..
2e8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e900 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2e910 20 20 20 20 20 69 66 20 28 21 49 73 53 79 73 74       if (!IsSyst
2e920 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 41 76 61  emEf6AssemblyAva
2e930 69 6c 61 62 6c 65 28 74 72 61 63 65 29 29 0d 0a  ilable(trace))..
2e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e950 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2e960 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2e970 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2e980 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2e990 3a 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  : Finally, if th
2e9a0 65 20 45 46 36 20 63 6f 72 65 20 61 73 73 65 6d  e EF6 core assem
2e9b0 62 6c 79 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  bly is not avail
2e9c0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..          
2e9d0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 67        //       g
2e9e0 6c 6f 62 61 6c 6c 79 20 5b 61 6e 64 20 74 68 69  lobally [and thi
2e9f0 73 20 69 73 20 61 20 72 65 71 75 69 72 65 6d 65  s is a requireme
2ea00 6e 74 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nt for the curre
2ea10 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
2ea20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 73      //       ins
2ea30 74 61 6c 6c 5d 2c 20 72 65 74 75 72 6e 20 7a 65  tall], return ze
2ea40 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro...           
2ea50 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2ea60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ea70 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65  HasFlags(Provide
2ea80 72 46 6c 61 67 73 2e 53 79 73 74 65 6d 45 66 36  rFlags.SystemEf6
2ea90 4d 75 73 74 42 65 47 6c 6f 62 61 6c 2c 20 74 72  MustBeGlobal, tr
2eaa0 75 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ue) ?..         
2eab0 20 20 20 20 20 20 20 20 20 20 20 49 73 53 79 73             IsSys
2eac0 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 47 6c  temEf6AssemblyGl
2ead0 6f 62 61 6c 28 29 20 3a 20 74 72 75 65 3b 0d 0a  obal() : true;..
2eae0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2eaf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2eb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2eb50 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 49 73 45  private bool IsE
2eb60 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c  f6AssemblyGlobal
2eb70 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
2eb80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2eb90 20 20 20 69 66 20 28 65 66 36 41 73 73 65 6d 62     if (ef6Assemb
2eba0 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d  lyName == null).
2ebb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ebc0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2ebd0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2ebe0 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
2ebf0 73 73 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62  ssembly = Assemb
2ec00 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c  ly.ReflectionOnl
2ec10 79 4c 6f 61 64 28 0d 0a 20 20 20 20 20 20 20 20  yLoad(..        
2ec20 20 20 20 20 20 20 20 20 20 20 20 20 65 66 36 41              ef6A
2ec30 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 54 6f 53 74  ssemblyName.ToSt
2ec40 72 69 6e 67 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  ring());....    
2ec50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ec60 72 6e 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20  rn (assembly != 
2ec70 6e 75 6c 6c 29 20 26 26 20 61 73 73 65 6d 62 6c  null) && assembl
2ec80 79 2e 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  y.GlobalAssembly
2ec90 43 61 63 68 65 3b 0d 0a 20 20 20 20 20 20 20 20  Cache;..        
2eca0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2ecb0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2ecc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ecd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ece0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ecf0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2ed00 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
2ed10 6f 6f 6c 20 55 73 65 45 66 36 50 72 6f 76 69 64  ool UseEf6Provid
2ed20 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
2ed30 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d       bool trace.
2ed40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ed50 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
2ed60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ed70 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2ed80 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2ed90 57 65 20 63 61 6e 6e 6f 74 20 75 73 65 20 74 68  We cannot use th
2eda0 65 20 45 46 36 20 61 73 73 65 6d 62 6c 79 20 61  e EF6 assembly a
2edb0 73 20 74 68 65 20 70 72 6f 76 69 64 65 72 20 69  s the provider i
2edc0 66 20 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  f it..          
2edd0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
2ede0 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20  s not supported 
2edf0 62 79 20 74 68 69 73 20 69 6e 73 74 61 6c 6c 61  by this installa
2ee00 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20  tion...         
2ee10 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2ee20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2ee30 49 73 45 66 36 53 75 70 70 6f 72 74 65 64 28 74  IsEf6Supported(t
2ee40 72 61 63 65 29 29 0d 0a 20 20 20 20 20 20 20 20  race))..        
2ee50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ee60 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
2ee70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2ee80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ee90 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68   // NOTE: For th
2eea0 65 20 45 46 36 20 61 73 73 65 6d 62 6c 79 20 74  e EF6 assembly t
2eeb0 6f 20 62 65 20 75 73 61 62 6c 65 20 61 73 20 61  o be usable as a
2eec0 20 70 72 6f 76 69 64 65 72 20 69 6e 0d 0a 20 20   provider in..  
2eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2eee0 20 20 20 20 20 20 20 74 68 65 20 6d 61 63 68 69         the machi
2eef0 6e 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ne configuration
2ef00 20 66 69 6c 65 2c 20 69 74 20 6d 75 73 74 20 62   file, it must b
2ef10 65 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  e in the..      
2ef20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2ef30 20 20 20 67 6c 6f 62 61 6c 20 61 73 73 65 6d 62     global assemb
2ef40 6c 79 20 63 61 63 68 65 2e 0d 0a 20 20 20 20 20  ly cache...     
2ef50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ef70 65 74 75 72 6e 20 49 73 45 66 36 41 73 73 65 6d  eturn IsEf6Assem
2ef80 62 6c 79 47 6c 6f 62 61 6c 28 29 3b 0d 0a 20 20  blyGlobal();..  
2ef90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2efa0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2efb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2efc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2efd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2efe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2eff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ..            /*
2f000 20 52 45 51 55 49 52 45 44 20 2a 2f 0d 0a 20 20   REQUIRED */..  
2f010 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2f020 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65   AssemblyName Ge
2f030 74 43 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d  tCoreAssemblyNam
2f040 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2f050 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 20 2f      bool trace /
2f060 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20  * NOT USED */.. 
2f070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
2f080 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
2f090 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2f0b0 28 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d  (coreAssemblyNam
2f0c0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
2f0d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0f0 20 20 20 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e     coreAssemblyN
2f100 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61  ame = AssemblyNa
2f110 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61  me.GetAssemblyNa
2f120 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2f130 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 72               Cor
2f140 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74  eFileName); /* t
2f150 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
2f160 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f180 74 75 72 6e 20 63 6f 72 65 41 73 73 65 6d 62 6c  turn coreAssembl
2f190 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
2f1a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2f1b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2f1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f1f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2f200 20 20 20 20 20 20 20 20 2f 2a 20 4f 50 54 49 4f          /* OPTIO
2f210 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  NAL */..        
2f220 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
2f230 62 6c 79 4e 61 6d 65 20 47 65 74 4c 69 6e 71 41  blyName GetLinqA
2f240 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20  ssemblyName(..  
2f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
2f260 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ol trace..      
2f270 20 20 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74            ) /* t
2f280 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
2f290 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f2a0 20 20 20 20 20 20 20 20 69 66 20 28 49 73 4c 69          if (IsLi
2f2b0 6e 71 53 75 70 70 6f 72 74 65 64 28 74 72 61 63  nqSupported(trac
2f2c0 65 29 20 26 26 20 28 6c 69 6e 71 41 73 73 65 6d  e) && (linqAssem
2f2d0 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  blyName == null)
2f2e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2f2f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f300 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 41 73            linqAs
2f310 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73  semblyName = Ass
2f320 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73  emblyName.GetAss
2f330 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20  emblyName(..    
2f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f350 20 20 20 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65      LinqFileName
2f360 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
2f370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f380 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2f390 20 20 20 20 20 72 65 74 75 72 6e 20 6c 69 6e 71       return linq
2f3a0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20  AssemblyName;.. 
2f3b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2f3c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2f3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2f410 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2f420 2a 20 4f 50 54 49 4f 4e 41 4c 20 2a 2f 0d 0a 20  * OPTIONAL */.. 
2f430 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2f440 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 47  c AssemblyName G
2f450 65 74 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d  etEf6AssemblyNam
2f460 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2f470 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a      bool trace..
2f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f490 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
2f4a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2f4c0 20 28 49 73 45 66 36 53 75 70 70 6f 72 74 65 64   (IsEf6Supported
2f4d0 28 74 72 61 63 65 29 20 26 26 20 28 65 66 36 41  (trace) && (ef6A
2f4e0 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e  ssemblyName == n
2f4f0 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
2f500 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2f510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 66                ef
2f520 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20  6AssemblyName = 
2f530 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74  AssemblyName.Get
2f540 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20  AssemblyName(.. 
2f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f560 20 20 20 20 20 20 20 45 66 36 46 69 6c 65 4e 61         Ef6FileNa
2f570 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  me); /* throw */
2f580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f590 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2f5a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 65 66         return ef
2f5b0 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a  6AssemblyName;..
2f5c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2f5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f630 2f 2a 20 52 45 51 55 49 52 45 44 20 2a 2f 0d 0a  /* REQUIRED */..
2f640 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2f650 69 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  ic AssemblyName 
2f660 47 65 74 44 65 73 69 67 6e 65 72 41 73 73 65 6d  GetDesignerAssem
2f670 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  blyName(..      
2f680 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
2f690 72 61 63 65 20 2f 2a 20 4e 4f 54 20 55 53 45 44  race /* NOT USED
2f6a0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
2f6b0 20 20 20 20 20 29 20 2f 2a 20 74 68 72 6f 77 20       ) /* throw 
2f6c0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
2f6d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f6e0 20 20 20 69 66 20 28 64 65 73 69 67 6e 65 72 41     if (designerA
2f6f0 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e  ssemblyName == n
2f700 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2f710 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f720 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
2f730 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  ignerAssemblyNam
2f740 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  e = AssemblyName
2f750 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65  .GetAssemblyName
2f760 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2f770 20 20 20 20 20 20 20 20 20 20 20 44 65 73 69 67             Desig
2f780 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a  nerFileName); /*
2f790 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
2f7a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2f7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7c0 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65 72 41  return designerA
2f7d0 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20  ssemblyName;..  
2f7e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f7f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2f800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2f840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ..            /*
2f850 20 52 45 51 55 49 52 45 44 20 2a 2f 0d 0a 20 20   REQUIRED */..  
2f860 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2f870 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65   AssemblyName Ge
2f880 74 50 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c  tProviderAssembl
2f890 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
2f8a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61          bool tra
2f8b0 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
2f8c0 20 20 20 20 29 20 2f 2a 20 74 68 72 6f 77 20 2a      ) /* throw *
2f8d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
2f8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f8f0 20 20 72 65 74 75 72 6e 20 55 73 65 45 66 36 50    return UseEf6P
2f900 72 6f 76 69 64 65 72 28 74 72 61 63 65 29 20 3f  rovider(trace) ?
2f910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f920 20 20 20 20 20 20 47 65 74 45 66 36 41 73 73 65        GetEf6Asse
2f930 6d 62 6c 79 4e 61 6d 65 28 74 72 61 63 65 29 20  mblyName(trace) 
2f940 3a 20 47 65 74 43 6f 72 65 41 73 73 65 6d 62 6c  : GetCoreAssembl
2f950 79 4e 61 6d 65 28 74 72 61 63 65 29 3b 0d 0a 20  yName(trace);.. 
2f960 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2f970 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2f980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2f9c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
2f9d0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74  ublic string Get
2f9e0 43 6f 6e 66 69 67 49 6e 76 61 72 69 61 6e 74 4e  ConfigInvariantN
2f9f0 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
2fa00 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65        bool trace
2fa10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fa20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
2fa30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2fa40 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 49 6e      return GetIn
2fa50 76 61 72 69 61 6e 74 4e 61 6d 65 28 74 72 61 63  variantName(trac
2fa60 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2fa70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2fa80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2fa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2faa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fac0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2fad0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
2fae0 6e 67 20 47 65 74 50 72 6f 76 69 64 65 72 49 6e  ng GetProviderIn
2faf0 76 61 72 69 61 6e 74 4e 61 6d 65 28 0d 0a 20 20  variantName(..  
2fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
2fb10 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ol trace..      
2fb20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2fb30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2fb40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2fb50 72 6e 20 47 65 74 49 6e 76 61 72 69 61 6e 74 4e  rn GetInvariantN
2fb60 61 6d 65 28 74 72 61 63 65 29 3b 0d 0a 20 20 20  ame(trace);..   
2fb70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2fb80 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2fb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2fbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2fbe0 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 61  lic string GetFa
2fbf0 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 28 0d 0a  ctoryTypeName(..
2fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc10 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20  bool trace..    
2fc20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2fc30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2fc50 74 75 72 6e 20 55 73 65 45 66 36 50 72 6f 76 69  turn UseEf6Provi
2fc60 64 65 72 28 74 72 61 63 65 29 20 3f 0d 0a 20 20  der(trace) ?..  
2fc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc80 20 20 45 66 36 46 61 63 74 6f 72 79 54 79 70 65    Ef6FactoryType
2fc90 4e 61 6d 65 20 3a 20 46 61 63 74 6f 72 79 54 79  Name : FactoryTy
2fca0 70 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  peName;..       
2fcb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2fcc0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2fcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2fd10 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2fd20 76 6f 69 64 20 44 75 6d 70 28 0d 0a 20 20 20 20  void Dump(..    
2fd30 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2fd40 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
2fd50 61 6c 6c 62 61 63 6b 0d 0a 20 20 20 20 20 20 20  allback..       
2fd60 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2fd70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2fd80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
2fd90 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20  raceCallback != 
2fda0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2fdb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2fdd0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
2fde0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
2fdf0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
2fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe10 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
2fe20 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61 73  ", ForDisplay(as
2fe30 73 65 6d 62 6c 79 29 29 2c 0d 0a 20 20 20 20 20  sembly)),..     
2fe40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe50 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2fe60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2fe70 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
2fe80 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
2fe90 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
2fea0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
2feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fec0 20 20 20 22 4c 6f 67 46 69 6c 65 4e 61 6d 65 22     "LogFileName"
2fed0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 67  , ForDisplay(log
2fee0 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
2fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff00 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
2ff10 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2ff20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2ff30 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
2ff40 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
2ff50 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
2ff60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff70 20 20 20 20 20 22 52 65 67 69 73 74 72 79 4c 6f       "RegistryLo
2ff80 67 46 69 6c 65 4e 61 6d 65 22 2c 0d 0a 20 20 20  gFileName",..   
2ff90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffa0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
2ffb0 72 65 67 69 73 74 72 79 4c 6f 67 46 69 6c 65 4e  registryLogFileN
2ffc0 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
2ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffe0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2fff0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30000 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
30010 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
30020 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
30030 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
30040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30050 22 44 69 72 65 63 74 6f 72 79 22 2c 20 46 6f 72  "Directory", For
30060 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72  Display(director
30070 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  y)),..          
30080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
30090 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
300a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
300b0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
300c0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
300d0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
300e0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
300f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
30100 6f 72 65 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f  oreFileName", Fo
30110 72 44 69 73 70 6c 61 79 28 63 6f 72 65 46 69 6c  rDisplay(coreFil
30120 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
30130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30140 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
30150 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30160 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
30170 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
30180 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
30190 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
301a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301b0 20 20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 22    "LinqFileName"
301c0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 69 6e  , ForDisplay(lin
301d0 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  qFileName)),..  
301e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301f0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
30200 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
30210 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
30220 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
30230 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
30240 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
30250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30260 20 20 20 20 20 20 22 45 66 36 46 69 6c 65 4e 61        "Ef6FileNa
30270 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
30280 65 66 36 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  ef6FileName)),..
30290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
302b0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
302c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
302d0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
302e0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
302f0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
30300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30310 20 20 20 20 20 20 20 20 22 44 65 73 69 67 6e 65          "Designe
30320 72 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44  rFileName", ForD
30330 69 73 70 6c 61 79 28 64 65 73 69 67 6e 65 72 46  isplay(designerF
30340 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  ileName)),..    
30350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30360 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
30370 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
30380 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
30390 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
303a0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
303b0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
303c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303d0 20 20 20 20 22 52 65 67 69 73 74 72 79 56 65 72      "RegistryVer
303e0 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61  sion", ForDispla
303f0 79 28 72 65 67 69 73 74 72 79 56 65 72 73 69 6f  y(registryVersio
30400 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
30410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
30420 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
30430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30440 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
30450 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
30460 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
30470 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
30480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
30490 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22 2c 20 46  onfigVersion", F
304a0 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67  orDisplay(config
304b0 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
304c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304d0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
304e0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
304f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
30500 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
30510 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
30520 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
30530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30540 20 20 20 20 22 56 73 56 65 72 73 69 6f 6e 53 75      "VsVersionSu
30550 66 66 69 78 22 2c 20 46 6f 72 44 69 73 70 6c 61  ffix", ForDispla
30560 79 28 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69  y(vsVersionSuffi
30570 78 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  x)),..          
30580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
30590 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
305a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
305b0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
305c0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
305d0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
305e0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
305f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
30600 65 62 75 67 46 6f 72 6d 61 74 22 2c 20 46 6f 72  ebugFormat", For
30610 44 69 73 70 6c 61 79 28 64 65 62 75 67 46 6f 72  Display(debugFor
30620 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  mat)),..        
30630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30640 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
30650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30660 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
30670 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
30680 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
30690 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
306a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306b0 22 54 72 61 63 65 46 6f 72 6d 61 74 22 2c 20 46  "TraceFormat", F
306c0 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63 65 46  orDisplay(traceF
306d0 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20  ormat)),..      
306e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306f0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
30700 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30710 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
30720 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
30730 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
30740 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
30750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30760 20 20 22 49 6e 73 74 61 6c 6c 46 6c 61 67 73 22    "InstallFlags"
30770 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73  , ForDisplay(ins
30780 74 61 6c 6c 46 6c 61 67 73 29 29 2c 0d 0a 20 20  tallFlags)),..  
30790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
307b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
307c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
307d0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
307e0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
307f0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
30800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30810 20 20 20 20 20 20 22 50 72 6f 76 69 64 65 72 46        "ProviderF
30820 6c 61 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61  lags", ForDispla
30830 79 28 70 72 6f 76 69 64 65 72 46 6c 61 67 73 29  y(providerFlags)
30840 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
30850 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
30860 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
30870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30880 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
30890 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
308a0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
308b0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
308c0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62              "Deb
308d0 75 67 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72  ugPriority", For
308e0 44 69 73 70 6c 61 79 28 64 65 62 75 67 50 72 69  Display(debugPri
308f0 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20  ority)),..      
30900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30910 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
30920 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30930 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
30940 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
30950 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
30960 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
30970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30980 20 20 22 54 72 61 63 65 50 72 69 6f 72 69 74 79    "TracePriority
30990 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72  ", ForDisplay(tr
309a0 61 63 65 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a  acePriority)),..
309b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309c0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
309d0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
309e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
309f0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
30a00 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
30a10 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
30a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a30 20 20 20 20 20 20 20 20 22 50 65 72 55 73 65 72          "PerUser
30a40 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 70 65  ", ForDisplay(pe
30a50 72 55 73 65 72 29 29 2c 0d 0a 20 20 20 20 20 20  rUser)),..      
30a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a70 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
30a80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30a90 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
30aa0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
30ab0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
30ac0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
30ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ae0 20 20 22 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72    "Install", For
30af0 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29  Display(install)
30b00 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
30b10 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
30b20 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
30b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b40 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
30b50 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
30b60 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
30b70 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
30b80 20 20 20 20 20 20 20 20 20 20 20 20 22 57 6f 77              "Wow
30b90 36 34 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  64", ForDisplay(
30ba0 77 6f 77 36 34 29 29 2c 0d 0a 20 20 20 20 20 20  wow64)),..      
30bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30bc0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
30bd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30be0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
30bf0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
30c00 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
30c10 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
30c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c30 20 20 22 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73    "NoRuntimeVers
30c40 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ion", ForDisplay
30c50 28 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  (noRuntimeVersio
30c60 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
30c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
30c80 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
30c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30ca0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
30cb0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
30cc0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
30cd0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
30ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
30cf0 6f 44 65 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69  oDesktop", ForDi
30d00 73 70 6c 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29  splay(noDesktop)
30d10 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
30d20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
30d30 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
30d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d50 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
30d60 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
30d70 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
30d80 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
30d90 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43              "NoC
30da0 6f 6d 70 61 63 74 22 2c 20 46 6f 72 44 69 73 70  ompact", ForDisp
30db0 6c 61 79 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c  lay(noCompact)),
30dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30dd0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
30de0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
30df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e00 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
30e10 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
30e20 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
30e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30e40 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74            "NoNet
30e50 46 78 32 30 22 2c 20 46 6f 72 44 69 73 70 6c 61  Fx20", ForDispla
30e60 79 28 6e 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a  y(noNetFx20)),..
30e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e80 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
30e90 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
30ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
30eb0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
30ec0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
30ed0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
30ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ef0 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78          "NoNetFx
30f00 33 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  35", ForDisplay(
30f10 6e 6f 4e 65 74 46 78 33 35 29 29 2c 0d 0a 20 20  noNetFx35)),..  
30f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f30 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
30f40 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
30f50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
30f60 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
30f70 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
30f80 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
30f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fa0 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 30        "NoNetFx40
30fb0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
30fc0 4e 65 74 46 78 34 30 29 29 2c 0d 0a 20 20 20 20  NetFx40)),..    
30fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fe0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
30ff0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
31000 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
31010 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
31020 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
31030 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
31040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31050 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 35 22 2c      "NoNetFx45",
31060 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65   ForDisplay(noNe
31070 74 46 78 34 35 29 29 2c 0d 0a 20 20 20 20 20 20  tFx45)),..      
31080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31090 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
310a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
310b0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
310c0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
310d0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
310e0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
310f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31100 20 20 22 4e 6f 4e 65 74 46 78 34 35 31 22 2c 20    "NoNetFx451", 
31110 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
31120 46 78 34 35 31 29 29 2c 0d 0a 20 20 20 20 20 20  Fx451)),..      
31130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31140 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
31150 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31160 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
31170 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
31180 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
31190 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
311a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311b0 20 20 22 4e 6f 4e 65 74 46 78 34 35 32 22 2c 20    "NoNetFx452", 
311c0 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
311d0 46 78 34 35 32 29 29 2c 0d 0a 20 20 20 20 20 20  Fx452)),..      
311e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311f0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
31200 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31210 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
31220 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
31230 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
31240 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
31250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31260 20 20 22 4e 6f 4e 65 74 46 78 34 36 22 2c 20 46    "NoNetFx46", F
31270 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46  orDisplay(noNetF
31280 78 34 36 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  x46)),..        
31290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312a0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
312b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
312c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
312d0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
312e0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
312f0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
31300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31310 22 4e 6f 4e 65 74 46 78 34 36 31 22 2c 20 46 6f  "NoNetFx461", Fo
31320 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78  rDisplay(noNetFx
31330 34 36 31 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  461)),..        
31340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31350 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
31360 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31370 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
31380 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
31390 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
313a0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
313b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313c0 22 4e 6f 4e 65 74 46 78 34 36 32 22 2c 20 46 6f  "NoNetFx462", Fo
313d0 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78  rDisplay(noNetFx
313e0 34 36 32 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  462)),..        
313f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31400 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
31410 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31420 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
31430 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
31440 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
31450 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
31460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31470 22 4e 6f 4e 65 74 46 78 34 37 22 2c 20 46 6f 72  "NoNetFx47", For
31480 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34  Display(noNetFx4
31490 37 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  7)),..          
314a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
314b0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
314c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
314d0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
314e0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
314f0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
31500 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
31510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
31520 6f 4e 65 74 46 78 34 37 31 22 2c 20 46 6f 72 44  oNetFx471", ForD
31530 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 37  isplay(noNetFx47
31540 31 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1)),..          
31550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
31560 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
31570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31580 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
31590 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
315a0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
315b0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
315c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
315d0 6f 4e 65 74 46 78 34 37 32 22 2c 20 46 6f 72 44  oNetFx472", ForD
315e0 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 37  isplay(noNetFx47
315f0 32 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  2)),..          
31600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
31610 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
31620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31630 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
31640 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
31650 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
31660 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
31670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
31680 6f 56 73 32 30 30 35 22 2c 20 46 6f 72 44 69 73  oVs2005", ForDis
31690 70 6c 61 79 28 6e 6f 56 73 32 30 30 35 29 29 2c  play(noVs2005)),
316a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
316b0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
316c0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
316d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316e0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
316f0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
31700 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
31710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31720 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32            "NoVs2
31730 30 30 38 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  008", ForDisplay
31740 28 6e 6f 56 73 32 30 30 38 29 29 2c 0d 0a 20 20  (noVs2008)),..  
31750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31760 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
31770 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
31780 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
31790 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
317a0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
317b0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
317c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317d0 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 30 22        "NoVs2010"
317e0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
317f0 73 32 30 31 30 29 29 2c 0d 0a 20 20 20 20 20 20  s2010)),..      
31800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31810 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
31820 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31830 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
31840 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
31850 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
31860 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
31870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31880 20 20 22 4e 6f 56 73 32 30 31 32 22 2c 20 46 6f    "NoVs2012", Fo
31890 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31  rDisplay(noVs201
318a0 32 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  2)),..          
318b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
318c0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
318d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
318e0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
318f0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
31900 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
31910 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
31920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
31930 6f 56 73 32 30 31 33 22 2c 20 46 6f 72 44 69 73  oVs2013", ForDis
31940 70 6c 61 79 28 6e 6f 56 73 32 30 31 33 29 29 2c  play(noVs2013)),
31950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31960 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
31970 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
31980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31990 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
319a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
319b0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
319c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
319d0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32            "NoVs2
319e0 30 31 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  015", ForDisplay
319f0 28 6e 6f 56 73 32 30 31 35 29 29 2c 0d 0a 20 20  (noVs2015)),..  
31a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a10 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
31a20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
31a30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
31a40 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
31a50 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
31a60 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
31a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a80 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 37 22        "NoVs2017"
31a90 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
31aa0 73 32 30 31 37 29 29 2c 0d 0a 20 20 20 20 20 20  s2017)),..      
31ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ac0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
31ad0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31ae0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
31af0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
31b00 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
31b10 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
31b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b30 20 20 22 4e 6f 54 72 61 63 65 22 2c 20 46 6f 72    "NoTrace", For
31b40 44 69 73 70 6c 61 79 28 6e 6f 54 72 61 63 65 29  Display(noTrace)
31b50 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
31b60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
31b70 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
31b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b90 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
31ba0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
31bb0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
31bc0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
31bd0 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43              "NoC
31be0 6f 6e 73 6f 6c 65 22 2c 20 46 6f 72 44 69 73 70  onsole", ForDisp
31bf0 6c 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29 2c  lay(noConsole)),
31c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31c10 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
31c20 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
31c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c40 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
31c50 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
31c60 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
31c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31c80 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4c 6f 67            "NoLog
31c90 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
31ca0 4c 6f 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  Log)),..        
31cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cc0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
31cd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31ce0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
31cf0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
31d00 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
31d10 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
31d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d30 22 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22  "ThrowOnMissing"
31d40 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 68 72  , ForDisplay(thr
31d50 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 29 2c 0d 0a  owOnMissing)),..
31d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d70 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
31d80 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
31d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
31da0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
31db0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
31dc0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
31dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31de0 20 20 20 20 20 20 20 20 22 57 68 61 74 49 66 22          "WhatIf"
31df0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 68 61  , ForDisplay(wha
31e00 74 49 66 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  tIf)),..        
31e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
31e30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31e40 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
31e50 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
31e60 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
31e70 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
31e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e90 22 44 65 62 75 67 22 2c 20 46 6f 72 44 69 73 70  "Debug", ForDisp
31ea0 6c 61 79 28 64 65 62 75 67 29 29 2c 0d 0a 20 20  lay(debug)),..  
31eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ec0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
31ed0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
31ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
31ef0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
31f00 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
31f10 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
31f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f30 20 20 20 20 20 20 22 56 65 72 62 6f 73 65 22 2c        "Verbose",
31f40 20 46 6f 72 44 69 73 70 6c 61 79 28 76 65 72 62   ForDisplay(verb
31f50 6f 73 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ose)),..        
31f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f70 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
31f80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31f90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
31fa0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
31fb0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
31fc0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
31fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fe0 22 43 6f 6e 66 69 72 6d 22 2c 20 46 6f 72 44 69  "Confirm", ForDi
31ff0 73 70 6c 61 79 28 63 6f 6e 66 69 72 6d 29 29 2c  splay(confirm)),
32000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32010 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
32020 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
32030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32040 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
32050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
32080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32090 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
320a0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
320b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
320c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
320d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
320e0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
320f0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
32100 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
32110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32120 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
32130 54 69 74 6c 65 22 2c 0d 0a 20 20 20 20 20 20 20  Title",..       
32140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32150 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
32160 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  GetAssemblyTitle
32170 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20  (assembly))),.. 
32180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32190 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
321a0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
321b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321c0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
321d0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
321e0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
321f0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32210 20 20 20 22 41 73 73 65 6d 62 6c 79 43 6f 6e 66     "AssemblyConf
32220 69 67 75 72 61 74 69 6f 6e 22 2c 0d 0a 20 20 20  iguration",..   
32230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32240 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
32250 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79 43  lay(GetAssemblyC
32260 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 61 73 73  onfiguration(ass
32270 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20  embly))),..     
32280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32290 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
322a0 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
322b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
322c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
322d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
322e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
322f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32310 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32320 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
32330 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
32340 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
32350 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
32360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32370 20 22 49 73 53 79 73 74 65 6d 45 66 36 41 73 73   "IsSystemEf6Ass
32380 65 6d 62 6c 79 41 76 61 69 6c 61 62 6c 65 22 2c  emblyAvailable",
32390 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20   ForDisplay(..  
323a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323b0 20 20 20 20 20 20 49 73 53 79 73 74 65 6d 45 66        IsSystemEf
323c0 36 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61 62  6AssemblyAvailab
323d0 6c 65 28 66 61 6c 73 65 29 29 29 2c 0d 0a 20 20  le(false))),..  
323e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323f0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
32400 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
32410 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
32420 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
32430 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
32440 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
32450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32460 20 20 20 20 20 20 22 49 73 53 79 73 74 65 6d 45        "IsSystemE
32470 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c  f6AssemblyGlobal
32480 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ", ForDisplay(..
32490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324a0 20 20 20 20 20 20 20 20 49 73 53 79 73 74 65 6d          IsSystem
324b0 45 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61  Ef6AssemblyGloba
324c0 6c 28 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  l())),..        
324d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
324f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32500 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
32510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32540 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
32550 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
32560 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
32570 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
32580 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
32590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325a0 20 20 20 22 49 73 4c 69 6e 71 53 75 70 70 6f 72     "IsLinqSuppor
325b0 74 65 64 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ted", ForDisplay
325c0 28 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 65 64  (IsLinqSupported
325d0 28 66 61 6c 73 65 29 29 29 2c 0d 0a 20 20 20 20  (false))),..    
325e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325f0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
32600 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
32610 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
32620 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
32630 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
32640 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
32650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32660 20 20 20 20 22 49 73 45 66 36 53 75 70 70 6f 72      "IsEf6Suppor
32670 74 65 64 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ted", ForDisplay
32680 28 49 73 45 66 36 53 75 70 70 6f 72 74 65 64 28  (IsEf6Supported(
32690 66 61 6c 73 65 29 29 29 2c 0d 0a 20 20 20 20 20  false))),..     
326a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326b0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
326c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
326d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
326e0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
326f0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
32700 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
32710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32720 20 20 20 22 49 73 45 66 36 41 73 73 65 6d 62 6c     "IsEf6Assembl
32730 79 47 6c 6f 62 61 6c 22 2c 20 46 6f 72 44 69 73  yGlobal", ForDis
32740 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
32750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
32760 73 45 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62  sEf6AssemblyGlob
32770 61 6c 28 29 29 29 2c 0d 0a 20 20 20 20 20 20 20  al())),..       
32780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32790 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
327a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
327b0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
327c0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
327d0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
327e0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
327f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32800 20 22 55 73 65 45 66 36 50 72 6f 76 69 64 65 72   "UseEf6Provider
32810 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 55 73  ", ForDisplay(Us
32820 65 45 66 36 50 72 6f 76 69 64 65 72 28 66 61 6c  eEf6Provider(fal
32830 73 65 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  se))),..        
32840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32850 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
32860 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32870 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
32880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
328a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
328b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
328c0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
328d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
328f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
32900 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
32910 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
32920 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
32930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32940 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 43             "GetC
32950 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22  oreAssemblyName"
32960 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
32970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32980 20 20 20 20 20 20 20 20 20 20 20 47 65 74 43 6f             GetCo
32990 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 66  reAssemblyName(f
329a0 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43 61  alse))), traceCa
329b0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
329c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
329d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
329e0 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
329f0 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
32a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
32a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32a20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
32a30 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
32a40 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
32a50 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
32a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a70 20 20 20 20 20 20 22 47 65 74 43 6f 72 65 41 73        "GetCoreAs
32a80 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72  semblyName", For
32a90 44 69 73 70 6c 61 79 28 65 29 29 2c 0d 0a 20 20  Display(e)),..  
32aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ab0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
32ac0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
32ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32ae0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32af0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
32b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b30 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
32b40 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
32b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
32b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
32b80 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
32b90 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
32ba0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
32bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32bc0 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74              "Get
32bd0 4c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65  LinqAssemblyName
32be0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ", ForDisplay(..
32bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c00 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 4c              GetL
32c10 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  inqAssemblyName(
32c20 66 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43  false))), traceC
32c30 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
32c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32c60 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
32c70 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
32c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
32c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32ca0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
32cb0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
32cc0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
32cd0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
32ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32cf0 20 20 20 20 20 20 20 22 47 65 74 4c 69 6e 71 41         "GetLinqA
32d00 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f  ssemblyName", Fo
32d10 72 44 69 73 70 6c 61 79 28 65 29 29 2c 0d 0a 20  rDisplay(e)),.. 
32d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d30 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
32d40 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
32d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
32d70 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
32d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32db0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
32dc0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
32dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32de0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e00 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
32e10 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
32e20 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
32e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32e40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
32e50 74 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65  tEf6AssemblyName
32e60 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ", ForDisplay(..
32e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e80 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 45              GetE
32e90 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 66  f6AssemblyName(f
32ea0 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43 61  alse))), traceCa
32eb0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
32ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
32ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32ee0 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
32ef0 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
32f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
32f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32f20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
32f30 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
32f40 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
32f50 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
32f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f70 20 20 20 20 20 20 22 47 65 74 45 66 36 41 73 73        "GetEf6Ass
32f80 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44  emblyName", ForD
32f90 69 73 70 6c 61 79 28 65 29 29 2c 0d 0a 20 20 20  isplay(e)),..   
32fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fb0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
32fc0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
32fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
32fe0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32ff0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
33000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33030 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
33040 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
33050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33060 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
33080 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
33090 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
330a0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
330b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330c0 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 44             "GetD
330d0 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e  esignerAssemblyN
330e0 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
330f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
33110 65 74 44 65 73 69 67 6e 65 72 41 73 73 65 6d 62  etDesignerAssemb
33120 6c 79 4e 61 6d 65 28 66 61 6c 73 65 29 29 29 2c  lyName(false))),
33130 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
33140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33150 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
33160 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
33170 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
33180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33190 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
331a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
331c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
331d0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
331e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
331f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
33200 65 74 44 65 73 69 67 6e 65 72 41 73 73 65 6d 62  etDesignerAssemb
33210 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  lyName", ForDisp
33220 6c 61 79 28 65 29 29 2c 0d 0a 20 20 20 20 20 20  lay(e)),..      
33230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33240 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
33250 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
33260 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
33270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33280 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
33290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
332c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
332d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
332e0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
332f0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
33300 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
33310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33320 22 47 65 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d  "GetInvariantNam
33330 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 47  e", ForDisplay(G
33340 65 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28  etInvariantName(
33350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33360 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 29            false)
33370 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
33380 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
33390 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
333a0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
333b0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
333c0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
333d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333e0 20 20 20 20 22 47 65 74 43 6f 6e 66 69 67 49 6e      "GetConfigIn
333f0 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c 20 46 6f  variantName", Fo
33400 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20  rDisplay(..     
33410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33420 20 20 20 47 65 74 43 6f 6e 66 69 67 49 6e 76 61     GetConfigInva
33430 72 69 61 6e 74 4e 61 6d 65 28 66 61 6c 73 65 29  riantName(false)
33440 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
33450 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
33460 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
33470 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
33480 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
33490 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
334a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334b0 20 20 20 20 22 47 65 74 50 72 6f 76 69 64 65 72      "GetProvider
334c0 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c 20  InvariantName", 
334d0 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
334e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334f0 20 20 20 20 20 47 65 74 50 72 6f 76 69 64 65 72       GetProvider
33500 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 66 61  InvariantName(fa
33510 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43 61 74  lse))), traceCat
33520 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
33530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
33540 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
33550 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
33560 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
33570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33580 20 20 20 20 20 20 20 20 22 47 65 74 46 61 63 74          "GetFact
33590 6f 72 79 54 79 70 65 4e 61 6d 65 22 2c 20 46 6f  oryTypeName", Fo
335a0 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20  rDisplay(..     
335b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335c0 20 20 20 47 65 74 46 61 63 74 6f 72 79 54 79 70     GetFactoryTyp
335d0 65 4e 61 6d 65 28 66 61 6c 73 65 29 29 29 2c 20  eName(false))), 
335e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
335f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33600 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
33610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33640 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
33650 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
33660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33670 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
33690 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
336a0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
336b0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
336c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336d0 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 50             "GetP
336e0 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e  roviderAssemblyN
336f0 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
33700 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
33720 65 74 50 72 6f 76 69 64 65 72 41 73 73 65 6d 62  etProviderAssemb
33730 6c 79 4e 61 6d 65 28 66 61 6c 73 65 29 29 29 2c  lyName(false))),
33740 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
33750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33760 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
33770 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
33780 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
33790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
337a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
337b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337c0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
337d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
337e0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
337f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
33810 65 74 50 72 6f 76 69 64 65 72 41 73 73 65 6d 62  etProviderAssemb
33820 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  lyName", ForDisp
33830 6c 61 79 28 65 29 29 2c 0d 0a 20 20 20 20 20 20  lay(e)),..      
33840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33850 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
33860 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
33870 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
33880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
33890 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
338a0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
338b0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
338c0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
338d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
338e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
338f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33900 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
33910 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
33920 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
33930 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
33940 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79  private Assembly
33950 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20   assembly;..    
33960 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
33970 73 73 65 6d 62 6c 79 20 41 73 73 65 6d 62 6c 79  ssembly Assembly
33980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
33990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
339a0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 61 73   get { return as
339b0 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20 20 20  sembly; }..     
339c0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
339d0 20 61 73 73 65 6d 62 6c 79 20 3d 20 76 61 6c 75   assembly = valu
339e0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
339f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
33a00 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
33a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
33a50 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
33a60 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65  ring logFileName
33a70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
33a80 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 6f 67  ublic string Log
33a90 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
33aa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
33ab0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
33ac0 65 74 75 72 6e 20 6c 6f 67 46 69 6c 65 4e 61 6d  eturn logFileNam
33ad0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
33ae0 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 67 46        set { logF
33af0 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
33b00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
33b10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
33b20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
33b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b60 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
33b70 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
33b80 6e 67 20 72 65 67 69 73 74 72 79 4c 6f 67 46 69  ng registryLogFi
33b90 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
33ba0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
33bb0 6e 67 20 52 65 67 69 73 74 72 79 4c 6f 67 46 69  ng RegistryLogFi
33bc0 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
33bd0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33be0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
33bf0 75 72 6e 20 72 65 67 69 73 74 72 79 4c 6f 67 46  urn registryLogF
33c00 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ileName; }..    
33c10 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
33c20 7b 20 72 65 67 69 73 74 72 79 4c 6f 67 46 69 6c  { registryLogFil
33c30 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
33c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
33c50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
33c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ca0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
33cb0 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
33cc0 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20   directory;..   
33cd0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
33ce0 73 74 72 69 6e 67 20 44 69 72 65 63 74 6f 72 79  string Directory
33cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
33d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33d10 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 69   get { return di
33d20 72 65 63 74 6f 72 79 3b 20 7d 0d 0a 20 20 20 20  rectory; }..    
33d30 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
33d40 7b 20 64 69 72 65 63 74 6f 72 79 20 3d 20 76 61  { directory = va
33d50 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
33d60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
33d70 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
33d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33db0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
33dc0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
33dd0 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e  string coreFileN
33de0 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
33df0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
33e00 43 6f 72 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20  CoreFileName..  
33e10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
33e20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
33e30 20 7b 20 72 65 74 75 72 6e 20 63 6f 72 65 46 69   { return coreFi
33e40 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20  leName; }..     
33e50 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
33e60 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   coreFileName = 
33e70 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
33e80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
33e90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
33ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
33ee0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
33ef0 65 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c  e string linqFil
33f00 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
33f10 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
33f20 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a  g LinqFileName..
33f30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
33f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
33f50 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 69 6e 71  et { return linq
33f60 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  FileName; }..   
33f70 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
33f80 20 7b 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20   { linqFileName 
33f90 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
33fa0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
33fb0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
33fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
34000 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
34010 61 74 65 20 73 74 72 69 6e 67 20 65 66 36 46 69  ate string ef6Fi
34020 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
34030 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
34040 6e 67 20 45 66 36 46 69 6c 65 4e 61 6d 65 0d 0a  ng Ef6FileName..
34050 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
34070 65 74 20 7b 20 72 65 74 75 72 6e 20 65 66 36 46  et { return ef6F
34080 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ileName; }..    
34090 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
340a0 7b 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20  { ef6FileName = 
340b0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
340c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
340d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
340e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
340f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
34120 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
34130 65 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65  e string designe
34140 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  rFileName;..    
34150 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
34160 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69  tring DesignerFi
34170 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
34180 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34190 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
341a0 75 72 6e 20 64 65 73 69 67 6e 65 72 46 69 6c 65  urn designerFile
341b0 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
341c0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64           set { d
341d0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
341e0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
341f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
34200 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
34210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
34250 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
34260 61 74 65 20 73 74 72 69 6e 67 20 72 65 67 69 73  ate string regis
34270 74 72 79 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  tryVersion;..   
34280 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
34290 73 74 72 69 6e 67 20 52 65 67 69 73 74 72 79 56  string RegistryV
342a0 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ersion..        
342b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
342c0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
342d0 75 72 6e 20 72 65 67 69 73 74 72 79 56 65 72 73  urn registryVers
342e0 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ion; }..        
342f0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72 65          set { re
34300 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20  gistryVersion = 
34310 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
34320 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
34330 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
34340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
34380 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
34390 65 20 73 74 72 69 6e 67 20 63 6f 6e 66 69 67 56  e string configV
343a0 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20  ersion;..       
343b0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
343c0 6e 67 20 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e  ng ConfigVersion
343d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
343e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
343f0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f   get { return co
34400 6e 66 69 67 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a  nfigVersion; }..
34410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34420 73 65 74 20 7b 20 63 6f 6e 66 69 67 56 65 72 73  set { configVers
34430 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ion = value; }..
34440 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
34450 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
34460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
344a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
344b0 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 76  private string v
344c0 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d  sVersionSuffix;.
344d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
344e0 6c 69 63 20 73 74 72 69 6e 67 20 56 73 56 65 72  lic string VsVer
344f0 73 69 6f 6e 53 75 66 66 69 78 0d 0a 20 20 20 20  sionSuffix..    
34500 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34510 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
34520 20 72 65 74 75 72 6e 20 76 73 56 65 72 73 69 6f   return vsVersio
34530 6e 53 75 66 66 69 78 3b 20 7d 0d 0a 20 20 20 20  nSuffix; }..    
34540 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
34550 7b 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69  { vsVersionSuffi
34560 78 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  x = value; }..  
34570 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
34580 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
34590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
345d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
345e0 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 65 62  ivate string deb
345f0 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ugFormat;..     
34600 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
34610 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d 61 74  ring DebugFormat
34620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
34630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34640 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
34650 62 75 67 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20  bugFormat; }..  
34660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
34670 74 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74 20  t { debugFormat 
34680 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
34690 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
346a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
346b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
346c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
346d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
346e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
346f0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
34700 61 74 65 20 73 74 72 69 6e 67 20 74 72 61 63 65  ate string trace
34710 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
34720 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
34730 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a  ng TraceFormat..
34740 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
34760 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63  et { return trac
34770 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20  eFormat; }..    
34780 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
34790 7b 20 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  { traceFormat = 
347a0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
347b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
347c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
347d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
347e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
347f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
34810 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
34820 65 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69  e InstallFlags i
34830 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20  nstallFlags;..  
34840 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
34850 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 49 6e   InstallFlags In
34860 73 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20  stallFlags..    
34870 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34880 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
34890 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c 46   return installF
348a0 6c 61 67 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  lags; }..       
348b0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 69           set { i
348c0 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 76 61  nstallFlags = va
348d0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
348e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
348f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
34900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34930 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
34940 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
34950 50 72 6f 76 69 64 65 72 46 6c 61 67 73 20 70 72  ProviderFlags pr
34960 6f 76 69 64 65 72 46 6c 61 67 73 3b 0d 0a 20 20  oviderFlags;..  
34970 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
34980 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 20 50   ProviderFlags P
34990 72 6f 76 69 64 65 72 46 6c 61 67 73 0d 0a 20 20  roviderFlags..  
349a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
349b0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
349c0 20 7b 20 72 65 74 75 72 6e 20 70 72 6f 76 69 64   { return provid
349d0 65 72 46 6c 61 67 73 3b 20 7d 0d 0a 20 20 20 20  erFlags; }..    
349e0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
349f0 7b 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20  { providerFlags 
34a00 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
34a10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
34a20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
34a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
34a70 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
34a80 61 74 65 20 54 72 61 63 65 50 72 69 6f 72 69 74  ate TracePriorit
34a90 79 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b  y debugPriority;
34aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
34ab0 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72 69  blic TracePriori
34ac0 74 79 20 44 65 62 75 67 50 72 69 6f 72 69 74 79  ty DebugPriority
34ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
34ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34af0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
34b00 62 75 67 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a  bugPriority; }..
34b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b20 73 65 74 20 7b 20 64 65 62 75 67 50 72 69 6f 72  set { debugPrior
34b30 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ity = value; }..
34b40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
34b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
34b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34ba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34bb0 70 72 69 76 61 74 65 20 54 72 61 63 65 50 72 69  private TracePri
34bc0 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
34bd0 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
34be0 20 20 70 75 62 6c 69 63 20 54 72 61 63 65 50 72    public TracePr
34bf0 69 6f 72 69 74 79 20 54 72 61 63 65 50 72 69 6f  iority TracePrio
34c00 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
34c10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34c20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
34c30 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  n tracePriority;
34c40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
34c50 20 20 20 20 73 65 74 20 7b 20 74 72 61 63 65 50      set { traceP
34c60 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b  riority = value;
34c70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
34c80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
34c90 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
34ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34cd0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
34ce0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
34cf0 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20 20 20   perUser;..     
34d00 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
34d10 6f 6c 20 50 65 72 55 73 65 72 0d 0a 20 20 20 20  ol PerUser..    
34d20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34d30 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
34d40 20 72 65 74 75 72 6e 20 70 65 72 55 73 65 72 3b   return perUser;
34d50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
34d60 20 20 20 20 73 65 74 20 7b 20 70 65 72 55 73 65      set { perUse
34d70 72 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  r = value; }..  
34d80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
34d90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
34da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
34de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
34df0 69 76 61 74 65 20 62 6f 6f 6c 20 69 6e 73 74 61  ivate bool insta
34e00 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
34e10 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 6e 73   public bool Ins
34e20 74 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  tall..          
34e30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34e40 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
34e50 6e 20 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a 20 20  n install; }..  
34e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
34e70 74 20 7b 20 69 6e 73 74 61 6c 6c 20 3d 20 76 61  t { install = va
34e80 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
34e90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
34ea0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
34eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34ee0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
34ef0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
34f00 62 6f 6f 6c 20 77 6f 77 36 34 3b 0d 0a 20 20 20  bool wow64;..   
34f10 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
34f20 62 6f 6f 6c 20 57 6f 77 36 34 0d 0a 20 20 20 20  bool Wow64..    
34f30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34f40 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
34f50 20 72 65 74 75 72 6e 20 77 6f 77 36 34 3b 20 7d   return wow64; }
34f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34f70 20 20 73 65 74 20 7b 20 77 6f 77 36 34 20 3d 20    set { wow64 = 
34f80 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
34f90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
34fa0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
34fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
34ff0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
35000 65 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65  e bool noRuntime
35010 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
35020 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
35030 6c 20 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  l NoRuntimeVersi
35040 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
35050 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
35060 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
35070 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
35080 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
35090 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 52 75 6e       set { noRun
350a0 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 76 61  timeVersion = va
350b0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
350c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
350d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
350e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
350f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35110 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
35120 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
35130 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d  bool noDesktop;.
35140 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
35150 6c 69 63 20 62 6f 6f 6c 20 4e 6f 44 65 73 6b 74  lic bool NoDeskt
35160 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  op..            
35170 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
35180 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
35190 6e 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a 20 20  noDesktop; }..  
351a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
351b0 74 20 7b 20 6e 6f 44 65 73 6b 74 6f 70 20 3d 20  t { noDesktop = 
351c0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
351d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
351e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
351f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
35230 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
35240 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74  e bool noCompact
35250 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
35260 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6d  ublic bool NoCom
35270 70 61 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20  pact..          
35280 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
35290 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
352a0 6e 20 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d 0d 0a  n noCompact; }..
352b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352c0 73 65 74 20 7b 20 6e 6f 43 6f 6d 70 61 63 74 20  set { noCompact 
352d0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
352e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
352f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
35300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
35340 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
35350 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78  ate bool noNetFx
35360 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20;..           
35370 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e   public bool NoN
35380 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20 20 20  etFx20..        
35390 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
353a0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
353b0 75 72 6e 20 6e 6f 4e 65 74 46 78 32 30 3b 20 7d  urn noNetFx20; }
353c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
353d0 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 32    set { noNetFx2
353e0 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  0 = value; }..  
353f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
35400 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
35410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
35450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
35460 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74  ivate bool noNet
35470 46 78 33 35 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx35;..         
35480 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
35490 6f 4e 65 74 46 78 33 35 0d 0a 20 20 20 20 20 20  oNetFx35..      
354a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
354b0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
354c0 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 33 35 3b  eturn noNetFx35;
354d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
354e0 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
354f0 78 33 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  x35 = value; }..
35500 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
35510 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
35520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35560 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35570 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e  private bool noN
35580 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20  etFx40;..       
35590 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
355a0 20 4e 6f 4e 65 74 46 78 34 30 0d 0a 20 20 20 20   NoNetFx40..    
355b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
355c0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
355d0 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34   return noNetFx4
355e0 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  0; }..          
355f0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
35600 74 46 78 34 30 20 3d 20 76 61 6c 75 65 3b 20 7d  tFx40 = value; }
35610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
35620 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
35630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35670 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
35680 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
35690 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20  oNetFx45;..     
356a0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
356b0 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 0d 0a 20 20  ol NoNetFx45..  
356c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
356d0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
356e0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46   { return noNetF
356f0 78 34 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  x45; }..        
35700 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
35710 4e 65 74 46 78 34 35 20 3d 20 76 61 6c 75 65 3b  NetFx45 = value;
35720 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
35730 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
35740 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
35750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35780 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
35790 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
357a0 20 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a 20 20   noNetFx451;..  
357b0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
357c0 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 31   bool NoNetFx451
357d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
357e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
357f0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
35800 4e 65 74 46 78 34 35 31 3b 20 7d 0d 0a 20 20 20  NetFx451; }..   
35810 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
35820 20 7b 20 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20   { noNetFx451 = 
35830 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
35840 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35850 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
35860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
358a0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
358b0 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35  e bool noNetFx45
358c0 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2;..            
358d0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65  public bool NoNe
358e0 74 46 78 34 35 32 0d 0a 20 20 20 20 20 20 20 20  tFx452..        
358f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
35900 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
35910 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35 32 3b 20  urn noNetFx452; 
35920 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
35930 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78     set { noNetFx
35940 34 35 32 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  452 = value; }..
35950 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
35960 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
35970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
359a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
359b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
359c0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e  private bool noN
359d0 65 74 46 78 34 36 3b 0d 0a 20 20 20 20 20 20 20  etFx46;..       
359e0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
359f0 20 4e 6f 4e 65 74 46 78 34 36 0d 0a 20 20 20 20   NoNetFx46..    
35a00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35a10 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
35a20 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34   return noNetFx4
35a30 36 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  6; }..          
35a40 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
35a50 74 46 78 34 36 20 3d 20 76 61 6c 75 65 3b 20 7d  tFx46 = value; }
35a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
35a70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
35a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35ac0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
35ad0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
35ae0 6f 4e 65 74 46 78 34 36 31 3b 0d 0a 20 20 20 20  oNetFx461;..    
35af0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
35b00 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 36 31 0d 0a  ool NoNetFx461..
35b10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
35b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
35b30 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65  et { return noNe
35b40 74 46 78 34 36 31 3b 20 7d 0d 0a 20 20 20 20 20  tFx461; }..     
35b50 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
35b60 20 6e 6f 4e 65 74 46 78 34 36 31 20 3d 20 76 61   noNetFx461 = va
35b70 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
35b80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
35b90 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
35ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35bd0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
35be0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
35bf0 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 32 3b  bool noNetFx462;
35c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
35c10 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46  blic bool NoNetF
35c20 78 34 36 32 0d 0a 20 20 20 20 20 20 20 20 20 20  x462..          
35c30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
35c40 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
35c50 6e 20 6e 6f 4e 65 74 46 78 34 36 32 3b 20 7d 0d  n noNetFx462; }.
35c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35c70 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 36   set { noNetFx46
35c80 32 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  2 = value; }..  
35c90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
35ca0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
35cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
35cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
35d00 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74  ivate bool noNet
35d10 46 78 34 37 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx47;..         
35d20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
35d30 6f 4e 65 74 46 78 34 37 0d 0a 20 20 20 20 20 20  oNetFx47..      
35d40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35d50 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
35d60 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 37 3b  eturn noNetFx47;
35d70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
35d80 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
35d90 78 34 37 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  x47 = value; }..
35da0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
35db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
35dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35e10 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e  private bool noN
35e20 65 74 46 78 34 37 31 3b 0d 0a 20 20 20 20 20 20  etFx471;..      
35e30 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
35e40 6c 20 4e 6f 4e 65 74 46 78 34 37 31 0d 0a 20 20  l NoNetFx471..  
35e50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35e60 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
35e70 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46   { return noNetF
35e80 78 34 37 31 3b 20 7d 0d 0a 20 20 20 20 20 20 20  x471; }..       
35e90 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
35ea0 6f 4e 65 74 46 78 34 37 31 20 3d 20 76 61 6c 75  oNetFx471 = valu
35eb0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
35ec0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
35ed0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
35ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f10 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
35f20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
35f30 6f 6c 20 6e 6f 4e 65 74 46 78 34 37 32 3b 0d 0a  ol noNetFx472;..
35f40 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
35f50 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34  ic bool NoNetFx4
35f60 37 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  72..            
35f70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
35f80 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
35f90 6e 6f 4e 65 74 46 78 34 37 32 3b 20 7d 0d 0a 20  noNetFx472; }.. 
35fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
35fb0 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 37 32 20  et { noNetFx472 
35fc0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
35fd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
35fe0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
35ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
36030 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
36040 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30  ate bool noVs200
36050 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
36060 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73  public bool NoVs
36070 32 30 30 35 0d 0a 20 20 20 20 20 20 20 20 20 20  2005..          
36080 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36090 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
360a0 6e 20 6e 6f 56 73 32 30 30 35 3b 20 7d 0d 0a 20  n noVs2005; }.. 
360b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
360c0 65 74 20 7b 20 6e 6f 56 73 32 30 30 35 20 3d 20  et { noVs2005 = 
360d0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
360e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
360f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
36100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
36140 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
36150 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b  e bool noVs2008;
36160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
36170 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30  blic bool NoVs20
36180 30 38 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  08..            
36190 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
361a0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
361b0 6e 6f 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20  noVs2008; }..   
361c0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
361d0 20 7b 20 6e 6f 56 73 32 30 30 38 20 3d 20 76 61   { noVs2008 = va
361e0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
361f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
36200 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
36210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36240 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
36250 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
36260 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a  bool noVs2010;..
36270 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
36280 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30  ic bool NoVs2010
36290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
362a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
362b0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
362c0 56 73 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20  Vs2010; }..     
362d0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
362e0 20 6e 6f 56 73 32 30 31 30 20 3d 20 76 61 6c 75   noVs2010 = valu
362f0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
36300 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
36310 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
36320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36350 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
36360 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
36370 6f 6c 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20  ol noVs2012;..  
36380 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
36390 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 32 0d 0a   bool NoVs2012..
363a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
363b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
363c0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73  et { return noVs
363d0 32 30 31 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20  2012; }..       
363e0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
363f0 6f 56 73 32 30 31 32 20 3d 20 76 61 6c 75 65 3b  oVs2012 = value;
36400 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
36410 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
36420 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
36430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36460 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
36470 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
36480 20 6e 6f 56 73 32 30 31 33 3b 0d 0a 20 20 20 20   noVs2013;..    
36490 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
364a0 6f 6f 6c 20 4e 6f 56 73 32 30 31 33 0d 0a 20 20  ool NoVs2013..  
364b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
364c0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
364d0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30   { return noVs20
364e0 31 33 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  13; }..         
364f0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56         set { noV
36500 73 32 30 31 33 20 3d 20 76 61 6c 75 65 3b 20 7d  s2013 = value; }
36510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
36520 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
36530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36570 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
36580 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
36590 6f 56 73 32 30 31 35 3b 0d 0a 20 20 20 20 20 20  oVs2015;..      
365a0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
365b0 6c 20 4e 6f 56 73 32 30 31 35 0d 0a 20 20 20 20  l NoVs2015..    
365c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
365d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
365e0 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 35   return noVs2015
365f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
36600 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32       set { noVs2
36610 30 31 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  015 = value; }..
36620 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
36630 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
36640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36680 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36690 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56  private bool noV
366a0 73 32 30 31 37 3b 0d 0a 20 20 20 20 20 20 20 20  s2017;..        
366b0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
366c0 4e 6f 56 73 32 30 31 37 0d 0a 20 20 20 20 20 20  NoVs2017..      
366d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
366e0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
366f0 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 37 3b 20  eturn noVs2017; 
36700 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
36710 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31     set { noVs201
36720 37 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  7 = value; }..  
36730 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
36740 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
36750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
36790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
367a0 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 54 72 61  ivate bool noTra
367b0 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce;..           
367c0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 54   public bool NoT
367d0 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
367e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
367f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
36800 6e 20 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a 20 20  n noTrace; }..  
36810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
36820 74 20 7b 20 6e 6f 54 72 61 63 65 20 3d 20 76 61  t { noTrace = va
36830 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
36840 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
36850 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
36860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36890 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
368a0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
368b0 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d  bool noConsole;.
368c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
368d0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f  lic bool NoConso
368e0 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
368f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
36900 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
36910 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20 20  noConsole; }..  
36920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
36930 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20  t { noConsole = 
36940 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
36950 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
36960 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
36970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
369a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
369b0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
369c0 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20  e bool noLog;.. 
369d0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
369e0 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20 20  c bool NoLog..  
369f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
36a00 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
36a10 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4c 6f 67 3b   { return noLog;
36a20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
36a30 20 20 20 20 73 65 74 20 7b 20 6e 6f 4c 6f 67 20      set { noLog 
36a40 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
36a50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
36a60 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
36a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
36ab0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
36ac0 61 74 65 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e  ate bool throwOn
36ad0 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20 20  Missing;..      
36ae0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
36af0 6c 20 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l ThrowOnMissing
36b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
36b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36b20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74 68   get { return th
36b30 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 20 7d 0d  rowOnMissing; }.
36b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36b50 20 73 65 74 20 7b 20 74 68 72 6f 77 4f 6e 4d 69   set { throwOnMi
36b60 73 73 69 6e 67 20 3d 20 76 61 6c 75 65 3b 20 7d  ssing = value; }
36b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
36b80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
36b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36bd0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
36be0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77    private bool w
36bf0 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20  hatIf;..        
36c00 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
36c10 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20  WhatIf..        
36c20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36c30 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
36c40 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20  urn whatIf; }.. 
36c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
36c60 65 74 20 7b 20 77 68 61 74 49 66 20 3d 20 76 61  et { whatIf = va
36c70 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
36c80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
36c90 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
36ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36cd0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
36ce0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
36cf0 62 6f 6f 6c 20 64 65 62 75 67 3b 0d 0a 20 20 20  bool debug;..   
36d00 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
36d10 62 6f 6f 6c 20 44 65 62 75 67 0d 0a 20 20 20 20  bool Debug..    
36d20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36d30 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
36d40 20 72 65 74 75 72 6e 20 64 65 62 75 67 3b 20 7d   return debug; }
36d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36d60 20 20 73 65 74 20 7b 20 64 65 62 75 67 20 3d 20    set { debug = 
36d70 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
36d80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
36d90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
36da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
36de0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
36df0 65 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b 0d  e bool verbose;.
36e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
36e10 6c 69 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73 65  lic bool Verbose
36e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
36e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36e40 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65   get { return ve
36e50 72 62 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20 20  rbose; }..      
36e60 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
36e70 76 65 72 62 6f 73 65 20 3d 20 76 61 6c 75 65 3b  verbose = value;
36e80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
36e90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
36ea0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
36eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ee0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
36ef0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
36f00 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20   confirm;..     
36f10 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
36f20 6f 6c 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20 20  ol Confirm..    
36f30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36f40 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
36f50 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d 3b   return confirm;
36f60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
36f70 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 72      set { confir
36f80 6d 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  m = value; }..  
36f90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
36fa0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
36fb0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
36fc0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
36fd0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
36fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37020 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
37030 20 23 72 65 67 69 6f 6e 20 46 72 61 6d 65 77 6f   #region Framewo
37040 72 6b 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20  rkList Class..  
37050 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
37060 61 6c 65 64 20 63 6c 61 73 73 20 46 72 61 6d 65  aled class Frame
37070 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20  workList..      
37080 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
37090 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
370a0 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
370b0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
370c0 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29   FrameworkList()
370d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
370e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
370f0 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
37100 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
37110 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
37120 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
37130 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
37140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37170 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
37180 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
37190 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d   Public Methods.
371a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
371b0 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72  vate MockRegistr
371c0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20  yKey rootKey;.. 
371d0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
371e0 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
371f0 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20  y RootKey..     
37200 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37210 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
37220 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20  return rootKey; 
37230 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
37240 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79     set { rootKey
37250 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
37260 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
37270 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
37280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
372a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
372b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
372c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
372d0 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20  vate StringList 
372e0 6e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20  names;..        
372f0 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e      public Strin
37300 67 4c 69 73 74 20 4e 61 6d 65 73 0d 0a 20 20 20  gList Names..   
37310 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37320 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
37330 7b 20 72 65 74 75 72 6e 20 6e 61 6d 65 73 3b 20  { return names; 
37340 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
37350 20 20 20 73 65 74 20 7b 20 6e 61 6d 65 73 20 3d     set { names =
37360 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
37370 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
37380 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
37390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
373c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
373d0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
373e0 74 65 20 56 65 72 73 69 6f 6e 4d 61 70 20 76 65  te VersionMap ve
373f0 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20  rsions;..       
37400 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73       public Vers
37410 69 6f 6e 4d 61 70 20 56 65 72 73 69 6f 6e 73 0d  ionMap Versions.
37420 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
37430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37440 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72  get { return ver
37450 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20  sions; }..      
37460 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
37470 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65  versions = value
37480 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
37490 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
374a0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
374b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
374c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
374d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
374e0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
374f0 20 20 20 20 20 70 72 69 76 61 74 65 20 53 74 72       private Str
37500 69 6e 67 4c 69 73 74 20 70 6c 61 74 66 6f 72 6d  ingList platform
37510 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20  Names;..        
37520 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e      public Strin
37530 67 4c 69 73 74 20 50 6c 61 74 66 6f 72 6d 4e 61  gList PlatformNa
37540 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mes..           
37550 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
37560 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
37570 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 20   platformNames; 
37580 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
37590 20 20 20 73 65 74 20 7b 20 70 6c 61 74 66 6f 72     set { platfor
375a0 6d 4e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20  mNames = value; 
375b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
375c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
375d0 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
375e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
375f0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
37600 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
37610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
37650 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 73        #region Vs
37660 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
37670 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
37680 65 64 20 63 6c 61 73 73 20 56 73 4c 69 73 74 0d  ed class VsList.
37690 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
376a0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
376b0 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74  Public Construct
376c0 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
376d0 20 70 75 62 6c 69 63 20 56 73 4c 69 73 74 28 29   public VsList()
376e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
376f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37700 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
37710 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
37720 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
37730 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
37740 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
37750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37780 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
37790 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
377a0 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
377b0 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
377c0 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
377d0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b  stryKey rootKey;
377e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
377f0 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
37800 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20  yKey RootKey..  
37810 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
37820 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
37830 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65   { return rootKe
37840 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
37850 20 20 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74        set { root
37860 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  Key = value; }..
37870 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
37880 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
37890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
378e0 70 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4c  private VersionL
378f0 69 73 74 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20  ist versions;.. 
37900 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
37910 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 56 65  c VersionList Ve
37920 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20  rsions..        
37930 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37940 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
37950 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d  urn versions; }.
37960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37970 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20   set { versions 
37980 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
37990 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
379a0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
379b0 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
379c0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
379d0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
379e0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
379f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a30 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
37a40 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
37a50 74 65 20 43 6f 6e 73 74 61 6e 74 20 44 61 74 61  te Constant Data
37a60 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
37a70 6e 20 50 61 63 6b 61 67 65 20 26 20 50 72 6f 76  n Package & Prov
37a80 69 64 65 72 20 4e 61 6d 65 73 0d 0a 20 20 20 20  ider Names..    
37a90 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
37aa0 74 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c  t string CoreFil
37ab0 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  eName = "System.
37ac0 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 22  Data.SQLite.dll"
37ad0 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
37ae0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
37af0 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 22  LinqFileName = "
37b00 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
37b10 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d 0a 20  te.Linq.dll";.. 
37b20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
37b30 6f 6e 73 74 20 73 74 72 69 6e 67 20 45 66 36 46  onst string Ef6F
37b40 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65  ileName = "Syste
37b50 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46  m.Data.SQLite.EF
37b60 36 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  6.dll";..       
37b70 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
37b80 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69  tring DesignerFi
37b90 6c 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65  leName = "SQLite
37ba0 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d  .Designer.dll";.
37bb0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
37bc0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72   const string Pr
37bd0 6f 76 69 64 65 72 4e 61 6d 65 20 3d 20 22 53 51  oviderName = "SQ
37be0 4c 69 74 65 20 44 61 74 61 20 50 72 6f 76 69 64  Lite Data Provid
37bf0 65 72 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  er";..        pr
37c00 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
37c10 6e 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d  ng ProjectName =
37c20 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
37c30 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  Lite";..        
37c40 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
37c50 72 69 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a 65  ring LegacyProje
37c60 63 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65  ctName = "SQLite
37c70 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
37c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37cc0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
37cd0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
37ce0 74 72 69 6e 67 20 44 65 73 63 72 69 70 74 69 6f  tring Descriptio
37cf0 6e 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n =..           
37d00 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
37d10 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 66   Data Provider f
37d20 6f 72 20 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20  or SQLite";..   
37d30 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
37d40 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
37d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d90 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
37da0 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
37db0 6e 67 20 44 69 73 70 6c 61 79 4e 75 6c 6c 20 3d  ng DisplayNull =
37dc0 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 20 20 20 20   "<null>";..    
37dd0 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
37de0 74 20 73 74 72 69 6e 67 20 44 69 73 70 6c 61 79  t string Display
37df0 45 6d 70 74 79 20 3d 20 22 3c 65 6d 70 74 79 3e  Empty = "<empty>
37e00 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
37e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e50 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
37e60 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
37e70 74 72 69 6e 67 20 43 4c 52 76 32 49 6d 61 67 65  tring CLRv2Image
37e80 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
37e90 20 22 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d 0a   "v2.0.50727";..
37ea0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
37eb0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52  const string CLR
37ec0 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v4ImageRuntimeVe
37ed0 72 73 69 6f 6e 20 3d 20 22 76 34 2e 30 2e 33 30  rsion = "v4.0.30
37ee0 33 31 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  319";....       
37ef0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
37f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
37f40 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
37f50 74 20 73 74 72 69 6e 67 20 53 79 73 74 65 6d 45  t string SystemE
37f60 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  f6AssemblyName =
37f70 20 22 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72   "EntityFramewor
37f80 6b 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  k, " +..        
37f90 20 20 20 20 22 56 65 72 73 69 6f 6e 3d 36 2e 30      "Version=6.0
37fa0 2e 30 2e 30 2c 20 43 75 6c 74 75 72 65 3d 6e 65  .0.0, Culture=ne
37fb0 75 74 72 61 6c 2c 20 50 75 62 6c 69 63 4b 65 79  utral, PublicKey
37fc0 54 6f 6b 65 6e 3d 62 37 37 61 35 63 35 36 31 39  Token=b77a5c5619
37fd0 33 34 65 30 38 39 22 3b 0d 0a 0d 0a 20 20 20 20  34e089";....    
37fe0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
37ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
38030 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
38040 6f 6e 73 74 20 73 74 72 69 6e 67 20 4e 61 6d 65  onst string Name
38050 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 20 3d  AndValueFormat =
38060 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 20 20   "{0}: {1}";..  
38070 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
38080 6e 73 74 20 73 74 72 69 6e 67 20 4c 6f 67 46 69  nst string LogFi
38090 6c 65 53 75 66 66 69 78 20 3d 20 22 2e 6c 6f 67  leSuffix = ".log
380a0 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
380b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
380c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
380d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
380e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
380f0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
38100 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
38110 74 72 69 6e 67 20 56 73 44 65 76 45 6e 76 53 65  tring VsDevEnvSe
38120 74 75 70 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d  tupFormat = "{0}
38130 3a 20 7b 31 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20  : {1}";....     
38140 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
38150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
38190 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
381a0 6e 73 74 20 73 74 72 69 6e 67 20 52 6f 6f 74 4b  nst string RootK
381b0 65 79 4e 61 6d 65 20 3d 20 22 53 6f 66 74 77 61  eyName = "Softwa
381c0 72 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  re";..        pr
381d0 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
381e0 6e 67 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61  ng Wow64SubKeyNa
381f0 6d 65 20 3d 20 22 57 6f 77 36 34 33 32 4e 6f 64  me = "Wow6432Nod
38200 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  e";....        /
38210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38250 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
38260 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
38270 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20   NOTE: The .NET 
38280 46 72 61 6d 65 77 6f 72 6b 20 68 61 73 20 62 6f  Framework has bo
38290 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34  th 32-bit and 64
382a0 2d 62 69 74 20 65 64 69 74 69 6f 6e 73 2e 0d 0a  -bit editions...
382b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
382c0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
382d0 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c  ic readonly bool
382e0 20 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e 6c   NetFxIs32BitOnl
382f0 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  y = false;....  
38300 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
38310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
38350 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
38360 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f       // NOTE: Fo
38370 72 20 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53 74  r now, Visual St
38380 75 64 69 6f 20 69 73 20 61 6c 77 61 79 73 20 61  udio is always a
38390 20 33 32 2d 62 69 74 20 61 70 70 6c 69 63 61 74   32-bit applicat
383a0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ion...        //
383b0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
383c0 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
383d0 79 20 62 6f 6f 6c 20 56 73 49 73 33 32 42 69 74  y bool VsIs32Bit
383e0 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a  Only = true;....
383f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
38400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
38440 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
38450 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
38460 6c 79 20 73 74 72 69 6e 67 20 56 73 49 64 46 6f  ly string VsIdFo
38470 72 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20  rmat = "B";.... 
38480 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
38490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
384a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
384b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
384c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
384d0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
384e0 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
384f0 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f  y string XPathFo
38500 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20  rAddElement =.. 
38510 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66             "conf
38520 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d  iguration/system
38530 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72  .data/DbProvider
38540 46 61 63 74 6f 72 69 65 73 2f 61 64 64 5b 40 69  Factories/add[@i
38550 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22  nvariant=\"{0}\"
38560 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ]";....        p
38570 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
38580 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 50  adonly string XP
38590 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d  athForRemoveElem
385a0 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ent =..         
385b0 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f     "configuratio
385c0 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62  n/system.data/Db
385d0 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65  ProviderFactorie
385e0 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72 69  s/remove[@invari
385f0 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a  ant=\"{0}\"]";..
38600 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
38610 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
38620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38660 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
38670 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
38680 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20   Static Data..  
38690 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 69        #region Di
386a0 61 67 6e 6f 73 74 69 63 73 20 26 20 4c 6f 67 67  agnostics & Logg
386b0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  ing..        //.
386c0 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
386d0 3a 20 43 61 63 68 65 20 74 68 65 20 63 75 72 72  : Cache the curr
386e0 65 6e 74 20 70 72 6f 63 65 73 73 20 61 6e 64 20  ent process and 
386f0 61 73 73 65 6d 62 6c 79 20 61 73 20 74 68 65 79  assembly as they
38700 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 0d 0a   do not change..
38710 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
38720 20 61 6e 64 20 6d 61 79 20 62 65 20 6e 65 65 64   and may be need
38730 65 64 20 69 6e 20 71 75 69 74 65 20 61 20 66 65  ed in quite a fe
38740 77 20 64 69 66 66 65 72 65 6e 74 20 70 6c 61 63  w different plac
38750 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  es...        //.
38760 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
38770 20 73 74 61 74 69 63 20 50 72 6f 63 65 73 73 20   static Process 
38780 74 68 69 73 50 72 6f 63 65 73 73 20 3d 20 50 72  thisProcess = Pr
38790 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74  ocess.GetCurrent
387a0 50 72 6f 63 65 73 73 28 29 3b 0d 0a 20 20 20 20  Process();..    
387b0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
387c0 69 63 20 41 73 73 65 6d 62 6c 79 20 74 68 69 73  ic Assembly this
387d0 41 73 73 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d  Assembly = Assem
387e0 62 6c 79 2e 47 65 74 45 78 65 63 75 74 69 6e 67  bly.GetExecuting
387f0 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a 0d 0a 20  Assembly();.... 
38800 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
38810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
38850 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
38860 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
38870 68 65 20 74 72 61 63 65 20 63 61 74 65 67 6f 72  he trace categor
38880 79 20 69 73 20 74 68 65 20 73 61 6d 65 20 66 6f  y is the same fo
38890 72 20 62 6f 74 68 20 74 68 65 20 64 65 62 75 67  r