System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 3848d813925a7b76ba03bf575414dfb616df27fe:


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 68 72 65 61 64 69 6e 67 3b 0d 0a 75 73  m.Threading;..us
0200: 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f  ing System.Windo
0210: 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69 6e 67  ws.Forms;..using
0220: 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a 75 73   System.Xml;..us
0230: 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 57 69  ing Microsoft.Wi
0240: 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63  n32;....namespac
0250: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
0260: 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23 72 65  Lite..{..    #re
0270: 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65 6c 65  gion Public Dele
0280: 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74 65 72  gates..    inter
0290: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f 69  nal delegate voi
02a0: 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  d TraceCallback(
02b0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
02c0: 20 6d 65 73 73 61 67 65 2c 20 2f 2a 20 69 6e 20   message, /* in 
02d0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
02e0: 6e 67 20 63 61 74 65 67 6f 72 79 20 2f 2a 20 69  ng category /* i
02f0: 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a  n */..    );....
0300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0310: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
0350: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
0360: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72  delegate bool Fr
0370: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
0380: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
0390: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
03a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
03b0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
03c0: 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  ing invariantNam
03d0: 65 2c 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f  e,      /* in */
03e0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
03f0: 20 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20   name,          
0400: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0410: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
0420: 73 63 72 69 70 74 69 6f 6e 2c 20 20 20 20 20 20  scription,      
0430: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0440: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
0450: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ame,           /
0460: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0470: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
0480: 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 2f 2a 20 69  semblyName, /* i
0490: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
04a0: 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20  ring directory, 
04b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
04c0: 2f 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  /..        objec
04d0: 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20  t clientData,   
04e0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
04f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
0500: 55 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20  User,           
0510: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0520: 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0540: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0550: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
0560: 73 73 69 6e 67 2c 20 20 20 20 20 20 20 2f 2a 20  ssing,       /* 
0570: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0580: 6f 6f 6c 20 77 68 61 74 49 66 2c 20 20 20 20 20  ool whatIf,     
0590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
05a0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
05b0: 20 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20   verbose,       
05c0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
05d0: 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f  .        ref boo
05e0: 6c 20 73 61 76 65 64 2c 20 20 20 20 20 20 20 20  l saved,        
05f0: 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20      /* out */.. 
0600: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
0610: 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20  g error         
0620: 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20    /* out */..   
0630: 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f   );....    /////
0640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 69 6e  //////....    in
0690: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
06a0: 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 52 65  bool FrameworkRe
06b0: 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d  gistryCallback(.
06c0: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c  .        Install
06d0: 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  er.MockRegistryK
06e0: 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f 2a 20 69  ey rootKey, /* i
06f0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
0700: 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
0710: 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  me,             
0720: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0730: 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
0740: 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 20 20 20  workVersion,    
0750: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0760: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
0770: 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 20 20 20  latformName,    
0780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0790: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
07a0: 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20  ing directory,  
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07c0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
07d0: 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
07e0: 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20 20  ata,            
07f0: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0800: 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
0810: 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  ser,            
0820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0830: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
0840: 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20   wow64,         
0850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0860: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0870: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
0880: 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20  sing,           
0890: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
08a0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
08b0: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f,              
08c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
08d0: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
08e0: 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20  verbose,        
08f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0900: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0910: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0930: 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
0940: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f    );....    ////
0950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 69  ///////....    i
09a0: 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65  nternal delegate
09b0: 20 62 6f 6f 6c 20 56 69 73 75 61 6c 53 74 75 64   bool VisualStud
09c0: 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  ioRegistryCallba
09d0: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73  ck(..        Ins
09e0: 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73  taller.MockRegis
09f0: 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20  tryKey rootKey, 
0a00: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0a10: 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
0a20: 69 6f 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20  ion,            
0a30: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0a40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
0a50: 66 66 69 78 2c 20 20 20 20 20 20 20 20 20 20 20  ffix,           
0a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c            /* in,
0a70: 20 6f 70 74 69 6f 6e 61 6c 20 2a 2f 0d 0a 20 20   optional */..  
0a80: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
0a90: 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
0aa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0ab0: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0ac0: 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20 20 20  g directory,    
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0ae0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0af0: 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
0b00: 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a,              
0b10: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0b20: 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
0b30: 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r,              
0b40: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
0b50: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
0b60: 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20  ow64,           
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0b80: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0b90: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
0ba0: 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ng,             
0bb0: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0bc0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0be0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0bf0: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65  .        bool ve
0c00: 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20  rbose,          
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0c20: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65  n */..        re
0c30: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20  f string error  
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c50: 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20   /* out */..    
0c60: 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  );..    #endregi
0c70: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
0c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
0cd0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 45 6e 75 6d  gion Public Enum
0ce0: 65 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 5b 46  erations..    [F
0cf0: 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62  lags()]..    pub
0d00: 6c 69 63 20 65 6e 75 6d 20 49 6e 73 74 61 6c 6c  lic enum Install
0d10: 46 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  Flags..    {..  
0d20: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f        #region No
0d30: 72 6d 61 6c 20 56 61 6c 75 65 73 0d 0a 20 20 20  rmal Values..   
0d40: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
0d50: 0d 0a 20 20 20 20 20 20 20 20 43 6f 72 65 47 6c  ..        CoreGl
0d60: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
0d70: 65 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20  e = 0x1,..      
0d80: 20 20 4c 69 6e 71 47 6c 6f 62 61 6c 41 73 73 65    LinqGlobalAsse
0d90: 6d 62 6c 79 43 61 63 68 65 20 3d 20 30 78 32 2c  mblyCache = 0x2,
0da0: 0d 0a 20 20 20 20 20 20 20 20 45 66 36 47 6c 6f  ..        Ef6Glo
0db0: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
0dc0: 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20   = 0x4,..       
0dd0: 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73   AssemblyFolders
0de0: 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20 20   = 0x8,..       
0df0: 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f   DbProviderFacto
0e00: 72 79 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20 20  ry = 0x10,..    
0e10: 20 20 20 20 56 73 50 61 63 6b 61 67 65 20 3d 20      VsPackage = 
0e20: 30 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 56  0x20,..        V
0e30: 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73  sPackageGlobalAs
0e40: 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 30 78  semblyCache = 0x
0e50: 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44  40,..        VsD
0e60: 61 74 61 53 6f 75 72 63 65 20 3d 20 30 78 38 30  ataSource = 0x80
0e70: 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44 61 74  ,..        VsDat
0e80: 61 50 72 6f 76 69 64 65 72 20 3d 20 30 78 31 30  aProvider = 0x10
0e90: 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44 65  0,..        VsDe
0ea0: 76 45 6e 76 53 65 74 75 70 20 3d 20 30 78 32 30  vEnvSetup = 0x20
0eb0: 30 2c 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  0,..        #end
0ec0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
0ed0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0f20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d       #region Com
0f30: 70 6f 73 69 74 65 20 56 61 6c 75 65 73 0d 0a 20  posite Values.. 
0f40: 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
0f50: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
0f60: 63 68 65 20 3d 20 43 6f 72 65 47 6c 6f 62 61 6c  che = CoreGlobal
0f70: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 0d  AssemblyCache |.
0f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fa0: 20 20 20 20 20 20 20 20 4c 69 6e 71 47 6c 6f 62          LinqGlob
0fb0: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
0fc0: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fe0: 20 20 20 20 20 20 20 20 20 20 45 66 36 47 6c 6f            Ef6Glo
0ff0: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
1000: 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ,....        ///
1010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1050: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1060: 46 72 61 6d 65 77 6f 72 6b 20 3d 20 46 72 61 6d  Framework = Fram
1070: 65 77 6f 72 6b 47 6c 6f 62 61 6c 41 73 73 65 6d  eworkGlobalAssem
1080: 62 6c 79 43 61 63 68 65 20 7c 20 41 73 73 65 6d  blyCache | Assem
1090: 62 6c 79 46 6f 6c 64 65 72 73 20 7c 0d 0a 20 20  blyFolders |..  
10a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b0: 20 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74    DbProviderFact
10c0: 6f 72 79 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ory,....        
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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1110: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1120: 20 20 20 56 73 20 3d 20 56 73 50 61 63 6b 61 67     Vs = VsPackag
1130: 65 20 7c 20 56 73 50 61 63 6b 61 67 65 47 6c 6f  e | VsPackageGlo
1140: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
1150: 20 7c 20 56 73 44 61 74 61 53 6f 75 72 63 65 20   | VsDataSource 
1160: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
1170: 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 20 7c  VsDataProvider |
1180: 20 56 73 44 65 76 45 6e 76 53 65 74 75 70 2c 0d   VsDevEnvSetup,.
1190: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
11a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 41 6c  //....        Al
11f0: 6c 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  lGlobalAssemblyC
1200: 61 63 68 65 20 3d 20 46 72 61 6d 65 77 6f 72 6b  ache = Framework
1210: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
1220: 63 68 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20  che |..         
1230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1240: 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61 67          VsPackag
1250: 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  eGlobalAssemblyC
1260: 61 63 68 65 2c 0d 0a 0d 0a 20 20 20 20 20 20 20  ache,....       
1270: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
12c0: 20 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d 65 77      All = Framew
12d0: 6f 72 6b 20 7c 20 56 73 2c 0d 0a 0d 0a 20 20 20  ork | Vs,....   
12e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1330: 20 20 20 20 20 20 20 20 41 6c 6c 45 78 63 65 70          AllExcep
1340: 74 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  tGlobalAssemblyC
1350: 61 63 68 65 20 3d 20 41 6c 6c 20 26 20 7e 41 6c  ache = All & ~Al
1360: 6c 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  lGlobalAssemblyC
1370: 61 63 68 65 2c 0d 0a 20 20 20 20 20 20 20 20 23  ache,..        #
1380: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1390: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
13e0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
13f0: 53 75 67 67 65 73 74 65 64 20 44 65 66 61 75 6c  Suggested Defaul
1400: 74 20 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20  t Values..      
1410: 20 20 44 65 66 61 75 6c 74 20 3d 20 41 6c 6c 0d    Default = All.
1420: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1430: 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ion..    }....  
1440: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1460: 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
1490: 0a 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a  .    [Flags()]..
14a0: 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20      public enum 
14b0: 50 72 6f 76 69 64 65 72 46 6c 61 67 73 0d 0a 20  ProviderFlags.. 
14c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
14d0: 65 67 69 6f 6e 20 4e 6f 72 6d 61 6c 20 56 61 6c  egion Normal Val
14e0: 75 65 73 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e  ues..        Non
14f0: 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20  e = 0x0,..      
1500: 20 20 53 79 73 74 65 6d 45 66 36 4d 75 73 74 42    SystemEf6MustB
1510: 65 47 6c 6f 62 61 6c 20 3d 20 30 78 31 2c 0d 0a  eGlobal = 0x1,..
1520: 20 20 20 20 20 20 20 20 44 69 64 4c 69 6e 71 46          DidLinqF
1530: 6f 72 63 65 54 72 61 63 65 20 3d 20 30 78 32 2c  orceTrace = 0x2,
1540: 0d 0a 20 20 20 20 20 20 20 20 44 69 64 45 66 36  ..        DidEf6
1550: 46 6f 72 63 65 54 72 61 63 65 20 3d 20 30 78 34  ForceTrace = 0x4
1560: 2c 0d 0a 20 20 20 20 20 20 20 20 44 69 64 45 66  ,..        DidEf
1570: 36 52 65 73 6f 6c 76 65 54 72 61 63 65 20 3d 20  6ResolveTrace = 
1580: 30 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 46 6f  0x8,..        Fo
1590: 72 63 65 4c 69 6e 71 45 6e 61 62 6c 65 64 20 3d  rceLinqEnabled =
15a0: 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x10,..        
15b0: 46 6f 72 63 65 4c 69 6e 71 44 69 73 61 62 6c 65  ForceLinqDisable
15c0: 64 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20  d = 0x20,..     
15d0: 20 20 20 46 6f 72 63 65 45 66 36 45 6e 61 62 6c     ForceEf6Enabl
15e0: 65 64 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20  ed = 0x40,..    
15f0: 20 20 20 20 46 6f 72 63 65 45 66 36 44 69 73 61      ForceEf6Disa
1600: 62 6c 65 64 20 3d 20 30 78 38 30 2c 0d 0a 20 20  bled = 0x80,..  
1610: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1680: 72 65 67 69 6f 6e 20 53 75 67 67 65 73 74 65 64  region Suggested
1690: 20 44 65 66 61 75 6c 74 20 56 61 6c 75 65 73 0d   Default Values.
16a0: 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74  .        Default
16b0: 20 3d 20 4e 6f 6e 65 0d 0a 20 20 20 20 20 20 20   = None..       
16c0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
16d0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c  /////....    [Fl
1730: 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c  ags()]..    publ
1740: 69 63 20 65 6e 75 6d 20 54 72 61 63 65 50 72 69  ic enum TracePri
1750: 6f 72 69 74 79 0d 0a 20 20 20 20 7b 0d 0a 20 20  ority..    {..  
1760: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f        #region No
1770: 72 6d 61 6c 20 56 61 6c 75 65 73 0d 0a 20 20 20  rmal Values..   
1780: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
1790: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 73 74  ..        Lowest
17a0: 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20   = 0x1,..       
17b0: 20 4c 6f 77 65 72 20 3d 20 30 78 32 2c 0d 0a 20   Lower = 0x2,.. 
17c0: 20 20 20 20 20 20 20 4c 6f 77 20 3d 20 30 78 34         Low = 0x4
17d0: 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75  ,..        Mediu
17e0: 6d 4c 6f 77 20 3d 20 30 78 38 2c 0d 0a 20 20 20  mLow = 0x8,..   
17f0: 20 20 20 20 20 4d 65 64 69 75 6d 20 3d 20 30 78       Medium = 0x
1800: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64  10,..        Med
1810: 69 75 6d 48 69 67 68 20 3d 20 30 78 32 30 2c 0d  iumHigh = 0x20,.
1820: 0a 20 20 20 20 20 20 20 20 48 69 67 68 20 3d 20  .        High = 
1830: 30 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 48  0x40,..        H
1840: 69 67 68 65 72 20 3d 20 30 78 38 30 2c 0d 0a 20  igher = 0x80,.. 
1850: 20 20 20 20 20 20 20 48 69 67 68 65 73 74 20 3d         Highest =
1860: 20 30 78 31 30 30 2c 0d 0a 20 20 20 20 20 20 20   0x100,..       
1870: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1880: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18d0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
18e0: 6e 20 53 75 67 67 65 73 74 65 64 20 44 65 66 61  n Suggested Defa
18f0: 75 6c 74 20 46 6c 61 67 73 0d 0a 20 20 20 20 20  ult Flags..     
1900: 20 20 20 44 65 66 61 75 6c 74 20 3d 20 4d 65 64     Default = Med
1910: 69 75 6d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ium..        #en
1920: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
1930: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1940: 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
1980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1990: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
19a0: 20 49 6e 73 74 61 6c 6c 65 72 20 43 6c 61 73 73   Installer Class
19b0: 0d 0a 23 69 66 20 4e 45 54 5f 34 30 20 7c 7c 20  ..#if NET_40 || 
19c0: 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35  NET_45 || NET_45
19d0: 31 20 7c 7c 20 4e 45 54 5f 34 36 0d 0a 20 20 20  1 || NET_46..   
19e0: 20 5b 53 65 63 75 72 69 74 79 43 72 69 74 69 63   [SecurityCritic
19f0: 61 6c 28 29 5d 0d 0a 23 65 6c 73 65 0d 0a 20 20  al()]..#else..  
1a00: 20 20 5b 53 65 63 75 72 69 74 79 50 65 72 6d 69    [SecurityPermi
1a10: 73 73 69 6f 6e 28 53 65 63 75 72 69 74 79 41 63  ssion(SecurityAc
1a20: 74 69 6f 6e 2e 4c 69 6e 6b 44 65 6d 61 6e 64 2c  tion.LinkDemand,
1a30: 20 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65 20 3d   UnmanagedCode =
1a40: 20 74 72 75 65 29 5d 0d 0a 23 65 6e 64 69 66 0d   true)]..#endif.
1a50: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
1a60: 61 74 69 63 20 63 6c 61 73 73 20 49 6e 73 74 61  atic class Insta
1a70: 6c 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ller..    {..   
1a80: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 6e 73       #region Uns
1a90: 61 66 65 20 4e 61 74 69 76 65 20 4d 65 74 68 6f  afe Native Metho
1aa0: 64 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ds Class..      
1ab0: 20 20 5b 53 75 70 70 72 65 73 73 55 6e 6d 61 6e    [SuppressUnman
1ac0: 61 67 65 64 43 6f 64 65 53 65 63 75 72 69 74 79  agedCodeSecurity
1ad0: 28 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ()]..        pri
1ae0: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
1af0: 73 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  s UnsafeNativeMe
1b00: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 7b  thods..        {
1b10: 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20  ..#if WINDOWS.. 
1b20: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
1b30: 6f 6e 20 4e 61 74 69 76 65 20 57 69 6e 33 32 20  on Native Win32 
1b40: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..     
1b50: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
1b60: 6f 6e 73 74 20 69 6e 74 20 4d 41 58 5f 50 41 54  onst int MAX_PAT
1b70: 48 20 3d 20 32 36 30 3b 0d 0a 0d 0a 20 20 20 20  H = 260;....    
1b80: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
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 0d 0a 0d 0a 20  ///////////.... 
1bd0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1be0: 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 43 53 49  te const int CSI
1bf0: 44 4c 5f 53 59 53 54 45 4d 58 38 36 20 3d 20 30  DL_SYSTEMX86 = 0
1c00: 78 30 30 32 39 3b 0d 0a 0d 0a 20 20 20 20 20 20  x0029;....      
1c10: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1c60: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1c70: 20 63 6f 6e 73 74 20 69 6e 74 20 53 48 47 46 50   const int SHGFP
1c80: 5f 54 59 50 45 5f 43 55 52 52 45 4e 54 20 3d 20  _TYPE_CURRENT = 
1c90: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
1ca0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1cf0: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1d00: 73 74 20 69 6e 74 20 53 5f 4f 4b 20 3d 20 30 3b  st int S_OK = 0;
1d10: 20 2f 2a 20 48 52 45 53 55 4c 54 20 2a 2f 0d 0a   /* HRESULT */..
1d20: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
1d30: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1d40: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1d90: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1da0: 20 4e 61 74 69 76 65 20 57 69 6e 64 6f 77 73 20   Native Windows 
1db0: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
1dc0: 20 20 20 20 20 5b 44 6c 6c 49 6d 70 6f 72 74 28       [DllImport(
1dd0: 22 73 68 66 6f 6c 64 65 72 2e 64 6c 6c 22 2c 0d  "shfolder.dll",.
1de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1df0: 20 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69   CallingConventi
1e00: 6f 6e 20 3d 20 43 61 6c 6c 69 6e 67 43 6f 6e 76  on = CallingConv
1e10: 65 6e 74 69 6f 6e 2e 57 69 6e 61 70 69 2c 0d 0a  ention.Winapi,..
1e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e30: 43 68 61 72 53 65 74 20 3d 20 43 68 61 72 53 65  CharSet = CharSe
1e40: 74 2e 41 75 74 6f 2c 20 42 65 73 74 46 69 74 4d  t.Auto, BestFitM
1e50: 61 70 70 69 6e 67 20 3d 20 66 61 6c 73 65 2c 0d  apping = false,.
1e60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e70: 20 54 68 72 6f 77 4f 6e 55 6e 6d 61 70 70 61 62   ThrowOnUnmappab
1e80: 6c 65 43 68 61 72 20 3d 20 74 72 75 65 2c 20 53  leChar = true, S
1e90: 65 74 4c 61 73 74 45 72 72 6f 72 20 3d 20 74 72  etLastError = tr
1ea0: 75 65 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ue)]..          
1eb0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1ec0: 20 65 78 74 65 72 6e 20 69 6e 74 20 53 48 47 65   extern int SHGe
1ed0: 74 46 6f 6c 64 65 72 50 61 74 68 28 0d 0a 20 20  tFolderPath(..  
1ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
1ef0: 74 50 74 72 20 68 57 6e 64 4f 77 6e 65 72 2c 20  tPtr hWndOwner, 
1f00: 69 6e 74 20 6e 46 6f 6c 64 65 72 2c 20 49 6e 74  int nFolder, Int
1f10: 50 74 72 20 68 54 6f 6b 65 6e 2c 20 75 69 6e 74  Ptr hToken, uint
1f20: 20 66 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20   flags,..       
1f30: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1f40: 62 75 66 66 65 72 20 2f 2a 20 3e 3d 20 4d 41 58  buffer /* >= MAX
1f50: 5f 50 41 54 48 20 2a 2f 29 3b 0d 0a 20 20 20 20  _PATH */);..    
1f60: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1f70: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
1f80: 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1fd0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1fe0: 6c 69 63 20 57 72 61 70 70 65 72 20 4d 65 74 68  lic Wrapper Meth
1ff0: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
2000: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
2010: 74 72 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44  tring GetSystemD
2020: 69 72 65 63 74 6f 72 79 28 29 0d 0a 20 20 20 20  irectory()..    
2030: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2040: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
2050: 72 20 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74  r buffer = IntPt
2060: 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
2070: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2090: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20a0: 20 20 20 20 20 20 20 62 75 66 66 65 72 20 3d 20         buffer = 
20b0: 4d 61 72 73 68 61 6c 2e 41 6c 6c 6f 63 43 6f 54  Marshal.AllocCoT
20c0: 61 73 6b 4d 65 6d 28 0d 0a 20 20 20 20 20 20 20  askMem(..       
20d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e0: 20 73 69 7a 65 6f 66 28 63 68 61 72 29 20 2a 20   sizeof(char) * 
20f0: 28 4d 41 58 5f 50 41 54 48 20 2b 20 31 29 29 3b  (MAX_PATH + 1));
2100: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2110: 20 20 20 20 20 20 20 20 69 66 20 28 62 75 66 66          if (buff
2120: 65 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  er != IntPtr.Zer
2130: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
2140: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2160: 20 20 20 69 66 20 28 53 48 47 65 74 46 6f 6c 64     if (SHGetFold
2170: 65 72 50 61 74 68 28 49 6e 74 50 74 72 2e 5a 65  erPath(IntPtr.Ze
2180: 72 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro,..           
2190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a0: 20 20 20 20 20 43 53 49 44 4c 5f 53 59 53 54 45       CSIDL_SYSTE
21b0: 4d 58 38 36 2c 20 49 6e 74 50 74 72 2e 5a 65 72  MX86, IntPtr.Zer
21c0: 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o,..            
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e0: 20 20 20 20 53 48 47 46 50 5f 54 59 50 45 5f 43      SHGFP_TYPE_C
21f0: 55 52 52 45 4e 54 2c 20 62 75 66 66 65 72 29 20  URRENT, buffer) 
2200: 3d 3d 20 53 5f 4f 4b 29 0d 0a 20 20 20 20 20 20  == S_OK)..      
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2220: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2240: 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e   return Marshal.
2250: 50 74 72 54 6f 53 74 72 69 6e 67 41 75 74 6f 28  PtrToStringAuto(
2260: 62 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20  buffer);..      
2270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2280: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2290: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
22b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
22c0: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
22d0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
22e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2310: 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 49 73 20 74     // TODO: Is t
2320: 68 69 73 20 74 68 65 20 72 69 67 68 74 20 65 72  his the right er
2330: 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20 73 6f 6c  ror handling sol
2340: 75 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ution..         
2350: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2360: 20 20 20 20 74 6f 20 75 73 65 20 61 74 20 74 68      to use at th
2370: 69 73 20 70 6f 69 6e 74 3f 0d 0a 20 20 20 20 20  is point?..     
2380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2390: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
23a0: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
23b0: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
23c0: 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
23d0: 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f0: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2400: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2410: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2430: 20 20 20 20 20 20 20 22 43 6f 75 6c 64 20 6e 6f         "Could no
2440: 74 20 67 65 74 20 73 79 73 74 65 6d 20 64 69 72  t get system dir
2450: 65 63 74 6f 72 79 3a 20 7b 30 7d 22 2c 20 65 29  ectory: {0}", e)
2460: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2470: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2480: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a0: 20 20 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20 20    throw;..      
24b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
24c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e               fin
24d0: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
24e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2500: 28 62 75 66 66 65 72 20 21 3d 20 49 6e 74 50 74  (buffer != IntPt
2510: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
2520: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2540: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
2550: 46 72 65 65 43 6f 54 61 73 6b 4d 65 6d 28 62 75  FreeCoTaskMem(bu
2560: 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  ffer);..        
2570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2580: 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74 72 2e  buffer = IntPtr.
2590: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
25a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
25b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
25c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25d0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
25e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2600: 72 65 67 69 6f 6e 0d 0a 23 65 6e 64 69 66 0d 0a  region..#endif..
2610: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2620: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2630: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2680: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
2690: 69 6f 6e 20 50 72 69 76 61 74 65 20 48 65 6c 70  ion Private Help
26a0: 65 72 20 43 6c 61 73 73 65 73 0d 0a 20 20 20 20  er Classes..    
26b0: 20 20 20 20 23 72 65 67 69 6f 6e 20 41 6e 79 50      #region AnyP
26c0: 61 69 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  air Class..     
26d0: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
26e0: 64 20 63 6c 61 73 73 20 41 6e 79 50 61 69 72 3c  d class AnyPair<
26f0: 54 31 2c 20 54 32 3e 0d 0a 20 20 20 20 20 20 20  T1, T2>..       
2700: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2710: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
2720: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
2730: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2740: 20 20 20 20 20 20 20 20 20 2f 2f 20 57 41 52 4e           // WARN
2750: 49 4e 47 3a 20 54 68 69 73 20 63 6f 6e 73 74 72  ING: This constr
2760: 75 63 74 6f 72 20 70 72 6f 64 75 63 65 73 20 61  uctor produces a
2770: 6e 20 69 6d 6d 75 74 61 62 6c 65 20 22 65 6d 70  n immutable "emp
2780: 74 79 22 20 70 61 69 72 0d 0a 20 20 20 20 20 20  ty" pair..      
2790: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
27a0: 20 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 20    object...     
27b0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
27c0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e         public An
27d0: 79 50 61 69 72 28 29 0d 0a 20 20 20 20 20 20 20  yPair()..       
27e0: 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28           : base(
27f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2810: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
2820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2830: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2880: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2890: 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72    public AnyPair
28a0: 28 54 31 20 78 29 0d 0a 20 20 20 20 20 20 20 20  (T1 x)..        
28b0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 29          : this()
28c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28e0: 20 74 68 69 73 2e 78 20 3d 20 78 3b 0d 0a 20 20   this.x = x;..  
28f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2900: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2960: 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31 20  blic AnyPair(T1 
2970: 78 2c 20 54 32 20 79 29 0d 0a 20 20 20 20 20 20  x, T2 y)..      
2980: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
2990: 28 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  (x)..           
29a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29b0: 20 20 20 20 74 68 69 73 2e 79 20 3d 20 79 3b 0d      this.y = y;.
29c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
29e0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
29f0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2a40: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
2a50: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
2a60: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
2a70: 70 72 69 76 61 74 65 20 54 31 20 78 3b 0d 0a 20  private T1 x;.. 
2a80: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2a90: 63 20 54 31 20 58 0d 0a 20 20 20 20 20 20 20 20  c T1 X..        
2aa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ab0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2ac0: 75 72 6e 20 78 3b 20 7d 0d 0a 20 20 20 20 20 20  urn x; }..      
2ad0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ae0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2b30: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2b40: 65 20 54 32 20 79 3b 0d 0a 20 20 20 20 20 20 20  e T2 y;..       
2b50: 20 20 20 20 20 70 75 62 6c 69 63 20 54 32 20 59       public T2 Y
2b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b80: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 79 3b   get { return y;
2b90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2ba0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
2bb0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
2bc0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2bd0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2be0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2c30: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54         #region T
2c40: 72 61 63 65 4f 70 73 20 43 6c 61 73 73 0d 0a 20  raceOps Class.. 
2c50: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2c60: 74 61 74 69 63 20 63 6c 61 73 73 20 54 72 61 63  tatic class Trac
2c70: 65 4f 70 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d  eOps..        {.
2c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
2c90: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
2ca0: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..        
2cb0: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
2cc0: 74 20 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74  t string Default
2cd0: 44 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 22 23  DebugFormat = "#
2ce0: 7b 30 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b  {0:000} @ {1}: {
2cf0: 32 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  2}";..          
2d00: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2d10: 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74 54 72  string DefaultTr
2d20: 61 63 65 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30  aceFormat = "#{0
2d30: 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d  :000} @ {1}: {2}
2d40: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
2d50: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2d60: 73 74 72 69 6e 67 20 49 73 6f 38 36 30 31 44 61  string Iso8601Da
2d70: 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d  teTimeOutputForm
2d80: 61 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  at =..          
2d90: 20 20 20 20 20 20 22 79 79 79 79 2e 4d 4d 2e 64        "yyyy.MM.d
2da0: 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66 66 66  dTHH:mm:ss.fffff
2db0: 66 66 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ff";..          
2dc0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2dd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2e20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2e30: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53  region Private S
2e40: 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20  tatic Data..    
2e50: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2e60: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
2e70: 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
2e80: 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ect();..        
2e90: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2ea0: 69 63 20 6c 6f 6e 67 20 6e 65 78 74 44 65 62 75  ic long nextDebu
2eb0: 67 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gId;..          
2ec0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2ed0: 20 6c 6f 6e 67 20 6e 65 78 74 54 72 61 63 65 49   long nextTraceI
2ee0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
2ef0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 49  private static I
2f00: 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e  List<TraceListen
2f10: 65 72 3e 20 64 65 62 75 67 4c 69 73 74 65 6e 65  er> debugListene
2f20: 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs;..           
2f30: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2f40: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65  TracePriority de
2f50: 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 54 72  bugPriority = Tr
2f60: 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61  acePriority.Defa
2f70: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
2f80: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2f90: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
2fa0: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 54  racePriority = T
2fb0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66  racePriority.Def
2fc0: 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ault;..         
2fd0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2fe0: 63 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f  c string debugFo
2ff0: 72 6d 61 74 20 3d 20 44 65 66 61 75 6c 74 44 65  rmat = DefaultDe
3000: 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  bugFormat;..    
3010: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
3020: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72  static string tr
3030: 61 63 65 46 6f 72 6d 61 74 20 3d 20 44 65 66 61  aceFormat = Defa
3040: 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 3b 0d  ultTraceFormat;.
3050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
3060: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
3070: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
3080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
30c0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
30d0: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
30e0: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
30f0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
3100: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
3110: 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 69 74  ity DebugPriorit
3120: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
3130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3140: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
3150: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
3160: 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20   debugPriority; 
3170: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
3180: 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20       set { lock 
3190: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62  (syncRoot) { deb
31a0: 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c  ugPriority = val
31b0: 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ue; } }..       
31c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
31d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
31e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3220: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
3230: 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f  static TracePrio
3240: 72 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69  rity TracePriori
3250: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
3260: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3270: 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73     get { lock (s
3280: 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72  yncRoot) { retur
3290: 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  n tracePriority;
32a0: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
32b0: 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b        set { lock
32c0: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72   (syncRoot) { tr
32d0: 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61  acePriority = va
32e0: 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20  lue; } }..      
32f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3300: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
3310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3350: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
3360: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
3370: 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20  ebugFormat..    
3380: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3390: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
33a0: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
33b0: 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 46   { return debugF
33c0: 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20  ormat; } }..    
33d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
33e0: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
33f0: 29 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74 20  ) { debugFormat 
3400: 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20  = value; } }..  
3410: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
3420: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
3430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
3470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
3480: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
3490: 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a  ng TraceFormat..
34a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
34c0: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
34d0: 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 74 72  oot) { return tr
34e0: 61 63 65 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a  aceFormat; } }..
34f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3500: 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63  set { lock (sync
3510: 52 6f 6f 74 29 20 7b 20 74 72 61 63 65 46 6f 72  Root) { traceFor
3520: 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d  mat = value; } }
3530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
3540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
3550: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
3560: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
3570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
35b0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
35c0: 6e 20 49 6e 74 65 72 61 63 74 69 76 65 20 53 75  n Interactive Su
35d0: 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20  pport Methods.. 
35e0: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
35f0: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
3600: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
3610: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
3620: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3630: 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 53 68   DialogResult Sh
3640: 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20  owMessage(..    
3650: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
3660: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
3670: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
3680: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
3690: 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c  allback debugCal
36a0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
36b0: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
36c0: 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
36d0: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
36e0: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
36f0: 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20  ssembly,..      
3700: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
3710: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
3720: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
3730: 67 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20 20 20  g category,..   
3740: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
3750: 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 20 62  sageBoxButtons b
3760: 75 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20  uttons,..       
3770: 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
3780: 42 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a 20 20  BoxIcon icon..  
3790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
37a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c0: 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 72 65 73  DialogResult res
37d0: 75 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65 73 75  ult = DialogResu
37e0: 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20 20 20  lt.OK;....      
37f0: 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 41            DebugA
3800: 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69  ndTrace(tracePri
3810: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
3820: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
3830: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
3840: 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73 73 61 67  Callback, messag
3850: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  e, category);...
3860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3870: 20 69 66 20 28 53 79 73 74 65 6d 49 6e 66 6f 72   if (SystemInfor
3880: 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e 74 65 72  mation.UserInter
3890: 61 63 74 69 76 65 29 0d 0a 20 20 20 20 20 20 20  active)..       
38a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38c0: 73 74 72 69 6e 67 20 74 69 74 6c 65 20 3d 20 47  string title = G
38d0: 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28  etAssemblyTitle(
38e0: 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d 0a 20 20  assembly);....  
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3900: 20 20 69 66 20 28 74 69 74 6c 65 20 3d 3d 20 6e    if (title == n
3910: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 69                ti
3930: 74 6c 65 20 3d 20 41 70 70 6c 69 63 61 74 69 6f  tle = Applicatio
3940: 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65 3b 0d 0a  n.ProductName;..
3950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3960: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 4d        result = M
3970: 65 73 73 61 67 65 42 6f 78 2e 53 68 6f 77 28 6d  essageBox.Show(m
3980: 65 73 73 61 67 65 2c 20 74 69 74 6c 65 2c 20 62  essage, title, b
3990: 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29 3b 0d 0a  uttons, icon);..
39a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
39b0: 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54 72        DebugAndTr
39c0: 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74  ace(tracePriorit
39d0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
39e0: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
39f0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
3a00: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
3a10: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
3a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a30: 20 20 22 55 73 65 72 20 63 68 6f 69 63 65 20 6f    "User choice o
3a40: 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70  f {0}.", ForDisp
3a50: 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d 0a 20  lay(result)),.. 
3a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a70: 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29         category)
3a80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
3a90: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3aa0: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
3ab0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
3ad0: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
3ae0: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b00: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
3b10: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
3b20: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b40: 20 20 22 44 65 66 61 75 6c 74 20 63 68 6f 69 63    "Default choic
3b50: 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44  e of {0}.", ForD
3b60: 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c  isplay(result)),
3b70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3b80: 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29 3b        category);
3b90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3ba0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
3bb0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
3bc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
3bd0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
3be0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
3bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
3c40: 69 6f 6e 20 54 72 61 63 69 6e 67 20 53 75 70 70  ion Tracing Supp
3c50: 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ort Methods..   
3c60: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
3c70: 73 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 75  static void Setu
3c80: 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72 73 28  pDebugListeners(
3c90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3cb0: 20 20 69 66 20 28 64 65 62 75 67 4c 69 73 74 65    if (debugListe
3cc0: 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ners == null).. 
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ce0: 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72     debugListener
3cf0: 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54 72 61  s = new List<Tra
3d00: 63 65 4c 69 73 74 65 6e 65 72 3e 28 29 3b 0d 0a  ceListener>();..
3d10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3d20: 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73    debugListeners
3d30: 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65  .Add(new Console
3d40: 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29  TraceListener())
3d50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3d60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3db0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3dc0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3dd0: 20 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75 67 49   long NextDebugI
3de0: 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
3df0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3e00: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72      return Inter
3e10: 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74  locked.Increment
3e20: 28 72 65 66 20 6e 65 78 74 44 65 62 75 67 49 64  (ref nextDebugId
3e30: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3e40: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3e50: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e90: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3ea0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3eb0: 63 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61 63 65  c long NextTrace
3ec0: 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  Id()..          
3ed0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3ee0: 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65       return Inte
3ef0: 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e  rlocked.Incremen
3f00: 74 28 72 65 66 20 6e 65 78 74 54 72 61 63 65 49  t(ref nextTraceI
3f10: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
3f20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3f30: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f70: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3f80: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3f90: 69 63 20 73 74 72 69 6e 67 20 54 69 6d 65 53 74  ic string TimeSt
3fa0: 61 6d 70 28 44 61 74 65 54 69 6d 65 20 64 61 74  amp(DateTime dat
3fb0: 65 54 69 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  eTime)..        
3fc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3fd0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 61         return da
3fe0: 74 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e 67 28  teTime.ToString(
3ff0: 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f  Iso8601DateTimeO
4000: 75 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d 0a 20  utputFormat);.. 
4010: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
4020: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
4030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4070: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
4080: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
4090: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
40a0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
40b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
40c0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
40d0: 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20 20 20  MethodName(..   
40e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61               Sta
40f0: 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72 61  ckTrace stackTra
4100: 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce,..           
4110: 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 0d 0a       int level..
4120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4130: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
4140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4150: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
4160: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4190: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
41a0: 66 20 61 20 76 61 6c 69 64 20 73 74 61 63 6b 20  f a valid stack 
41b0: 74 72 61 63 65 20 77 61 73 20 6e 6f 74 20 73 75  trace was not su
41c0: 70 70 6c 69 65 64 20 62 79 20 74 68 65 0d 0a 20  pplied by the.. 
41d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41e0: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c     //       call
41f0: 65 72 2c 20 63 72 65 61 74 65 20 6f 6e 65 20 6e  er, create one n
4200: 6f 77 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ow based on the 
4210: 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 20  current..       
4220: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4230: 20 20 20 20 20 20 65 78 65 63 75 74 69 6f 6e 20        execution 
4240: 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20  stack...        
4250: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4270: 20 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61      if (stackTra
4280: 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ce == null)..   
4290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
42b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42d0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
42e0: 20 47 72 61 62 20 74 68 65 20 63 75 72 72 65 6e   Grab the curren
42f0: 74 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61 63  t execution stac
4300: 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
4310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4330: 20 20 20 20 20 20 20 20 73 74 61 63 6b 54 72 61          stackTra
4340: 63 65 20 3d 20 6e 65 77 20 53 74 61 63 6b 54 72  ce = new StackTr
4350: 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ace();....      
4360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4370: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
4380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4390: 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b   NOTE: Always sk
43a0: 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61  ip this call fra
43b0: 6d 65 20 77 68 65 6e 20 77 65 20 63 61 70 74 75  me when we captu
43c0: 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
43d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
43e0: 20 20 20 20 20 74 68 65 20 73 74 61 63 6b 20 74       the stack t
43f0: 72 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  race...         
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4410: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4420: 20 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c             level
4430: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
4440: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4460: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
4470: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
4480: 45 3a 20 47 65 74 20 74 68 65 20 73 70 65 63 69  E: Get the speci
4490: 66 69 65 64 20 73 74 61 63 6b 20 66 72 61 6d 65  fied stack frame
44a0: 20 28 61 6c 77 61 79 73 20 61 64 64 20 6f 6e 65   (always add one
44b0: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
44c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
44d0: 20 20 73 6b 69 70 20 74 68 69 73 20 6d 65 74 68    skip this meth
44e0: 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  od)...          
44f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4510: 20 20 53 74 61 63 6b 46 72 61 6d 65 20 73 74 61    StackFrame sta
4520: 63 6b 46 72 61 6d 65 20 3d 20 73 74 61 63 6b 54  ckFrame = stackT
4530: 72 61 63 65 2e 47 65 74 46 72 61 6d 65 28 6c 65  race.GetFrame(le
4540: 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  vel);....       
4550: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
4560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4570: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65       // NOTE: Ge
4580: 74 20 74 68 65 20 6d 65 74 68 6f 64 20 66 6f 72  t the method for
4590: 20 74 68 65 20 73 74 61 63 6b 20 66 72 61 6d 65   the stack frame
45a0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
45b0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
45c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
45d0: 65 74 68 6f 64 42 61 73 65 20 6d 65 74 68 6f 64  ethodBase method
45e0: 42 61 73 65 20 3d 20 73 74 61 63 6b 46 72 61 6d  Base = stackFram
45f0: 65 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b 0d 0a  e.GetMethod();..
4600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4610: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4630: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 74   NOTE: Get the t
4640: 79 70 65 20 66 6f 72 20 74 68 65 20 6d 65 74 68  ype for the meth
4650: 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
4660: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4680: 20 54 79 70 65 20 74 79 70 65 20 3d 20 6d 65 74   Type type = met
4690: 68 6f 64 42 61 73 65 2e 44 65 63 6c 61 72 69 6e  hodBase.Declarin
46a0: 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  gType;....      
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
46c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
46d0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
46e0: 65 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  et the name of t
46f0: 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  he method...    
4700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4710: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4720: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
4730: 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65  ame = methodBase
4740: 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Name;....      
4750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4770: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52        // NOTE: R
4780: 65 74 75 72 6e 20 74 68 65 20 70 72 6f 70 65 72  eturn the proper
4790: 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 72 65 73  ly formatted res
47a0: 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ult...          
47b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47d0: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
47e0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4800: 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79   "{0}{1}{2}", ty
4810: 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e 44 65  pe.Name, Type.De
4820: 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29 3b 0d  limiter, name);.
4830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4840: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
4850: 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
4860: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4880: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
4890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
48a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
48b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
48c0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
48d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
48e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
48f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4930: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
4940: 69 63 20 76 6f 69 64 20 44 65 62 75 67 43 6f 72  ic void DebugCor
4950: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
4960: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
4970: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
4980: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
4990: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
49a0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
49b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
49c0: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
49d0: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
49e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a00: 69 66 20 28 64 65 62 75 67 4c 69 73 74 65 6e 65  if (debugListene
4a10: 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
4a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
4a50: 61 63 68 20 28 54 72 61 63 65 4c 69 73 74 65 6e  ach (TraceListen
4a60: 65 72 20 6c 69 73 74 65 6e 65 72 20 69 6e 20 64  er listener in d
4a70: 65 62 75 67 4c 69 73 74 65 6e 65 72 73 29 0d 0a  ebugListeners)..
4a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ab0: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 2e         listener.
4ac0: 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 61 67  WriteLine(messag
4ad0: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  e, category);.. 
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4af0: 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 65             liste
4b00: 6e 65 72 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20  ner.Flush();..  
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
4b60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4bc0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
4bd0: 20 76 6f 69 64 20 54 72 61 63 65 43 6f 72 65 28   void TraceCore(
4be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4bf0: 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
4c00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4c10: 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
4c20: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
4c30: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
4c40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4c50: 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
4c60: 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Root)..         
4c70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ca0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
4cb0: 72 69 74 65 20 74 68 65 20 6d 65 73 73 61 67 65  rite the message
4cc0: 20 74 6f 20 61 6c 6c 20 74 68 65 20 61 63 74 69   to all the acti
4cd0: 76 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ve trace..      
4ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4cf0: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 73         listeners
4d00: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4d10: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
4d30: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 6d  race.WriteLine(m
4d40: 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79  essage, category
4d50: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4d60: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 46 6c          Trace.Fl
4d70: 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ush();..        
4d80: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
4d90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4da0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
4db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
4df0: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
4e00: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
4e10: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
4e20: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
4e30: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
4e40: 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64   string DebugAnd
4e50: 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
4e60: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
4e70: 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
4e80: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
4e90: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
4ea0: 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63  ack debugCallbac
4eb0: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
4ec0: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
4ed0: 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  k traceCallback,
4ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ef0: 20 20 45 78 63 65 70 74 69 6f 6e 20 65 78 63 65    Exception exce
4f00: 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
4f10: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
4f20: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
4f30: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
4f40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4f50: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
4f60: 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  xception != null
4f70: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4f80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 65         return De
4f90: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
4fa0: 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75 67  ePriority, debug
4fb0: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fd0: 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
4fe0: 2c 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63 65  , new StackTrace
4ff0: 28 65 78 63 65 70 74 69 6f 6e 2c 20 74 72 75 65  (exception, true
5000: 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  ), 0,..         
5010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
5020: 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72 69 6e  xception.ToStrin
5030: 67 28 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  g(), category);.
5040: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5050: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
5060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
5070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
5080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50c0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
50d0: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
50e0: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
50f0: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
5100: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
5110: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
5120: 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
5130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
5140: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
5150: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
5160: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
5170: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
5180: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
5190: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
51a0: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
51b0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
51c0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
51d0: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
51e0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
51f0: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
5200: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
5210: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5220: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5230: 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63 65  rn DebugAndTrace
5240: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5250: 20 20 20 20 20 20 20 74 72 61 63 65 50 72 69 6f         tracePrio
5260: 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c 6c 62  rity, debugCallb
5270: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
5280: 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20  ck, null, 1,..  
5290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52a0: 20 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67    message, categ
52b0: 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
52c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
52d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
52e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5310: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
5320: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
5330: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
5340: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
5350: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
5360: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
5370: 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61  ring DebugAndTra
5380: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
5390: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
53a0: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
53b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
53c0: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
53d0: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
53e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
53f0: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
5400: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
5410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
5420: 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54  tackTrace stackT
5430: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
5440: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c         int level
5450: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5460: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
5470: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
5480: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
5490: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
54a0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
54b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
54c0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
54d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
54e0: 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20  TE: Always skip 
54f0: 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20  this call frame 
5500: 69 66 20 74 68 65 20 73 74 61 63 6b 20 74 72 61  if the stack tra
5510: 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20  ce is..         
5520: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
5530: 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61 70 74  going to be capt
5540: 75 72 65 64 20 62 79 20 47 65 74 4d 65 74 68 6f  ured by GetMetho
5550: 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20  dName...        
5560: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5570: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5580: 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75  stackTrace == nu
5590: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
55a0: 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b           level++
55b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
55c0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
55d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
55e0: 3a 20 46 6f 72 6d 61 74 20 74 68 65 20 6d 65 73  : Format the mes
55f0: 73 61 67 65 20 66 6f 72 20 64 69 73 70 6c 61 79  sage for display
5600: 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20 20 20   (once)...      
5610: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
5630: 72 69 6e 67 20 66 6f 72 6d 61 74 74 65 64 20 3d  ring formatted =
5640: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
5650: 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}: {1}",..    
5660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5670: 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 73 74  GetMethodName(st
5680: 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65 6c 29  ackTrace, level)
5690: 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  , message);.... 
56a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
56b0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
56c0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
56d0: 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63  he debug callbac
56e0: 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f 72 20  k is invalid or 
56f0: 74 68 65 20 74 72 61 63 65 20 70 72 69 6f 72 69  the trace priori
5700: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
5710: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 66 20      //       of 
5720: 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 73 20  this message is 
5730: 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74 20 77  less than what w
5740: 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61 6e 74  e currently want
5750: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
5760: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 65       //       de
5770: 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20  bug, skip it... 
5780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5790: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
57a0: 20 20 20 69 66 20 28 28 64 65 62 75 67 43 61 6c     if ((debugCal
57b0: 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26  lback != null) &
57c0: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
57d0: 20 20 20 20 20 20 20 28 74 72 61 63 65 50 72 69         (tracePri
57e0: 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67 50 72  ority >= DebugPr
57f0: 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20 20 20  iority))..      
5800: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5820: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5830: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
5840: 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64 65 62  : Invoke the deb
5850: 75 67 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ug callback with
5860: 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a   the formatted..
5870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5880: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 65 73      //       mes
5890: 73 61 67 65 20 61 6e 64 20 74 68 65 20 63 61 74  sage and the cat
58a0: 65 67 6f 72 79 20 73 70 65 63 69 66 69 65 64 20  egory specified 
58b0: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
58c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
58d0: 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20       caller...  
58e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58f0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
5900: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
5910: 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74 74 65  allback(formatte
5920: 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  d, category);.. 
5930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5940: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5950: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5960: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
5970: 20 49 66 20 74 68 65 20 74 72 61 63 65 20 63 61   If the trace ca
5980: 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c 69  llback is invali
5990: 64 20 6f 72 20 74 68 65 20 74 72 61 63 65 20 70  d or the trace p
59a0: 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
59b0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
59c0: 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67    of this messag
59d0: 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77  e is less than w
59e0: 68 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c 79  hat we currently
59f0: 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20   want to..      
5a00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
5a10: 20 20 20 74 72 61 63 65 2c 20 73 6b 69 70 20 69     trace, skip i
5a20: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
5a30: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5a40: 20 20 20 20 20 20 20 20 69 66 20 28 28 74 72 61          if ((tra
5a50: 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75  ceCallback != nu
5a60: 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ll) &&..        
5a70: 20 20 20 20 20 20 20 20 20 20 20 20 28 74 72 61              (tra
5a80: 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 54 72  cePriority >= Tr
5a90: 61 63 65 50 72 69 6f 72 69 74 79 29 29 0d 0a 20  acePriority)).. 
5aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
5ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5ac0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5ae0: 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68   NOTE: Invoke th
5af0: 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b  e trace callback
5b00: 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74   with the format
5b10: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
5b20: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
5b30: 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68    message and th
5b40: 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63 69  e category speci
5b50: 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  fied by the..   
5b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b70: 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72   //       caller
5b80: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5b90: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
5bb0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72  raceCallback(for
5bc0: 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79  matted, category
5bd0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5be0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5bf0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5c00: 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20 20 20  message;..      
5c10: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5c20: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
5c30: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5c40: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
5c50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
5c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ca0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
5cb0: 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72  gion MockRegistr
5cc0: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  y Class..       
5cd0: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
5ce0: 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74  class MockRegist
5cf0: 72 79 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65  ry : IDisposable
5d00: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5d10: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
5d20: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
5d30: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
5d40: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
5d50: 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20  istry()..       
5d60: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5d70: 20 20 20 20 20 20 20 20 77 68 61 74 49 66 20 3d          whatIf =
5d80: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
5d90: 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79          readOnly
5da0: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5db0: 20 20 20 20 20 20 20 20 20 20 73 61 66 65 20 3d            safe =
5dc0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
5dd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5de0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e20: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5e30: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
5e40: 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  ockRegistry(..  
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
5e60: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
5e70: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
5e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
5e90: 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20  this()..        
5ea0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5eb0: 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74         this.what
5ec0: 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20  If = whatIf;..  
5ed0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5ee0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5f40: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5f50: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5f60: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
5f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5f80: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d    bool readOnly.
5f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5fa0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
5fb0: 20 20 20 20 3a 20 74 68 69 73 28 77 68 61 74 49      : this(whatI
5fc0: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
5fd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5fe0: 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79     this.readOnly
5ff0: 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20   = readOnly;..  
6000: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6010: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
6020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6070: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
6080: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
6090: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
60a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
60b0: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c    bool readOnly,
60c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
60d0: 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20    bool safe..   
60e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
60f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6100: 3a 20 74 68 69 73 28 77 68 61 74 49 66 2c 20 72  : this(whatIf, r
6110: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
6120: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6130: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 61           this.sa
6140: 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20  fe = safe;..    
6150: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6160: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
6170: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
6180: 20 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 2f 2f 2f 2f 2f  ////////////////
61b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
61d0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
61e0: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
61f0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6200: 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d  te bool whatIf;.
6210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
6220: 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d  lic bool WhatIf.
6230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6250: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
6260: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77 68  sed(); return wh
6270: 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20  atIf; }..       
6280: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43           set { C
6290: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
62a0: 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20  whatIf = value; 
62b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
62c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
62d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6310: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6320: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
6330: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
6340: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
6350: 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol ReadOnly..   
6360: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6370: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
6380: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
6390: 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e  ); return readOn
63a0: 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ly; }..         
63b0: 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65         set { Che
63c0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
63d0: 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65 3b 20  adOnly = value; 
63e0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
63f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6450: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
6460: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
6470: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53     public bool S
6480: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
6490: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
64a0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
64b0: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
64c0: 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20  n safe; }..     
64d0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
64e0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
64f0: 3b 20 73 61 66 65 20 3d 20 76 61 6c 75 65 3b 20  ; safe = value; 
6500: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
6510: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6560: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6570: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
6580: 65 67 69 73 74 72 79 4b 65 79 20 63 6c 61 73 73  egistryKey class
6590: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
65a0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
65b0: 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61 73  RegistryKey Clas
65c0: 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20 20 20  sesRoot..       
65d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
65e0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
65f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6610: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6620: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
6630: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6640: 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d 20 6e  classesRoot == n
6650: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
6660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c                cl
6670: 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e 65 77 20  assesRoot = new 
6680: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
66b0: 67 69 73 74 72 79 2e 43 6c 61 73 73 65 73 52 6f  gistry.ClassesRo
66c0: 6f 74 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ot, whatIf, read
66d0: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66f0: 20 20 20 20 72 65 74 75 72 6e 20 63 6c 61 73 73      return class
6700: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
6710: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6720: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6730: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6780: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
6790: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
67a0: 4b 65 79 20 63 75 72 72 65 6e 74 43 6f 6e 66 69  Key currentConfi
67b0: 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
67c0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
67d0: 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74 43 6f  tryKey CurrentCo
67e0: 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20  nfig..          
67f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6800: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
6810: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6830: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
6840: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6850: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72           if (cur
6860: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 3d 20 6e 75  rentConfig == nu
6870: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
6880: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72               cur
6890: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20 6e 65 77  rentConfig = new
68a0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
68b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
68c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
68d0: 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 43  egistry.CurrentC
68e0: 6f 6e 66 69 67 2c 20 77 68 61 74 49 66 2c 20 72  onfig, whatIf, r
68f0: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6900: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6910: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 75         return cu
6920: 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20  rrentConfig;..  
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
69b0: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
69c0: 69 73 74 72 79 4b 65 79 20 63 75 72 72 65 6e 74  istryKey current
69d0: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
69e0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
69f0: 67 69 73 74 72 79 4b 65 79 20 43 75 72 72 65 6e  gistryKey Curren
6a00: 74 55 73 65 72 0d 0a 20 20 20 20 20 20 20 20 20  tUser..         
6a10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6a20: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
6a30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a50: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
6a60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6a70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75            if (cu
6a80: 72 72 65 6e 74 55 73 65 72 20 3d 3d 20 6e 75 6c  rrentUser == nul
6a90: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
6aa0: 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72 72              curr
6ab0: 65 6e 74 55 73 65 72 20 3d 20 6e 65 77 20 4d 6f  entUser = new Mo
6ac0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
6ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ae0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
6af0: 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72  stry.CurrentUser
6b00: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
6b10: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20  ly, safe);....  
6b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b30: 20 20 72 65 74 75 72 6e 20 63 75 72 72 65 6e 74    return current
6b40: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
6b50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6b60: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6b70: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6b80: 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
6bc0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
6bd0: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
6be0: 79 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20  y dynData;..    
6bf0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
6c00: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 44  ockRegistryKey D
6c10: 79 6e 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ynData..        
6c20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6c30: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6c40: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c60: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
6c70: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
6c80: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
6c90: 79 6e 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d  ynData == null).
6ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6cb0: 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61           dynData
6cc0: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6cd0: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6cf0: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 44 79       Registry.Dy
6d00: 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72  nData, whatIf, r
6d10: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6d20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6d30: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 79         return dy
6d40: 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  nData;..        
6d50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6d60: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6d70: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6dc0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6dd0: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
6de0: 65 79 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b  ey localMachine;
6df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6e00: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
6e10: 79 4b 65 79 20 4c 6f 63 61 6c 4d 61 63 68 69 6e  yKey LocalMachin
6e20: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
6e30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6e40: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
6e50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
6e70: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
6e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6e90: 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d        if (localM
6ea0: 61 63 68 69 6e 65 20 3d 3d 20 6e 75 6c 6c 29 0d  achine == null).
6eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ec0: 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61           localMa
6ed0: 63 68 69 6e 65 20 3d 20 6e 65 77 20 4d 6f 63 6b  chine = new Mock
6ee0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
6ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f00: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
6f10: 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c  ry.LocalMachine,
6f20: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
6f30: 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20  y, safe);....   
6f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f50: 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c 4d 61 63   return localMac
6f60: 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  hine;..         
6f70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6f80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
6f90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6fe0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
6ff0: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
7000: 79 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74  y performanceDat
7010: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
7020: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
7030: 74 72 79 4b 65 79 20 50 65 72 66 6f 72 6d 61 6e  tryKey Performan
7040: 63 65 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ceData..        
7050: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7060: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
7070: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7090: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
70a0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
70b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
70c0: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d  erformanceData =
70d0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
70e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70f0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61   performanceData
7100: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
7110: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
7120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7130: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 50 65       Registry.Pe
7140: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 2c 20 77  rformanceData, w
7150: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
7160: 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   safe);....     
7170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
7180: 65 74 75 72 6e 20 70 65 72 66 6f 72 6d 61 6e 63  eturn performanc
7190: 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  eData;..        
71a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
71b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
71c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
71d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7210: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
7220: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
7230: 65 79 20 75 73 65 72 73 3b 0d 0a 20 20 20 20 20  ey users;..     
7240: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
7250: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 55 73  ckRegistryKey Us
7260: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
7270: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7280: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
7290: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
72a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72b0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
72c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
72d0: 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72          if (user
72e0: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
72f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7300: 20 20 20 20 75 73 65 72 73 20 3d 20 6e 65 77 20      users = new 
7310: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
7320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
7340: 67 69 73 74 72 79 2e 55 73 65 72 73 2c 20 77 68  gistry.Users, wh
7350: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
7360: 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  safe);....      
7370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7380: 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20 20 20  turn users;..   
7390: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
73a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
73b0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
73c0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
73d0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
73e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7410: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7420: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
7430: 50 75 62 6c 69 63 20 22 52 65 67 69 73 74 72 79  Public "Registry
7440: 22 20 4d 65 74 68 6f 64 73 0d 0a 23 69 66 20 66  " Methods..#if f
7450: 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alse..          
7460: 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20    public object 
7470: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
7480: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
7490: 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  g keyName,..    
74a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
74b0: 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20  ng valueName,.. 
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
74d0: 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c  bject defaultVal
74e0: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..            
74f0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
7500: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7510: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
7520: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
7530: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7540: 20 52 65 67 69 73 74 72 79 2e 47 65 74 56 61 6c   Registry.GetVal
7550: 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75  ue(keyName, valu
7560: 65 4e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61  eName, defaultVa
7570: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
7580: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7590: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
75a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
75e0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
75f0: 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  id SetValue(..  
7600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
7610: 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20  ring keyName,.. 
7620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
7630: 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c  tring valueName,
7640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7650: 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a    object value..
7660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7670: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
7680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7690: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
76a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
76b0: 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c      CheckReadOnl
76c0: 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
76d0: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
76e0: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
76f0: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
7700: 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65 79 4e  ry.SetValue(keyN
7710: 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20  ame, valueName, 
7720: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
7730: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7740: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
7750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
7790: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
77a0: 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a  void SetValue(..
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77c0: 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d  string keyName,.
77d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
77e0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d   string valueNam
77f0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
7800: 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
7810: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
7820: 20 20 20 52 65 67 69 73 74 72 79 56 61 6c 75 65     RegistryValue
7830: 4b 69 6e 64 20 76 61 6c 75 65 4b 69 6e 64 0d 0a  Kind valueKind..
7840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7850: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
7860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7870: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
7880: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7890: 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c      CheckReadOnl
78a0: 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
78b0: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
78c0: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
78d0: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
78e0: 72 79 2e 53 65 74 56 61 6c 75 65 28 6b 65 79 4e  ry.SetValue(keyN
78f0: 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20  ame, valueName, 
7900: 76 61 6c 75 65 2c 20 76 61 6c 75 65 4b 69 6e 64  value, valueKind
7910: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7920: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
7930: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
7940: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
7950: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7990: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
79a0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
79b0: 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ate Methods..   
79c0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
79d0: 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64 4f   void CheckReadO
79e0: 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  nly()..         
79f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7a00: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
7a10: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
7a20: 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79  E: In "read-only
7a30: 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c  " mode, we disal
7a40: 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61 63  low all write ac
7a50: 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  cess...         
7a60: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
7a70: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
7a80: 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20  readOnly)..     
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
7aa0: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
7ab0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
7ac0: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
7ad0: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
7ae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
7b00: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
7b10: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7b60: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
7b70: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
7b80: 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
7b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
7ba0: 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
7bb0: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
7bc0: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
7bd0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a  eckDisposed() /*
7be0: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
7bf0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7c00: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64            if (!d
7c10: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7c30: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
7c40: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
7c50: 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65  ew ObjectDispose
7c60: 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  dException(..   
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c80: 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69   typeof(MockRegi
7c90: 73 74 72 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  stry).Name);..  
7ca0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7cb0: 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
7d10: 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
7d20: 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
7d30: 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20  id Dispose(..   
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
7d50: 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20  l disposing..   
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7d90: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7dc0: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
7dd0: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
7de0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e00: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
7e50: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
7e60: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e80: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ea0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ec0: 20 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f 74   if (classesRoot
7ed0: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
7ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ef0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f10: 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 2e 43 6c    classesRoot.Cl
7f20: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
7f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f40: 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20      classesRoot 
7f50: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f70: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7f90: 20 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20   (currentConfig 
7fa0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 2e 43   currentConfig.C
7ff0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
8000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8010: 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66       currentConf
8020: 69 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ig = null;..    
8030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8040: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8060: 20 69 66 20 28 63 75 72 72 65 6e 74 55 73 65 72   if (currentUser
8070: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
8080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8090: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
80a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80b0: 20 20 63 75 72 72 65 6e 74 55 73 65 72 2e 43 6c    currentUser.Cl
80c0: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80e0: 20 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 20      currentUser 
80f0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
8100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8110: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8130: 20 28 64 79 6e 44 61 74 61 20 21 3d 20 6e 75 6c   (dynData != nul
8140: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8150: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8170: 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61             dynDa
8180: 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  ta.Close();..   
8190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81a0: 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61           dynData
81b0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
81c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
81e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
81f0: 66 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20  f (localMachine 
8200: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8220: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8240: 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 2e 43 6c   localMachine.Cl
8250: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
8260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8270: 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65      localMachine
8280: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
8290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
82b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
82c0: 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61  f (performanceDa
82d0: 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ta != null)..   
82e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8310: 20 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44      performanceD
8320: 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ata.Close();..  
8330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8340: 20 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72            perfor
8350: 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e 75 6c 6c  manceData = null
8360: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8370: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8390: 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72          if (user
83a0: 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
83b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
83d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83e0: 20 20 20 75 73 65 72 73 2e 43 6c 6f 73 65 28 29     users.Close()
83f0: 3b 0d 0a 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 20 20 75                 u
8410: 73 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  sers = null;..  
8420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8430: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8440: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
8450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8460: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
8490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84a0: 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d    // release unm
84b0: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
84c0: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
84d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
84e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8500: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8510: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
8520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8530: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
8540: 73 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20  s object is now 
8550: 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20  disposed...     
8560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8570: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
8580: 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
8590: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
85a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
85b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
85c0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
85d0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
85e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
85f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8620: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8630: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73      #region IDis
8640: 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d  posable Members.
8650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
8660: 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65  lic void Dispose
8670: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
8680: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8690: 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29     Dispose(true)
86a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
86b0: 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69     GC.SuppressFi
86c0: 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20  nalize(this);.. 
86d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
86e0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
86f0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
8700: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8740: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8750: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44         #region D
8760: 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20  estructor..     
8770: 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69         ~MockRegi
8780: 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20  stry()..        
8790: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
87a0: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66         Dispose(f
87b0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
87c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
87d0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
87e0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
87f0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
8800: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
8850: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
8860: 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  on MockRegistryK
8870: 65 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ey Class..      
8880: 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65    internal seale
8890: 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69  d class MockRegi
88a0: 73 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70 6f  stryKey : IDispo
88b0: 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b  sable..        {
88c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
88d0: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
88e0: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
88f0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
8900: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
8910: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
8920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8930: 20 20 77 68 61 74 49 66 20 3d 20 74 72 75 65 3b    whatIf = true;
8940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8950: 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75    readOnly = tru
8960: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
8970: 20 20 20 20 73 61 66 65 20 3d 20 74 72 75 65 3b      safe = true;
8980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
89a0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
89b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
89c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8a00: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
8a10: 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
8a20: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
8a30: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
8a40: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8a50: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8a60: 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20  stryKey key..   
8a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a90: 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20  : this()..      
8aa0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8ab0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b 65           this.ke
8ac0: 79 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20  y = key;..      
8ad0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8ae0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8b30: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
8b40: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
8b50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
8b60: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
8b70: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
8b80: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
8b90: 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  eyName..        
8ba0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
8bb0: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
8bc0: 73 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20 20  s(key)..        
8bd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8be0: 20 20 20 20 20 20 20 74 68 69 73 2e 73 75 62 4b         this.subK
8bf0: 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e  eyName = subKeyN
8c00: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
8c10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
8c20: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
8c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c60: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
8c70: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
8c80: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
8c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
8ca0: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
8cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8cc0: 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
8cd0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
8ce0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
8cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d00: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8d10: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c       : this(key,
8d20: 20 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20   subKeyName)..  
8d30: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
8d50: 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49  s.whatIf = whatI
8d60: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
8d70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8d80: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dc0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8dd0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
8de0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
8df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
8e00: 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8e20: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
8e30: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8e40: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
8e50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8e60: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a   bool readOnly..
8e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8e90: 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73     : this(key, s
8ea0: 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
8eb0: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
8ec0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8ed0: 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79     this.readOnly
8ee0: 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20   = readOnly;..  
8ef0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8f00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
8f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
8f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
8f60: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
8f70: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
8f80: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
8f90: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
8fa0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
8fb0: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
8fd0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
8fe0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
8ff0: 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20  readOnly,..     
9000: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
9010: 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20  safe..          
9020: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
9030: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
9040: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
9050: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
9060: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
9070: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9080: 20 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20 73     this.safe = s
9090: 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  afe;..          
90a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
90b0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
90c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90f0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9100: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
9110: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
9130: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
9140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9150: 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20   bool whatIf..  
9160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9180: 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c   : this(key, nul
9190: 6c 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20  l, whatIf)..    
91a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
91b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
91c0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
91d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
91e0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
91f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9230: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9240: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
9250: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
9260: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
9270: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
9280: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
9290: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
92a0: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
92b0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
92c0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
92d0: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
92e0: 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20  , null, whatIf, 
92f0: 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20  readOnly)..     
9300: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9310: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
9320: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
9330: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9340: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9390: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
93a0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
93b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
93c0: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
93d0: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
93e0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
93f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9400: 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79     bool readOnly
9410: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9420: 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20     bool safe..  
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9450: 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c   : this(key, nul
9460: 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  l, whatIf, readO
9470: 6e 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20 20  nly, safe)..    
9480: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9490: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
94a0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
94b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
94c0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
94d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
94e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9500: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
9530: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
9540: 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
9550: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
9560: 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20  id Close()..    
9570: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9580: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
95a0: 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f  / NOTE: No dispo
95b0: 73 65 64 20 63 68 65 63 6b 20 68 65 72 65 20 62  sed check here b
95c0: 65 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20 74  ecause calling t
95d0: 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20  his method..    
95e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
95f0: 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6a       should be j
9600: 75 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67  ust like calling
9610: 20 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20   Dispose...     
9620: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
9640: 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20  ispose(true);.. 
9650: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9660: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
9670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
96b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
96c0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
96d0: 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b  ryKey CreateSubK
96e0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
96f0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
9700: 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  eyName..        
9710: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
9720: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9730: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9740: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
9750: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
9760: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9780: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
9790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
97a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
97b0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
97c0: 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49 66        if (whatIf
97d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
97e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
97f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
9800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9810: 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d    // HACK: Attem
9820: 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73  pt to open the s
9830: 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79  pecified sub-key
9840: 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20  .  If this..    
9850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9860: 2f 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c 20  //       fails, 
9870: 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72  we will simply r
9880: 65 74 75 72 6e 20 74 68 65 20 77 72 61 70 70 65  eturn the wrappe
9890: 64 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20  d root key..    
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98b0: 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20  //       itself 
98c0: 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20  since no writes 
98d0: 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20 22  are allowed in "
98e0: 77 68 61 74 2d 69 66 22 0d 0a 20 20 20 20 20 20  what-if"..      
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
9900: 20 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79 68         mode anyh
9910: 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow...           
9920: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
9930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9940: 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62   RegistryKey sub
9950: 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75  Key = key.OpenSu
9960: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  bKey(subKeyName)
9970: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9980: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9990: 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29  (subKey != null)
99a0: 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
99b0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
99c0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
99d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
99e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99f0: 20 20 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66    subKey, whatIf
9a00: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
9a10: 29 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) :..           
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
9a30: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
9a40: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a60: 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61     key, subKeyNa
9a70: 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  me, whatIf, read
9a80: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20  Only, safe);..  
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
9aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ab0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
9ac0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9ae0: 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67  turn new MockReg
9af0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
9b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b10: 20 20 20 6b 65 79 2e 43 72 65 61 74 65 53 75 62     key.CreateSub
9b20: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c  Key(subKeyName),
9b30: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
9b40: 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20  y, safe);..     
9b50: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9b60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
9b70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
9b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
9bd0: 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65  blic void Delete
9be0: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
9bf0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
9c00: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
9c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
9c20: 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
9c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9c40: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
9c50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9c60: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
9c70: 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d();..          
9c80: 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f        CheckReadO
9c90: 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  nly();....      
9ca0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
9cb0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cd0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
9ce0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
9cf0: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
9d10: 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73 75  .DeleteSubKey(su
9d20: 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f  bKeyName, throwO
9d30: 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20  nMissing);..    
9d40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9d50: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9da0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9db0: 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75  ic void DeleteSu
9dc0: 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20  bKeyTree(..     
9dd0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
9de0: 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20  g subKeyName..  
9df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e20: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
9e30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9e40: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28    CheckReadOnly(
9e50: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9e60: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
9e70: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9e80: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9e90: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
9ea0: 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
9eb0: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
9ec0: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c           key.Del
9ed0: 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 73 75  eteSubKeyTree(su
9ee0: 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  bKeyName);..    
9ef0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9f00: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9f60: 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56 61  ic void DeleteVa
9f70: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
9f80: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
9f90: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
9fa0: 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
9fb0: 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20  Missing..       
9fc0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
9fd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9fe0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
9ff0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
a010: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
a020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a030: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
a040: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a050: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
a060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a070: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a090: 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61      key.DeleteVa
a0a0: 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f  lue(name, throwO
a0b0: 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20  nMissing);..    
a0c0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a0d0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0f0: 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
a120: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a130: 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74 53  ic string[] GetS
a140: 75 62 4b 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20  ubKeyNames()..  
a150: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a160: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
a170: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
a180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a190: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
a1a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a1b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
a1c0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
a1d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65         return ke
a1e0: 79 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73  y.GetSubKeyNames
a1f0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
a200: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
a210: 20 20 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 2f  ////////////////
a240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a250: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a260: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65       public obje
a270: 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  ct GetValue(..  
a280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
a290: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
a2a0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
a2b0: 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 0d  ct defaultValue.
a2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a2d0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
a2e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a2f0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
a300: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
a310: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
a320: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a330: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a340: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
a350: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a360: 75 72 6e 20 6b 65 79 2e 47 65 74 56 61 6c 75 65  urn key.GetValue
a370: 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61  (name, defaultVa
a380: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
a390: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a3a0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a3f0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
a400: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70  ckRegistryKey Op
a410: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
a420: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
a430: 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20  g subKeyName..  
a440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
a450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
a460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a470: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
a480: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a490: 20 20 20 20 72 65 74 75 72 6e 20 4f 70 65 6e 53      return OpenS
a4a0: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
a4b0: 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  , false);..     
a4c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a4d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
a520: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
a530: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
a540: 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  y OpenSubKey(.. 
a550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
a560: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
a570: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a580: 20 20 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65     bool writable
a590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a5a0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
a5b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a5c0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
a5d0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
a5e0: 20 20 20 20 20 20 20 20 69 66 20 28 77 72 69 74          if (writ
a5f0: 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20  able)..         
a600: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
a610: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
a620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a630: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
a640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a650: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
a660: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a670: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
a680: 20 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70   subKey = key.Op
a690: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
a6b0: 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
a6c0: 66 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74  f ? false : writ
a6d0: 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  able);....      
a6e0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a6f0: 20 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c   (subKey != null
a700: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
a710: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
a720: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 73 75 62  kRegistryKey(sub
a730: 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72 65 61  Key, whatIf, rea
a740: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e  dOnly, safe) : n
a750: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
a760: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a770: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a790: 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a7c0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
a7d0: 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  d SetValue(..   
a7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
a7f0: 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
a800: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
a810: 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  t value..       
a820: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
a830: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a840: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
a850: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
a860: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
a870: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
a880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a890: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
a8a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a8b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
a8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a8d0: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8f0: 20 20 20 20 6b 65 79 2e 53 65 74 56 61 6c 75 65      key.SetValue
a900: 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a  (name, value);..
a910: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
a920: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
a930: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
a940: 20 20 20 20 20 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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a990: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
a9a0: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
a9b0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
a9c0: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4e 61 6d  ublic string Nam
a9d0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
a9e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a9f0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
aa00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
aa20: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
aa30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aa40: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
aa50: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
aa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa70: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
aa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa90: 20 20 20 20 72 65 74 75 72 6e 20 21 53 74 72 69      return !Stri
aaa0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
aab0: 28 73 75 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a  (subKeyName) ?..
aac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aad0: 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
aae0: 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22  ormat("{0}\\{1}"
aaf0: 2c 20 6b 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b  , key.Name, subK
ab00: 65 79 4e 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20  eyName) :..     
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab20: 20 20 20 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20     key.Name;..  
ab30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
ab40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
ab50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
ab60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aba0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
abb0: 20 70 72 69 76 61 74 65 20 52 65 67 69 73 74 72   private Registr
abc0: 79 4b 65 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20  yKey key;..     
abd0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 52 65         public Re
abe0: 67 69 73 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20  gistryKey Key.. 
abf0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ac00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
ac10: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
ac20: 64 28 29 3b 20 43 68 65 63 6b 53 61 66 65 28 29  d(); CheckSafe()
ac30: 3b 20 72 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d  ; return key; }.
ac40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
ac50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
ac60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aca0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
acb0: 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
acc0: 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20  subKeyName;..   
acd0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
ace0: 73 74 72 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d  string SubKeyNam
acf0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
ad00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ad10: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
ad20: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
ad30: 73 75 62 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20  subKeyName; }.. 
ad40: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
ad50: 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 0d  ///////////////.
ada0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
adb0: 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74  rivate bool what
adc0: 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
add0: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61   public bool Wha
ade0: 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tIf..           
adf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ae00: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
ae10: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
ae20: 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20  n whatIf; }..   
ae30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ae40: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ae50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ae90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
aea0: 76 61 74 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e  vate bool readOn
aeb0: 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly;..           
aec0: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61   public bool Rea
aed0: 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  dOnly..         
aee0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
aef0: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
af00: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
af10: 75 72 6e 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d  urn readOnly; }.
af20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
af30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
af40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af80: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
af90: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66   public bool saf
afa0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
afb0: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65  public bool Safe
afc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
afd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
afe0: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
aff0: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73  osed(); return s
b000: 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  afe; }..        
b010: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b020: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
b030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
b040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b080: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b090: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
b0a0: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
b0b0: 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
b0c0: 64 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28  d CheckReadOnly(
b0d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
b0e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b0f0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b100: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
b110: 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f  n "read-only" mo
b120: 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77 20  de, we disallow 
b130: 61 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73 73  all write access
b140: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b150: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
b160: 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61 64         if (!read
b170: 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20  Only)..         
b180: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
b190: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
b1a0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
b1b0: 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
b1c0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20  Exception();..  
b1d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b1e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b240: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
b250: 53 61 66 65 28 29 0d 0a 20 20 20 20 20 20 20 20  Safe()..        
b260: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b270: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
b280: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
b290: 54 45 3a 20 49 6e 20 22 73 61 66 65 22 20 6d 6f  TE: In "safe" mo
b2a0: 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77 20  de, we disallow 
b2b0: 61 6c 6c 20 64 69 72 65 63 74 20 61 63 63 65 73  all direct acces
b2c0: 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  s to the..      
b2d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
b2e0: 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 72 65 67     contained reg
b2f0: 69 73 74 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20  istry key...    
b300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
b310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b320: 69 66 20 28 21 73 61 66 65 29 0d 0a 20 20 20 20  if (!safe)..    
b330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b340: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
b350: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
b360: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
b370: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29  ationException()
b380: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
b390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
b3a0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
b3b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b400: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
b410: 6f 6e 20 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74  on System.Object
b420: 20 4f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 20   Overrides..    
b430: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
b440: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 54  verride string T
b450: 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20 20  oString()..     
b460: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b470: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
b480: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b4a0: 74 75 72 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d  turn this.Name;.
b4b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b4c0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
b4d0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
b4e0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b530: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
b540: 20 49 6d 70 6c 69 63 69 74 20 43 6f 6e 76 65 72   Implicit Conver
b550: 73 69 6f 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a  sion Operators..
b560: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
b570: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42              // B
b580: 55 47 42 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65  UGBUG: Remove me
b590: 3f 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62  ?  This should b
b5a0: 65 20 73 61 66 65 20 62 65 63 61 75 73 65 20 69  e safe because i
b5b0: 6e 20 22 77 68 61 74 2d 69 66 22 0d 0a 20 20 20  n "what-if"..   
b5c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
b5d0: 20 20 20 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79      mode all key
b5e0: 73 20 61 72 65 20 6f 70 65 6e 65 64 20 72 65 61  s are opened rea
b5f0: 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20  d-only...       
b600: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
b610: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
b620: 69 63 20 69 6d 70 6c 69 63 69 74 20 6f 70 65 72  ic implicit oper
b630: 61 74 6f 72 20 52 65 67 69 73 74 72 79 4b 65 79  ator RegistryKey
b640: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
b650: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
b660: 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20  ey key..        
b670: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
b680: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b690: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
b6a0: 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f   (key != null) ?
b6b0: 20 6b 65 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b   key.Key : null;
b6c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b6d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
b6e0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
b6f0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b740: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
b750: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
b760: 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
b770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
b780: 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
b790: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
b7a0: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
b7b0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a  eckDisposed() /*
b7c0: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
b7d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b7e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64            if (!d
b7f0: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
b800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b810: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
b820: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
b830: 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65  ew ObjectDispose
b840: 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  dException(..   
b850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b860: 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69   typeof(MockRegi
b870: 73 74 72 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d  stryKey).Name);.
b880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
b8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8e0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
b8f0: 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74   private /* prot
b900: 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f  ected virtual */
b910: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a   void Dispose(..
b920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b930: 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a  bool disposing..
b940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b950: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
b960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b970: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
b980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b990: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b9a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73           if (dis
b9b0: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
b9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9e0: 20 20 20 20 20 20 20 20 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 0d 0a 20 20  ////////////..  
ba10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba20: 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65        // dispose
ba30: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
ba40: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba60: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
ba70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba80: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
ba90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
baa0: 20 20 20 20 69 66 20 28 6b 65 79 20 21 3d 20 6e      if (key != n
bab0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
bac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
bad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
baf0: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
bb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb10: 20 20 20 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c         key = nul
bb20: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
bb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
bb60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
bb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb90: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
bba0: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61          // relea
bbb0: 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73  se unmanaged res
bbc0: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbe0: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
bc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc20: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
bc30: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
bc40: 45 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69  E: This object i
bc50: 73 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d  s now disposed..
bc60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bc70: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
bc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73               dis
bc90: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
bca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
bcb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
bcc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
bcd0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
bce0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
bcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
bd30: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
bd40: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65  n IDisposable Me
bd50: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  mbers..         
bd60: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
bd70: 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20  ispose()..      
bd80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bd90: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
bda0: 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  (true);..       
bdb0: 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70           GC.Supp
bdc0: 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69  ressFinalize(thi
bdd0: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
bde0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
bdf0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
be00: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
be10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
be50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
be60: 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d  gion Destructor.
be70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d 6f  .            ~Mo
be80: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d  ckRegistryKey().
be90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
bea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
beb0: 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d  Dispose(false);.
bec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
bee0: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
bef0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
bf00: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
bf10: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
bf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20  ////////....    
bf60: 20 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67 69      #region Regi
bf70: 73 74 72 79 48 65 6c 70 65 72 20 43 6c 61 73 73  stryHelper Class
bf80: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
bf90: 65 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 52  e static class R
bfa0: 65 67 69 73 74 72 79 48 65 6c 70 65 72 0d 0a 20  egistryHelper.. 
bfb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bfc0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
bfd0: 62 6c 69 63 20 53 74 61 74 69 63 20 50 72 6f 70  blic Static Prop
bfe0: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
bff0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
c000: 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73 43 72  ic int subKeysCr
c010: 65 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  eated;..        
c020: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
c030: 63 20 69 6e 74 20 53 75 62 4b 65 79 73 43 72 65  c int SubKeysCre
c040: 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ated..          
c050: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c060: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
c070: 6e 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64  n subKeysCreated
c080: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
c090: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
c0a0: 20 20 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 2f 2f 2f 2f  ////////////////
c0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
c0f0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
c100: 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73 44  tic int subKeysD
c110: 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20  eleted;..       
c120: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
c130: 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73 44 65  ic int SubKeysDe
c140: 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20  leted..         
c150: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c160: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
c170: 72 6e 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65  rn subKeysDelete
c180: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
c190: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
c1a0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
c1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1e0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
c1f0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
c200: 61 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75  atic int keyValu
c210: 65 73 52 65 61 64 3b 0d 0a 20 20 20 20 20 20 20  esRead;..       
c220: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
c230: 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73  ic int KeyValues
c240: 52 65 61 64 0d 0a 20 20 20 20 20 20 20 20 20 20  Read..          
c250: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c260: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
c270: 6e 20 6b 65 79 56 61 6c 75 65 73 52 65 61 64 3b  n keyValuesRead;
c280: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
c290: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
c2a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
c2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
c2f0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
c300: 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73  ic int keyValues
c310: 57 72 69 74 74 65 6e 3b 0d 0a 20 20 20 20 20 20  Written;..      
c320: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
c330: 74 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65  tic int KeyValue
c340: 73 57 72 69 74 74 65 6e 0d 0a 20 20 20 20 20 20  sWritten..      
c350: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c360: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
c370: 65 74 75 72 6e 20 6b 65 79 56 61 6c 75 65 73 57  eturn keyValuesW
c380: 72 69 74 74 65 6e 3b 20 7d 0d 0a 20 20 20 20 20  ritten; }..     
c390: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
c3a0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
c3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
c3f0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
c400: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b 65  te static int ke
c410: 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 0d  yValuesDeleted;.
c420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
c430: 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 4b  lic static int K
c440: 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 0d  eyValuesDeleted.
c450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
c460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c470: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79  get { return key
c480: 56 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 20 7d  ValuesDeleted; }
c490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
c4a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
c4b0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
c4c0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
c4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
c510: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
c520: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
c530: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
c540: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
c550: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
c560: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
c570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
c580: 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52  lic static MockR
c590: 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e 53  egistryKey OpenS
c5a0: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
c5b0: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
c5c0: 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
c5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c5e0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
c5f0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
c600: 20 20 20 20 20 20 62 6f 6f 6c 20 77 72 69 74 61        bool writa
c610: 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ble,..          
c620: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
c630: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
c640: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
c650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c660: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
c670: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c680: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
c690: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c6b0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c6d0: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6f0: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
c700: 64 54 72 61 63 65 28 77 72 69 74 61 62 6c 65 20  dTrace(writable 
c710: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
c720: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
c730: 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
c740: 20 3a 20 54 72 61 63 65 50 72 69 6f 72 69 74 79   : TracePriority
c750: 2e 48 69 67 68 65 72 2c 0d 0a 20 20 20 20 20 20  .Higher,..      
c760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c770: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
c780: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
c790: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7b0: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
c7c0: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
c7d0: 6d 65 20 3d 20 7b 31 7d 2c 20 77 72 69 74 61 62  me = {1}, writab
c7e0: 6c 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20  le = {2}",..    
c7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c800: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
c810: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
c820: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c  lay(subKeyName),
c830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c840: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
c850: 70 6c 61 79 28 77 72 69 74 61 62 6c 65 29 29 2c  play(writable)),
c860: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
c870: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c880: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
c890: 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a          // HACK:
c8a0: 20 41 6c 77 61 79 73 20 66 6f 72 62 69 64 20 77   Always forbid w
c8b0: 72 69 74 61 62 6c 65 20 61 63 63 65 73 73 20 77  ritable access w
c8c0: 68 65 6e 20 6f 70 65 72 61 74 69 6e 67 20 69 6e  hen operating in
c8d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c8e0: 20 20 2f 2f 20 20 20 20 20 20 20 22 77 68 61 74    //       "what
c8f0: 2d 69 66 22 20 6d 6f 64 65 2e 0d 0a 20 20 20 20  -if" mode...    
c900: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c920: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
c930: 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70  key = rootKey.Op
c940: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
c950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
c960: 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
c970: 66 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74  f ? false : writ
c980: 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  able);....      
c990: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c9a0: 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f   (key != null) ?
c9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c9c0: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
c9d0: 67 69 73 74 72 79 4b 65 79 28 6b 65 79 2c 20 77  gistryKey(key, w
c9e0: 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 20 66 61  hatIf, false, fa
c9f0: 6c 73 65 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20  lse) : null;..  
ca00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
ca10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
ca20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
ca60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
ca70: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
ca80: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
ca90: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
caa0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
cab0: 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  tic MockRegistry
cac0: 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b 65 79  Key CreateSubKey
cad0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
cae0: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
caf0: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
cb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
cb10: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
cb20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cb30: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
cb50: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
cb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
cb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
cb90: 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
cba0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
cbb0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
cbc0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
cbd0: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
cbe0: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
cbf0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
cc00: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
cc10: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
cc20: 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
cc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc40: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
cc50: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
cc60: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
cc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc80: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
cc90: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
cca0: 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  me = {1}",..    
ccb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccc0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
ccd0: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
cce0: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
ccf0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
cd00: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
cd10: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
cd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
cd30: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
cd40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cd50: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
cd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd70: 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79    // HACK: Alway
cd80: 73 20 6f 70 65 6e 20 61 20 6b 65 79 2c 20 72 61  s open a key, ra
cd90: 74 68 65 72 20 74 68 61 6e 20 63 72 65 61 74 69  ther than creati
cda0: 6e 67 20 6f 6e 65 20 77 68 65 6e 0d 0a 20 20 20  ng one when..   
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdc0: 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74   //       operat
cdd0: 69 6e 67 20 69 6e 20 22 77 68 61 74 2d 69 66 22  ing in "what-if"
cde0: 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   mode...        
cdf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
ce00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce10: 20 20 20 20 69 66 20 28 77 68 61 74 49 66 29 0d      if (whatIf).
ce20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ce30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ce40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce50: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
ce60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48              // H
ce70: 41 43 4b 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  ACK: Attempt to 
ce80: 6f 70 65 6e 20 74 68 65 20 73 70 65 63 69 66 69  open the specifi
ce90: 65 64 20 73 75 62 2d 6b 65 79 2e 20 20 49 66 0d  ed sub-key.  If.
cea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ceb0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
cec0: 20 20 74 68 69 73 20 66 61 69 6c 73 2c 20 77 65    this fails, we
ced0: 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74   will simply ret
cee0: 75 72 6e 20 74 68 65 20 72 6f 6f 74 0d 0a 20 20  urn the root..  
cef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf00: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6b        //       k
cf10: 65 79 20 69 74 73 65 6c 66 20 73 69 6e 63 65 20  ey itself since 
cf20: 6e 6f 20 77 72 69 74 65 73 20 61 72 65 20 61 6c  no writes are al
cf30: 6c 6f 77 65 64 20 69 6e 0d 0a 20 20 20 20 20 20  lowed in..      
cf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf50: 20 20 2f 2f 20 20 20 20 20 20 20 22 77 68 61 74    //       "what
cf60: 2d 69 66 22 20 6d 6f 64 65 20 61 6e 79 68 6f 77  -if" mode anyhow
cf70: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
cf80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
cf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfa0: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
cfb0: 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f  tryKey key = roo
cfc0: 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28  tKey.OpenSubKey(
cfd0: 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  subKeyName);....
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cff0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
d000: 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a  key != null) ?..
d010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d020: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20              key 
d030: 3a 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  : new MockRegist
d040: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
d050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d060: 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
d070: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61   subKeyName, wha
d080: 74 49 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  tIf, false, fals
d090: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
d0a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0c0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
d0d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0f0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
d100: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
d110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
d130: 6f 74 4b 65 79 2e 43 72 65 61 74 65 53 75 62 4b  otKey.CreateSubK
d140: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20  ey(subKeyName), 
d150: 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 0d 0a  whatIf, false,..
d160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d170: 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73              fals
d180: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
d190: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
d1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
d1c0: 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
d1d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
d1f0: 75 62 4b 65 79 73 43 72 65 61 74 65 64 2b 2b 3b  ubKeysCreated++;
d200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d210: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
d220: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
d230: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
d240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d270: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
d280: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
d290: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
d2a0: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
d2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
d2c0: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
d2d0: 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20  DeleteSubKey(.. 
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
d2f0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
d300: 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
d310: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
d320: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
d330: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
d340: 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
d350: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d360: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
d370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d380: 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
d3a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
d3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d3c0: 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
d3d0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
d3e0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
d3f0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
d400: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
d410: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d420: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
d430: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
d440: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
d450: 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
d470: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
d480: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
d490: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
d4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4b0: 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20       "rootKey = 
d4c0: 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20  {0}, subKeyName 
d4d0: 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {1}",..       
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4f0: 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74   ForDisplay(root
d500: 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  Key), ForDisplay
d510: 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a  (subKeyName)),..
d520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d530: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
d540: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
d550: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
d560: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
d580: 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65  tKey.DeleteSubKe
d590: 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68  y(subKeyName, th
d5a0: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a  rowOnMissing);..
d5b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d5c0: 20 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64    subKeysDeleted
d5d0: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
d5e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
d5f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
d600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d630: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
d640: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
d650: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
d660: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
d670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
d680: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
d690: 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65  DeleteSubKeyTree
d6a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
d6b0: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
d6c0: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
d6e0: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
d6f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d700: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
d710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
d720: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
d730: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
d740: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
d750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
d760: 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
d770: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
d780: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
d790: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d7a0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
d7b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d7c0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
d7d0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
d7e0: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
d7f0: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
d810: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
d820: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
d830: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
d840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d850: 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30     "rootKey = {0
d860: 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20  }, subKeyName = 
d870: 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
d890: 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65  orDisplay(rootKe
d8a0: 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73  y), ForDisplay(s
d8b0: 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20  ubKeyName)),..  
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8d0: 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
d8e0: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
d8f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
d900: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
d910: 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
d920: 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  ey.DeleteSubKeyT
d930: 72 65 65 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b  ree(subKeyName);
d940: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d950: 20 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65 74      subKeysDelet
d960: 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed++;..         
d970: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d980: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d9d0: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
d9e0: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
d9f0: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
da00: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
da10: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
da20: 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b 65 79 4e  ing[] GetSubKeyN
da30: 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ames(..         
da40: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
da50: 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20  tryKey key,..   
da60: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
da70: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
da80: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
da90: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
daa0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
dab0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
dac0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
dad0: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
daf0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
db00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
db10: 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
db20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db30: 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
db40: 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
db50: 72 69 6f 72 69 74 79 2e 48 69 67 68 2c 0d 0a 20  riority.High,.. 
db60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db70: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
db80: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
db90: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
dba0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
dbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65               "ke
dbc0: 79 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73  y = {0}", ForDis
dbd0: 70 6c 61 79 28 6b 65 79 29 29 2c 20 74 72 61 63  play(key)), trac
dbe0: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
dc00: 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 53 75 62  eturn key.GetSub
dc10: 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20  KeyNames();..   
dc20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
dc30: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
dc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
dc80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
dc90: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
dca0: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
dcb0: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
dcc0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
dcd0: 69 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c  ic object GetVal
dce0: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
dcf0: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
dd00: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
dd10: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
dd20: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
dd30: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
dd40: 64 65 66 61 75 6c 74 56 61 6c 75 65 2c 0d 0a 20  defaultValue,.. 
dd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
dd60: 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
dd80: 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
dd90: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
dda0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ddc0: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dde0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
ddf0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
de00: 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
de10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de20: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
de30: 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
de40: 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 2c 0d  ePriority.High,.
de50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de60: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
de70: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
de80: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
de90: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
deb0: 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20  key = {0}, name 
dec0: 3d 20 7b 31 7d 2c 20 64 65 66 61 75 6c 74 56 61  = {1}, defaultVa
ded0: 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20  lue = {2}",..   
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
df00: 6b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  key), ForDisplay
df10: 28 6e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  (name),..       
df20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df30: 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 66 61   ForDisplay(defa
df40: 75 6c 74 56 61 6c 75 65 29 29 2c 20 74 72 61 63  ultValue)), trac
df50: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
df70: 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 6b 65  bject value = ke
df80: 79 2e 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c  y.GetValue(name,
df90: 20 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d   defaultValue);.
dfa0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
dfb0: 20 20 20 6b 65 79 56 61 6c 75 65 73 52 65 61 64     keyValuesRead
dfc0: 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
dfd0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61         return va
dfe0: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
dff0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
e000: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e040: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e050: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
e060: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
e070: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
e080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
e090: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
e0a0: 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20   SetValue(..    
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
e0c0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
e0d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e0e0: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
e0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e100: 6f 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a 20  object value,.. 
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
e120: 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
e130: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
e140: 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
e150: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
e160: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e170: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e180: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1a0: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e1c0: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1e0: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
e1f0: 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
e200: 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
e210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e220: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
e230: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
e240: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
e250: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65               "ke
e270: 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20  y = {0}, name = 
e280: 7b 31 7d 2c 20 76 61 6c 75 65 20 3d 20 7b 32 7d  {1}, value = {2}
e290: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
e2a0: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
e2b0: 69 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72  isplay(key), For
e2c0: 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 20 46  Display(name), F
e2d0: 6f 72 44 69 73 70 6c 61 79 28 76 61 6c 75 65 29  orDisplay(value)
e2e0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
e300: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
e320: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e340: 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61   key.SetValue(na
e350: 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20  me, value);.... 
e360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
e370: 65 79 56 61 6c 75 65 73 57 72 69 74 74 65 6e 2b  eyValuesWritten+
e380: 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
e390: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
e3a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
e3f0: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
e400: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
e410: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
e420: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
e430: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 44  ic static void D
e440: 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20  eleteValue(..   
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
e460: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
e470: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e480: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
e490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e4a0: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
e4b0: 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
e4c0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
e4d0: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
e4e0: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
e4f0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
e500: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
e510: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e520: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
e530: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
e540: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
e550: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
e560: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
e570: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
e580: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
e590: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
e5a0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
e5b0: 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
e5d0: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
e5e0: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
e5f0: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
e600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e610: 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c       "key = {0},
e620: 20 6e 61 6d 65 20 3d 20 7b 31 7d 22 2c 20 46 6f   name = {1}", Fo
e630: 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c 0d 0a  rDisplay(key),..
e640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e650: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
e660: 61 79 28 6e 61 6d 65 29 29 2c 20 74 72 61 63 65  ay(name)), trace
e670: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e690: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
e6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6b0: 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65 28  key.DeleteValue(
e6c0: 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73  name, throwOnMis
e6d0: 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sing);....      
e6e0: 20 20 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c            keyVal
e6f0: 75 65 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20  uesDeleted++;.. 
e700: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
e710: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
e720: 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
e730: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
e740: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
e750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e790: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e7a0: 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69 6e 67    #region String
e7b0: 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
e7c0: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
e7d0: 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67 4c  ed class StringL
e7e0: 69 73 74 20 3a 20 4c 69 73 74 3c 73 74 72 69 6e  ist : List<strin
e7f0: 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  g>..        {.. 
e800: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e810: 63 20 53 74 72 69 6e 67 4c 69 73 74 28 29 0d 0a  c StringList()..
e820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e830: 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20 20  : base()..      
e840: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e850: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
e860: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
e870: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
e880: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
e890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
e8d0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
e8e0: 53 74 72 69 6e 67 4c 69 73 74 28 49 45 6e 75 6d  StringList(IEnum
e8f0: 65 72 61 62 6c 65 3c 73 74 72 69 6e 67 3e 20 63  erable<string> c
e900: 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20  ollection)..    
e910: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61              : ba
e920: 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a  se(collection)..
e930: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e950: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
e960: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
e970: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
e980: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
e990: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
e9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
e9e0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
e9f0: 6e 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61  n StringDictiona
ea00: 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ry Class..      
ea10: 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
ea20: 20 63 6c 61 73 73 20 53 74 72 69 6e 67 44 69 63   class StringDic
ea30: 74 69 6f 6e 61 72 79 20 3a 20 44 69 63 74 69 6f  tionary : Dictio
ea40: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 73 74 72  nary<string, str
ea50: 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ing>..        {.
ea60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
ea70: 6c 69 63 20 53 74 72 69 6e 67 44 69 63 74 69 6f  lic StringDictio
ea80: 6e 61 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20  nary()..        
ea90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
eaa0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
eab0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
eac0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
ead0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
eae0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
eaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb30: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
eb40: 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f    #region Versio
eb50: 6e 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20  nList Class..   
eb60: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
eb70: 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f  led class Versio
eb80: 6e 4c 69 73 74 20 3a 20 4c 69 73 74 3c 56 65 72  nList : List<Ver
eb90: 73 69 6f 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7b  sion>..        {
eba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
ebb0: 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74  blic VersionList
ebc0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
ebd0: 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20      : base()..  
ebe0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ec00: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
ec10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ec20: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ec30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ec70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
ec80: 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  lic VersionList(
ec90: 49 45 6e 75 6d 65 72 61 62 6c 65 3c 56 65 72 73  IEnumerable<Vers
eca0: 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29  ion> collection)
ecb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ecc0: 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74    : base(collect
ecd0: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ion)..          
ece0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ecf0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
ed00: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
ed10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
ed20: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
ed30: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
ed40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed80: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ed90: 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e 4d  #region VersionM
eda0: 61 70 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ap Class..      
edb0: 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
edc0: 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e 4d 61   class VersionMa
edd0: 70 20 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c 73  p : Dictionary<s
ede0: 74 72 69 6e 67 2c 20 56 65 72 73 69 6f 6e 4c 69  tring, VersionLi
edf0: 73 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  st>..        {..
ee00: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
ee10: 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 28 29 0d  ic VersionMap().
ee20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ee30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee40: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
ee50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ee60: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ee70: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
ee80: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
ee90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
eed0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
eee0: 6f 6e 20 50 61 63 6b 61 67 65 20 43 6c 61 73 73  on Package Class
eef0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e  ..        intern
ef00: 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  al sealed class 
ef10: 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20  Package..       
ef20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ef30: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
ef40: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
ef50: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
ef60: 50 61 63 6b 61 67 65 28 29 0d 0a 20 20 20 20 20  Package()..     
ef70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ef80: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
ef90: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
efa0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
efb0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
efc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
efd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
f020: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
f030: 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
f040: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f050: 20 73 74 72 69 6e 67 20 70 72 6f 76 69 64 65 72   string provider
f060: 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b 0d 0a  InvariantName;..
f070: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
f080: 69 63 20 73 74 72 69 6e 67 20 50 72 6f 76 69 64  ic string Provid
f090: 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 0d  erInvariantName.
f0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
f0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0c0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 72 6f  get { return pro
f0d0: 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61  viderInvariantNa
f0e0: 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
f0f0: 20 20 20 20 20 20 20 73 65 74 20 7b 20 70 72 6f         set { pro
f100: 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61  viderInvariantNa
f110: 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
f120: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
f130: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
f140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
f180: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
f190: 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 66 61  rivate string fa
f1a0: 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b 0d 0a  ctoryTypeName;..
f1b0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
f1c0: 69 63 20 73 74 72 69 6e 67 20 46 61 63 74 6f 72  ic string Factor
f1d0: 79 54 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20 20  yTypeName..     
f1e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f1f0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
f200: 72 65 74 75 72 6e 20 66 61 63 74 6f 72 79 54 79  return factoryTy
f210: 70 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20  peName; }..     
f220: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
f230: 20 66 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65   factoryTypeName
f240: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
f250: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
f260: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
f2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f2c0: 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d  vate AssemblyNam
f2d0: 65 20 70 72 6f 76 69 64 65 72 41 73 73 65 6d 62  e providerAssemb
f2e0: 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  lyName;..       
f2f0: 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
f300: 6d 62 6c 79 4e 61 6d 65 20 50 72 6f 76 69 64 65  mblyName Provide
f310: 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20  rAssemblyName.. 
f320: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
f330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
f340: 74 20 7b 20 72 65 74 75 72 6e 20 70 72 6f 76 69  t { return provi
f350: 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b  derAssemblyName;
f360: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
f370: 20 20 20 20 73 65 74 20 7b 20 70 72 6f 76 69 64      set { provid
f380: 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  erAssemblyName =
f390: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
f3a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
f3b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
f3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
f400: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f410: 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  te AssemblyName 
f420: 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  designerAssembly
f430: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
f440: 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62     public Assemb
f450: 6c 79 4e 61 6d 65 20 44 65 73 69 67 6e 65 72 41  lyName DesignerA
f460: 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20 20 20  ssemblyName..   
f470: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f480: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
f490: 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65  { return designe
f4a0: 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 20 7d  rAssemblyName; }
f4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f4c0: 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65 72    set { designer
f4d0: 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 76  AssemblyName = v
f4e0: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
f4f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f500: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
f510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
f550: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f560: 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65   bool globalAsse
f570: 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20 20 20  mblyCache;..    
f580: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
f590: 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62  ool GlobalAssemb
f5a0: 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20 20 20  lyCache..       
f5b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f5c0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
f5d0: 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73 65 6d  turn globalAssem
f5e0: 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20 20 20  blyCache; }..   
f5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
f600: 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c   { globalAssembl
f610: 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65 3b 20  yCache = value; 
f620: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
f630: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f680: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
f690: 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20     private Guid 
f6a0: 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20 20 20  packageId;..    
f6b0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 47          public G
f6c0: 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d 0a 20  uid PackageId.. 
f6d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
f6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
f6f0: 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63 6b 61  t { return packa
f700: 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  geId; }..       
f710: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
f720: 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c 75 65  ackageId = value
f730: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
f740: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
f750: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f790: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
f7a0: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
f7b0: 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a 20 20  d serviceId;..  
f7c0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
f7d0: 20 47 75 69 64 20 53 65 72 76 69 63 65 49 64 0d   Guid ServiceId.
f7e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f800: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 65 72  get { return ser
f810: 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  viceId; }..     
f820: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
f830: 20 73 65 72 76 69 63 65 49 64 20 3d 20 76 61 6c   serviceId = val
f840: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
f850: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f860: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
f870: 2f 2f 2f 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8a0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
f8b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
f8c0: 75 69 64 20 64 61 74 61 53 6f 75 72 63 65 49 64  uid dataSourceId
f8d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
f8e0: 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61 53  ublic Guid DataS
f8f0: 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20  ourceId..       
f900: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f910: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
f920: 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63 65 49  turn dataSourceI
f930: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
f940: 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74 61        set { data
f950: 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c 75 65  SourceId = value
f960: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
f970: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
f980: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
f9d0: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
f9e0: 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  d dataProviderId
f9f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
fa00: 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61 50  ublic Guid DataP
fa10: 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20 20 20  roviderId..     
fa20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
fa30: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
fa40: 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f 76 69  return dataProvi
fa50: 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20  derId; }..      
fa60: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
fa70: 64 61 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d  dataProviderId =
fa80: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
fa90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
faa0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
fab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
faf0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
fb00: 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74 54 65  te Guid adoNetTe
fb10: 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20 20 20  chnologyId;..   
fb20: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
fb30: 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63 68 6e  Guid AdoNetTechn
fb40: 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20 20 20  ologyId..       
fb50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
fb60: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
fb70: 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63 68 6e  turn adoNetTechn
fb80: 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20 20 20  ologyId; }..    
fb90: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
fba0: 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  { adoNetTechnolo
fbb0: 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  gyId = value; }.
fbc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
fbd0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
fbe0: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
fbf0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
fc00: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
fc10: 20 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
fc60: 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66      #region Conf
fc70: 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73 73 0d  iguration Class.
fc80: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
fc90: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43 6f   sealed class Co
fca0: 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20  nfiguration..   
fcb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
fcc0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
fcd0: 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20  ate Constants.. 
fce0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
fcf0: 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 53 77  te const char Sw
fd00: 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20 20 20  itch = '-';..   
fd10: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
fd20: 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c 74 53   const char AltS
fd30: 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a 0d 0a  witch = '/';....
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
fd50: 2f 2f 2f 2f 2f 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 0d  ///////////////.
fd90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
fda0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
fdb0: 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20 53 77  adonly char[] Sw
fdc0: 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d 0a 20  itchChars = {.. 
fdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
fde0: 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74 63 68  witch, AltSwitch
fdf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b  ..            };
fe00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fe10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe20: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
fe60: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
fe70: 20 73 74 72 69 6e 67 20 49 6e 76 61 72 69 61 6e   string Invarian
fe80: 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  tName = "System.
fe90: 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20  Data.SQLite";.. 
fea0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
feb0: 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
fec0: 45 66 36 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  Ef6InvariantName
fed0: 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
fee0: 53 51 4c 69 74 65 2e 45 46 36 22 3b 0d 0a 0d 0a  SQLite.EF6";....
fef0: 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 0d  ///////////////.
ff40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
ff50: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
ff60: 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70 65 4e  ing FactoryTypeN
ff70: 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ame =..         
ff80: 20 20 20 20 20 20 20 22 53 79 73 74 65 6d 2e 44         "System.D
ff90: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
ffa0: 65 46 61 63 74 6f 72 79 22 3b 0d 0a 0d 0a 20 20  eFactory";....  
ffb0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
ffc0: 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 45  e const string E
ffd0: 66 36 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d  f6FactoryTypeNam
ffe0: 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e =..           
fff0: 20 20 20 20 20 22 53 79 73 74 65 6d 2e 44 61 74       "System.Dat
10000 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 53 51 4c  a.SQLite.EF6.SQL
10010 69 74 65 50 72 6f 76 69 64 65 72 46 61 63 74 6f  iteProviderFacto
10020 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry";..          
10030 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
10040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
10050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
10090 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
100a0 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53  region Private S
100b0 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20  tatic Data..    
100c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
100d0 73 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79 20  static Assembly 
100e0 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c  systemEf6Assembl
100f0 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
10100 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
10110 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
10120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
10160 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
10170 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74  gion Private Dat
10180 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  a..            p
10190 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e  rivate AssemblyN
101a0 61 6d 65 20 63 6f 72 65 41 73 73 65 6d 62 6c 79  ame coreAssembly
101b0 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
101c0 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65 6d     private Assem
101d0 62 6c 79 4e 61 6d 65 20 6c 69 6e 71 41 73 73 65  blyName linqAsse
101e0 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  mblyName;..     
101f0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 41         private A
10200 73 73 65 6d 62 6c 79 4e 61 6d 65 20 65 66 36 41  ssemblyName ef6A
10210 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20  ssemblyName;..  
10220 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
10230 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 64  e AssemblyName d
10240 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e  esignerAssemblyN
10250 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
10260 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
10270 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
10280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
102c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
102d0 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
102e0 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
102f0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
10300 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d   Configuration(.
10310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10320 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
10330 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly,..           
10340 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f 67 46       string logF
10350 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
10360 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
10370 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20   directory,..   
10380 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
10390 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
103a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
103b0 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69     string linqFi
103c0 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
103d0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
103e0 65 66 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  ef6FileName,..  
103f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10400 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c  ring designerFil
10410 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
10420 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72          string r
10430 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 2c 0d  egistryVersion,.
10440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10450 20 73 74 72 69 6e 67 20 63 6f 6e 66 69 67 56 65   string configVe
10460 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
10470 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76          string v
10480 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 2c 0d  sVersionSuffix,.
10490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
104a0 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72   string debugFor
104b0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
104c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 72 61        string tra
104d0 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ceFormat,..     
104e0 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
104f0 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46  llFlags installF
10500 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  lags,..         
10510 20 20 20 20 20 20 20 50 72 6f 76 69 64 65 72 46         ProviderF
10520 6c 61 67 73 20 70 72 6f 76 69 64 65 72 46 6c 61  lags providerFla
10530 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
10540 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
10550 74 79 20 64 65 62 75 67 50 72 69 6f 72 69 74 79  ty debugPriority
10560 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10570 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
10580 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d   tracePriority,.
10590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
105a0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
105b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105c0 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20  bool install,.. 
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
105e0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
105f0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
10600 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
10610 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
10620 20 20 20 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74      bool noDeskt
10630 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op,..           
10640 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70       bool noComp
10650 61 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  act,..          
10660 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74        bool noNet
10670 46 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  Fx20,..         
10680 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65         bool noNe
10690 74 46 78 33 35 2c 0d 0a 20 20 20 20 20 20 20 20  tFx35,..        
106a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e          bool noN
106b0 65 74 46 78 34 30 2c 0d 0a 20 20 20 20 20 20 20  etFx40,..       
106c0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
106d0 4e 65 74 46 78 34 35 2c 0d 0a 20 20 20 20 20 20  NetFx45,..      
106e0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
106f0 6f 4e 65 74 46 78 34 35 31 2c 0d 0a 20 20 20 20  oNetFx451,..    
10700 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
10710 20 6e 6f 4e 65 74 46 78 34 35 32 2c 0d 0a 20 20   noNetFx452,..  
10720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
10730 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 2c 0d 0a 20  ol noNetFx46,.. 
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10750 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 36 31 2c 0d  ool noNetFx461,.
10760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10770 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 2c 0d   bool noVs2005,.
10780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10790 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 2c 0d   bool noVs2008,.
107a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
107b0 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c 0d   bool noVs2010,.
107c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
107d0 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 2c 0d   bool noVs2012,.
107e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
107f0 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 2c 0d   bool noVs2013,.
10800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10810 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 35 2c 0d   bool noVs2015,.
10820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10830 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c 0d 0a   bool noTrace,..
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10850 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c 0d  bool noConsole,.
10860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10870 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20 20   bool noLog,..  
10880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
10890 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
108a0 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
108b0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
108c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
108d0 20 20 62 6f 6f 6c 20 64 65 62 75 67 2c 0d 0a 20    bool debug,.. 
108e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
108f0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
10900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
10910 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a 20 20 20 20  ol confirm..    
10920 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
10930 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10950 69 73 2e 61 73 73 65 6d 62 6c 79 20 3d 20 61 73  is.assembly = as
10960 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20  sembly;..       
10970 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f           this.lo
10980 67 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67 46  gFileName = logF
10990 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
109a0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64            this.d
109b0 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63  irectory = direc
109c0 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  tory;..         
109d0 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 72 65         this.core
109e0 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 72 65 46  FileName = coreF
109f0 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
10a00 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c            this.l
10a10 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 69  inqFileName = li
10a20 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  nqFileName;..   
10a30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10a40 73 2e 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20  s.ef6FileName = 
10a50 65 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  ef6FileName;..  
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10a70 69 73 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  is.designerFileN
10a80 61 6d 65 20 3d 20 64 65 73 69 67 6e 65 72 46 69  ame = designerFi
10a90 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
10aa0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65           this.re
10ab0 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20  gistryVersion = 
10ac0 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b  registryVersion;
10ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10ae0 20 20 74 68 69 73 2e 63 6f 6e 66 69 67 56 65 72    this.configVer
10af0 73 69 6f 6e 20 3d 20 63 6f 6e 66 69 67 56 65 72  sion = configVer
10b00 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
10b10 20 20 20 20 20 20 20 74 68 69 73 2e 76 73 56 65         this.vsVe
10b20 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 76 73  rsionSuffix = vs
10b30 56 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d 0a  VersionSuffix;..
10b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b50 74 68 69 73 2e 64 65 62 75 67 46 6f 72 6d 61 74  this.debugFormat
10b60 20 3d 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d   = debugFormat;.
10b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10b80 20 74 68 69 73 2e 74 72 61 63 65 46 6f 72 6d 61   this.traceForma
10b90 74 20 3d 20 74 72 61 63 65 46 6f 72 6d 61 74 3b  t = traceFormat;
10ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10bb0 20 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 46 6c    this.installFl
10bc0 61 67 73 20 3d 20 69 6e 73 74 61 6c 6c 46 6c 61  ags = installFla
10bd0 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs;..           
10be0 20 20 20 20 20 74 68 69 73 2e 70 72 6f 76 69 64       this.provid
10bf0 65 72 46 6c 61 67 73 20 3d 20 70 72 6f 76 69 64  erFlags = provid
10c00 65 72 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20  erFlags;..      
10c10 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64            this.d
10c20 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 64  ebugPriority = d
10c30 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20  ebugPriority;.. 
10c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10c50 68 69 73 2e 74 72 61 63 65 50 72 69 6f 72 69 74  his.tracePriorit
10c60 79 20 3d 20 74 72 61 63 65 50 72 69 6f 72 69 74  y = tracePriorit
10c70 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
10c80 20 20 20 20 74 68 69 73 2e 70 65 72 55 73 65 72      this.perUser
10c90 20 3d 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20   = perUser;..   
10ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10cb0 73 2e 69 6e 73 74 61 6c 6c 20 3d 20 69 6e 73 74  s.install = inst
10cc0 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  all;..          
10cd0 20 20 20 20 20 20 74 68 69 73 2e 77 6f 77 36 34        this.wow64
10ce0 20 3d 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20   = wow64;..     
10cf0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10d00 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
10d10 20 3d 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73   = noRuntimeVers
10d20 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
10d30 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 44 65 73        this.noDes
10d40 6b 74 6f 70 20 3d 20 6e 6f 44 65 73 6b 74 6f 70  ktop = noDesktop
10d50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10d60 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6d 70 61 63     this.noCompac
10d70 74 20 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a  t = noCompact;..
10d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d90 74 68 69 73 2e 6e 6f 4e 65 74 46 78 32 30 20 3d  this.noNetFx20 =
10da0 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20   noNetFx20;..   
10db0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10dc0 73 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 6e 6f  s.noNetFx35 = no
10dd0 4e 65 74 46 78 33 35 3b 0d 0a 20 20 20 20 20 20  NetFx35;..      
10de0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
10df0 6f 4e 65 74 46 78 34 30 20 3d 20 6e 6f 4e 65 74  oNetFx40 = noNet
10e00 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx40;..         
10e10 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65         this.noNe
10e20 74 46 78 34 35 20 3d 20 6e 6f 4e 65 74 46 78 34  tFx45 = noNetFx4
10e30 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
10e40 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78      this.noNetFx
10e50 34 35 31 20 3d 20 6e 6f 4e 65 74 46 78 34 35 31  451 = noNetFx451
10e60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10e70 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34     this.noNetFx4
10e80 35 32 20 3d 20 6e 6f 4e 65 74 46 78 34 35 32 3b  52 = noNetFx452;
10e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10ea0 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 36    this.noNetFx46
10eb0 20 3d 20 6e 6f 4e 65 74 46 78 34 36 3b 0d 0a 20   = noNetFx46;.. 
10ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10ed0 68 69 73 2e 6e 6f 4e 65 74 46 78 34 36 31 20 3d  his.noNetFx461 =
10ee0 20 6e 6f 4e 65 74 46 78 34 36 31 3b 0d 0a 20 20   noNetFx461;..  
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10f00 69 73 2e 6e 6f 56 73 32 30 30 35 20 3d 20 6e 6f  is.noVs2005 = no
10f10 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20 20  Vs2005;..       
10f20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
10f30 56 73 32 30 30 38 20 3d 20 6e 6f 56 73 32 30 30  Vs2008 = noVs200
10f40 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  8;..            
10f50 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31      this.noVs201
10f60 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20  0 = noVs2010;.. 
10f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10f80 68 69 73 2e 6e 6f 56 73 32 30 31 32 20 3d 20 6e  his.noVs2012 = n
10f90 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20 20 20 20  oVs2012;..      
10fa0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
10fb0 6f 56 73 32 30 31 33 20 3d 20 6e 6f 56 73 32 30  oVs2013 = noVs20
10fc0 31 33 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  13;..           
10fd0 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30       this.noVs20
10fe0 31 35 20 3d 20 6e 6f 56 73 32 30 31 35 3b 0d 0a  15 = noVs2015;..
10ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11000 74 68 69 73 2e 6e 6f 54 72 61 63 65 20 3d 20 6e  this.noTrace = n
11010 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20  oTrace;..       
11020 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
11030 43 6f 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73  Console = noCons
11040 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ole;..          
11050 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4c 6f 67        this.noLog
11060 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20   = noLog;..     
11070 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
11080 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d  throwOnMissing =
11090 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b   throwOnMissing;
110a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
110b0 20 20 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20    this.whatIf = 
110c0 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20  whatIf;..       
110d0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65           this.de
110e0 62 75 67 20 3d 20 64 65 62 75 67 3b 0d 0a 20 20  bug = debug;..  
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
11100 69 73 2e 76 65 72 62 6f 73 65 20 3d 20 76 65 72  is.verbose = ver
11110 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  bose;..         
11120 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66         this.conf
11130 69 72 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a  irm = confirm;..
11140 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
11150 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
11160 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
11170 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
11180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
111c0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
111d0 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20 4d  Private Static M
111e0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
111f0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
11200 69 63 20 76 6f 69 64 20 47 65 74 44 65 66 61 75  ic void GetDefau
11210 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20  ltFileNames(..  
11220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11230 66 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f  f string directo
11240 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
11250 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
11260 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  coreFileName,.. 
11270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11280 65 66 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69  ef string linqFi
11290 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
112a0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
112b0 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c  ing ef6FileName,
112c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
112d0 20 20 72 65 66 20 73 74 72 69 6e 67 20 64 65 73    ref string des
112e0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20  ignerFileName.. 
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
11300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
11310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11320 20 69 66 20 28 74 68 69 73 41 73 73 65 6d 62 6c   if (thisAssembl
11330 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
11340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11350 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
11360 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63             direc
11370 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44  tory = Path.GetD
11380 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 74 68 69  irectoryName(thi
11390 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69  sAssembly.Locati
113a0 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
113b0 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
113c0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
113d0 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
113e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113f0 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
11410 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  eFileName = Path
11420 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
11430 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
11440 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
11450 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29  er.CoreFileName)
11460 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11470 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d       linqFileNam
11480 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
11490 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20  (directory,..   
114a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114b0 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46   Installer.LinqF
114c0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
114d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 66 36               ef6
114e0 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
114f0 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72  Combine(director
11500 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
11510 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65          Installe
11520 72 2e 45 66 36 46 69 6c 65 4e 61 6d 65 29 3b 0d  r.Ef6FileName);.
11530 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11540 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e     designerFileN
11550 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
11560 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ne(directory,.. 
11570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11580 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73     Installer.Des
11590 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d  ignerFileName);.
115a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
115b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
115c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
115d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
115e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
115f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11600 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
11610 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
11620 62 6f 6f 6c 20 43 68 65 63 6b 4f 70 74 69 6f 6e  bool CheckOption
11630 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11640 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 61 72     ref string ar
11650 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
11660 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
11670 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11680 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75       string resu
11690 6c 74 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20  lt = arg;....   
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
116b0 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
116c0 72 45 6d 70 74 79 28 72 65 73 75 6c 74 29 29 0d  rEmpty(result)).
116d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
116e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
116f0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11710 2f 2f 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20  // NOTE: Remove 
11720 61 6c 6c 20 6c 65 61 64 69 6e 67 20 73 77 69 74  all leading swit
11730 63 68 20 63 68 61 72 73 2e 0d 0a 20 20 20 20 20  ch chars...     
11740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11750 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
11760 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
11770 72 65 73 75 6c 74 2e 54 72 69 6d 53 74 61 72 74  result.TrimStart
11780 28 53 77 69 74 63 68 43 68 61 72 73 29 3b 0d 0a  (SwitchChars);..
11790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
117a0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
117c0 20 4e 4f 54 45 3a 20 48 6f 77 20 6d 61 6e 79 20   NOTE: How many 
117d0 63 68 61 72 73 20 77 65 72 65 20 72 65 6d 6f 76  chars were remov
117e0 65 64 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed?..           
117f0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
11800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11810 20 69 6e 74 20 63 6f 75 6e 74 20 3d 20 61 72 67   int count = arg
11820 2e 4c 65 6e 67 74 68 20 2d 20 72 65 73 75 6c 74  .Length - result
11830 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  .Length;....    
11840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11850 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
11860 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
11870 20 57 61 73 20 74 68 65 72 65 20 61 74 20 6c 65   Was there at le
11880 61 73 74 20 6f 6e 65 3f 0d 0a 20 20 20 20 20 20  ast one?..      
11890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
118a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
118b0 20 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20        if (count 
118c0 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
118d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
118e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118f0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11910 20 2f 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72 65   // NOTE: Ok, re
11920 70 6c 61 63 65 20 74 68 65 69 72 20 6f 72 69 67  place their orig
11930 69 6e 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  inal..          
11940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11950 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
11960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11970 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
11980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11990 20 20 20 20 20 20 61 72 67 20 3d 20 72 65 73 75        arg = resu
119a0 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  lt;....         
119b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
119c0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
119d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
119e0 54 45 3a 20 59 65 73 2c 20 74 68 69 73 20 69 73  TE: Yes, this is
119f0 20 61 20 73 77 69 74 63 68 2e 0d 0a 20 20 20 20   a switch...    
11a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a10 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a30 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
11a60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11a70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11a80 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
11a90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11aa0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
11ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
11af0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
11b00 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 4d 61 74   static bool Mat
11b10 63 68 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  chOption(..     
11b20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
11b30 67 20 61 72 67 2c 0d 0a 20 20 20 20 20 20 20 20  g arg,..        
11b40 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6f          string o
11b50 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ption..         
11b60 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
11b70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11b80 20 20 20 20 20 20 20 20 20 69 66 20 28 28 61 72           if ((ar
11b90 67 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 6f  g == null) || (o
11ba0 70 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29 0d  ption == null)).
11bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11bc0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
11bd0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
11be0 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
11bf0 69 6e 67 2e 43 6f 6d 70 61 72 65 28 61 72 67 2c  ing.Compare(arg,
11c00 20 30 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d 0a   0, option, 0,..
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c20 20 20 20 20 61 72 67 2e 4c 65 6e 67 74 68 2c 20      arg.Length, 
11c30 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
11c40 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
11c50 73 65 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 20  se) == 0;..     
11c60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11c70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
11c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
11cc0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
11cd0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20  te static bool? 
11ce0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a 20  ParseBoolean(.. 
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
11d00 74 72 69 6e 67 20 74 65 78 74 0d 0a 20 20 20 20  tring text..    
11d10 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
11d20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
11d40 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
11d50 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a  OrEmpty(text))..
11d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11d80 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75         bool valu
11d90 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
11da0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 6f            if (bo
11db0 6f 6c 2e 54 72 79 50 61 72 73 65 28 74 65 78 74  ol.TryParse(text
11dc0 2c 20 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20  , out value)).. 
11dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11de0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61         return va
11df0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
11e00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
11e10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11e20 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
11e30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11e40 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
11e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
11e90 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
11ea0 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 50   static object P
11eb0 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20  arseEnum(..     
11ec0 20 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20             Type 
11ed0 65 6e 75 6d 54 79 70 65 2c 0d 0a 20 20 20 20 20  enumType,..     
11ee0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
11ef0 67 20 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20  g text,..       
11f00 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
11f10 43 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Case..          
11f20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
11f30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11f40 20 20 20 20 20 20 20 20 69 66 20 28 28 65 6e 75          if ((enu
11f50 6d 54 79 70 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c  mType == null) |
11f60 7c 20 21 65 6e 75 6d 54 79 70 65 2e 49 73 45 6e  | !enumType.IsEn
11f70 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um)..           
11f80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11f90 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
11fa0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
11fb0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
11fc0 74 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20  ty(text))..     
11fd0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ff0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
12000 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12020 20 20 20 20 20 20 72 65 74 75 72 6e 20 45 6e 75        return Enu
12030 6d 2e 50 61 72 73 65 28 65 6e 75 6d 54 79 70 65  m.Parse(enumType
12040 2c 20 74 65 78 74 2c 20 6e 6f 43 61 73 65 29 3b  , text, noCase);
12050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12060 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
12080 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
12090 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
120a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120b0 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
120c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
120d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
120e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
12100 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
12110 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
12120 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
12130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
12170 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
12180 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
12190 20 49 73 53 79 73 74 65 6d 45 66 36 41 73 73 65   IsSystemEf6Asse
121a0 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 0d 0a 20 20  mblyGlobal()..  
121b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
121c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
121d0 28 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62  (systemEf6Assemb
121e0 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly == null)..   
121f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12200 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
12210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12220 20 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d 45    return systemE
12230 66 36 41 73 73 65 6d 62 6c 79 2e 47 6c 6f 62 61  f6Assembly.Globa
12240 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d  lAssemblyCache;.
12250 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
12260 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
12270 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
12280 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
12290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
122d0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
122e0 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20 4d   Public Static M
122f0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
12300 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
12310 63 20 76 6f 69 64 20 42 72 65 61 6b 49 6e 74 6f  c void BreakInto
12320 44 65 62 75 67 67 65 72 28 29 0d 0a 20 20 20 20  Debugger()..    
12330 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12340 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
12350 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20  le.WriteLine(.. 
12360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12370 20 20 20 22 41 74 74 61 63 68 20 61 20 64 65 62     "Attach a deb
12380 75 67 67 65 72 20 74 6f 20 70 72 6f 63 65 73 73  ugger to process
12390 20 7b 30 7d 20 61 6e 64 20 70 72 65 73 73 20 22   {0} and press "
123a0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
123b0 20 20 20 20 20 20 20 20 22 61 6e 79 20 6b 65 79          "any key
123c0 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 22 2c 20   to continue.", 
123d0 28 74 68 69 73 50 72 6f 63 65 73 73 20 21 3d 20  (thisProcess != 
123e0 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20  null) ?..       
123f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
12400 73 50 72 6f 63 65 73 73 2e 49 64 2e 54 6f 53 74  sProcess.Id.ToSt
12410 72 69 6e 67 28 29 20 3a 20 22 3c 75 6e 6b 6e 6f  ring() : "<unkno
12420 77 6e 3e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  wn>");....      
12430 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
12450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12460 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 52 65        Console.Re
12470 61 64 4b 65 79 28 74 72 75 65 29 3b 20 2f 2a 20  adKey(true); /* 
12480 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
12490 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
124a0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
124b0 63 68 20 28 49 6e 76 61 6c 69 64 4f 70 65 72 61  ch (InvalidOpera
124c0 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 29 20 2f  tionException) /
124d0 2f 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65  / Console.ReadKe
124e0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
124f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12500 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
12510 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
12520 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
12540 65 62 75 67 67 65 72 2e 42 72 65 61 6b 28 29 3b  ebugger.Break();
12550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
12560 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
12570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
125b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
125c0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
125d0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 72  Configuration Cr
125e0 65 61 74 65 44 65 66 61 75 6c 74 28 29 0d 0a 20  eateDefault().. 
125f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
12610 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d  ring directory =
12620 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
12630 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
12640 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75  oreFileName = nu
12650 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
12660 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71       string linq
12670 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b  FileName = null;
12680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12690 20 20 73 74 72 69 6e 67 20 65 66 36 46 69 6c 65    string ef6File
126a0 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Name = null;..  
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
126c0 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c  ring designerFil
126d0 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  eName = null;...
126e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
126f0 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65 4e   GetDefaultFileN
12700 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ames(..         
12710 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 64             ref d
12720 69 72 65 63 74 6f 72 79 2c 20 72 65 66 20 63 6f  irectory, ref co
12730 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72 65 66 20  reFileName, ref 
12740 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  linqFileName,.. 
12750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12760 20 20 20 72 65 66 20 65 66 36 46 69 6c 65 4e 61     ref ef6FileNa
12770 6d 65 2c 20 72 65 66 20 64 65 73 69 67 6e 65 72  me, ref designer
12780 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
12790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
127a0 74 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69 67 75  turn new Configu
127b0 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ration(..       
127c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
127d0 73 41 73 73 65 6d 62 6c 79 2c 20 6e 75 6c 6c 2c  sAssembly, null,
127e0 20 64 69 72 65 63 74 6f 72 79 2c 20 63 6f 72 65   directory, core
127f0 46 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71 46 69  FileName, linqFi
12800 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 65 66 36               ef6
12820 46 69 6c 65 4e 61 6d 65 2c 20 64 65 73 69 67 6e  FileName, design
12830 65 72 46 69 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c  erFileName, null
12840 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20  , null, null,.. 
12850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12860 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
12870 67 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70  gFormat, TraceOp
12880 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a  s.TraceFormat,..
12890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128a0 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73      InstallFlags
128b0 2e 44 65 66 61 75 6c 74 2c 20 50 72 6f 76 69 64  .Default, Provid
128c0 65 72 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 2c  erFlags.Default,
128d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
128e0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
128f0 69 74 79 2e 44 65 66 61 75 6c 74 2c 20 54 72 61  ity.Default, Tra
12900 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75  cePriority.Defau
12910 6c 74 2c 20 66 61 6c 73 65 2c 20 74 72 75 65 2c  lt, false, true,
12920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12930 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c        false, fal
12940 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
12950 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
12960 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20  false, false,.. 
12970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12980 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c     false, false,
12990 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
129a0 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
129b0 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20  se, false,..    
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129d0 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
129e0 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
129f0 65 2c 20 74 72 75 65 2c 20 74 72 75 65 2c 20 66  e, true, true, f
12a00 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alse,..         
12a10 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
12a20 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  , false);..     
12a30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
12a40 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
12a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
12a90 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
12aa0 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
12ab0 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
12ac0 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
12ad0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
12ae0 20 62 6f 6f 6c 20 46 72 6f 6d 41 72 67 73 28 0d   bool FromArgs(.
12af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12b00 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d   string[] args,.
12b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12b20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20   bool strict,.. 
12b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
12b40 65 66 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ef Configuration
12b50 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d   configuration,.
12b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12b70 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
12b80 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
12b90 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
12ba0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12bb0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
12bc0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12be0 20 69 66 20 28 61 72 67 73 20 3d 3d 20 6e 75 6c   if (args == nul
12bf0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
12c00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
12c10 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20  rn true;....    
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c30 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
12c40 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
12c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c60 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
12c70 6e 20 3d 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  n = Configuratio
12c80 6e 2e 43 72 65 61 74 65 44 65 66 61 75 6c 74 28  n.CreateDefault(
12c90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
12ca0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65            int le
12cb0 6e 67 74 68 20 3d 20 61 72 67 73 2e 4c 65 6e 67  ngth = args.Leng
12cc0 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  th;....         
12cd0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
12ce0 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69  int index = 0; i
12cf0 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69  ndex < length; i
12d00 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20  ndex++)..       
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d30 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 61          string a
12d40 72 67 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d  rg = args[index]
12d50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12d60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
12d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d80 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
12d90 3a 20 53 6b 69 70 20 61 6e 79 20 61 72 67 75 6d  : Skip any argum
12da0 65 6e 74 20 74 68 61 74 20 69 73 20 6e 75 6c 6c  ent that is null
12db0 20 28 3f 29 20 6f 72 20 61 6e 20 65 6d 70 74 79   (?) or an empty
12dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12dd0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
12de0 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20     string...    
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e00 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
12e30 6c 4f 72 45 6d 70 74 79 28 61 72 67 29 29 0d 0a  lOrEmpty(arg))..
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e50 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
12e60 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
12e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e80 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
12e90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12ea0 4e 4f 54 45 3a 20 57 65 20 61 72 65 20 67 6f 69  NOTE: We are goi
12eb0 6e 67 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  ng to modify the
12ec0 20 6f 72 69 67 69 6e 61 6c 20 61 72 67 75 6d 65   original argume
12ed0 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
12ef0 20 20 20 20 20 62 79 20 72 65 6d 6f 76 69 6e 67       by removing
12f00 20 61 6e 79 20 6c 65 61 64 69 6e 67 20 6f 70 74   any leading opt
12f10 69 6f 6e 20 63 68 61 72 61 63 74 65 72 73 3b 0d  ion characters;.
12f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12f30 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
12f40 20 20 74 68 65 72 65 66 6f 72 65 2c 20 77 65 20    therefore, we 
12f50 75 73 65 20 61 20 6e 65 77 20 73 74 72 69 6e 67  use a new string
12f60 20 74 6f 20 68 6f 6c 64 20 74 68 65 0d 0a 20 20   to hold the..  
12f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f80 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d        //       m
12f90 6f 64 69 66 69 65 64 20 61 72 67 75 6d 65 6e 74  odified argument
12fa0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12fb0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fd0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65         string ne
12fe0 77 41 72 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20  wArg = arg;.... 
12ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13000 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13020 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20     // NOTE: All 
13030 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 63 6f  the supported co
13040 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f  mmand line optio
13050 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20  ns must..       
13060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13070 20 2f 2f 20 20 20 20 20 20 20 62 65 67 69 6e 20   //       begin 
13080 77 69 74 68 20 61 6e 20 6f 70 74 69 6f 6e 20 63  with an option c
13090 68 61 72 61 63 74 65 72 20 28 65 2e 67 2e 20 61  haracter (e.g. a
130a0 20 6d 69 6e 75 73 0d 0a 20 20 20 20 20 20 20 20   minus..        
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130c0 2f 2f 20 20 20 20 20 20 20 6f 72 20 66 6f 72 77  //       or forw
130d0 61 72 64 20 73 6c 61 73 68 29 3b 20 61 74 74 65  ard slash); atte
130e0 6d 70 74 20 74 6f 20 76 61 6c 69 64 61 74 65 20  mpt to validate 
130f0 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20  that..          
13100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
13110 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 49 66 20         now.  If 
13120 77 65 20 66 61 69 6c 20 69 6e 20 73 74 72 69 63  we fail in stric
13130 74 20 6d 6f 64 65 2c 20 77 65 20 61 72 65 20 64  t mode, we are d
13140 6f 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  one;..          
13150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
13160 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73 65         otherwise
13170 2c 20 6a 75 73 74 20 73 6b 69 70 20 74 68 69 73  , just skip this
13180 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 61 64   argument and ad
13190 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20  vance..         
131a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
131b0 2f 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 6e  /       to the n
131c0 65 78 74 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20  ext one...      
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131e0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
131f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13200 20 28 21 43 68 65 63 6b 4f 70 74 69 6f 6e 28 72   (!CheckOption(r
13210 65 66 20 6e 65 77 41 72 67 29 29 0d 0a 20 20 20  ef newArg))..   
13220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13230 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13250 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
13260 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
13270 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
13280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13290 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
132a0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
132b0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
132c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
132e0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
132f0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
13300 20 20 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 22 55 6e 73 75 70            "Unsup
13320 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
13330 69 6e 65 20 61 72 67 75 6d 65 6e 74 3a 20 7b 30  ine argument: {0
13340 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
13370 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65  arg)), traceCate
13380 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133a0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
133b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
133e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13400 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13420 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
13430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13440 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
13450 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
13460 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70  OTE: All the sup
13470 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
13480 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74  ine options must
13490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
134a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
134b0 20 20 20 68 61 76 65 20 61 20 76 61 6c 75 65 3b     have a value;
134c0 20 74 68 65 72 65 66 6f 72 65 2c 20 61 74 74 65   therefore, atte
134d0 6d 70 74 20 74 6f 20 61 64 76 61 6e 63 65 0d 0a  mpt to advance..
134e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134f0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
13500 20 74 6f 20 69 74 20 6e 6f 77 2e 20 20 49 66 20   to it now.  If 
13510 77 65 20 66 61 69 6c 2c 20 77 65 20 61 72 65 20  we fail, we are 
13520 64 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  done...         
13530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13540 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
13550 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
13560 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
13570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
13580 66 20 28 69 6e 64 65 78 20 3e 3d 20 6c 65 6e 67  f (index >= leng
13590 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  th)..           
135a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135c0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
135d0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
135e0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13600 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
13610 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
13620 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
13630 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13650 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
13660 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
13670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13690 20 20 22 4d 69 73 73 69 6e 67 20 76 61 6c 75 65    "Missing value
136a0 20 66 6f 72 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d   for option: {0}
136b0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136d0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
136e0 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  rg)), traceCateg
136f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
13700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13710 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
13720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13740 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
13750 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
13770 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
13780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13790 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
137a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137c0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
137d0 20 47 72 61 62 20 74 68 65 20 74 65 78 74 75 61   Grab the textua
137e0 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  l value of this 
137f0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20  command line..  
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13810 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
13820 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ption...        
13830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13840 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
13850 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
13860 6e 67 20 74 65 78 74 20 3d 20 61 72 67 73 5b 69  ng text = args[i
13870 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex];....      
13880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13890 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
138a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
138b0 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75   NOTE: Figure ou
138c0 74 20 77 68 69 63 68 20 63 6f 6d 6d 61 6e 64 20  t which command 
138d0 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 74 68 69 73  line option this
138e0 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20   is..           
138f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
13900 20 20 20 20 20 20 28 62 61 73 65 64 20 6f 6e 20        (based on 
13910 61 20 70 61 72 74 69 61 6c 20 6e 61 6d 65 20 6d  a partial name m
13920 61 74 63 68 29 20 61 6e 64 20 74 68 65 6e 20 74  atch) and then t
13930 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
13940 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
13950 20 20 20 20 20 74 6f 20 69 6e 74 65 72 70 72 65       to interpre
13960 74 20 74 68 65 20 74 65 78 74 75 61 6c 20 76 61  t the textual va
13970 6c 75 65 20 61 73 20 74 68 65 20 63 6f 72 72 65  lue as the corre
13980 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ct..            
13990 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
139a0 20 20 20 20 20 74 79 70 65 2e 0d 0a 20 20 20 20       type...    
139b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139c0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139e0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
139f0 6e 65 77 41 72 67 2c 20 22 62 72 65 61 6b 22 29  newArg, "break")
13a00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13a10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 20 20 62 6f 6f 6c 3f 20            bool? 
13a40 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
13a50 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
13a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
13a80 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
13a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13aa0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
13ad0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
13ae0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
13af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b10 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
13b20 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
13b30 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
13b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
13b60 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
13b70 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
13b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ba0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
13bb0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
13bc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13be0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
13bf0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
13c00 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
13c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
13c40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c60 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
13c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c90 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
13ca0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cc0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
13cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13d00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
13d10 28 28 62 6f 6f 6c 29 76 61 6c 75 65 29 0d 0a 20  ((bool)value).. 
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
13d40 72 65 61 6b 49 6e 74 6f 44 65 62 75 67 67 65 72  reakIntoDebugger
13d50 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
13d60 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
13d90 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
13da0 41 72 67 2c 20 22 63 6f 6e 66 69 67 56 65 72 73  Arg, "configVers
13db0 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ion"))..        
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13df0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e  onfiguration.con
13e00 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 74 65 78  figVersion = tex
13e10 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
13e20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e40 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
13e50 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
13e60 72 67 2c 20 22 63 6f 6e 66 69 72 6d 22 29 29 0d  rg, "confirm")).
13e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13e80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ea0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
13eb0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
13ec0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ee0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
13ef0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
13f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
13f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f30 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
13f40 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
13f50 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f80 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
13f90 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
13fa0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
13fd0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
13fe0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
14010 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
14020 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
14030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14050 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
14060 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
14070 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
14080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
140a0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
140b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
140c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140d0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14100 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
14110 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14130 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
14140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14150 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
14180 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d  guration.confirm
14190 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
141a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
141b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141d0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
141e0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
141f0 20 22 63 6f 72 65 46 69 6c 65 4e 61 6d 65 22 29   "coreFileName")
14200 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14210 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14230 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
14240 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65  uration.coreFile
14250 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20  Name = text;..  
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14270 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14290 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
142a0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64  ption(newArg, "d
142b0 65 62 75 67 22 29 29 0d 0a 20 20 20 20 20 20 20  ebug"))..       
142c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142f0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
14300 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
14310 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14330 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
14340 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14360 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14380 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
14390 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
143a0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143c0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
143d0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
143e0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14410 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
14420 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
14430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14450 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
14460 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
14470 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
14480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
144a0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
144b0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
144c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
144f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
14500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14510 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
14520 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
14530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14540 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
14550 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14570 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
14580 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
145d0 2e 64 65 62 75 67 20 3d 20 28 62 6f 6f 6c 29 76  .debug = (bool)v
145e0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
14600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14610 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
14620 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
14630 65 77 41 72 67 2c 20 22 64 65 62 75 67 46 6f 72  ewArg, "debugFor
14640 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20  mat"))..        
14650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14660 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
14680 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62  onfiguration.deb
14690 75 67 46 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b  ugFormat = text;
146a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
146b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
146c0 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d  aceOps.DebugForm
146d0 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  at = configurati
146e0 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d  on.debugFormat;.
146f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14700 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14720 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
14730 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
14740 20 22 64 65 62 75 67 50 72 69 6f 72 69 74 79 22   "debugPriority"
14750 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
14760 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14780 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
14790 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45  t value = ParseE
147a0 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  num(..          
147b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147c0 20 20 20 20 20 20 74 79 70 65 6f 66 28 54 72 61        typeof(Tra
147d0 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65 78  cePriority), tex
147e0 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20  t, true);....   
147f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14800 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
14810 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14830 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14850 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
14860 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
14870 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
14880 20 20 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 20 20 20 20 20 20                  
148a0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
148b0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
148c0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
148d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
148f0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
14900 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
14910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
14930 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75 65  nvalid {0} value
14940 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14960 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
14970 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
14980 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
14990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
149a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149b0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
149c0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149e0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
149f0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
14a20 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
14a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a40 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
14a50 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
14a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a90 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
14aa0 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d  .debugPriority =
14ab0 20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29   (TracePriority)
14ac0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ae0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
14af0 75 67 50 72 69 6f 72 69 74 79 20 3d 20 63 6f 6e  ugPriority = con
14b00 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67  figuration.debug
14b10 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
14b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
14b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
14b50 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
14b60 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 73 69  on(newArg, "desi
14b70 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 29 29 0d  gnerFileName")).
14b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14b90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
14bc0 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69  ation.designerFi
14bd0 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a  leName = text;..
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bf0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
14c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c10 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
14c20 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
14c30 22 64 69 72 65 63 74 6f 72 79 22 29 29 0d 0a 20  "directory")).. 
14c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c70 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
14c80 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 20 3d 20  ion.directory = 
14c90 74 65 78 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  text;....       
14ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cb0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cd0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53       // NOTE: *S
14ce0 50 45 43 49 41 4c 2a 20 4d 75 73 74 20 72 65 66  PECIAL* Must ref
14cf0 72 65 73 68 20 74 68 65 20 66 69 6c 65 20 6e 61  resh the file na
14d00 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mes..           
14d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d20 20 2f 2f 20 20 20 20 20 20 20 68 65 72 65 20 62   //       here b
14d30 65 63 61 75 73 65 20 74 68 65 20 75 6e 64 65 72  ecause the under
14d40 6c 79 69 6e 67 20 64 69 72 65 63 74 6f 72 79 0d  lying directory.
14d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14d60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
14d70 20 20 20 20 20 20 68 61 73 20 63 68 61 6e 67 65        has change
14d80 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
14d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14da0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
14db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dc0 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e  string coreFileN
14dd0 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  ame = configurat
14de0 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ion.coreFileName
14df0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e10 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
14e20 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 46  ullOrEmpty(coreF
14e30 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
14e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e50 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46             coreF
14e60 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47  ileName = Path.G
14e70 65 74 46 69 6c 65 4e 61 6d 65 28 63 6f 72 65 46  etFileName(coreF
14e80 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
14e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ea0 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
14eb0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
14ec0 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29  y(coreFileName))
14ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ef0 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d    coreFileName =
14f00 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46   Installer.CoreF
14f10 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
14f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f30 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
14f40 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61  ation.coreFileNa
14f50 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
14f60 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
14f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f80 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
14f90 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 63 6f 72  n.directory, cor
14fa0 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  eFileName);.... 
14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fc0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
14fd0 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  g linqFileName =
14fe0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c   configuration.l
14ff0 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  inqFileName;....
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15010 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
15020 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
15030 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e 61  Empty(linqFileNa
15040 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
15050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15060 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61        linqFileNa
15070 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  me = Path.GetFil
15080 65 4e 61 6d 65 28 6c 69 6e 71 46 69 6c 65 4e 61  eName(linqFileNa
15090 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150b0 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
150c0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e  sNullOrEmpty(lin
150d0 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  qFileName))..   
150e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150f0 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e               lin
15100 71 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74  qFileName = Inst
15110 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e 61  aller.LinqFileNa
15120 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
15130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15140 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
15150 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20  .linqFileName = 
15160 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
15170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15190 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72  onfiguration.dir
151a0 65 63 74 6f 72 79 2c 20 6c 69 6e 71 46 69 6c 65  ectory, linqFile
151b0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
151c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151d0 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 66 36        string ef6
151e0 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69  FileName = confi
151f0 67 75 72 61 74 69 6f 6e 2e 65 66 36 46 69 6c 65  guration.ef6File
15200 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15220 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
15230 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 65  .IsNullOrEmpty(e
15240 66 36 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  f6FileName))..  
15250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 66                ef
15270 36 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  6FileName = Path
15280 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 65 66 36  .GetFileName(ef6
15290 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
152a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
152c0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
152d0 74 79 28 65 66 36 46 69 6c 65 4e 61 6d 65 29 29  ty(ef6FileName))
152e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
152f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15300 20 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20    ef6FileName = 
15310 49 6e 73 74 61 6c 6c 65 72 2e 45 66 36 46 69 6c  Installer.Ef6Fil
15320 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eName;....      
15330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15340 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
15350 69 6f 6e 2e 65 66 36 46 69 6c 65 4e 61 6d 65 20  ion.ef6FileName 
15360 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d  = Path.Combine(.
15370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15390 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
153a0 69 72 65 63 74 6f 72 79 2c 20 65 66 36 46 69 6c  irectory, ef6Fil
153b0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
153e0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
153f0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
15400 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b  esignerFileName;
15410 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15430 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
15440 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e  llOrEmpty(design
15450 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  erFileName))..  
15460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
15480 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
15490 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d   Path.GetFileNam
154a0 65 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  e(designerFileNa
154b0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
154c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154d0 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
154e0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73  sNullOrEmpty(des
154f0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d  ignerFileName)).
15500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15520 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
15530 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65  e = Installer.De
15540 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d  signerFileName;.
15550 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15570 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73  onfiguration.des
15580 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
15590 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
155a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
155c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72  onfiguration.dir
155d0 65 63 74 6f 72 79 2c 20 64 65 73 69 67 6e 65 72  ectory, designer
155e0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  FileName);..    
155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15600 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
15620 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
15630 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 65 66 36  ion(newArg, "ef6
15640 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20  FileName"))..   
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15660 20 20 20 20 20 7b 0d 0a 20 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 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
15690 6e 2e 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20  n.ef6FileName = 
156a0 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
156b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
156c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
156d0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
156e0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
156f0 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 22  ewArg, "install"
15700 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
15710 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15730 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
15740 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
15750 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
15760 20 20 20 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 20 69 66 20 28              if (
15780 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
15790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
157b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
157d0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
157e0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15810 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
15820 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
15830 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
15860 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
15870 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
15880 20 20 20 20 20 20 20 20 20 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 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
158b0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
158c0 22 2c 0d 0a 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 20 20                  
158e0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
158f0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
15900 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
15910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15930 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
15940 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
15970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15990 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
159a0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
159b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159c0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
159d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
159f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
15a10 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74  nfiguration.inst
15a20 61 6c 6c 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  all = (bool)valu
15a30 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
15a40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a60 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
15a70 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
15a80 72 67 2c 20 22 69 6e 73 74 61 6c 6c 46 6c 61 67  rg, "installFlag
15a90 73 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  s"))..          
15aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
15ad0 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ect value = Pars
15ae0 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20  eEnum(..        
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b00 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 49          typeof(I
15b10 6e 73 74 61 6c 6c 46 6c 61 67 73 29 2c 20 74 65  nstallFlags), te
15b20 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
15b50 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
15b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b90 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
15ba0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
15bb0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
15bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15be0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
15bf0 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
15c00 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
15c30 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
15c40 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
15c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
15c70 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75  Invalid {0} valu
15c80 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
15c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
15cb0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
15cc0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
15cd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cf0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
15d00 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
15d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
15d30 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d50 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
15d60 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d80 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
15d90 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
15da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15db0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
15dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dd0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
15de0 6e 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d  n.installFlags =
15df0 20 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29 76   (InstallFlags)v
15e00 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
15e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15e30 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
15e40 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
15e50 65 77 41 72 67 2c 20 22 6c 69 6e 71 46 69 6c 65  ewArg, "linqFile
15e60 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20  Name"))..       
15e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ea0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69  configuration.li
15eb0 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  nqFileName = tex
15ec0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
15ed0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ef0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
15f00 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
15f10 72 67 2c 20 22 6c 6f 67 46 69 6c 65 4e 61 6d 65  rg, "logFileName
15f20 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f50 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
15f60 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c  iguration.logFil
15f70 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
15f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fb0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
15fc0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
15fd0 6e 6f 43 6f 6d 70 61 63 74 22 29 29 0d 0a 20 20  noCompact"))..  
15fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ff0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
16020 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
16030 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
16040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16050 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
16060 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16080 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
160b0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
160c0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
160f0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
16100 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
16110 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
16120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16130 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
16140 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
16150 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
16160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16170 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
16180 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
16190 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
161a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161c0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
161d0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
161e0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
161f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16200 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
16210 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
16220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16240 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
16250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
16270 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
16280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162e0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
162f0 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70 61 63 74 20  ation.noCompact 
16300 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
16310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16320 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16340 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
16350 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
16360 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29 29 0d 0a 20  "noConsole")).. 
16370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16380 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163a0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
163b0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
163c0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
163d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163e0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
163f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16410 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16430 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
16440 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
16450 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
16480 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
16490 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
164a0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
164b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
164d0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
164e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16500 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
16510 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
16520 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
16530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16550 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
16560 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
16570 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
16580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16590 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
165a0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
165d0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
165e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16600 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
16610 0a 20 20 20 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 20 20 20 20                  
16630 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16650 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16670 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
16680 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65  ration.noConsole
16690 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
166a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
166b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166d0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
166e0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
166f0 20 22 6e 6f 44 65 73 6b 74 6f 70 22 29 29 0d 0a   "noDesktop"))..
16700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16710 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
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 62 6f 6f 6c 3f 20 76 61 6c         bool? val
16740 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
16750 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16770 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
16780 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
167b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167c0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
167d0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
167e0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16810 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
16820 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
16830 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
16840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16850 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16860 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
16870 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16890 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
168a0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
168b0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
168c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168e0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
168f0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
16900 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
16910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16920 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
16930 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16960 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
16970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16990 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
169a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
169b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169c0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
169f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a00 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
16a10 75 72 61 74 69 6f 6e 2e 6e 6f 44 65 73 6b 74 6f  uration.noDeskto
16a20 70 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  p = (bool)value;
16a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16a40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
16a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a60 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
16a70 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
16a80 2c 20 22 6e 6f 4c 6f 67 22 29 29 0d 0a 20 20 20  , "noLog"))..   
16a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16aa0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ac0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
16ad0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
16ae0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b00 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
16b10 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
16b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b50 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
16b60 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
16b70 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b90 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
16ba0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
16bb0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
16bc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16be0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
16bf0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
16c00 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
16c30 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
16c40 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c70 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
16c80 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
16c90 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
16ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cb0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16cc0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
16cf0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
16d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
16d20 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
16d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16d50 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
16d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d90 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
16da0 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20 28 62 6f  tion.noLog = (bo
16db0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
16dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
16de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
16df0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
16e00 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65  on(newArg, "noNe
16e10 74 46 78 32 30 22 29 29 0d 0a 20 20 20 20 20 20  tFx20"))..      
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e30 20 20 7b 0d 0a 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 20 20                  
16e50 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
16e60 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
16e70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e90 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
16ea0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ec0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ee0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
16ef0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
16f00 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
16f30 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
16f40 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
16f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f70 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16f80 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
16f90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fb0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
16fc0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
16fd0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
16fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
17000 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
17010 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
17020 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17040 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
17050 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17070 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
17080 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
170b0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
170c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170d0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
170e0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
170f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17100 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
17130 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 28 62  n.noNetFx20 = (b
17140 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
17150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17160 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
17170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
17180 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
17190 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e  ion(newArg, "noN
171a0 65 74 46 78 33 35 22 29 29 0d 0a 20 20 20 20 20  etFx35"))..     
171b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171e0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
171f0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
17200 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17220 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
17230 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17250 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17270 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
17280 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
17290 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172b0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
172c0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
172d0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
172e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
172f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17300 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
17310 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
17320 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
17330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17340 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
17350 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
17360 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
17370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
17390 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
173a0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
173b0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
173c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
173e0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
173f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17400 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
17410 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17430 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
17440 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17460 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
17470 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17490 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
174c0 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 28  on.noNetFx35 = (
174d0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
174e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
17500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17510 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
17520 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
17530 4e 65 74 46 78 34 30 22 29 29 0d 0a 20 20 20 20  NetFx40"))..    
17540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17550 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17570 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
17580 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
17590 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
175a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175b0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
175c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
175f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17600 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
17610 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
17620 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17640 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
17650 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
17660 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
17670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17690 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
176a0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
176b0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176d0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
176e0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
176f0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17720 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
17730 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
17740 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
17750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17760 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17770 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17790 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
177a0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
177b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
177d0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
17800 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
17810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17820 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17840 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
17850 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20  ion.noNetFx40 = 
17860 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
17870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17880 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
17890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178a0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
178b0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
178c0 6f 4e 65 74 46 78 34 35 22 29 29 0d 0a 20 20 20  oNetFx45"))..   
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
178f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17900 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
17910 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
17920 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17940 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
17950 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17990 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
179a0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
179b0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179d0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
179e0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
179f0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
17a00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
17a30 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
17a40 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
17a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a60 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
17a70 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
17a80 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
17a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ab0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
17ac0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
17ad0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
17ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17af0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
17b00 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
17b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17b30 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
17b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
17b60 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
17b90 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
17ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bd0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
17be0 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20 3d  tion.noNetFx45 =
17bf0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
17c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c30 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
17c40 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
17c50 6e 6f 4e 65 74 46 78 34 35 31 22 29 29 0d 0a 20  noNetFx451")).. 
17c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
17c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c90 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
17ca0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
17cb0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cd0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
17ce0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
17cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
17d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
17d30 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
17d40 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
17d70 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
17d80 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
17d90 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17db0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17dc0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
17dd0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
17de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17df0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
17e00 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
17e10 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e40 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
17e50 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
17e60 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
17e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
17e90 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
17ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
17ec0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
17ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ef0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
17f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
17f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
17f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f60 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
17f70 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35  ration.noNetFx45
17f80 31 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  1 = (bool)value;
17f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17fa0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fc0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
17fd0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
17fe0 2c 20 22 6e 6f 4e 65 74 46 78 34 35 32 22 29 29  , "noNetFx452"))
17ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18000 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18020 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
18030 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
18040 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
18050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18060 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
18070 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
18080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18090 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
180a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
180c0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
180d0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18100 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
18110 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
18120 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18140 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
18150 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
18160 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
18190 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
181a0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
181b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
181e0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
181f0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18220 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
18230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18250 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18280 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
18290 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182b0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
182c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
18300 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
18310 78 34 35 32 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  x452 = (bool)val
18320 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18350 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
18360 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
18370 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 36 22  Arg, "noNetFx46"
18380 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
18390 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
183a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
183c0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
183d0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
183e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18400 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
18410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18420 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
18450 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
18460 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
18470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18490 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
184a0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
184b0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
184c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
184e0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
184f0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18520 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
18530 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
18540 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
18550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18560 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
18570 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
18580 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185b0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
185c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
185d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185e0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
185f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18610 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
18620 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
18630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18640 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
18650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
18690 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
186a0 74 46 78 34 36 20 3d 20 28 62 6f 6f 6c 29 76 61  tFx46 = (bool)va
186b0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
186c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
186d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
186e0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
186f0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
18700 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 36  wArg, "noNetFx46
18710 31 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  1"))..          
18720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
18750 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
18760 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
18770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
18790 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
187a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
187c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187e0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
187f0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
18800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18820 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
18830 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
18840 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
18850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18870 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
18880 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188b0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
188c0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
188d0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188f0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
18900 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
18910 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18940 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
18950 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18970 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
18980 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
189b0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189d0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
189e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
189f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18a00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
18a30 4e 65 74 46 78 34 36 31 20 3d 20 28 62 6f 6f 6c  NetFx461 = (bool
18a40 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18a70 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
18a80 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
18a90 28 6e 65 77 41 72 67 2c 20 22 6e 6f 52 75 6e 74  (newArg, "noRunt
18aa0 69 6d 65 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20  imeVersion")).. 
18ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ac0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ae0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
18af0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
18b00 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
18b30 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b70 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
18b80 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
18b90 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
18bc0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
18bd0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
18be0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c00 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
18c10 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
18c20 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
18c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c40 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
18c50 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
18c60 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c90 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
18ca0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
18cb0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
18cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
18ce0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
18cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18d10 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
18d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d40 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
18d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d70 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
18dc0 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65  ration.noRuntime
18dd0 56 65 72 73 69 6f 6e 20 3d 20 28 62 6f 6f 6c 29  Version = (bool)
18de0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
18df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e00 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
18e10 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
18e20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
18e30 6e 65 77 41 72 67 2c 20 22 6e 6f 54 72 61 63 65  newArg, "noTrace
18e40 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e70 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
18e80 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
18e90 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
18ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
18ec0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
18ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f10 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
18f20 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
18f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f50 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
18f60 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
18f70 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18fa0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
18fb0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fe0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
18ff0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
19000 7d 22 2c 0d 0a 20 20 20 20 20 20 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 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
19030 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
19040 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19070 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
19080 3b 0d 0a 0d 0a 20 20 20 20 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 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
190b0 0d 0a 20 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 20 20 20 20 20                  
190d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
190e0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19100 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
19110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19130 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
19150 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54  onfiguration.noT
19160 72 61 63 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  race = (bool)val
19170 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
19180 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191a0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
191b0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
191c0 41 72 67 2c 20 22 6e 6f 56 73 32 30 30 35 22 29  Arg, "noVs2005")
191d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
191e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19200 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
19210 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
19220 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
19230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19240 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
19250 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
19260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19270 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
192a0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
192b0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
192c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192e0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
192f0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
19300 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
19310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19320 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
19330 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
19340 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
19350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19370 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
19380 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
19390 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
193c0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
193d0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
19410 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19430 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
19440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19460 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
19470 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19490 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
194a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
194c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
194d0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
194e0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32  figuration.noVs2
194f0 30 30 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  005 = (bool)valu
19500 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
19510 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
19520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19530 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
19540 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
19550 72 67 2c 20 22 6e 6f 56 73 32 30 30 38 22 29 29  rg, "noVs2008"))
19560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19570 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19590 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
195a0 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
195b0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
195c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
195e0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19600 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
19630 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
19640 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19670 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
19680 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
19690 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
196c0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
196d0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
196e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19700 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
19710 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
19720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19740 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
19750 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
19760 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
19770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19790 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
197a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197c0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197f0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
19800 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19820 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
19830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19840 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
19870 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30  iguration.noVs20
19880 30 38 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  08 = (bool)value
19890 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
198a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198c0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
198d0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
198e0 67 2c 20 22 6e 6f 56 73 32 30 31 30 22 29 29 0d  g, "noVs2010")).
198f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19900 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19920 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
19930 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
19940 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19960 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
19970 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19990 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
199a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199b0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
199c0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
199d0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
199e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a00 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
19a10 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
19a20 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
19a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a40 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
19a50 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
19a60 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
19a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
19a90 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
19aa0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
19ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ad0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
19ae0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
19af0 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
19b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
19b20 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
19b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b50 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b80 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
19b90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
19be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bf0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
19c00 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
19c10 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  0 = (bool)value;
19c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19c30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
19c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c50 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
19c60 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
19c70 2c 20 22 6e 6f 56 73 32 30 31 32 22 29 29 0d 0a  , "noVs2012"))..
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cb0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
19cc0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
19cd0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cf0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
19d00 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d40 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
19d50 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
19d60 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d90 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
19da0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
19db0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dd0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
19de0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
19df0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
19e20 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
19e30 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
19e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e60 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
19e70 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
19e80 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
19e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
19eb0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ee0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
19ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f10 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
19f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f40 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
19f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f80 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
19f90 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32  uration.noVs2012
19fa0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
19fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19fc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
19fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fe0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
19ff0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
1a000 20 22 6e 6f 56 73 32 30 31 33 22 29 29 0d 0a 20   "noVs2013")).. 
1a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a020 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a040 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
1a050 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
1a060 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
1a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a080 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
1a090 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0d0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1a0e0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
1a0f0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1a120 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
1a130 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
1a140 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a160 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a170 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1a180 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1a0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
1a1b0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
1a1c0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1f0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
1a200 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
1a210 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a230 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1a240 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a270 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
1a280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
1a2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2d0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
1a2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a310 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1a320 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 33 20  ration.noVs2013 
1a330 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
1a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a350 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a370 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
1a380 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
1a390 22 6e 6f 56 73 32 30 31 35 22 29 29 0d 0a 20 20  "noVs2015"))..  
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3d0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
1a3e0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
1a3f0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a410 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
1a420 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1a430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a440 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a460 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1a470 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1a480 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
1a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1a4b0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
1a4c0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
1a4d0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1a500 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1a510 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a530 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
1a540 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
1a550 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
1a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a580 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
1a590 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
1a5a0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5c0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a5d0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1a5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1a600 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
1a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1a630 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a660 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
1a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a680 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6a0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1a6b0 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 35 20 3d  ation.noVs2015 =
1a6c0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a700 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
1a710 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
1a720 70 65 72 55 73 65 72 22 29 29 0d 0a 20 20 20 20  perUser"))..    
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a740 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a760 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
1a770 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
1a780 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
1a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7a0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
1a7b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7f0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
1a800 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1a810 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a830 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1a840 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
1a850 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
1a860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a880 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1a890 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1a8a0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8c0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
1a8d0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
1a8e0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
1a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a910 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
1a920 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
1a930 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a950 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a960 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a980 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1a990 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
1a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1a9c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
1a9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1a9f0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa30 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1aa40 69 6f 6e 2e 70 65 72 55 73 65 72 20 3d 20 28 62  ion.perUser = (b
1aa50 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1aa90 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
1aaa0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 70 72 6f  ion(newArg, "pro
1aab0 76 69 64 65 72 46 6c 61 67 73 22 29 29 0d 0a 20  viderFlags")).. 
1aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aad0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaf0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
1ab00 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d  ue = ParseEnum(.
1ab10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab30 20 74 79 70 65 6f 66 28 50 72 6f 76 69 64 65 72   typeof(Provider
1ab40 46 6c 61 67 73 29 2c 20 74 65 78 74 2c 20 74 72  Flags), text, tr
1ab50 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
1ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab70 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
1ab80 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aba0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abc0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
1abd0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1abe0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1ac10 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
1ac20 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
1ac30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac50 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1ac60 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1ac70 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac90 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
1aca0 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d  d {0} value: {1}
1acb0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acd0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1ace0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
1acf0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
1ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1ad30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad50 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
1ad60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad80 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1ad90 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adb0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1adc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1add0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1ade0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1ae00 6e 66 69 67 75 72 61 74 69 6f 6e 2e 70 72 6f 76  nfiguration.prov
1ae10 69 64 65 72 46 6c 61 67 73 20 3d 20 28 50 72 6f  iderFlags = (Pro
1ae20 76 69 64 65 72 46 6c 61 67 73 29 76 61 6c 75 65  viderFlags)value
1ae30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1ae40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae60 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
1ae70 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
1ae80 67 2c 20 22 72 65 67 69 73 74 72 79 56 65 72 73  g, "registryVers
1ae90 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ion"))..        
1aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aeb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1aed0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 72 65 67  onfiguration.reg
1aee0 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 74  istryVersion = t
1aef0 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1af10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1af20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
1af30 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
1af40 77 41 72 67 2c 20 22 73 74 72 69 63 74 22 29 29  wArg, "strict"))
1af50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1af60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
1af90 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
1afa0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
1afd0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
1afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aff0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b010 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1b020 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
1b030 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b060 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
1b070 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
1b080 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1b0b0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1b0c0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1b0f0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
1b100 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
1b110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b130 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1b140 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
1b150 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
1b160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b180 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1b190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1b0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
1b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1e0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1b1f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b210 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
1b220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b230 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b250 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b270 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1b280 4f 54 45 3a 20 41 6c 6c 6f 77 20 74 68 65 20 63  OTE: Allow the c
1b290 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75  ommand line argu
1b2a0 6d 65 6e 74 73 20 74 6f 0d 0a 20 20 20 20 20 20  ments to..      
1b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2c0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
1b2d0 76 65 72 72 69 64 65 20 74 68 65 20 22 73 74 72  verride the "str
1b2e0 69 63 74 6e 65 73 73 22 20 73 65 74 74 69 6e 67  ictness" setting
1b2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b310 20 20 20 20 20 20 20 70 72 6f 76 69 64 65 64 20         provided 
1b320 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a  by our caller...
1b330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b340 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1b370 63 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  ct = (bool)value
1b380 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1b390 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3b0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
1b3c0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
1b3d0 67 2c 20 22 74 68 72 6f 77 4f 6e 4d 69 73 73 69  g, "throwOnMissi
1b3e0 6e 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ng"))..         
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1b400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
1b420 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
1b430 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
1b440 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b460 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
1b470 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1b490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4b0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
1b4c0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1b4d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1b4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4f0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
1b500 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
1b510 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
1b520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b540 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1b550 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b580 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
1b590 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
1b5a0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5c0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1b5d0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
1b5e0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b610 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1b620 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b640 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
1b650 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b670 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1b680 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
1b690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6a0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1b6b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6f0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74   configuration.t
1b700 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20  hrowOnMissing = 
1b710 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
1b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b730 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b750 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
1b760 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74  ption(newArg, "t
1b770 72 61 63 65 46 6f 72 6d 61 74 22 29 29 0d 0a 20  raceFormat")).. 
1b780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b790 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7b0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1b7c0 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74 20  ion.traceFormat 
1b7d0 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20  = text;..       
1b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7f0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
1b800 61 63 65 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66  aceFormat = conf
1b810 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46  iguration.traceF
1b820 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
1b830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b840 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1b850 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
1b860 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
1b870 6e 65 77 41 72 67 2c 20 22 74 72 61 63 65 50 72  newArg, "tracePr
1b880 69 6f 72 69 74 79 22 29 29 0d 0a 20 20 20 20 20  iority"))..     
1b890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8c0 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d    object value =
1b8d0 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20   ParseEnum(..   
1b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
1b900 65 6f 66 28 54 72 61 63 65 50 72 69 6f 72 69 74  eof(TracePriorit
1b910 79 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b  y), text, true);
1b920 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b940 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
1b950 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1b960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b970 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b990 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
1b9a0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1b9b0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9d0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
1b9e0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
1b9f0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
1ba30 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1ba40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba60 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
1ba70 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  } value: {1}",..
1ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baa0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
1bab0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
1bac0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1baf0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb50 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1bb60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb80 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bba0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbc0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1bbd0 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69  uration.tracePri
1bbe0 6f 72 69 74 79 20 3d 20 28 54 72 61 63 65 50 72  ority = (TracePr
1bbf0 69 6f 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20  iority)value;.. 
1bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc10 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1bc20 4f 70 73 2e 54 72 61 63 65 50 72 69 6f 72 69 74  Ops.TracePriorit
1bc30 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  y = configuratio
1bc40 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  n.tracePriority;
1bc50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bc60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1bc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc80 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
1bc90 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
1bca0 2c 20 22 76 65 72 62 6f 73 65 22 29 29 0d 0a 20  , "verbose")).. 
1bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bce0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
1bcf0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
1bd00 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
1bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
1bd30 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1bd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1bd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd70 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1bd80 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
1bd90 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
1bda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1bdc0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
1bdd0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
1bde0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be00 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1be10 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1be20 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be40 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
1be50 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
1be60 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
1be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be90 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
1bea0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
1beb0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
1bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bed0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1bee0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1bf10 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
1bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf40 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
1bf50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf70 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
1bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfb0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1bfc0 72 61 74 69 6f 6e 2e 76 65 72 62 6f 73 65 20 3d  ration.verbose =
1bfd0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bff0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1c000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c010 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
1c020 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
1c030 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 22  vsVersionSuffix"
1c040 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1c050 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c070 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1c080 67 75 72 61 74 69 6f 6e 2e 76 73 56 65 72 73 69  guration.vsVersi
1c090 6f 6e 53 75 66 66 69 78 20 3d 20 74 65 78 74 3b  onSuffix = text;
1c0a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c0b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0d0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
1c0e0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
1c0f0 2c 20 22 77 68 61 74 49 66 22 29 29 0d 0a 20 20  , "whatIf"))..  
1c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c110 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c130 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
1c140 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
1c150 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
1c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c170 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
1c180 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1c0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1c1d0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1c1e0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1c210 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
1c220 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
1c230 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
1c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c250 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1c260 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1c270 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1c280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c290 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
1c2a0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
1c2b0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
1c2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2e0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
1c2f0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
1c300 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c320 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1c330 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1c340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1c360 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1c390 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3c0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c400 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1c410 61 74 69 6f 6e 2e 77 68 61 74 49 66 20 3d 20 28  ation.whatIf = (
1c420 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
1c430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c440 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1c450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c460 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
1c470 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 77 6f  tion(newArg, "wo
1c480 77 36 34 22 29 29 0d 0a 20 20 20 20 20 20 20 20  w64"))..        
1c490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1c4c0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
1c4d0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
1c4e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c500 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
1c510 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c530 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c550 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
1c560 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1c570 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1c580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c590 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
1c5a0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
1c5b0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5e0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
1c5f0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1c600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c620 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
1c630 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
1c640 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
1c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c660 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1c670 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
1c680 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
1c690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6b0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1c6c0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6e0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
1c6f0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
1c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c710 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1c720 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c740 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1c750 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c770 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c790 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1c7a0 77 6f 77 36 34 20 3d 20 28 62 6f 6f 6c 29 76 61  wow64 = (bool)va
1c7b0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
1c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1c7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c7e0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c800 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c820 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
1c830 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1c840 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
1c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c860 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
1c870 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
1c880 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
1c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1c8b0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1c8c0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 73              "Uns
1c8f0 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64  upported command
1c900 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 3a 20 7b 30   line option: {0
1c910 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c930 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1c940 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65  arg)), traceCate
1c950 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c970 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
1c980 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9a0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1c9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c9c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1c9f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1ca00 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1ca10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1ca20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1ca30 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
1ca40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ca60 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1ca70 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1ca80 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
1ca90 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1cab0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1cac0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74  ceCallback, e, t
1cad0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1cae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1caf0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46        error = "F
1cb00 61 69 6c 65 64 20 74 6f 20 6d 6f 64 69 66 79 20  ailed to modify 
1cb10 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b  configuration.";
1cb20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cb30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1cb40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1cb50 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1cb60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1cb70 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1cb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbb0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1cbc0 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
1cbd0 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
1cbe0 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
1cbf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1cc00 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c  blic static bool
1cc10 20 50 72 6f 63 65 73 73 28 0d 0a 20 20 20 20 20   Process(..     
1cc20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1cc30 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20  g[] args,..     
1cc40 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69             Confi
1cc50 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75  guration configu
1cc60 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ration,..       
1cc70 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74           bool st
1cc80 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rict,..         
1cc90 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
1cca0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
1ccb0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1ccc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ccd0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1cd00 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
1cd10 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
1cd20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1cd30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd50 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c    error = "Inval
1cd60 69 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  id configuration
1cd70 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .";..           
1cd80 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1cd90 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1cdc0 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
1cdd0 79 20 61 73 73 65 6d 62 6c 79 20 3d 20 63 6f 6e  y assembly = con
1cde0 66 69 67 75 72 61 74 69 6f 6e 2e 61 73 73 65 6d  figuration.assem
1cdf0 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  bly;....        
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1ce10 61 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c  assembly == null
1ce20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1ce30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce50 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c    error = "Inval
1ce60 69 64 20 61 73 73 65 6d 62 6c 79 2e 22 3b 0d 0a  id assembly.";..
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1ce90 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1cea0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cec0 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
1ced0 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 29 0d  ration.noTrace).
1cee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cef0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf10 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
1cf20 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20  on.noLog &&..   
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf40 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
1cf50 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f  IsNullOrEmpty(co
1cf60 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46  nfiguration.logF
1cf70 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfb0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfd0 20 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65 20 74    // NOTE: Use t
1cfe0 68 65 20 64 65 66 61 75 6c 74 20 6c 6f 67 20 66  he default log f
1cff0 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20  ile name...     
1d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d010 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1d020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d030 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1d040 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65  tion.logFileName
1d050 20 3d 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d   = GetLogFileNam
1d060 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d080 20 20 20 20 22 74 72 61 63 65 22 29 3b 0d 0a 20      "trace");.. 
1d090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0c0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1d0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1d100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d110 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
1d120 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73  iguration.noCons
1d130 6f 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ole)..          
1d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1d150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d160 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1d170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d180 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d190 4e 4f 54 45 3a 20 49 6e 20 76 65 72 62 6f 73 65  NOTE: In verbose
1d1a0 20 6d 6f 64 65 2c 20 64 65 62 75 67 20 6f 75 74   mode, debug out
1d1b0 70 75 74 20 28 74 68 61 74 20 6d 65 65 74 73 0d  put (that meets.
1d1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d1e0 20 20 20 20 20 20 74 68 65 20 63 6f 6e 66 69 67        the config
1d1f0 75 72 65 64 20 70 72 69 6f 72 69 74 79 20 63 72  ured priority cr
1d200 69 74 65 72 69 61 29 20 77 69 6c 6c 20 62 65 0d  iteria) will be.
1d210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d220 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d230 20 20 20 20 20 20 64 69 73 70 6c 61 79 65 64 20        displayed 
1d240 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65 3b 20  to the console; 
1d250 6f 74 68 65 72 77 69 73 65 2c 20 74 72 61 63 65  otherwise, trace
1d260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d280 20 20 20 20 20 20 20 6f 75 74 70 75 74 20 28 74         output (t
1d290 68 61 74 20 6d 65 65 74 73 20 74 68 65 20 63 6f  hat meets the co
1d2a0 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72 69 74  nfigured priorit
1d2b0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d2d0 2f 20 20 20 20 20 20 20 63 72 69 74 65 72 69 61  /       criteria
1d2e0 29 20 77 69 6c 6c 20 62 65 20 64 69 73 70 6c 61  ) will be displa
1d2f0 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f  yed to the conso
1d300 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le...           
1d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d320 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1d330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d340 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
1d350 6f 6e 2e 64 65 62 75 67 29 0d 0a 20 20 20 20 20  on.debug)..     
1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d370 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d390 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d3c0 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 63   NOTE: Add the c
1d3d0 6f 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c 69 73  onsole trace lis
1d3e0 74 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20 20  tener to the..  
1d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d410 20 20 20 20 20 20 20 6c 69 73 74 20 6f 66 20 74         list of t
1d420 72 61 63 65 20 6c 69 73 74 65 6e 65 72 73 20 6d  race listeners m
1d430 61 69 6e 74 61 69 6e 65 64 20 62 79 0d 0a 20 20  aintained by..  
1d440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d460 20 20 20 20 20 20 20 74 68 65 20 54 72 61 63 65         the Trace
1d470 4f 70 73 20 63 6c 61 73 73 20 28 69 2e 65 2e 20  Ops class (i.e. 
1d480 6f 6e 6c 79 20 6d 65 73 73 61 67 65 73 0d 0a 20  only messages.. 
1d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d4b0 2f 20 20 20 20 20 20 20 74 68 61 74 20 6d 65 65  /       that mee
1d4c0 74 20 74 68 65 20 64 65 62 75 67 20 70 72 69 6f  t the debug prio
1d4d0 72 69 74 79 20 77 69 6c 6c 20 62 65 0d 0a 20 20  rity will be..  
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d500 20 20 20 20 20 20 20 73 65 65 6e 20 6f 6e 20 74         seen on t
1d510 68 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20  he console)...  
1d520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d560 20 20 54 72 61 63 65 4f 70 73 2e 53 65 74 75 70    TraceOps.Setup
1d570 44 65 62 75 67 4c 69 73 74 65 6e 65 72 73 28 29  DebugListeners()
1d580 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1d5a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1d5c0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
1d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d600 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d620 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1d630 41 64 64 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20  Add the console 
1d640 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72 20 74  trace listener t
1d650 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  o the..         
1d660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d670 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1d680 6c 69 73 74 20 6f 66 20 62 75 69 6c 74 2d 69 6e  list of built-in
1d690 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72 73   trace listeners
1d6a0 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20   (i.e...        
1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6c0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1d6d0 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65 73 20 74   only messages t
1d6e0 68 61 74 20 6d 65 65 74 20 74 68 65 20 74 72 61  hat meet the tra
1d6f0 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d710 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 69      //       pri
1d720 6f 72 69 74 79 20 77 69 6c 6c 20 62 65 20 73 65  ority will be se
1d730 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c  en on the consol
1d740 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e)...           
1d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d760 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d780 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c           Trace.L
1d790 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77  isteners.Add(new
1d7a0 20 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73   ConsoleTraceLis
1d7b0 74 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20  tener());..     
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1d800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d840 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d860 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
1d870 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20  tion.noLog &&.. 
1d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d890 20 20 20 20 20 20 20 20 20 20 20 21 53 74 72 69             !Stri
1d8a0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
1d8b0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c  (configuration.l
1d8c0 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  ogFileName))..  
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d900 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74 65       Trace.Liste
1d910 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 54 65 78  ners.Add(new Tex
1d920 74 57 72 69 74 65 72 54 72 61 63 65 4c 69 73 74  tWriterTraceList
1d930 65 6e 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  ener(..         
1d940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d950 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1d960 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65  tion.logFileName
1d970 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d990 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9b0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 65 63 68     // NOTE: Tech
1d9c0 6e 69 63 61 6c 6c 79 2c 20 77 65 20 63 72 65 61  nically, we crea
1d9d0 74 65 64 20 74 68 65 20 6c 6f 67 20 66 69 6c 65  ted the log file
1d9e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1da00 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1da20 69 6c 65 73 43 72 65 61 74 65 64 2b 2b 3b 0d 0a  ilesCreated++;..
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1da50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1da60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1da70 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da90 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d 70 20 74 68  // NOTE: Dump th
1daa0 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
1dab0 6e 6f 77 20 69 6e 20 63 61 73 65 20 77 65 20 6e  now in case we n
1dac0 65 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  eed to..        
1dad0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1dae0 20 20 20 20 20 74 72 6f 75 62 6c 65 73 68 6f 6f       troubleshoo
1daf0 74 20 61 6e 79 20 69 73 73 75 65 73 2e 0d 0a 20  t any issues... 
1db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db10 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1db20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1db30 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62  onfiguration.deb
1db40 75 67 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72  ugPriority <= Tr
1db50 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1db60 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um)..           
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1db80 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28  figuration.Dump(
1db90 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 29 3b 0d  debugCallback);.
1dba0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1dbb0 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
1dbc0 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72  guration.tracePr
1dbd0 69 6f 72 69 74 79 20 3c 3d 20 54 72 61 63 65 50  iority <= TraceP
1dbe0 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d  riority.Medium).
1dbf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dc00 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1dc10 72 61 74 69 6f 6e 2e 44 75 6d 70 28 74 72 61 63  ration.Dump(trac
1dc20 65 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20  eCallback);.... 
1dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc40 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1dc50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1dc60 54 45 3a 20 53 68 6f 77 20 77 68 65 72 65 20 77  TE: Show where w
1dc70 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 66 72  e are running fr
1dc80 6f 6d 20 61 6e 64 20 68 6f 77 20 77 65 20 77 65  om and how we we
1dc90 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
1dca0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1dcb0 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20 20 20 20 20   invoked...     
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dcd0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1dce0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f         string lo
1dcf0 63 61 74 69 6f 6e 20 3d 20 61 73 73 65 6d 62 6c  cation = assembl
1dd00 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d 0a 0d 0a 20  y.Location;.... 
1dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1dd30 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1dd40 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f  riority.MediumLo
1dd50 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1dd70 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1dd80 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1dd90 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1dda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddb0 20 20 22 52 75 6e 6e 69 6e 67 20 65 78 65 63 75    "Running execu
1ddc0 74 61 62 6c 65 20 69 73 3a 20 7b 30 7d 22 2c 20  table is: {0}", 
1ddd0 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63 61 74  ForDisplay(locat
1dde0 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
1ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de00 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1de10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1de20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1de30 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1de40 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1de50 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  umLow,..        
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de70 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1de80 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1de90 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1deb0 20 20 20 20 20 20 22 4f 72 69 67 69 6e 61 6c 20        "Original 
1dec0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 69 73 3a  command line is:
1ded0 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
1dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1def0 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 43 6f 6d 6d  Environment.Comm
1df00 61 6e 64 4c 69 6e 65 29 2c 20 74 72 61 63 65 43  andLine), traceC
1df10 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df30 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1df40 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1df50 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c  ority.MediumLow,
1df60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1df70 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
1df80 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
1df90 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1dfa0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfc0 22 52 75 6e 6e 69 6e 67 20 70 72 6f 63 65 73 73  "Running process
1dfd0 20 69 73 20 7b 30 7d 2e 22 2c 20 49 73 36 34 42   is {0}.", Is64B
1dfe0 69 74 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20  itProcess() ?.. 
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 20 20 20 20 22 36 34 2d 62             "64-b
1e010 69 74 22 20 3a 20 22 33 32 2d 62 69 74 22 29 2c  it" : "32-bit"),
1e020 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1e030 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e040 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
1e050 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49  figuration.whatI
1e060 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
1e070 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e090 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e0b0 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 64  / NOTE: If the d
1e0c0 65 62 75 67 67 65 72 20 69 73 20 61 74 74 61 63  ebugger is attac
1e0d0 68 65 64 20 61 6e 64 20 22 77 68 61 74 2d 69 66  hed and "what-if
1e0e0 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  "..             
1e0f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1e100 20 20 20 20 6d 6f 64 65 20 69 73 20 5b 6e 6f 77      mode is [now
1e110 5d 20 64 69 73 61 62 6c 65 64 2c 20 69 73 73 75  ] disabled, issu
1e120 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d 0a 20 20  e a warning...  
1e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e140 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1e150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e160 20 20 69 66 20 28 44 65 62 75 67 67 65 72 2e 49    if (Debugger.I
1e170 73 41 74 74 61 63 68 65 64 29 0d 0a 20 20 20 20  sAttached)..    
1e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e190 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1e1a0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
1e1b0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
1e1c0 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
1e1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1e0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
1e1f0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
1e200 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
1e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e220 20 20 20 20 20 20 20 20 20 22 46 6f 72 63 65 64           "Forced
1e230 20 74 6f 20 64 69 73 61 62 6c 65 20 5c 22 77 68   to disable \"wh
1e240 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20 77 69 74  at-if\" mode wit
1e250 68 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  h " +..         
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 22 64 65 62 75 67 67 65 72         "debugger
1e280 20 61 74 74 61 63 68 65 64 2e 22 2c 20 74 72 61   attached.", tra
1e290 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
1e2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1e2c0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2e0 20 20 20 7b 0d 0a 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 54 72                Tr
1e300 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1e310 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
1e320 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a  ty.MediumHigh,..
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 20 20 20 64 65 62 75              debu
1e350 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1e360 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
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 22 4e 6f 20 61 63 74 75 61         "No actua
1e390 6c 20 63 68 61 6e 67 65 73 20 77 69 6c 6c 20 62  l changes will b
1e3a0 65 20 6d 61 64 65 20 74 6f 20 74 68 69 73 20 22  e made to this "
1e3b0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1e3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3d0 22 73 79 73 74 65 6d 20 62 65 63 61 75 73 65 20  "system because 
1e3e0 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65  \"what-if\" mode
1e3f0 20 69 73 20 65 6e 61 62 6c 65 64 2e 22 2c 0d 0a   is enabled.",..
1e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e410 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e420 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
1e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e440 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1e450 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e470 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68    // NOTE: If th
1e480 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 68  e command line h
1e490 61 73 20 6e 6f 74 20 62 65 65 6e 20 6d 61 6e 75  as not been manu
1e4a0 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
1e4b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1e4c0 20 20 20 63 6f 6e 66 69 72 6d 65 64 20 28 69 2e     confirmed (i.
1e4d0 65 2e 20 76 69 61 20 74 68 65 20 65 78 70 6c 69  e. via the expli
1e4e0 63 69 74 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  cit command line
1e4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e500 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
1e510 70 74 69 6f 6e 29 2c 20 74 68 65 6e 20 73 74 6f  ption), then sto
1e520 70 20 70 72 6f 63 65 73 73 69 6e 67 20 6e 6f 77  p processing now
1e530 2e 20 20 57 65 20 65 6e 66 6f 72 63 65 0d 0a 20  .  We enforce.. 
1e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e550 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 69 73     //       this
1e560 20 72 75 6c 65 20 73 6f 20 74 68 61 74 20 73 69   rule so that si
1e570 6d 70 6c 79 20 64 6f 75 62 6c 65 2d 63 6c 69 63  mply double-clic
1e580 6b 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20  king the..      
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e5a0 20 20 20 20 20 20 20 65 78 65 63 75 74 61 62 6c         executabl
1e5b0 65 20 77 69 6c 6c 20 6e 6f 74 20 72 65 73 75 6c  e will not resul
1e5c0 74 20 69 6e 20 61 6e 79 20 63 68 61 6e 67 65 73  t in any changes
1e5d0 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20   being..        
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1e5f0 20 20 20 20 20 6d 61 64 65 20 74 6f 20 74 68 65       made to the
1e600 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20   system...      
1e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e630 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
1e640 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d  guration.confirm
1e650 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1e660 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e680 20 20 65 72 72 6f 72 20 3d 20 22 43 61 6e 6e 6f    error = "Canno
1e690 74 20 63 6f 6e 74 69 6e 75 65 2c 20 74 68 65 20  t continue, the 
1e6a0 5c 22 63 6f 6e 66 69 72 6d 5c 22 20 6f 70 74 69  \"confirm\" opti
1e6b0 6f 6e 20 69 73 20 22 20 2b 0d 0a 20 20 20 20 20  on is " +..     
1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6d0 20 20 20 20 20 20 20 22 6e 6f 74 20 65 6e 61 62         "not enab
1e6e0 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  led.";....      
1e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e700 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1e710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e720 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e740 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1e750 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1e770 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
1e780 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1e790 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1e7a0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1e7b0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1e7c0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1e7d0 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7f0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
1e800 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1e810 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  e, traceCategory
1e820 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e830 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1e840 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 70 72 6f  = "Failed to pro
1e850 63 65 73 73 20 63 6f 6e 66 69 67 75 72 61 74 69  cess configurati
1e860 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  on.";..         
1e870 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e880 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1e890 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1e8a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e8b0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1e8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1e900 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
1e910 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
1e920 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
1e930 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
1e940 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
1e950 20 62 6f 6f 6c 20 43 68 65 63 6b 52 75 6e 74 69   bool CheckRunti
1e960 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  meVersion(..    
1e970 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66              Conf
1e980 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
1e990 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
1e9a0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
1e9b0 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20  trict,..        
1e9c0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
1e9d0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
1e9e0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1e9f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1ea00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
1ea10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ea20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ea30 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
1ea40 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
1ea50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1ea60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea80 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61     error = "Inva
1ea90 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  lid configuratio
1eaa0 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1eac0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eae0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1eaf0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb10 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68 61 74 20    // NOTE: What 
1eb20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 72  version of the r
1eb30 75 6e 74 69 6d 65 20 77 61 73 20 74 68 65 20 63  untime was the c
1eb40 6f 72 65 20 28 70 72 69 6d 61 72 79 29 0d 0a 20  ore (primary).. 
1eb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb60 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65     //       asse
1eb70 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 61 67  mbly compiled ag
1eb80 61 69 6e 73 74 20 28 65 2e 67 2e 20 22 76 32 2e  ainst (e.g. "v2.
1eb90 30 2e 35 30 37 32 37 22 20 6f 72 0d 0a 20 20 20  0.50727" or..   
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebb0 20 2f 2f 20 20 20 20 20 20 20 22 76 34 2e 30 2e   //       "v4.0.
1ebc0 33 30 33 31 39 22 29 2e 0d 0a 20 20 20 20 20 20  30319")...      
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1ebe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ebf0 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72        string cor
1ec00 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  eImageRuntimeVer
1ec10 73 69 6f 6e 20 3d 20 47 65 74 49 6d 61 67 65 52  sion = GetImageR
1ec20 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a  untimeVersion(..
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 20 63 6f 6e 66 69 67 75 72          configur
1ec50 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61  ation.coreFileNa
1ec60 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
1ec70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1ec80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec90 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20      // NOTE: We 
1eca0 61 6c 6c 6f 77 20 74 68 65 20 61 63 74 75 61 6c  allow the actual
1ecb0 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 63   image runtime c
1ecc0 68 65 63 6b 69 6e 67 20 74 6f 20 62 65 0d 0a 20  hecking to be.. 
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ece0 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79 70 61     //       bypa
1ecf0 73 73 65 64 20 76 69 61 20 74 68 65 20 22 2d 6e  ssed via the "-n
1ed00 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22  oRuntimeVersion"
1ed10 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20   command line.. 
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed30 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69     //       opti
1ed40 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 6d 61 6e 64  on.  The command
1ed50 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 69 73 20   line option is 
1ed60 69 6e 74 65 6e 64 65 64 20 66 6f 72 0d 0a 20 20  intended for..  
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed80 20 20 2f 2f 20 20 20 20 20 20 20 65 78 70 65 72    //       exper
1ed90 74 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a 20 20 20  t use only...   
1eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edb0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1edc0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
1edd0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e  figuration.noRun
1ede0 74 69 6d 65 56 65 72 73 69 6f 6e 29 0d 0a 20 20  timeVersion)..  
1edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1ee20 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1ee30 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1ee40 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20  y.Medium,..     
1ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee60 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
1ee70 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
1ee80 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1ee90 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eeb0 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f   "Assembly is co
1eec0 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e  mpiled for the .
1eed0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30  NET Framework {0
1eee0 7d 3b 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  }; " +..        
1eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef00 20 20 20 20 22 68 6f 77 65 76 65 72 2c 20 69 6e      "however, in
1ef10 73 74 61 6c 6c 61 74 69 6f 6e 20 72 65 73 74 72  stallation restr
1ef20 69 63 74 69 6f 6e 73 20 62 61 73 65 64 20 6f 6e  ictions based on
1ef30 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20 20 20   this " +..     
1ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef50 20 20 20 20 20 20 20 22 66 61 63 74 20 68 61 76         "fact hav
1ef60 65 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20  e been disabled 
1ef70 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  via the command 
1ef80 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20  line.",..       
1ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efa0 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75       coreImageRu
1efb0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 20 74  ntimeVersion), t
1efc0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1efd0 0d 0a 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 72 65 74 75 72 6e            return
1eff0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1f000 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f020 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1f030 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1f040 54 4f 44 4f 3a 20 52 65 73 74 72 69 63 74 20 74  TODO: Restrict t
1f050 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  he configuration
1f060 20 62 61 73 65 64 20 6f 6e 20 77 68 69 63 68 20   based on which 
1f070 69 6d 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20  image..         
1f080 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1f090 20 20 20 20 72 75 6e 74 69 6d 65 20 76 65 72 73      runtime vers
1f0a0 69 6f 6e 73 20 28 77 68 69 63 68 20 6d 6f 72 65  ions (which more
1f0b0 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72 65 73 70  -or-less corresp
1f0c0 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ond..           
1f0d0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1f0e0 20 20 74 6f 20 2e 4e 45 54 20 46 72 61 6d 65 77    to .NET Framew
1f0f0 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29 20 61 72  ork versions) ar
1f100 65 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 74  e supported by t
1f110 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
1f120 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1f130 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 56 69 73   versions of Vis
1f140 75 61 6c 20 53 74 75 64 69 6f 20 74 68 61 74 20  ual Studio that 
1f150 61 72 65 20 69 6e 73 74 61 6c 6c 65 64 2e 0d 0a  are installed...
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f170 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1f180 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1f190 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
1f1a0 6d 70 74 79 28 63 6f 72 65 49 6d 61 67 65 52 75  mpty(coreImageRu
1f1b0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 0d 0a  ntimeVersion))..
1f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1f1f0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
1f200 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67 65 20  core file image 
1f210 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 22  runtime version"
1f220 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1f230 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1f240 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1f260 0a 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 53 74       else if (St
1f280 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20  ring.Equals(..  
1f290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2a0 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d            coreIm
1f2b0 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1f2c0 6e 2c 20 43 4c 52 76 32 49 6d 61 67 65 52 75 6e  n, CLRv2ImageRun
1f2d0 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  timeVersion,..  
1f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2f0 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
1f300 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
1f310 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  al))..          
1f320 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f340 20 20 20 20 20 2f 2f 0d 0a 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 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68   // NOTE: For th
1f370 65 20 43 4c 52 20 76 32 2e 30 20 72 75 6e 74 69  e CLR v2.0 runti
1f380 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65  me, make sure we
1f390 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20   disable..      
1f3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3b0 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61    //       any a
1f3c0 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74  ttempt to use it
1f3d0 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74   for things that
1f3e0 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20   require..      
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f400 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73    //       an as
1f410 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled 
1f420 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e 30  for the CLR v4.0
1f430 2e 20 20 49 74 20 69 73 0d 0a 20 20 20 20 20 20  .  It is..      
1f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f450 20 20 2f 2f 20 20 20 20 20 20 20 75 6e 63 65 72    //       uncer
1f460 74 61 69 6e 20 69 66 20 74 68 69 73 20 69 73 20  tain if this is 
1f470 61 63 74 75 61 6c 6c 79 20 61 20 70 72 6f 62 6c  actually a probl
1f480 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20  em in..         
1f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f4a0 2f 20 20 20 20 20 20 20 70 72 61 63 74 69 63 65  /       practice
1f4b0 20 61 73 20 74 68 65 20 43 4c 52 20 76 34 2e 30   as the CLR v4.0
1f4c0 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64 20 75 73   can load and us
1f4d0 65 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  e an..          
1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1f4f0 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20         assembly 
1f500 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
1f510 65 20 43 4c 52 20 76 32 2e 30 3b 20 68 6f 77 65  e CLR v2.0; howe
1f520 76 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ver,..          
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1f540 20 20 20 20 20 20 20 73 69 6e 63 65 20 74 68 69         since thi
1f550 73 20 70 72 6f 6a 65 63 74 20 6f 66 66 65 72 73  s project offers
1f560 20 62 6f 74 68 20 63 6f 6e 66 69 67 75 72 61 74   both configurat
1f570 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  ions,..         
1f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f590 2f 20 20 20 20 20 20 20 77 65 20 63 75 72 72 65  /       we curre
1f5a0 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77 20 74 68  ntly disallow th
1f5b0 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d 0a 20 20  is mismatch...  
1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5d0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5f0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1f600 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74 72 75 65  noNetFx40 = true
1f610 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1f620 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1f630 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78  guration.noNetFx
1f640 34 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  45 = true;..    
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1f670 6e 2e 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20 74  n.noNetFx451 = t
1f680 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1f6a0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
1f6b0 74 46 78 34 35 32 20 3d 20 74 72 75 65 3b 0d 0a  tFx452 = true;..
1f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6d0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1f6e0 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 36 20  ation.noNetFx46 
1f6f0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1f700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f710 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1f720 6f 4e 65 74 46 78 34 36 31 20 3d 20 74 72 75 65  oNetFx461 = true
1f730 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1f740 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1f750 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
1f760 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  0 = true;..     
1f770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f780 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1f790 2e 6e 6f 56 73 32 30 31 32 20 3d 20 74 72 75 65  .noVs2012 = true
1f7a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1f7b0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1f7c0 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
1f7d0 33 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  3 = true;..     
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7f0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1f800 2e 6e 6f 56 73 32 30 31 35 20 3d 20 74 72 75 65  .noVs2015 = true
1f810 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f820 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1f830 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1f840 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1f850 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20  y.Medium,..     
1f860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f870 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
1f880 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
1f890 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1f8a0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8c0 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f   "Assembly is co
1f8d0 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e  mpiled for the .
1f8e0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30  NET Framework {0
1f8f0 7d 2c 20 22 20 2b 0d 0a 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 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72      "support for
1f920 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77   the .NET Framew
1f930 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64  ork {1} is now d
1f940 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20  isabled.",..    
1f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f960 20 20 20 20 20 20 20 20 43 4c 52 76 32 49 6d 61          CLRv2Ima
1f970 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1f980 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74  , CLRv4ImageRunt
1f990 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  imeVersion),..  
1f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9b0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f9c0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1f9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f9f0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 53        else if (S
1fa00 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20  tring.Equals(.. 
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 63 6f 72 65 49             coreI
1fa30 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1fa40 6f 6e 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75  on, CLRv4ImageRu
1fa50 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20  ntimeVersion,.. 
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 20 20 20 20 53 74 72 69 6e             Strin
1fa80 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
1fa90 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nal))..         
1faa0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fac0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fae0 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74    // NOTE: For t
1faf0 68 65 20 43 4c 52 20 76 34 2e 30 20 72 75 6e 74  he CLR v4.0 runt
1fb00 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77  ime, make sure w
1fb10 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20  e disable..     
1fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb30 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20     //       any 
1fb40 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69  attempt to use i
1fb50 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61  t for things tha
1fb60 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20  t require..     
1fb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb80 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61     //       an a
1fb90 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64  ssembly compiled
1fba0 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e   for the CLR v2.
1fbb0 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0...            
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbe0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1fbf0 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20  ation.noNetFx20 
1fc00 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1fc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1fc30 6f 4e 65 74 46 78 33 35 20 3d 20 74 72 75 65 3b  oNetFx35 = true;
1fc40 0d 0a 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 6e 6f 56 73 32 30 30 35  uration.noVs2005
1fc70 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc90 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1fca0 6e 6f 56 73 32 30 30 38 20 3d 20 74 72 75 65 3b  noVs2008 = true;
1fcb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fcc0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1fcd0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1fce0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1fcf0 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20  .Medium,..      
1fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd10 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1fd20 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1fd30 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1fd40 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd60 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d  "Assembly is com
1fd70 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e  piled for the .N
1fd80 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
1fd90 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 20 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20     "support for 
1fdc0 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  the .NET Framewo
1fdd0 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69  rk {1} is now di
1fde0 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20  sabled.",..     
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe00 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1fe10 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74  y(CLRv4ImageRunt
1fe20 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  imeVersion),..  
1fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe40 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1fe50 70 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52  play(CLRv2ImageR
1fe60 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c  untimeVersion)),
1fe70 0d 0a 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 20 74 72                tr
1fe90 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
1fea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1feb0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1fec0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
1fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fee0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1ff00 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
1ff10 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff30 20 20 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20     "unsupported 
1ff40 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67 65 20  core file image 
1ff50 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20  runtime version 
1ff60 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1ff70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff80 20 22 7b 30 7d 2c 20 6d 75 73 74 20 62 65 20 7b   "{0}, must be {
1ff90 31 7d 20 6f 72 20 7b 32 7d 22 2c 0d 0a 20 20 20  1} or {2}",..   
1ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffb0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1ffc0 6c 61 79 28 63 6f 72 65 49 6d 61 67 65 52 75 6e  lay(coreImageRun
1ffd0 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  timeVersion),.. 
1ffe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fff0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
20000 73 70 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65  splay(CLRv2Image
20010 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c  RuntimeVersion),
20020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
20040 72 44 69 73 70 6c 61 79 28 43 4c 52 76 34 49 6d  rDisplay(CLRv4Im
20050 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
20060 6e 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n));....        
20070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20080 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
20090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
200b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
200c0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
200d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
200e0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
200f0 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
20100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20110 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20120 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
20130 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
20140 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
20150 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
20160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20170 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
20180 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c  raceCallback, e,
20190 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
201a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
201b0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
201c0 22 46 61 69 6c 65 64 20 74 6f 20 63 68 65 63 6b  "Failed to check
201d0 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76   image runtime v
201e0 65 72 73 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20  ersion.";..     
201f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20210 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
20220 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
20230 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
20240 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
20250 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20290 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
202a0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
202b0 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a  rivate Methods..
202c0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
202d0 61 74 65 20 73 74 72 69 6e 67 20 47 65 74 49 6e  ate string GetIn
202e0 76 61 72 69 61 6e 74 4e 61 6d 65 28 0d 0a 20 20  variantName(..  
202f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
20300 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ol trace..      
20310 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
20320 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20330 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
20340 72 6e 20 55 73 65 45 66 36 50 72 6f 76 69 64 65  rn UseEf6Provide
20350 72 28 74 72 61 63 65 29 20 3f 0d 0a 20 20 20 20  r(trace) ?..    
20360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20370 45 66 36 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  Ef6InvariantName
20380 20 3a 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65   : InvariantName
20390 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
203a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
203b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
20400 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
20410 49 73 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d  IsSystemEf6Assem
20420 62 6c 79 41 76 61 69 6c 61 62 6c 65 28 0d 0a 20  blyAvailable(.. 
20430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
20440 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20  ool trace..     
20450 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
20460 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20470 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
20480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20490 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
204a0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73           if (sys
204b0 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 20 3d  temEf6Assembly =
204c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
204d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
204e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204f0 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 45 66          systemEf
20500 36 41 73 73 65 6d 62 6c 79 20 3d 20 41 73 73 65  6Assembly = Asse
20510 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f  mbly.ReflectionO
20520 6e 6c 79 4c 6f 61 64 28 0d 0a 20 20 20 20 20 20  nlyLoad(..      
20530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20540 20 20 20 20 20 20 53 79 73 74 65 6d 45 66 36 41        SystemEf6A
20550 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 20  ssemblyName);.. 
20560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20570 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20580 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20590 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c  systemEf6Assembl
205a0 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
205b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
205d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
205e0 72 61 63 65 20 26 26 0d 0a 20 20 20 20 20 20 20  race &&..       
205f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20600 20 20 20 20 20 21 48 61 73 46 6c 61 67 73 28 50       !HasFlags(P
20610 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64  roviderFlags.Did
20620 45 66 36 52 65 73 6f 6c 76 65 54 72 61 63 65 2c  Ef6ResolveTrace,
20630 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20   true))..       
20640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20650 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20670 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
20680 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
20690 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
206a0 20 20 20 20 20 20 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 20 64                 d
206c0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
206d0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
206e0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
206f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20700 20 20 20 20 20 20 20 20 20 20 20 20 20 22 45 6e               "En
20710 74 69 74 79 20 46 72 61 6d 65 77 6f 72 6b 20 36  tity Framework 6
20720 20 61 73 73 65 6d 62 6c 79 20 77 61 73 20 22 20   assembly was " 
20730 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
20740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20750 20 20 20 22 72 65 73 6f 6c 76 65 64 20 74 6f 20     "resolved to 
20760 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61  {0}.", ForDispla
20770 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
20780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20790 20 20 20 20 73 79 73 74 65 6d 45 66 36 41 73 73      systemEf6Ass
207a0 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 29  embly.Location))
207b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
207c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207d0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
207e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
207f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20800 20 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20    providerFlags 
20810 7c 3d 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73  |= ProviderFlags
20820 2e 44 69 64 45 66 36 52 65 73 6f 6c 76 65 54 72  .DidEf6ResolveTr
20830 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ace;..          
20840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
20850 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20860 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
20870 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
20880 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
20890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
208b0 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
208c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
208d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208e0 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
208f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20900 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20910 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65 20        if (trace 
20920 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
20930 20 20 20 20 20 20 20 20 21 48 61 73 46 6c 61 67          !HasFlag
20940 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e  s(ProviderFlags.
20950 44 69 64 45 66 36 52 65 73 6f 6c 76 65 54 72 61  DidEf6ResolveTra
20960 63 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20  ce, true))..    
20970 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20990 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
209a0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
209b0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
209c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
209d0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
209e0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
209f0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
20a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a10 20 22 45 6e 74 69 74 79 20 46 72 61 6d 65 77 6f   "Entity Framewo
20a20 72 6b 20 36 20 61 73 73 65 6d 62 6c 79 20 77 61  rk 6 assembly wa
20a30 73 20 6e 6f 74 20 72 65 73 6f 6c 76 65 64 2e 22  s not resolved."
20a40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
20a50 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
20a60 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
20a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a80 20 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20    providerFlags 
20a90 7c 3d 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73  |= ProviderFlags
20aa0 2e 44 69 64 45 66 36 52 65 73 6f 6c 76 65 54 72  .DidEf6ResolveTr
20ab0 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ace;..          
20ac0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20ad0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
20ae0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
20af0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
20b00 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
20b10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
20b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b60 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
20b70 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
20b80 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
20b90 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
20ba0 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  l HasFlags(..   
20bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
20bc0 74 61 6c 6c 46 6c 61 67 73 20 68 61 73 46 6c 61  tallFlags hasFla
20bd0 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
20be0 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20       bool all.. 
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
20c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
20c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20c20 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20   if (all)..     
20c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
20c40 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46  eturn ((installF
20c50 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29  lags & hasFlags)
20c60 20 3d 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a   == hasFlags);..
20c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c80 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
20c90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20ca0 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20   ((installFlags 
20cb0 26 20 68 61 73 46 6c 61 67 73 29 20 21 3d 20 49  & hasFlags) != I
20cc0 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65  nstallFlags.None
20cd0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
20ce0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
20cf0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
20d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d30 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
20d40 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
20d50 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20  HasFlags(..     
20d60 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 76 69             Provi
20d70 64 65 72 46 6c 61 67 73 20 68 61 73 46 6c 61 67  derFlags hasFlag
20d80 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
20d90 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20 20      bool all..  
20da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
20db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20dd0 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20 20  if (all)..      
20de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
20df0 74 75 72 6e 20 28 28 70 72 6f 76 69 64 65 72 46  turn ((providerF
20e00 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29  lags & hasFlags)
20e10 20 3d 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a   == hasFlags);..
20e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e30 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
20e40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20e50 20 28 28 70 72 6f 76 69 64 65 72 46 6c 61 67 73   ((providerFlags
20e60 20 26 20 68 61 73 46 6c 61 67 73 29 20 21 3d 20   & hasFlags) != 
20e70 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 4e 6f  ProviderFlags.No
20e80 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ne);..          
20e90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20ea0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ee0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
20ef0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
20f00 6c 20 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 65  l IsLinqSupporte
20f10 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
20f20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a      bool trace..
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
20f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20f60 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
20f70 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43        // NOTE: C
20f80 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
20f90 68 65 20 63 61 6c 6c 65 72 20 68 61 73 20 66 6f  he caller has fo
20fa0 72 63 65 64 20 4c 49 4e 51 20 73 75 70 70 6f 72  rced LINQ suppor
20fb0 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20  t to..          
20fc0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62        //       b
20fd0 65 20 65 6e 61 62 6c 65 64 20 2d 4f 52 2d 20 64  e enabled -OR- d
20fe0 69 73 61 62 6c 65 64 2c 20 74 68 65 72 65 62 79  isabled, thereby
20ff0 20 62 79 70 61 73 73 69 6e 67 20 74 68 65 20 6e   bypassing the n
21000 65 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  eed..           
21010 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f       //       fo
21020 72 20 22 61 75 74 6f 6d 61 74 69 63 20 64 65 74  r "automatic det
21030 65 63 74 69 6f 6e 22 20 62 79 20 74 68 69 73 20  ection" by this 
21040 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
21050 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
21060 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21070 28 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64  (HasFlags(Provid
21080 65 72 46 6c 61 67 73 2e 46 6f 72 63 65 4c 69 6e  erFlags.ForceLin
21090 71 45 6e 61 62 6c 65 64 2c 20 74 72 75 65 29 29  qEnabled, true))
210a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
210b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
210c0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61           if (tra
210d0 63 65 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  ce &&..         
210e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
210f0 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65  HasFlags(Provide
21100 72 46 6c 61 67 73 2e 44 69 64 4c 69 6e 71 46 6f  rFlags.DidLinqFo
21110 72 63 65 54 72 61 63 65 2c 20 74 72 75 65 29 29  rceTrace, true))
21120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21130 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21150 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
21160 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
21170 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
21180 2c 0d 0a 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 64                 d
211a0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
211b0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
211c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211d0 20 20 20 20 20 20 20 20 20 20 22 46 6f 72 63 65            "Force
211e0 64 20 74 6f 20 65 6e 61 62 6c 65 20 73 75 70 70  d to enable supp
211f0 6f 72 74 20 66 6f 72 20 5c 22 4c 69 6e 71 5c 22  ort for \"Linq\"
21200 2e 22 2c 0d 0a 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 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
21230 0d 0a 0d 0a 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 70 72 6f 76              prov
21250 69 64 65 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f  iderFlags |= Pro
21260 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64 4c 69  viderFlags.DidLi
21270 6e 71 46 6f 72 63 65 54 72 61 63 65 3b 0d 0a 20  nqForceTrace;.. 
21280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21290 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
212a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
212b0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
212c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
212e0 65 20 69 66 20 28 48 61 73 46 6c 61 67 73 28 50  e if (HasFlags(P
212f0 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 46 6f 72  roviderFlags.For
21300 63 65 4c 69 6e 71 44 69 73 61 62 6c 65 64 2c 20  ceLinqDisabled, 
21310 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
21320 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
21340 66 20 28 74 72 61 63 65 20 26 26 0d 0a 20 20 20  f (trace &&..   
21350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21360 20 20 20 20 20 21 48 61 73 46 6c 61 67 73 28 50       !HasFlags(P
21370 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64  roviderFlags.Did
21380 4c 69 6e 71 46 6f 72 63 65 54 72 61 63 65 2c 20  LinqForceTrace, 
21390 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
213a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 54 72 61 63 65 4f 70 73 2e         TraceOps.
213d0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
213e0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
213f0 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21410 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
21420 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
21430 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
21440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21450 22 46 6f 72 63 65 64 20 74 6f 20 64 69 73 61 62  "Forced to disab
21460 6c 65 20 73 75 70 70 6f 72 74 20 66 6f 72 20 5c  le support for \
21470 22 4c 69 6e 71 5c 22 2e 22 2c 0d 0a 20 20 20 20  "Linq\".",..    
21480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21490 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
214a0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
214b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214c0 20 20 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73     providerFlags
214d0 20 7c 3d 20 50 72 6f 76 69 64 65 72 46 6c 61 67   |= ProviderFlag
214e0 73 2e 44 69 64 4c 69 6e 71 46 6f 72 63 65 54 72  s.DidLinqForceTr
214f0 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ace;..          
21500 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21520 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
21530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21540 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21550 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
21560 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
21570 54 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a  TE: Return non-z
21580 65 72 6f 20 69 66 20 74 68 65 20 53 79 73 74 65  ero if the Syste
21590 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69  m.Data.SQLite.Li
215a0 6e 71 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nq..            
215b0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73      //       ass
215c0 65 6d 62 6c 79 20 73 68 6f 75 6c 64 20 62 65 20  embly should be 
215d0 70 72 6f 63 65 73 73 65 64 20 64 75 72 69 6e 67  processed during
215e0 20 74 68 65 20 69 6e 73 74 61 6c 6c 2e 0d 0a 20   the install... 
215f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21600 2f 20 20 20 20 20 20 20 49 66 20 74 68 65 20 74  /       If the t
21610 61 72 67 65 74 20 69 73 20 56 69 73 75 61 6c 20  arget is Visual 
21620 53 74 75 64 69 6f 20 32 30 30 35 2c 20 74 68 69  Studio 2005, thi
21630 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20  s must..        
21640 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
21650 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20   return zero... 
21660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21670 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
21680 20 20 20 72 65 74 75 72 6e 20 21 6e 6f 4e 65 74     return !noNet
21690 46 78 33 35 20 7c 7c 20 21 6e 6f 4e 65 74 46 78  Fx35 || !noNetFx
216a0 34 30 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35  40 || !noNetFx45
216b0 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
216c0 20 20 20 20 20 20 20 20 20 21 6e 6f 4e 65 74 46           !noNetF
216d0 78 34 35 31 20 7c 7c 20 21 6e 6f 4e 65 74 46 78  x451 || !noNetFx
216e0 34 35 32 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34  452 || !noNetFx4
216f0 36 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  6 ||..          
21700 20 20 20 20 20 20 20 20 20 20 21 6e 6f 4e 65 74            !noNet
21710 46 78 34 36 31 3b 0d 0a 20 20 20 20 20 20 20 20  Fx461;..        
21720 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21730 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21770 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21780 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
21790 6f 6f 6c 20 49 73 45 66 36 53 75 70 70 6f 72 74  ool IsEf6Support
217a0 65 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed(..           
217b0 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d       bool trace.
217c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
217d0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
217e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
217f0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
21800 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
21810 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
21820 74 68 65 20 63 61 6c 6c 65 72 20 68 61 73 20 66  the caller has f
21830 6f 72 63 65 64 20 45 46 36 20 73 75 70 70 6f 72  orced EF6 suppor
21840 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20  t to..          
21850 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62        //       b
21860 65 20 65 6e 61 62 6c 65 64 20 2d 4f 52 2d 20 64  e enabled -OR- d
21870 69 73 61 62 6c 65 64 2c 20 74 68 65 72 65 62 79  isabled, thereby
21880 20 62 79 70 61 73 73 69 6e 67 20 74 68 65 20 6e   bypassing the n
21890 65 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  eed..           
218a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f       //       fo
218b0 72 20 22 61 75 74 6f 6d 61 74 69 63 20 64 65 74  r "automatic det
218c0 65 63 74 69 6f 6e 22 20 62 79 20 74 68 69 73 20  ection" by this 
218d0 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
218e0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
218f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21900 28 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64  (HasFlags(Provid
21910 65 72 46 6c 61 67 73 2e 46 6f 72 63 65 45 66 36  erFlags.ForceEf6
21920 45 6e 61 62 6c 65 64 2c 20 74 72 75 65 29 29 0d  Enabled, true)).
21930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21940 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21950 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63          if (trac
21960 65 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  e &&..          
21970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 48                !H
21980 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72  asFlags(Provider
21990 46 6c 61 67 73 2e 44 69 64 45 66 36 46 6f 72 63  Flags.DidEf6Forc
219a0 65 54 72 61 63 65 2c 20 74 72 75 65 29 29 0d 0a  eTrace, true))..
219b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
219d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
219e0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
219f0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
21a00 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d  ity.MediumHigh,.
21a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21a20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
21a30 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
21a40 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
21a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a60 20 20 20 20 20 20 20 20 22 46 6f 72 63 65 64 20          "Forced 
21a70 74 6f 20 65 6e 61 62 6c 65 20 73 75 70 70 6f 72  to enable suppor
21a80 74 20 66 6f 72 20 5c 22 45 66 36 5c 22 2e 22 2c  t for \"Ef6\".",
21a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
21ab0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
21ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21ad0 20 20 20 20 20 20 20 20 20 70 72 6f 76 69 64 65           provide
21ae0 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69 64  rFlags |= Provid
21af0 65 72 46 6c 61 67 73 2e 44 69 64 45 66 36 46 6f  erFlags.DidEf6Fo
21b00 72 63 65 54 72 61 63 65 3b 0d 0a 20 20 20 20 20  rceTrace;..     
21b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
21b20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21b30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
21b40 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
21b50 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
21b60 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
21b70 20 28 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69   (HasFlags(Provi
21b80 64 65 72 46 6c 61 67 73 2e 46 6f 72 63 65 45 66  derFlags.ForceEf
21b90 36 44 69 73 61 62 6c 65 64 2c 20 74 72 75 65 29  6Disabled, true)
21ba0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
21bb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21bc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 72            if (tr
21bd0 61 63 65 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ace &&..        
21be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bf0 21 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64  !HasFlags(Provid
21c00 65 72 46 6c 61 67 73 2e 44 69 64 45 66 36 46 6f  erFlags.DidEf6Fo
21c10 72 63 65 54 72 61 63 65 2c 20 74 72 75 65 29 29  rceTrace, true))
21c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21c30 20 20 20 20 20 20 7b 0d 0a 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 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
21c60 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
21c70 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
21c80 2c 0d 0a 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 20 64                 d
21ca0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
21cb0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
21cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cd0 20 20 20 20 20 20 20 20 20 20 22 46 6f 72 63 65            "Force
21ce0 64 20 74 6f 20 64 69 73 61 62 6c 65 20 73 75 70  d to disable sup
21cf0 70 6f 72 74 20 66 6f 72 20 5c 22 45 66 36 5c 22  port for \"Ef6\"
21d00 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
21d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
21d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21d40 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 76              prov
21d50 69 64 65 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f  iderFlags |= Pro
21d60 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64 45 66  viderFlags.DidEf
21d70 36 46 6f 72 63 65 54 72 61 63 65 3b 0d 0a 20 20  6ForceTrace;..  
21d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21da0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21db0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
21dc0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21de0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
21df0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75     // NOTE: Retu
21e00 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  rn non-zero if t
21e10 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  he System.Data.S
21e20 51 4c 69 74 65 2e 45 46 36 0d 0a 20 20 20 20 20  QLite.EF6..     
21e30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
21e40 20 20 20 20 61 73 73 65 6d 62 6c 79 20 73 68 6f      assembly sho
21e50 75 6c 64 20 62 65 20 70 72 6f 63 65 73 73 65 64  uld be processed
21e60 20 64 75 72 69 6e 67 20 74 68 65 20 69 6e 73 74   during the inst
21e70 61 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  all...          
21e80 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49        //       I
21e90 66 20 74 68 65 20 74 61 72 67 65 74 20 69 73 20  f the target is 
21ea0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30  Visual Studio 20
21eb0 30 35 20 6f 72 20 56 69 73 75 61 6c 0d 0a 20 20  05 or Visual..  
21ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
21ed0 20 20 20 20 20 20 20 53 74 75 64 69 6f 20 32 30         Studio 20
21ee0 30 38 2c 20 74 68 69 73 20 6d 75 73 74 20 72 65  08, this must re
21ef0 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20  turn zero...    
21f00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
21f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f20 69 66 20 28 6e 6f 4e 65 74 46 78 34 30 20 26 26  if (noNetFx40 &&
21f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21f40 20 20 20 20 20 20 6e 6f 4e 65 74 46 78 34 35 20        noNetFx45 
21f50 26 26 20 6e 6f 4e 65 74 46 78 34 35 31 20 26 26  && noNetFx451 &&
21f60 20 6e 6f 4e 65 74 46 78 34 35 32 20 26 26 20 6e   noNetFx452 && n
21f70 6f 4e 65 74 46 78 34 36 20 26 26 0d 0a 20 20 20  oNetFx46 &&..   
21f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f90 20 6e 6f 4e 65 74 46 78 34 36 31 29 0d 0a 20 20   noNetFx461)..  
21fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
21fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21fc0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
21fd0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
21fe0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21ff0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
22000 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
22010 4e 4f 54 45 3a 20 41 6c 73 6f 2c 20 69 66 20 74  NOTE: Also, if t
22020 68 65 20 45 46 36 20 63 6f 72 65 20 61 73 73 65  he EF6 core asse
22030 6d 62 6c 79 20 69 73 20 75 6e 61 76 61 69 6c 61  mbly is unavaila
22040 62 6c 65 2c 20 74 68 69 73 0d 0a 20 20 20 20 20  ble, this..     
22050 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
22060 20 20 20 20 6d 75 73 74 20 72 65 74 75 72 6e 20      must return 
22070 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20  zero...         
22080 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
22090 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
220a0 49 73 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d  IsSystemEf6Assem
220b0 62 6c 79 41 76 61 69 6c 61 62 6c 65 28 74 72 61  blyAvailable(tra
220c0 63 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ce))..          
220d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
220e0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
220f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
22100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22110 2f 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c  / NOTE: Finally,
22120 20 69 66 20 74 68 65 20 45 46 36 20 63 6f 72 65   if the EF6 core
22130 20 61 73 73 65 6d 62 6c 79 20 69 73 20 6e 6f 74   assembly is not
22140 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20   available..    
22150 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
22160 20 20 20 20 20 67 6c 6f 62 61 6c 6c 79 20 5b 61       globally [a
22170 6e 64 20 74 68 69 73 20 69 73 20 61 20 72 65 71  nd this is a req
22180 75 69 72 65 6d 65 6e 74 20 66 6f 72 20 74 68 65  uirement for the
22190 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20   current..      
221a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
221b0 20 20 20 69 6e 73 74 61 6c 6c 5d 2c 20 72 65 74     install], ret
221c0 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20  urn zero...     
221d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
221e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
221f0 65 74 75 72 6e 20 48 61 73 46 6c 61 67 73 28 50  eturn HasFlags(P
22200 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 53 79 73  roviderFlags.Sys
22210 74 65 6d 45 66 36 4d 75 73 74 42 65 47 6c 6f 62  temEf6MustBeGlob
22220 61 6c 2c 20 74 72 75 65 29 20 3f 0d 0a 20 20 20  al, true) ?..   
22230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22240 20 49 73 53 79 73 74 65 6d 45 66 36 41 73 73 65   IsSystemEf6Asse
22250 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 20 3a 20 74  mblyGlobal() : t
22260 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
22270 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22280 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
222d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
222e0 6f 6c 20 49 73 45 66 36 41 73 73 65 6d 62 6c 79  ol IsEf6Assembly
222f0 47 6c 6f 62 61 6c 28 29 0d 0a 20 20 20 20 20 20  Global()..      
22300 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22310 20 20 20 20 20 20 20 20 20 69 66 20 28 65 66 36           if (ef6
22320 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20  AssemblyName == 
22330 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
22340 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
22350 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
22360 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
22370 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 20  mbly assembly = 
22380 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74  Assembly.Reflect
22390 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 28 0d 0a 20 20  ionOnlyLoad(..  
223a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223b0 20 20 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d    ef6AssemblyNam
223c0 65 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d 0a  e.ToString());..
223d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
223e0 20 20 72 65 74 75 72 6e 20 28 61 73 73 65 6d 62    return (assemb
223f0 6c 79 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 61  ly != null) && a
22400 73 73 65 6d 62 6c 79 2e 47 6c 6f 62 61 6c 41 73  ssembly.GlobalAs
22410 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20  semblyCache;..  
22420 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22430 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
22440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
22490 62 6c 69 63 20 62 6f 6f 6c 20 55 73 65 45 66 36  blic bool UseEf6
224a0 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20  Provider(..     
224b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
224c0 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  trace..         
224d0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
224e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
224f0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
22500 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
22510 4e 4f 54 45 3a 20 57 65 20 63 61 6e 6e 6f 74 20  NOTE: We cannot 
22520 75 73 65 20 74 68 65 20 45 46 36 20 61 73 73 65  use the EF6 asse
22530 6d 62 6c 79 20 61 73 20 74 68 65 20 70 72 6f 76  mbly as the prov
22540 69 64 65 72 20 69 66 20 69 74 0d 0a 20 20 20 20  ider if it..    
22550 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
22560 20 20 20 20 20 69 73 20 6e 6f 74 20 73 75 70 70       is not supp
22570 6f 72 74 65 64 20 62 79 20 74 68 69 73 20 69 6e  orted by this in
22580 73 74 61 6c 6c 61 74 69 6f 6e 2e 0d 0a 20 20 20  stallation...   
22590 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
225a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
225b0 20 69 66 20 28 21 49 73 45 66 36 53 75 70 70 6f   if (!IsEf6Suppo
225c0 72 74 65 64 28 74 72 61 63 65 29 29 0d 0a 20 20  rted(trace))..  
225d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
225f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22600 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
22610 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
22620 46 6f 72 20 74 68 65 20 45 46 36 20 61 73 73 65  For the EF6 asse
22630 6d 62 6c 79 20 74 6f 20 62 65 20 75 73 61 62 6c  mbly to be usabl
22640 65 20 61 73 20 61 20 70 72 6f 76 69 64 65 72 20  e as a provider 
22650 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  in..            
22660 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
22670 20 6d 61 63 68 69 6e 65 20 63 6f 6e 66 69 67 75   machine configu
22680 72 61 74 69 6f 6e 20 66 69 6c 65 2c 20 69 74 20  ration file, it 
22690 6d 75 73 74 20 62 65 20 69 6e 20 74 68 65 0d 0a  must be in the..
226a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226b0 2f 2f 20 20 20 20 20 20 20 67 6c 6f 62 61 6c 20  //       global 
226c0 61 73 73 65 6d 62 6c 79 20 63 61 63 68 65 2e 0d  assembly cache..
226d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
226e0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
226f0 20 20 20 20 20 72 65 74 75 72 6e 20 49 73 45 66       return IsEf
22700 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 28  6AssemblyGlobal(
22710 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
22720 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22730 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22770 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22780 20 20 20 20 2f 2a 20 52 45 51 55 49 52 45 44 20      /* REQUIRED 
22790 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
227a0 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e  public AssemblyN
227b0 61 6d 65 20 47 65 74 43 6f 72 65 41 73 73 65 6d  ame GetCoreAssem
227c0 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  blyName(..      
227d0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
227e0 72 61 63 65 20 2f 2a 20 4e 4f 54 20 55 53 45 44  race /* NOT USED
227f0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
22800 20 20 20 20 20 29 20 2f 2a 20 74 68 72 6f 77 20       ) /* throw 
22810 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
22820 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22830 20 20 20 69 66 20 28 63 6f 72 65 41 73 73 65 6d     if (coreAssem
22840 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  blyName == null)
22850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22860 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22870 20 20 20 20 20 20 20 20 20 63 6f 72 65 41 73 73           coreAss
22880 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65  emblyName = Asse
22890 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65  mblyName.GetAsse
228a0 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  mblyName(..     
228b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228c0 20 20 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29     CoreFileName)
228d0 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
228e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
228f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22900 20 20 20 20 72 65 74 75 72 6e 20 63 6f 72 65 41      return coreA
22910 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20  ssemblyName;..  
22920 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22930 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
22940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ..            /*
22990 20 4f 50 54 49 4f 4e 41 4c 20 2a 2f 0d 0a 20 20   OPTIONAL */..  
229a0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
229b0 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65   AssemblyName Ge
229c0 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d  tLinqAssemblyNam
229d0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
229e0 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a      bool trace..
229f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a00 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
22a10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
22a30 20 28 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 65   (IsLinqSupporte
22a40 64 28 74 72 61 63 65 29 20 26 26 20 28 6c 69 6e  d(trace) && (lin
22a50 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d  qAssemblyName ==
22a60 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
22a70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a90 6c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65  linqAssemblyName
22aa0 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e   = AssemblyName.
22ab0 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  GetAssemblyName(
22ac0 0d 0a 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 4c 69 6e 71 46 69            LinqFi
22ae0 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f  leName); /* thro
22af0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
22b00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
22b10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
22b20 6e 20 6c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61  n linqAssemblyNa
22b30 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
22b40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
22b50 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
22b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b90 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
22ba0 20 20 20 20 20 2f 2a 20 4f 50 54 49 4f 4e 41 4c       /* OPTIONAL
22bb0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
22bc0 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79   public Assembly
22bd0 4e 61 6d 65 20 47 65 74 45 66 36 41 73 73 65 6d  Name GetEf6Assem
22be0 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  blyName(..      
22bf0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
22c00 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
22c10 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72 6f 77        ) /* throw
22c20 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
22c30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22c40 20 20 20 20 69 66 20 28 49 73 45 66 36 53 75 70      if (IsEf6Sup
22c50 70 6f 72 74 65 64 28 74 72 61 63 65 29 20 26 26  ported(trace) &&
22c60 20 28 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d   (ef6AssemblyNam
22c70 65 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  e == null))..   
22c80 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
22c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ca0 20 20 20 20 65 66 36 41 73 73 65 6d 62 6c 79 4e      ef6AssemblyN
22cb0 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61  ame = AssemblyNa
22cc0 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61  me.GetAssemblyNa
22cd0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
22ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 66 36               Ef6
22cf0 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68  FileName); /* th
22d00 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
22d10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
22d30 75 72 6e 20 65 66 36 41 73 73 65 6d 62 6c 79 4e  urn ef6AssemblyN
22d40 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
22d50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22d60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22da0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22db0 20 20 20 20 20 20 2f 2a 20 52 45 51 55 49 52 45        /* REQUIRE
22dc0 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  D */..          
22dd0 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c    public Assembl
22de0 79 4e 61 6d 65 20 47 65 74 44 65 73 69 67 6e 65  yName GetDesigne
22df0 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a  rAssemblyName(..
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e10 62 6f 6f 6c 20 74 72 61 63 65 20 2f 2a 20 4e 4f  bool trace /* NO
22e20 54 20 55 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20  T USED */..     
22e30 20 20 20 20 20 20 20 20 20 20 20 29 20 2f 2a 20             ) /* 
22e40 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
22e50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22e60 20 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73           if (des
22e70 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  ignerAssemblyNam
22e80 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
22e90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22eb0 20 20 20 64 65 73 69 67 6e 65 72 41 73 73 65 6d     designerAssem
22ec0 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62  blyName = Assemb
22ed0 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62  lyName.GetAssemb
22ee0 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  lyName(..       
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f00 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   DesignerFileNam
22f10 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  e); /* throw */.
22f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22f30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
22f40 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 65 73        return des
22f50 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  ignerAssemblyNam
22f60 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
22f70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22f80 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22fc0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22fd0 20 20 20 20 2f 2a 20 52 45 51 55 49 52 45 44 20      /* REQUIRED 
22fe0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
22ff0 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e  public AssemblyN
23000 61 6d 65 20 47 65 74 50 72 6f 76 69 64 65 72 41  ame GetProviderA
23010 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20  ssemblyName(..  
23020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
23030 6f 6c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ol trace..      
23040 20 20 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74            ) /* t
23050 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
23060 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23070 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
23080 73 65 45 66 36 50 72 6f 76 69 64 65 72 28 74 72  seEf6Provider(tr
23090 61 63 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ace) ?..        
230a0 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 45              GetE
230b0 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 74  f6AssemblyName(t
230c0 72 61 63 65 29 20 3a 20 47 65 74 43 6f 72 65 41  race) : GetCoreA
230d0 73 73 65 6d 62 6c 79 4e 61 6d 65 28 74 72 61 63  ssemblyName(trac
230e0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
230f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
23100 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
23110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23140 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23150 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
23160 6e 67 20 47 65 74 43 6f 6e 66 69 67 49 6e 76 61  ng GetConfigInva
23170 72 69 61 6e 74 4e 61 6d 65 28 0d 0a 20 20 20 20  riantName(..    
23180 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
23190 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20   trace..        
231a0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
231b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
231c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
231d0 20 47 65 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d   GetInvariantNam
231e0 65 28 74 72 61 63 65 29 3b 0d 0a 20 20 20 20 20  e(trace);..     
231f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23200 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
23210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23250 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
23260 63 20 73 74 72 69 6e 67 20 47 65 74 50 72 6f 76  c string GetProv
23270 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d  iderInvariantNam
23280 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
23290 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a      bool trace..
232a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
232c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
232d0 20 20 72 65 74 75 72 6e 20 47 65 74 49 6e 76 61    return GetInva
232e0 72 69 61 6e 74 4e 61 6d 65 28 74 72 61 63 65 29  riantName(trace)
232f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
23300 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23350 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
23360 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
23370 20 47 65 74 46 61 63 74 6f 72 79 54 79 70 65 4e   GetFactoryTypeN
23380 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
23390 20 20 20 20 20 20 62 6f 6f 6c 20 74 72 61 63 65        bool trace
233a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
233b0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
233c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
233d0 20 20 20 20 72 65 74 75 72 6e 20 55 73 65 45 66      return UseEf
233e0 36 50 72 6f 76 69 64 65 72 28 74 72 61 63 65 29  6Provider(trace)
233f0 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
23400 20 20 20 20 20 20 20 20 45 66 36 46 61 63 74 6f          Ef6Facto
23410 72 79 54 79 70 65 4e 61 6d 65 20 3a 20 46 61 63  ryTypeName : Fac
23420 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b 0d 0a 20  toryTypeName;.. 
23430 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
23440 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
23450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
23490 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
234a0 75 62 6c 69 63 20 76 6f 69 64 20 44 75 6d 70 28  ublic void Dump(
234b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
234c0 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    TraceCallback 
234d0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 0d 0a 20  traceCallback.. 
234e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
234f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
23500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23510 20 69 66 20 28 74 72 61 63 65 43 61 6c 6c 62 61   if (traceCallba
23520 63 6b 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck != null)..   
23530 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
23540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23550 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
23560 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
23570 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
23580 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
23590 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73               "As
235a0 73 65 6d 62 6c 79 22 2c 20 46 6f 72 44 69 73 70  sembly", ForDisp
235b0 6c 61 79 28 61 73 73 65 6d 62 6c 79 29 29 2c 0d  lay(assembly)),.
235c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
235d0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
235e0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23600 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
23610 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
23620 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
23630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23640 20 20 20 20 20 20 20 20 20 22 4c 6f 67 46 69 6c           "LogFil
23650 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  eName", ForDispl
23660 61 79 28 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29  ay(logFileName))
23670 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23680 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
23690 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
236a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236b0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
236c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
236d0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
236e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
236f0 20 20 20 20 20 20 20 20 20 20 20 22 44 69 72 65             "Dire
23700 63 74 6f 72 79 22 2c 20 46 6f 72 44 69 73 70 6c  ctory", ForDispl
23710 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d  ay(directory)),.
23720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23730 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
23740 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
23750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23760 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
23770 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
23780 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
23790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
237a0 20 20 20 20 20 20 20 20 20 22 43 6f 72 65 46 69           "CoreFi
237b0 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  leName", ForDisp
237c0 6c 61 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65  lay(coreFileName
237d0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
237e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
237f0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
23800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23810 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
23820 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
23830 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
23840 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
23850 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4c 69               "Li
23860 6e 71 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72  nqFileName", For
23870 44 69 73 70 6c 61 79 28 6c 69 6e 71 46 69 6c 65  Display(linqFile
23880 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
23890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238a0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
238b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
238c0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
238d0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
238e0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
238f0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
23900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23910 20 22 45 66 36 46 69 6c 65 4e 61 6d 65 22 2c 20   "Ef6FileName", 
23920 46 6f 72 44 69 73 70 6c 61 79 28 65 66 36 46 69  ForDisplay(ef6Fi
23930 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
23940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23950 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23960 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23970 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
23980 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
23990 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
239a0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
239b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239c0 20 20 20 22 44 65 73 69 67 6e 65 72 46 69 6c 65     "DesignerFile
239d0 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
239e0 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  y(designerFileNa
239f0 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
23a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
23a10 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
23a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23a30 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
23a40 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
23a50 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
23a60 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
23a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23a80 52 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 22  RegistryVersion"
23a90 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 67  , ForDisplay(reg
23aa0 69 73 74 72 79 56 65 72 73 69 6f 6e 29 29 2c 0d  istryVersion)),.
23ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23ac0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
23ad0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23af0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
23b00 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
23b10 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
23b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23b30 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 67           "Config
23b40 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73  Version", ForDis
23b50 70 6c 61 79 28 63 6f 6e 66 69 67 56 65 72 73 69  play(configVersi
23b60 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
23b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
23b80 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
23b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23ba0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
23bb0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
23bc0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
23bd0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
23be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23bf0 56 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 22  VsVersionSuffix"
23c00 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56  , ForDisplay(vsV
23c10 65 72 73 69 6f 6e 53 75 66 66 69 78 29 29 2c 0d  ersionSuffix)),.
23c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23c30 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
23c40 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
23c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c60 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
23c70 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
23c80 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
23c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23ca0 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67 46           "DebugF
23cb0 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73 70 6c  ormat", ForDispl
23cc0 61 79 28 64 65 62 75 67 46 6f 72 6d 61 74 29 29  ay(debugFormat))
23cd0 2c 0d 0a 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 74 72 61 63 65             trace
23cf0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d10 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
23d20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
23d30 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
23d40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23d50 20 20 20 20 20 20 20 20 20 20 20 22 54 72 61 63             "Trac
23d60 65 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73  eFormat", ForDis
23d70 70 6c 61 79 28 74 72 61 63 65 46 6f 72 6d 61 74  play(traceFormat
23d80 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
23d90 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
23da0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
23db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23dc0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
23dd0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
23de0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
23df0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
23e00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
23e10 73 74 61 6c 6c 46 6c 61 67 73 22 2c 20 46 6f 72  stallFlags", For
23e20 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 46  Display(installF
23e30 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20 20 20 20  lags)),..       
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e50 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
23e60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23e70 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
23e80 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
23e90 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
23ea0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
23eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ec0 20 22 50 72 6f 76 69 64 65 72 46 6c 61 67 73 22   "ProviderFlags"
23ed0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 70 72 6f  , ForDisplay(pro
23ee0 76 69 64 65 72 46 6c 61 67 73 29 29 2c 0d 0a 20  viderFlags)),.. 
23ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
23f10 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
23f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
23f30 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
23f40 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
23f50 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
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 22 44 65 62 75 67 50 72 69         "DebugPri
23f80 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73 70 6c  ority", ForDispl
23f90 61 79 28 64 65 62 75 67 50 72 69 6f 72 69 74 79  ay(debugPriority
23fa0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
23fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
23fc0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
23ff0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
24000 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
24010 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54 72               "Tr
24030 61 63 65 50 72 69 6f 72 69 74 79 22 2c 20 46 6f  acePriority", Fo
24040 72 44 69 73 70 6c 61 79 28 74 72 61 63 65 50 72  rDisplay(tracePr
24050 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20  iority)),..     
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24070 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
24080 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24090 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
240a0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
240b0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
240c0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
240d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240e0 20 20 20 22 50 65 72 55 73 65 72 22 2c 20 46 6f     "PerUser", Fo
240f0 72 44 69 73 70 6c 61 79 28 70 65 72 55 73 65 72  rDisplay(perUser
24100 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
24110 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
24120 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
24130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24140 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
24150 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
24160 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
24170 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
24180 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
24190 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73 70 6c  stall", ForDispl
241a0 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d 0a 20  ay(install)),.. 
241b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
241d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
241e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
241f0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
24200 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
24210 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
24220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24230 20 20 20 20 20 20 20 22 57 6f 77 36 34 22 2c 20         "Wow64", 
24240 46 6f 72 44 69 73 70 6c 61 79 28 77 6f 77 36 34  ForDisplay(wow64
24250 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
24260 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
24270 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
24280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24290 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
242a0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
242b0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
242c0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
242d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
242e0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 2c  RuntimeVersion",
242f0 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 52 75   ForDisplay(noRu
24300 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d  ntimeVersion)),.
24310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24320 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
24330 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
24340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24350 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
24360 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
24370 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
24380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24390 20 20 20 20 20 20 20 20 20 22 4e 6f 44 65 73 6b           "NoDesk
243a0 74 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  top", ForDisplay
243b0 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d 0a 20  (noDesktop)),.. 
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 74 72 61 63 65 43 61 74 65         traceCate
243e0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
243f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24400 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
24410 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
24420 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
24430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24440 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70 61 63         "NoCompac
24450 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  t", ForDisplay(n
24460 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20 20 20  oCompact)),..   
24470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24480 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
24490 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
244a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
244b0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
244c0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
244d0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
244e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244f0 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 32 30 22       "NoNetFx20"
24500 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
24510 65 74 46 78 32 30 29 29 2c 0d 0a 20 20 20 20 20  etFx20)),..     
24520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24530 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
24540 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24550 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24560 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
24570 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
24580 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
24590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245a0 20 20 20 22 4e 6f 4e 65 74 46 78 33 35 22 2c 20     "NoNetFx35", 
245b0 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
245c0 46 78 33 35 29 29 2c 0d 0a 20 20 20 20 20 20 20  Fx35)),..       
245d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245e0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
245f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24600 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
24610 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
24620 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
24630 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24650 20 22 4e 6f 4e 65 74 46 78 34 30 22 2c 20 46 6f   "NoNetFx40", Fo
24660 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78  rDisplay(noNetFx
24670 34 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  40)),..         
24680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24690 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
246a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
246b0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
246c0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
246d0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
246e0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
246f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
24700 4e 6f 4e 65 74 46 78 34 35 22 2c 20 46 6f 72 44  NoNetFx45", ForD
24710 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35  isplay(noNetFx45
24720 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
24730 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
24740 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
24750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24760 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
24770 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
24780 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
24790 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
247a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
247b0 4e 65 74 46 78 34 35 31 22 2c 20 46 6f 72 44 69  NetFx451", ForDi
247c0 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35 31  splay(noNetFx451
247d0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
247e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
247f0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
24800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24810 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
24820 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
24830 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
24840 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
24850 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
24860 4e 65 74 46 78 34 35 32 22 2c 20 46 6f 72 44 69  NetFx452", ForDi
24870 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35 32  splay(noNetFx452
24880 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
24890 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
248a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
248b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248c0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
248d0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
248e0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
248f0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
24900 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
24910 4e 65 74 46 78 34 36 22 2c 20 46 6f 72 44 69 73  NetFx46", ForDis
24920 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 36 29 29  play(noNetFx46))
24930 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24940 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
24950 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
24960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24970 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
24980 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
24990 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
249a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
249b0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65             "NoNe
249c0 74 46 78 34 36 31 22 2c 20 46 6f 72 44 69 73 70  tFx461", ForDisp
249d0 6c 61 79 28 6e 6f 4e 65 74 46 78 34 36 31 29 29  lay(noNetFx461))
249e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
249f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
24a00 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
24a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
24a30 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
24a40 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
24a50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24a60 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73             "NoVs
24a70 32 30 30 35 22 2c 20 46 6f 72 44 69 73 70 6c 61  2005", ForDispla
24a80 79 28 6e 6f 56 73 32 30 30 35 29 29 2c 0d 0a 20  y(noVs2005)),.. 
24a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24aa0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
24ab0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
24ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24ad0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
24ae0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
24af0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b10 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 30 38         "NoVs2008
24b20 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
24b30 56 73 32 30 30 38 29 29 2c 0d 0a 20 20 20 20 20  Vs2008)),..     
24b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b50 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
24b60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24b70 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24b80 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
24b90 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
24ba0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
24bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bc0 20 20 20 22 4e 6f 56 73 32 30 31 30 22 2c 20 46     "NoVs2010", F
24bd0 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
24be0 31 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  10)),..         
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24c00 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
24c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24c20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
24c30 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
24c40 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
24c50 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
24c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
24c70 4e 6f 56 73 32 30 31 32 22 2c 20 46 6f 72 44 69  NoVs2012", ForDi
24c80 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 32 29 29  splay(noVs2012))
24c90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24ca0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
24cb0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
24cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cd0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
24ce0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
24cf0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
24d00 2c 0d 0a 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 22 4e 6f 56 73             "NoVs
24d20 32 30 31 33 22 2c 20 46 6f 72 44 69 73 70 6c 61  2013", ForDispla
24d30 79 28 6e 6f 56 73 32 30 31 33 29 29 2c 0d 0a 20  y(noVs2013)),.. 
24d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d50 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
24d60 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
24d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24d80 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
24d90 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
24da0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
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 22 4e 6f 56 73 32 30 31 35         "NoVs2015
24dd0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
24de0 56 73 32 30 31 35 29 29 2c 0d 0a 20 20 20 20 20  Vs2015)),..     
24df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e00 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
24e10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24e20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24e30 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
24e40 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
24e50 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
24e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e70 20 20 20 22 4e 6f 54 72 61 63 65 22 2c 20 46 6f     "NoTrace", Fo
24e80 72 44 69 73 70 6c 61 79 28 6e 6f 54 72 61 63 65  rDisplay(noTrace
24e90 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
24ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
24eb0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
24ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ed0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
24ee0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
24ef0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
24f00 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
24f10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
24f20 43 6f 6e 73 6f 6c 65 22 2c 20 46 6f 72 44 69 73  Console", ForDis
24f30 70 6c 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29  play(noConsole))
24f40 2c 0d 0a 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 74 72 61 63 65             trace
24f60 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f80 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
24f90 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
24fa0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
24fb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24fc0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4c 6f             "NoLo
24fd0 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  g", ForDisplay(n
24fe0 6f 4c 6f 67 29 29 2c 0d 0a 20 20 20 20 20 20 20  oLog)),..       
24ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25000 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
25010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25020 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
25030 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
25040 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
25050 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
25060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25070 20 22 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67   "ThrowOnMissing
25080 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 68  ", ForDisplay(th
25090 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 29 2c 0d  rowOnMissing)),.
250a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
250b0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
250c0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
250d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
250f0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
25100 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
25110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25120 20 20 20 20 20 20 20 20 20 22 57 68 61 74 49 66           "WhatIf
25130 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 68  ", ForDisplay(wh
25140 61 74 49 66 29 29 2c 0d 0a 20 20 20 20 20 20 20  atIf)),..       
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25160 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
25170 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25180 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
25190 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
251a0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
251b0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
251c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251d0 20 22 44 65 62 75 67 22 2c 20 46 6f 72 44 69 73   "Debug", ForDis
251e0 70 6c 61 79 28 64 65 62 75 67 29 29 2c 0d 0a 20  play(debug)),.. 
251f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25200 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
25210 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
25220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25230 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
25240 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
25250 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
25260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25270 20 20 20 20 20 20 20 22 56 65 72 62 6f 73 65 22         "Verbose"
25280 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 65 72  , ForDisplay(ver
25290 62 6f 73 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  bose)),..       
252a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252b0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
252c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
252d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
252e0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
252f0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
25300 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
25310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25320 20 22 43 6f 6e 66 69 72 6d 22 2c 20 46 6f 72 44   "Confirm", ForD
25330 69 73 70 6c 61 79 28 63 6f 6e 66 69 72 6d 29 29  isplay(confirm))
25340 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25350 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
25360 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
25370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25380 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
253c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
253d0 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
253e0 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
253f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25400 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25410 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
25420 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
25430 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
25440 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
25450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25460 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
25470 79 54 69 74 6c 65 22 2c 0d 0a 20 20 20 20 20 20  yTitle",..      
25480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25490 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
254a0 28 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c  (GetAssemblyTitl
254b0 65 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a  e(assembly))),..
254c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
254e0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
254f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25500 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
25510 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
25520 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
25530 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
25540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25550 20 20 20 20 22 41 73 73 65 6d 62 6c 79 43 6f 6e      "AssemblyCon
25560 66 69 67 75 72 61 74 69 6f 6e 22 2c 0d 0a 20 20  figuration",..  
25570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25580 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
25590 70 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79  play(GetAssembly
255a0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 61 73  Configuration(as
255b0 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20  sembly))),..    
255c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
255e0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
255f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
25600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25610 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
25620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25650 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
25660 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
25670 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
25680 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
25690 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
256a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256b0 20 20 22 49 73 53 79 73 74 65 6d 45 66 36 41 73    "IsSystemEf6As
256c0 73 65 6d 62 6c 79 41 76 61 69 6c 61 62 6c 65 22  semblyAvailable"
256d0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
256e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256f0 20 20 20 20 20 20 20 49 73 53 79 73 74 65 6d 45         IsSystemE
25700 66 36 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61  f6AssemblyAvaila
25710 62 6c 65 28 66 61 6c 73 65 29 29 29 2c 0d 0a 20  ble(false))),.. 
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 74 72 61 63 65 43 61 74 65         traceCate
25740 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
25750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
25760 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
25770 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
25780 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
25790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257a0 20 20 20 20 20 20 20 22 49 73 53 79 73 74 65 6d         "IsSystem
257b0 45 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61  Ef6AssemblyGloba
257c0 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  l", ForDisplay(.
257d0 0a 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 49 73 53 79 73 74 65           IsSyste
257f0 6d 45 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62  mEf6AssemblyGlob
25800 61 6c 28 29 29 29 2c 0d 0a 20 20 20 20 20 20 20  al())),..       
25810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25820 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
25830 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25840 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
25850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25880 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
25890 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
258a0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
258b0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
258c0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
258d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258e0 20 20 20 20 22 49 73 4c 69 6e 71 53 75 70 70 6f      "IsLinqSuppo
258f0 72 74 65 64 22 2c 20 46 6f 72 44 69 73 70 6c 61  rted", ForDispla
25900 79 28 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 65  y(IsLinqSupporte
25910 64 28 66 61 6c 73 65 29 29 29 2c 0d 0a 20 20 20  d(false))),..   
25920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25930 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
25940 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
25950 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
25960 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
25970 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
25980 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
25990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259a0 20 20 20 20 20 22 49 73 45 66 36 53 75 70 70 6f       "IsEf6Suppo
259b0 72 74 65 64 22 2c 20 46 6f 72 44 69 73 70 6c 61  rted", ForDispla
259c0 79 28 49 73 45 66 36 53 75 70 70 6f 72 74 65 64  y(IsEf6Supported
259d0 28 66 61 6c 73 65 29 29 29 2c 0d 0a 20 20 20 20  (false))),..    
259e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259f0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
25a00 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
25a10 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
25a20 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
25a30 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
25a40 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
25a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a60 20 20 20 20 22 49 73 45 66 36 41 73 73 65 6d 62      "IsEf6Assemb
25a70 6c 79 47 6c 6f 62 61 6c 22 2c 20 46 6f 72 44 69  lyGlobal", ForDi
25a80 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
25a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25aa0 49 73 45 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f  IsEf6AssemblyGlo
25ab0 62 61 6c 28 29 29 29 2c 0d 0a 20 20 20 20 20 20  bal())),..      
25ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ad0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
25ae0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25af0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
25b00 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
25b10 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
25b20 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
25b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b40 20 20 22 55 73 65 45 66 36 50 72 6f 76 69 64 65    "UseEf6Provide
25b50 72 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 55  r", ForDisplay(U
25b60 73 65 45 66 36 50 72 6f 76 69 64 65 72 28 66 61  seEf6Provider(fa
25b70 6c 73 65 29 29 29 2c 0d 0a 20 20 20 20 20 20 20  lse))),..       
25b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b90 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
25ba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25bb0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
25bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bf0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
25c00 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
25c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
25c40 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
25c50 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
25c60 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
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 22 47 65 74              "Get
25c90 43 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65  CoreAssemblyName
25ca0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ", ForDisplay(..
25cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cc0 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 43              GetC
25cd0 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  oreAssemblyName(
25ce0 66 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43  false))), traceC
25cf0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
25d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25d20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
25d30 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
25d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
25d50 0d 0a 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 74 72 61 63 65 43            traceC
25d70 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
25d80 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
25d90 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
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 22 47 65 74 43 6f 72 65 41         "GetCoreA
25dc0 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f  ssemblyName", Fo
25dd0 72 44 69 73 70 6c 61 79 28 65 29 29 2c 0d 0a 20  rDisplay(e)),.. 
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 20 20 20 20 74 72 61 63 65             trace
25e00 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
25e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25e30 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
25e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25e80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
25e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25ea0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ec0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
25ed0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
25ee0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
25ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25f00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
25f10 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d  tLinqAssemblyNam
25f20 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  e", ForDisplay(.
25f30 0a 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 47 65 74               Get
25f50 4c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65  LinqAssemblyName
25f60 28 66 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65  (false))), trace
25f70 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
25f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
25fa0 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
25fb0 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
25fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25fe0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
25ff0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
26000 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
26010 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
26020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26030 20 20 20 20 20 20 20 20 22 47 65 74 4c 69 6e 71          "GetLinq
26040 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46  AssemblyName", F
26050 6f 72 44 69 73 70 6c 61 79 28 65 29 29 2c 0d 0a  orDisplay(e)),..
26060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26070 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
26080 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
26090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
260b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
260c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260f0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
26100 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
26110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26120 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26140 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
26150 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
26160 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
26170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
26190 65 74 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d  etEf6AssemblyNam
261a0 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  e", ForDisplay(.
261b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
261c0 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
261d0 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  Ef6AssemblyName(
261e0 66 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43  false))), traceC
261f0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
26200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26220 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
26230 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
26240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
26250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26260 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
26270 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
26280 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
26290 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
262a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262b0 20 20 20 20 20 20 20 22 47 65 74 45 66 36 41 73         "GetEf6As
262c0 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72  semblyName", For
262d0 44 69 73 70 6c 61 79 28 65 29 29 2c 0d 0a 20 20  Display(e)),..  
262e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262f0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
26300 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26330 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
26340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26370 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
26380 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
26390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
263b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
263c0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
263d0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
263e0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
263f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26400 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74              "Get
26410 44 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  DesignerAssembly
26420 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
26430 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
26440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26450 47 65 74 44 65 73 69 67 6e 65 72 41 73 73 65 6d  GetDesignerAssem
26460 62 6c 79 4e 61 6d 65 28 66 61 6c 73 65 29 29 29  blyName(false)))
26470 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
26480 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
26490 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
264a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
264b0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
264c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
264d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
264e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264f0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
26500 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
26510 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
26520 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
26540 47 65 74 44 65 73 69 67 6e 65 72 41 73 73 65 6d  GetDesignerAssem
26550 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  blyName", ForDis
26560 70 6c 61 79 28 65 29 29 2c 0d 0a 20 20 20 20 20  play(e)),..     
26570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26580 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
26590 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
265a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
265b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
265c0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
265d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
265e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
265f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26600 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26610 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
26620 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
26630 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
26640 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
26650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26660 20 22 47 65 74 49 6e 76 61 72 69 61 6e 74 4e 61   "GetInvariantNa
26670 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
26680 47 65 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  GetInvariantName
26690 28 0d 0a 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 66 61 6c 73 65             false
266b0 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ))), traceCatego
266c0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
266d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
266e0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
266f0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
26700 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
26710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26720 20 20 20 20 20 22 47 65 74 43 6f 6e 66 69 67 49       "GetConfigI
26730 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c 20 46  nvariantName", F
26740 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20  orDisplay(..    
26750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26760 20 20 20 20 47 65 74 43 6f 6e 66 69 67 49 6e 76      GetConfigInv
26770 61 72 69 61 6e 74 4e 61 6d 65 28 66 61 6c 73 65  ariantName(false
26780 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ))), traceCatego
26790 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
267a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
267b0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
267c0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
267d0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
267e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267f0 20 20 20 20 20 22 47 65 74 50 72 6f 76 69 64 65       "GetProvide
26800 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c  rInvariantName",
26810 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20   ForDisplay(..  
26820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26830 20 20 20 20 20 20 47 65 74 50 72 6f 76 69 64 65        GetProvide
26840 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 66  rInvariantName(f
26850 61 6c 73 65 29 29 29 2c 20 74 72 61 63 65 43 61  alse))), traceCa
26860 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
26870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26880 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
26890 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
268a0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
268b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
268c0 20 20 20 20 20 20 20 20 20 22 47 65 74 46 61 63           "GetFac
268d0 74 6f 72 79 54 79 70 65 4e 61 6d 65 22 2c 20 46  toryTypeName", F
268e0 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20  orDisplay(..    
268f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26900 20 20 20 20 47 65 74 46 61 63 74 6f 72 79 54 79      GetFactoryTy
26910 70 65 4e 61 6d 65 28 66 61 6c 73 65 29 29 29 2c  peName(false))),
26920 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
26930 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26940 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
26950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26980 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
26990 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
269a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
269c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
269d0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
269e0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
269f0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
26a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a10 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74              "Get
26a20 50 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79  ProviderAssembly
26a30 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
26a40 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
26a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a60 47 65 74 50 72 6f 76 69 64 65 72 41 73 73 65 6d  GetProviderAssem
26a70 62 6c 79 4e 61 6d 65 28 66 61 6c 73 65 29 29 29  blyName(false)))
26a80 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
26a90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
26aa0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
26ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
26ac0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
26ad0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
26ae0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b00 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
26b10 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
26b20 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
26b30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
26b50 47 65 74 50 72 6f 76 69 64 65 72 41 73 73 65 6d  GetProviderAssem
26b60 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  blyName", ForDis
26b70 70 6c 61 79 28 65 29 29 2c 0d 0a 20 20 20 20 20  play(e)),..     
26b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
26ba0 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
26bb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
26be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
26bf0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
26c00 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
26c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26c50 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
26c60 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
26c70 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
26c80 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c   private Assembl
26c90 79 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20  y assembly;..   
26ca0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
26cb0 41 73 73 65 6d 62 6c 79 20 41 73 73 65 6d 62 6c  Assembly Assembl
26cc0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
26cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26ce0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 61    get { return a
26cf0 73 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20 20  ssembly; }..    
26d00 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
26d10 7b 20 61 73 73 65 6d 62 6c 79 20 3d 20 76 61 6c  { assembly = val
26d20 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
26d30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
26d40 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
26d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d80 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
26d90 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
26da0 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d  tring logFileNam
26db0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
26dc0 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 6f  public string Lo
26dd0 67 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  gFileName..     
26de0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26df0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
26e00 72 65 74 75 72 6e 20 6c 6f 67 46 69 6c 65 4e 61  return logFileNa
26e10 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
26e20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 67         set { log
26e30 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65  FileName = value
26e40 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
26e50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
26e60 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
26e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ea0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
26eb0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
26ec0 69 6e 67 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a  ing directory;..
26ed0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
26ee0 69 63 20 73 74 72 69 6e 67 20 44 69 72 65 63 74  ic string Direct
26ef0 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
26f00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26f10 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
26f20 20 64 69 72 65 63 74 6f 72 79 3b 20 7d 0d 0a 20   directory; }.. 
26f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
26f40 65 74 20 7b 20 64 69 72 65 63 74 6f 72 79 20 3d  et { directory =
26f50 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
26f60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26f70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
26f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
26fc0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
26fd0 74 65 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69  te string coreFi
26fe0 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
26ff0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
27000 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 0d  ng CoreFileName.
27010 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
27020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27030 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 72  get { return cor
27040 65 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20  eFileName; }..  
27050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
27060 74 20 7b 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  t { coreFileName
27070 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
27080 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
27090 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
270a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
270b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
270c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
270d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
270e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
270f0 76 61 74 65 20 73 74 72 69 6e 67 20 6c 69 6e 71  vate string linq
27100 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
27110 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
27120 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d  ring LinqFileNam
27130 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
27140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27150 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c    get { return l
27160 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a  inqFileName; }..
27170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27180 73 65 74 20 7b 20 6c 69 6e 71 46 69 6c 65 4e 61  set { linqFileNa
27190 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
271a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
271b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
271c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
271d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
271e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
271f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
27200 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
27210 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 65 66  rivate string ef
27220 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  6FileName;..    
27230 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
27240 74 72 69 6e 67 20 45 66 36 46 69 6c 65 4e 61 6d  tring Ef6FileNam
27250 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
27260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27270 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 65    get { return e
27280 66 36 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20  f6FileName; }.. 
27290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
272a0 65 74 20 7b 20 65 66 36 46 69 6c 65 4e 61 6d 65  et { ef6FileName
272b0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
272c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
272d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
272e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
272f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
27320 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
27330 76 61 74 65 20 73 74 72 69 6e 67 20 64 65 73 69  vate string desi
27340 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  gnerFileName;.. 
27350 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
27360 63 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e 65  c string Designe
27370 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  rFileName..     
27380 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27390 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
273a0 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65 72 46  return designerF
273b0 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ileName; }..    
273c0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
273d0 7b 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  { designerFileNa
273e0 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
273f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
27410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
27450 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
27460 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 72 65  rivate string re
27470 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 0d 0a  gistryVersion;..
27480 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
27490 69 63 20 73 74 72 69 6e 67 20 52 65 67 69 73 74  ic string Regist
274a0 72 79 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20  ryVersion..     
274b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
274c0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
274d0 72 65 74 75 72 6e 20 72 65 67 69 73 74 72 79 56  return registryV
274e0 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20  ersion; }..     
274f0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
27500 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   registryVersion
27510 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
27520 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
27530 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
27540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
27580 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
27590 76 61 74 65 20 73 74 72 69 6e 67 20 63 6f 6e 66  vate string conf
275a0 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  igVersion;..    
275b0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
275c0 74 72 69 6e 67 20 43 6f 6e 66 69 67 56 65 72 73  tring ConfigVers
275d0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
275e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
275f0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
27600 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 20   configVersion; 
27610 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
27620 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 67 56     set { configV
27630 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20  ersion = value; 
27640 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
27650 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
276b0 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
276c0 67 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69  g vsVersionSuffi
276d0 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x;..            
276e0 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 56 73  public string Vs
276f0 56 65 72 73 69 6f 6e 53 75 66 66 69 78 0d 0a 20  VersionSuffix.. 
27700 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
27720 74 20 7b 20 72 65 74 75 72 6e 20 76 73 56 65 72  t { return vsVer
27730 73 69 6f 6e 53 75 66 66 69 78 3b 20 7d 0d 0a 20  sionSuffix; }.. 
27740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
27750 65 74 20 7b 20 76 73 56 65 72 73 69 6f 6e 53 75  et { vsVersionSu
27760 66 66 69 78 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ffix = value; }.
27770 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
27790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
277e0 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
277f0 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20  debugFormat;..  
27800 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
27810 20 73 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72   string DebugFor
27820 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mat..           
27830 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27840 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
27850 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 0d   debugFormat; }.
27860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27870 20 73 65 74 20 7b 20 64 65 62 75 67 46 6f 72 6d   set { debugForm
27880 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  at = value; }.. 
27890 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
278a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
278b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
278e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
278f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
27900 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 74 72  rivate string tr
27910 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  aceFormat;..    
27920 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
27930 74 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61  tring TraceForma
27940 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
27950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27960 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74    get { return t
27970 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20  raceFormat; }.. 
27980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
27990 65 74 20 7b 20 74 72 61 63 65 46 6f 72 6d 61 74  et { traceFormat
279a0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
279b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
279c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
279d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
27a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
27a20 76 61 74 65 20 49 6e 73 74 61 6c 6c 46 6c 61 67  vate InstallFlag
27a30 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d  s installFlags;.
27a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
27a50 6c 69 63 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73  lic InstallFlags
27a60 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a 20   InstallFlags.. 
27a70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
27a90 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61  t { return insta
27aa0 6c 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20 20 20 20  llFlags; }..    
27ab0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
27ac0 7b 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d  { installFlags =
27ad0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
27ae0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27af0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
27b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
27b40 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
27b50 74 65 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73  te ProviderFlags
27b60 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 3b 0d   providerFlags;.
27b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
27b80 6c 69 63 20 50 72 6f 76 69 64 65 72 46 6c 61 67  lic ProviderFlag
27b90 73 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 0d  s ProviderFlags.
27ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
27bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bc0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 72 6f  get { return pro
27bd0 76 69 64 65 72 46 6c 61 67 73 3b 20 7d 0d 0a 20  viderFlags; }.. 
27be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
27bf0 65 74 20 7b 20 70 72 6f 76 69 64 65 72 46 6c 61  et { providerFla
27c00 67 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  gs = value; }.. 
27c10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27c20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
27c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
27c70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
27c80 72 69 76 61 74 65 20 54 72 61 63 65 50 72 69 6f  rivate TracePrio
27c90 72 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 69  rity debugPriori
27ca0 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
27cb0 20 70 75 62 6c 69 63 20 54 72 61 63 65 50 72 69   public TracePri
27cc0 6f 72 69 74 79 20 44 65 62 75 67 50 72 69 6f 72  ority DebugPrior
27cd0 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ity..           
27ce0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27cf0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
27d00 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20   debugPriority; 
27d10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
27d20 20 20 20 73 65 74 20 7b 20 64 65 62 75 67 50 72     set { debugPr
27d30 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20  iority = value; 
27d40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
27d50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27da0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
27db0 20 20 20 70 72 69 76 61 74 65 20 54 72 61 63 65     private Trace
27dc0 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72  Priority tracePr
27dd0 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20  iority;..       
27de0 20 20 20 20 20 70 75 62 6c 69 63 20 54 72 61 63       public Trac
27df0 65 50 72 69 6f 72 69 74 79 20 54 72 61 63 65 50  ePriority TraceP
27e00 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
27e10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27e20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
27e30 74 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69  turn tracePriori
27e40 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ty; }..         
27e50 20 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61         set { tra
27e60 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c  cePriority = val
27e70 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
27e80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27e90 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
27ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ed0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
27ee0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
27ef0 6f 6f 6c 20 70 65 72 55 73 65 72 3b 0d 0a 20 20  ool perUser;..  
27f00 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
27f10 20 62 6f 6f 6c 20 50 65 72 55 73 65 72 0d 0a 20   bool PerUser.. 
27f20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
27f40 74 20 7b 20 72 65 74 75 72 6e 20 70 65 72 55 73  t { return perUs
27f50 65 72 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  er; }..         
27f60 20 20 20 20 20 20 20 73 65 74 20 7b 20 70 65 72         set { per
27f70 55 73 65 72 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  User = value; }.
27f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
27fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27fe0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
27ff0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 69 6e   private bool in
28000 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20  stall;..        
28010 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
28020 49 6e 73 74 61 6c 6c 0d 0a 20 20 20 20 20 20 20  Install..       
28030 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28040 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
28050 74 75 72 6e 20 69 6e 73 74 61 6c 6c 3b 20 7d 0d  turn install; }.
28060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28070 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c 20 3d   set { install =
28080 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
28090 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
280a0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
280b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
280f0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
28100 74 65 20 62 6f 6f 6c 20 77 6f 77 36 34 3b 0d 0a  te bool wow64;..
28110 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
28120 69 63 20 62 6f 6f 6c 20 57 6f 77 36 34 0d 0a 20  ic bool Wow64.. 
28130 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
28150 74 20 7b 20 72 65 74 75 72 6e 20 77 6f 77 36 34  t { return wow64
28160 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
28170 20 20 20 20 20 73 65 74 20 7b 20 77 6f 77 36 34       set { wow64
28180 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
28190 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
281a0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
281b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
281f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
28200 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74  vate bool noRunt
28210 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  imeVersion;..   
28220 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
28230 62 6f 6f 6c 20 4e 6f 52 75 6e 74 69 6d 65 56 65  bool NoRuntimeVe
28240 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  rsion..         
28250 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28260 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
28270 72 6e 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73  rn noRuntimeVers
28280 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ion; }..        
28290 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
282a0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
282b0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
282c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
282d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
282e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
282f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
28320 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
28330 74 65 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f  te bool noDeskto
28340 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p;..            
28350 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 44 65  public bool NoDe
28360 73 6b 74 6f 70 0d 0a 20 20 20 20 20 20 20 20 20  sktop..         
28370 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28380 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
28390 72 6e 20 6e 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d  rn noDesktop; }.
283a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
283b0 20 73 65 74 20 7b 20 6e 6f 44 65 73 6b 74 6f 70   set { noDesktop
283c0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
283d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
283e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
283f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
28430 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
28440 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70  vate bool noComp
28450 61 63 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  act;..          
28460 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
28470 43 6f 6d 70 61 63 74 0d 0a 20 20 20 20 20 20 20  Compact..       
28480 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28490 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
284a0 74 75 72 6e 20 6e 6f 43 6f 6d 70 61 63 74 3b 20  turn noCompact; 
284b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
284c0 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6d 70 61     set { noCompa
284d0 63 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ct = value; }.. 
284e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
284f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
28500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
28540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
28550 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65  rivate bool noNe
28560 74 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20  tFx20;..        
28570 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
28580 4e 6f 4e 65 74 46 78 32 30 0d 0a 20 20 20 20 20  NoNetFx20..     
28590 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
285a0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
285b0 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 32 30  return noNetFx20
285c0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
285d0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74       set { noNet
285e0 46 78 32 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Fx20 = value; }.
285f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
28600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28650 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
28660 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
28670 4e 65 74 46 78 33 35 3b 0d 0a 20 20 20 20 20 20  NetFx35;..      
28680 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
28690 6c 20 4e 6f 4e 65 74 46 78 33 35 0d 0a 20 20 20  l NoNetFx35..   
286a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
286b0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
286c0 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78  { return noNetFx
286d0 33 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  35; }..         
286e0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e         set { noN
286f0 65 74 46 78 33 35 20 3d 20 76 61 6c 75 65 3b 20  etFx35 = value; 
28700 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
28710 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28760 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
28770 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
28780 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20  noNetFx40;..    
28790 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
287a0 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 30 0d 0a 20  ool NoNetFx40.. 
287b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
287c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
287d0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74  t { return noNet
287e0 46 78 34 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Fx40; }..       
287f0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
28800 6f 4e 65 74 46 78 34 30 20 3d 20 76 61 6c 75 65  oNetFx40 = value
28810 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
28820 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
28830 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28870 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
28880 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
28890 6c 20 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20  l noNetFx45;..  
288a0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
288b0 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 0d   bool NoNetFx45.
288c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
288d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288e0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e  get { return noN
288f0 65 74 46 78 34 35 3b 20 7d 0d 0a 20 20 20 20 20  etFx45; }..     
28900 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
28910 20 6e 6f 4e 65 74 46 78 34 35 20 3d 20 76 61 6c   noNetFx45 = val
28920 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
28930 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28940 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
28950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28980 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28990 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
289a0 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 31 3b 0d  ool noNetFx451;.
289b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
289c0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78  lic bool NoNetFx
289d0 34 35 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20  451..           
289e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
289f0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
28a00 20 6e 6f 4e 65 74 46 78 34 35 31 3b 20 7d 0d 0a   noNetFx451; }..
28a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 35 31  set { noNetFx451
28a30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
28a40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28a50 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
28a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
28aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
28ab0 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46  vate bool noNetF
28ac0 78 34 35 32 3b 0d 0a 20 20 20 20 20 20 20 20 20  x452;..         
28ad0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
28ae0 6f 4e 65 74 46 78 34 35 32 0d 0a 20 20 20 20 20  oNetFx452..     
28af0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28b00 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
28b10 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35  return noNetFx45
28b20 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  2; }..          
28b30 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
28b40 74 46 78 34 35 32 20 3d 20 76 61 6c 75 65 3b 20  tFx452 = value; 
28b50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
28b60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bb0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
28bc0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
28bd0 6e 6f 4e 65 74 46 78 34 36 3b 0d 0a 20 20 20 20  noNetFx46;..    
28be0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
28bf0 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 36 0d 0a 20  ool NoNetFx46.. 
28c00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
28c20 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74  t { return noNet
28c30 46 78 34 36 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Fx46; }..       
28c40 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
28c50 6f 4e 65 74 46 78 34 36 20 3d 20 76 61 6c 75 65  oNetFx46 = value
28c60 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
28c70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
28c80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28cc0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
28cd0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
28ce0 6c 20 6e 6f 4e 65 74 46 78 34 36 31 3b 0d 0a 20  l noNetFx461;.. 
28cf0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
28d00 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 36  c bool NoNetFx46
28d10 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  1..            {
28d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28d30 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
28d40 6f 4e 65 74 46 78 34 36 31 3b 20 7d 0d 0a 20 20  oNetFx461; }..  
28d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
28d60 74 20 7b 20 6e 6f 4e 65 74 46 78 34 36 31 20 3d  t { noNetFx461 =
28d70 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
28d80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28d90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
28de0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
28df0 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35  te bool noVs2005
28e00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
28e10 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32  ublic bool NoVs2
28e20 30 30 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20  005..           
28e30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28e40 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
28e50 20 6e 6f 56 73 32 30 30 35 3b 20 7d 0d 0a 20 20   noVs2005; }..  
28e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
28e70 74 20 7b 20 6e 6f 56 73 32 30 30 35 20 3d 20 76  t { noVs2005 = v
28e80 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
28e90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28ea0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28ef0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
28f00 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d   bool noVs2008;.
28f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
28f20 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30  lic bool NoVs200
28f30 38 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  8..            {
28f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28f50 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
28f60 6f 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20  oVs2008; }..    
28f70 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
28f80 7b 20 6e 6f 56 73 32 30 30 38 20 3d 20 76 61 6c  { noVs2008 = val
28f90 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
28fa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28fb0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
28fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ff0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
29000 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
29010 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20  ool noVs2010;.. 
29020 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
29030 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d  c bool NoVs2010.
29040 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
29050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29060 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56  get { return noV
29070 73 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20  s2010; }..      
29080 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
29090 6e 6f 56 73 32 30 31 30 20 3d 20 76 61 6c 75 65  noVs2010 = value
290a0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
290b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
290c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
290d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29100 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
29110 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
29120 6c 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20  l noVs2012;..   
29130 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
29140 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 32 0d 0a 20  bool NoVs2012.. 
29150 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
29170 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32  t { return noVs2
29180 30 31 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  012; }..        
29190 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
291a0 56 73 32 30 31 32 20 3d 20 76 61 6c 75 65 3b 20  Vs2012 = value; 
291b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
291c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
291d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
291e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
291f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29210 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
29220 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
29230 6e 6f 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20  noVs2013;..     
29240 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
29250 6f 6c 20 4e 6f 56 73 32 30 31 33 0d 0a 20 20 20  ol NoVs2013..   
29260 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29270 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
29280 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31  { return noVs201
29290 33 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  3; }..          
292a0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73        set { noVs
292b0 32 30 31 33 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  2013 = value; }.
292c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
292d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
292e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29320 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
29330 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
29340 56 73 32 30 31 35 3b 0d 0a 20 20 20 20 20 20 20  Vs2015;..       
29350 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
29360 20 4e 6f 56 73 32 30 31 35 0d 0a 20 20 20 20 20   NoVs2015..     
29370 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29380 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
29390 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 35 3b  return noVs2015;
293a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
293b0 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30      set { noVs20
293c0 31 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  15 = value; }.. 
293d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
293e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
293f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
29430 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
29440 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 54 72  rivate bool noTr
29450 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ace;..          
29460 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
29470 54 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  Trace..         
29480 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29490 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
294a0 72 6e 20 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a 20  rn noTrace; }.. 
294b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
294c0 65 74 20 7b 20 6e 6f 54 72 61 63 65 20 3d 20 76  et { noTrace = v
294d0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
294e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
294f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
29500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29530 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29540 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
29550 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b   bool noConsole;
29560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
29570 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73  blic bool NoCons
29580 6f 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ole..           
29590 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
295a0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
295b0 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20   noConsole; }.. 
295c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
295d0 65 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d  et { noConsole =
295e0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
295f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29600 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
29610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
29650 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
29660 74 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a  te bool noLog;..
29670 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
29680 69 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20  ic bool NoLog.. 
29690 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
296a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
296b0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4c 6f 67  t { return noLog
296c0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
296d0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4c 6f 67       set { noLog
296e0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
296f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
29700 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
29710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
29750 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
29760 76 61 74 65 20 62 6f 6f 6c 20 74 68 72 6f 77 4f  vate bool throwO
29770 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20  nMissing;..     
29780 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
29790 6f 6c 20 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol ThrowOnMissin
297a0 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  g..            {
297b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
297c0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74    get { return t
297d0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 20 7d  hrowOnMissing; }
297e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
297f0 20 20 73 65 74 20 7b 20 74 68 72 6f 77 4f 6e 4d    set { throwOnM
29800 69 73 73 69 6e 67 20 3d 20 76 61 6c 75 65 3b 20  issing = value; 
29810 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
29820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29870 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
29880 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
29890 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20  whatIf;..       
298a0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
298b0 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20   WhatIf..       
298c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
298d0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
298e0 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a  turn whatIf; }..
298f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29900 73 65 74 20 7b 20 77 68 61 74 49 66 20 3d 20 76  set { whatIf = v
29910 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
29920 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29930 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
29940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29970 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29980 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
29990 20 62 6f 6f 6c 20 64 65 62 75 67 3b 0d 0a 20 20   bool debug;..  
299a0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
299b0 20 62 6f 6f 6c 20 44 65 62 75 67 0d 0a 20 20 20   bool Debug..   
299c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
299d0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
299e0 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 3b 20  { return debug; 
299f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
29a00 20 20 20 73 65 74 20 7b 20 64 65 62 75 67 20 3d     set { debug =
29a10 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
29a20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29a30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
29a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
29a80 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
29a90 74 65 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b  te bool verbose;
29aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
29ab0 62 6c 69 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73  blic bool Verbos
29ac0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
29ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29ae0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76    get { return v
29af0 65 72 62 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20  erbose; }..     
29b00 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
29b10 20 76 65 72 62 6f 73 65 20 3d 20 76 61 6c 75 65   verbose = value
29b20 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
29b30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
29b40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
29b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b80 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
29b90 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
29ba0 6c 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20  l confirm;..    
29bb0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
29bc0 6f 6f 6c 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20  ool Confirm..   
29bd0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29be0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
29bf0 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d  { return confirm
29c00 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
29c10 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69       set { confi
29c20 72 6d 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  rm = value; }.. 
29c30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
29c40 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
29c50 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
29c60 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
29c70 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
29c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29cc0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
29cd0 20 20 23 72 65 67 69 6f 6e 20 46 72 61 6d 65 77    #region Framew
29ce0 6f 72 6b 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20  orkList Class.. 
29cf0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
29d00 65 61 6c 65 64 20 63 6c 61 73 73 20 46 72 61 6d  ealed class Fram
29d10 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20  eworkList..     
29d20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29d30 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
29d40 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
29d50 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
29d60 63 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28  c FrameworkList(
29d70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
29d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29d90 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
29da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
29db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
29dc0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
29dd0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
29de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
29e20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
29e30 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73  n Public Methods
29e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
29e50 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
29e60 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a  ryKey rootKey;..
29e70 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
29e80 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
29e90 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey RootKey..    
29ea0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29eb0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
29ec0 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b   return rootKey;
29ed0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
29ee0 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65      set { rootKe
29ef0 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
29f00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
29f10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
29f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
29f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
29f70 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74  ivate StringList
29f80 20 6e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20   names;..       
29f90 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69       public Stri
29fa0 6e 67 4c 69 73 74 20 4e 61 6d 65 73 0d 0a 20 20  ngList Names..  
29fb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
29fd0 20 7b 20 72 65 74 75 72 6e 20 6e 61 6d 65 73 3b   { return names;
29fe0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
29ff0 20 20 20 20 73 65 74 20 7b 20 6e 61 6d 65 73 20      set { names 
2a000 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
2a010 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2a020 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2a030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2a070 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
2a080 61 74 65 20 56 65 72 73 69 6f 6e 4d 61 70 20 76  ate VersionMap v
2a090 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20  ersions;..      
2a0a0 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72        public Ver
2a0b0 73 69 6f 6e 4d 61 70 20 56 65 72 73 69 6f 6e 73  sionMap Versions
2a0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2a0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a0e0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65   get { return ve
2a0f0 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20  rsions; }..     
2a100 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
2a110 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75   versions = valu
2a120 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
2a130 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2a140 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2a150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a180 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2a190 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 74        private St
2a1a0 72 69 6e 67 4c 69 73 74 20 70 6c 61 74 66 6f 72  ringList platfor
2a1b0 6d 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20  mNames;..       
2a1c0 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69       public Stri
2a1d0 6e 67 4c 69 73 74 20 50 6c 61 74 66 6f 72 6d 4e  ngList PlatformN
2a1e0 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..          
2a1f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a200 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
2a210 6e 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b  n platformNames;
2a220 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2a230 20 20 20 20 73 65 74 20 7b 20 70 6c 61 74 66 6f      set { platfo
2a240 72 6d 4e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b  rmNames = value;
2a250 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2a260 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
2a270 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
2a280 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2a290 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2a2a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2a2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2a2f0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
2a300 73 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20  sList Class..   
2a310 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
2a320 6c 65 64 20 63 6c 61 73 73 20 56 73 4c 69 73 74  led class VsList
2a330 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2a340 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
2a350 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
2a360 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
2a370 20 20 70 75 62 6c 69 63 20 56 73 4c 69 73 74 28    public VsList(
2a380 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2a390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a3a0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
2a3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2a3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2a3d0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2a3e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2a3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2a430 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2a440 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
2a450 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
2a460 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
2a470 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
2a480 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2a490 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
2a4a0 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20  ryKey RootKey.. 
2a4b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
2a4d0 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b  t { return rootK
2a4e0 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ey; }..         
2a4f0 20 20 20 20 20 20 20 73 65 74 20 7b 20 72 6f 6f         set { roo
2a500 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  tKey = value; }.
2a510 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2a520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a570 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2a580 20 70 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e   private Version
2a590 4c 69 73 74 20 76 65 72 73 69 6f 6e 73 3b 0d 0a  List versions;..
2a5a0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2a5b0 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 56  ic VersionList V
2a5c0 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20  ersions..       
2a5d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a5e0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
2a5f0 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d  turn versions; }
2a600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a610 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73    set { versions
2a620 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
2a630 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2a640 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2a650 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
2a660 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2a670 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  n..        #endr
2a680 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2a690 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2a6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2a6e0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
2a6f0 61 74 65 20 43 6f 6e 73 74 61 6e 74 20 44 61 74  ate Constant Dat
2a700 61 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  a..        #regi
2a710 6f 6e 20 50 61 63 6b 61 67 65 20 26 20 50 72 6f  on Package & Pro
2a720 76 69 64 65 72 20 4e 61 6d 65 73 0d 0a 20 20 20  vider Names..   
2a730 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
2a740 73 74 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69  st string CoreFi
2a750 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  leName = "System
2a760 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
2a770 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
2a780 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
2a790 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   LinqFileName = 
2a7a0 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
2a7b0 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d 0a  ite.Linq.dll";..
2a7c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2a7d0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 45 66 36  const string Ef6
2a7e0 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74  FileName = "Syst
2a7f0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45  em.Data.SQLite.E
2a800 46 36 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20  F6.dll";..      
2a810 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2a820 73 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46  string DesignerF
2a830 69 6c 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74  ileName = "SQLit
2a840 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b  e.Designer.dll";
2a850 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2a860 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50  e const string P
2a870 72 6f 76 69 64 65 72 4e 61 6d 65 20 3d 20 22 53  roviderName = "S
2a880 51 4c 69 74 65 20 44 61 74 61 20 50 72 6f 76 69  QLite Data Provi
2a890 64 65 72 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  der";..        p
2a8a0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
2a8b0 69 6e 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20  ing ProjectName 
2a8c0 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
2a8d0 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20  QLite";..       
2a8e0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
2a8f0 74 72 69 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a  tring LegacyProj
2a900 65 63 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74  ectName = "SQLit
2a910 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  e";....        /
2a920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a960 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2a970 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2a980 73 74 72 69 6e 67 20 44 65 73 63 72 69 70 74 69  string Descripti
2a990 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  on =..          
2a9a0 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
2a9b0 6b 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20  k Data Provider 
2a9c0 66 6f 72 20 53 51 4c 69 74 65 22 3b 0d 0a 20 20  for SQLite";..  
2a9d0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2a9e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2a9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa30 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2aa40 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
2aa50 69 6e 67 20 43 4c 52 76 32 49 6d 61 67 65 52 75  ing CLRv2ImageRu
2aa60 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22  ntimeVersion = "
2aa70 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d 0a 20 20  v2.0.50727";..  
2aa80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
2aa90 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52 76 34  nst string CLRv4
2aaa0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
2aab0 69 6f 6e 20 3d 20 22 76 34 2e 30 2e 33 30 33 31  ion = "v4.0.3031
2aac0 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  9";....        /
2aad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aaf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab10 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2ab20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2ab30 73 74 72 69 6e 67 20 53 79 73 74 65 6d 45 66 36  string SystemEf6
2ab40 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 22  AssemblyName = "
2ab50 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2c  EntityFramework,
2ab60 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
2ab70 20 20 22 56 65 72 73 69 6f 6e 3d 36 2e 30 2e 30    "Version=6.0.0
2ab80 2e 30 2c 20 43 75 6c 74 75 72 65 3d 6e 65 75 74  .0, Culture=neut
2ab90 72 61 6c 2c 20 50 75 62 6c 69 63 4b 65 79 54 6f  ral, PublicKeyTo
2aba0 6b 65 6e 3d 62 37 37 61 35 63 35 36 31 39 33 34  ken=b77a5c561934
2abb0 65 30 38 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  e089";....      
2abc0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2abd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac00 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2ac10 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
2ac20 73 74 20 73 74 72 69 6e 67 20 4e 61 6d 65 41 6e  st string NameAn
2ac30 64 56 61 6c 75 65 46 6f 72 6d 61 74 20 3d 20 22  dValueFormat = "
2ac40 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 20 20 20 20  {0}: {1}";..    
2ac50 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
2ac60 74 20 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65  t string LogFile
2ac70 53 75 66 66 69 78 20 3d 20 22 2e 6c 6f 67 22 3b  Suffix = ".log";
2ac80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2ac90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2acb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2acc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2acd0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2ace0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
2acf0 69 6e 67 20 56 73 44 65 76 45 6e 76 53 65 74 75  ing VsDevEnvSetu
2ad00 70 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20  pFormat = "{0}: 
2ad10 7b 31 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  {1}";....       
2ad20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2ad30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2ad70 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
2ad80 74 20 73 74 72 69 6e 67 20 52 6f 6f 74 4b 65 79  t string RootKey
2ad90 4e 61 6d 65 20 3d 20 22 53 6f 66 74 77 61 72 65  Name = "Software
2ada0 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
2adb0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
2adc0 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d 65   Wow64SubKeyName
2add0 20 3d 20 22 57 6f 77 36 34 33 32 4e 6f 64 65 22   = "Wow6432Node"
2ade0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
2adf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae30 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2ae40 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e  //..        // N
2ae50 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72  OTE: The .NET Fr
2ae60 61 6d 65 77 6f 72 6b 20 68 61 73 20 62 6f 74 68  amework has both
2ae70 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62   32-bit and 64-b
2ae80 69 74 20 65 64 69 74 69 6f 6e 73 2e 0d 0a 20 20  it editions...  
2ae90 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2aea0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2aeb0 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 4e   readonly bool N
2aec0 65 74 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20  etFxIs32BitOnly 
2aed0 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  = false;....    
2aee0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2aef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2af30 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2af40 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20     // NOTE: For 
2af50 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53 74 75 64  now, Visual Stud
2af60 69 6f 20 69 73 20 61 6c 77 61 79 73 20 61 20 33  io is always a 3
2af70 32 2d 62 69 74 20 61 70 70 6c 69 63 61 74 69 6f  2-bit applicatio
2af80 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  n...        //..
2af90 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2afa0 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
2afb0 62 6f 6f 6c 20 56 73 49 73 33 32 42 69 74 4f 6e  bool VsIs32BitOn
2afc0 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  ly = true;....  
2afd0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2afe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2b020 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2b030 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
2b040 20 73 74 72 69 6e 67 20 56 73 49 64 46 6f 72 6d   string VsIdForm
2b050 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20 20  at = "B";....   
2b060 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2b070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2b0b0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2b0c0 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
2b0d0 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f 72 41  string XPathForA
2b0e0 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20  ddElement =..   
2b0f0 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67           "config
2b100 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64  uration/system.d
2b110 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46 61  ata/DbProviderFa
2b120 63 74 6f 72 69 65 73 2f 61 64 64 5b 40 69 6e 76  ctories/add[@inv
2b130 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22  ariant=\"{0}\"]"
2b140 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ;....        pri
2b150 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64  vate static read
2b160 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74  only string XPat
2b170 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e  hForRemoveElemen
2b180 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t =..           
2b190 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f   "configuration/
2b1a0 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50 72  system.data/DbPr
2b1b0 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73 2f  oviderFactories/
2b1c0 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72 69 61 6e  remove[@invarian
2b1d0 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 20 20  t=\"{0}\"]";..  
2b1e0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2b1f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2b200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b240 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2b250 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53  region Private S
2b260 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20  tatic Data..    
2b270 20 20 20 20 23 72 65 67 69 6f 6e 20 44 69 61 67      #region Diag
2b280 6e 6f 73 74 69 63 73 20 26 20 4c 6f 67 67 69 6e  nostics & Loggin
2b290 67 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  g..        //.. 
2b2a0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2b2b0 43 61 63 68 65 20 74 68 65 20 63 75 72 72 65 6e  Cache the curren
2b2c0 74 20 70 72 6f 63 65 73 73 20 61 6e 64 20 61 73  t process and as
2b2d0 73 65 6d 62 6c 79 20 61 73 20 74 68 65 79 20 64  sembly as they d
2b2e0 6f 20 6e 6f 74 20 63 68 61 6e 67 65 0d 0a 20 20  o not change..  
2b2f0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
2b300 6e 64 20 6d 61 79 20 62 65 20 6e 65 65 64 65 64  nd may be needed
2b310 20 69 6e 20 71 75 69 74 65 20 61 20 66 65 77 20   in quite a few 
2b320 64 69 66 66 65 72 65 6e 74 20 70 6c 61 63 65 73  different places
2b330 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
2b340 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2b350 74 61 74 69 63 20 50 72 6f 63 65 73 73 20 74 68  tatic Process th
2b360 69 73 50 72 6f 63 65 73 73 20 3d 20 50 72 6f 63  isProcess = Proc
2b370 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50 72  ess.GetCurrentPr
2b380 6f 63 65 73 73 28 29 3b 0d 0a 20 20 20 20 20 20  ocess();..      
2b390 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2b3a0 20 41 73 73 65 6d 62 6c 79 20 74 68 69 73 41 73   Assembly thisAs
2b3b0 73 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c  sembly = Assembl
2b3c0 79 2e 47 65 74 45 78 65 63 75 74 69 6e 67 41 73  y.GetExecutingAs
2b3d0 73 65 6d 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  sembly();....   
2b3e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2b3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2b430 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2b440 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65      // NOTE: The
2b450 20 74 72 61 63 65 20 63 61 74 65 67 6f 72 79 20   trace category 
2b460 69 73 20 74 68 65 20 73 61 6d 65 20 66 6f 72 20  is the same for 
2b470 62 6f 74 68 20 74 68 65 20 64 65 62 75 67 20 61  both the debug a
2b480 6e 64 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  nd trace..      
2b490 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 62    //       callb
2b4a0 61 63 6b 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  acks...        /
2b4b0 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  /..        priva
2b4c0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
2b4d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 20 3d   traceCategory =
2b4e0 20 28 74 68 69 73 41 73 73 65 6d 62 6c 79 20 21   (thisAssembly !
2b4f0 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20  = null) ?..     
2b500 20 20 20 20 20 20 20 50 61 74 68 2e 47 65 74 46         Path.GetF
2b510 69 6c 65 4e 61 6d 65 28 74 68 69 73 41 73 73 65  ileName(thisAsse
2b520 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 20 3a  mbly.Location) :
2b530 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
2b540 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2b550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b580 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2b590 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2b5a0 20 2f 2f 20 4e 4f 54 45 3a 20 53 65 74 20 74 68   // NOTE: Set th
2b5b0 65 20 64 65 62 75 67 20 61 6e 64 20 74 72 61 63  e debug and trac
2b5c0 65 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61  e logging callba
2b5d0 63 6b 73 20 75 73 65 64 20 62 79 20 74 68 65 0d  cks used by the.
2b5e0 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
2b5f0 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a    application...
2b600 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2b610 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2b620 69 63 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b  ic TraceCallback
2b630 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 20 3d   debugCallback =
2b640 20 41 70 70 44 65 62 75 67 3b 0d 0a 20 20 20 20   AppDebug;..    
2b650 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2b660 69 63 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b  ic TraceCallback
2b670 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 3d   traceCallback =
2b680 20 41 70 70 54 72 61 63 65 3b 0d 0a 20 20 20 20   AppTrace;..    
2b690 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2b6a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2b6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6f0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2b700 67 69 6f 6e 20 53 79 73 74 65 6d 20 44 69 72 65  gion System Dire
2b710 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 70  ctory..        p
2b720 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
2b730 72 69 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63  ring systemDirec
2b740 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  tory = null;....
2b750 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20  #if WINDOWS..   
2b760 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2b770 74 69 63 20 73 74 72 69 6e 67 20 73 79 73 74 65  tic string syste
2b780 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20  mDirectoryWow64 
2b790 3d 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d  = null;..#endif.
2b7a0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2b7b0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
2b7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b800 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2b810 20 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73 74    #region Regist
2b820 72 79 20 53 74 61 74 69 73 74 69 63 73 0d 0a 20  ry Statistics.. 
2b830 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2b840 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65 73 43  tatic int filesC
2b850 72 65 61 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20  reated = 0;..   
2b860 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2b870 74 69 63 20 69 6e 74 20 66 69 6c 65 73 4d 6f 64  tic int filesMod
2b880 69 66 69 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20  ified = 0;..    
2b890 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2b8a0 69 63 20 69 6e 74 20 66 69 6c 65 73 44 65 6c 65  ic int filesDele
2b8b0 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ted = 0;..      
2b8c0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
2b8d0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2b8e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2b8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b930 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2b940 72 65 67 69 6f 6e 20 54 72 61 63 65 20 48 61 6e  region Trace Han
2b950 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
2b960 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
2b970 72 69 6e 67 20 47 65 74 4c 6f 67 46 69 6c 65 4e  ring GetLogFileN
2b980 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
2b990 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
2b9a0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
2b9b0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
2b9c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b9d0 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
2b9e0 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 54  Name = Path.GetT
2b9f0 65 6d 70 46 69 6c 65 4e 61 6d 65 28 29 3b 0d 0a  empFileName();..
2ba00 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2ba10 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50  ng directory = P
2ba20 61 74 68 2e 47 65 74 44 69 72 65 63 74 6f 72 79  ath.GetDirectory
2ba30 4e 61 6d 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  Name(fileName);.
2ba40 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2ba50 69 6e 67 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  ing fileNameOnly
2ba60 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e   = Path.GetFileN
2ba70 61 6d 65 57 69 74 68 6f 75 74 45 78 74 65 6e 73  ameWithoutExtens
2ba80 69 6f 6e 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  ion(fileName);..
2ba90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2baa0 72 69 6e 67 20 6e 65 77 46 69 6c 65 4e 61 6d 65  ring newFileName
2bab0 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
2bac0 64 69 72 65 63 74 6f 72 79 2c 20 53 74 72 69 6e  directory, Strin
2bad0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2bae0 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 7b             "{0}{
2baf0 31 7d 7b 32 7d 22 2c 20 74 72 61 63 65 43 61 74  1}{2}", traceCat
2bb00 65 67 6f 72 79 2c 20 21 53 74 72 69 6e 67 2e 49  egory, !String.I
2bb10 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 79 70  sNullOrEmpty(typ
2bb20 65 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20  eName) ?..      
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
2bb40 22 20 2b 20 74 79 70 65 4e 61 6d 65 20 3a 20 53  " + typeName : S
2bb50 74 72 69 6e 67 2e 45 6d 70 74 79 2c 20 22 2e 22  tring.Empty, "."
2bb60 20 2b 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20   + fileNameOnly 
2bb70 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
2bb80 20 20 20 20 20 20 20 4c 6f 67 46 69 6c 65 53 75         LogFileSu
2bb90 66 66 69 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ffix));....     
2bba0 20 20 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76 65         File.Move
2bbb0 28 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 46 69  (fileName, newFi
2bbc0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
2bbd0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
2bbe0 65 77 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  ewFileName;..   
2bbf0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2bc00 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2bc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2bc50 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2bc60 74 69 63 20 76 6f 69 64 20 41 70 70 44 65 62 75  tic void AppDebu
2bc70 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
2bc80 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d  string message,.
2bc90 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2bca0 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20  ing category..  
2bcb0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2bcc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2bcd0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2bce0 75 67 43 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f  ugCore(String.Fo
2bcf0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2bd00 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
2bd10 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61  DebugFormat, Tra
2bd20 63 65 4f 70 73 2e 4e 65 78 74 44 65 62 75 67 49  ceOps.NextDebugI
2bd30 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d(),..          
2bd40 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
2bd50 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d  imeStamp(DateTim
2bd60 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61  e.UtcNow), messa
2bd70 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  ge), category);.
2bd80 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2bd90 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2bda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2bde0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2bdf0 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70 70   static void App
2be00 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
2be10 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
2be20 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
2be30 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
2be40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2be50 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2be60 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2be70 2e 54 72 61 63 65 43 6f 72 65 28 53 74 72 69 6e  .TraceCore(Strin
2be80 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2be90 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2bea0 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c  Ops.TraceFormat,
2beb0 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 54 72   TraceOps.NextTr
2bec0 61 63 65 49 64 28 29 2c 0d 0a 20 20 20 20 20 20  aceId(),..      
2bed0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2bee0 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61 74  ps.TimeStamp(Dat
2bef0 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d  eTime.UtcNow), m
2bf00 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f 72  essage), categor
2bf10 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  y);..        }..
2bf20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2bf30 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
2bf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf80 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2bf90 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63   #region Generic
2bfa0 20 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69   Platform Handli
2bfb0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
2bfc0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
2bfd0 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29  Is64BitProcess()
2bfe0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2bff0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2c000 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2c010 3a 20 52 65 74 75 72 6e 73 20 74 72 75 65 20 69  : Returns true i
2c020 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  f the current pr
2c030 6f 63 65 73 73 20 69 73 20 36 34 2d 62 69 74 2e  ocess is 64-bit.
2c040 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20    If this..     
2c050 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2c060 69 73 20 74 72 75 65 2c 20 77 65 20 2a 6b 6e 6f  is true, we *kno
2c070 77 2a 20 74 68 61 74 20 77 65 20 6d 75 73 74 20  w* that we must 
2c080 62 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20  be running on a 
2c090 36 34 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20  64-bit..        
2c0a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65      //       ope
2c0b0 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 61 73  rating system as
2c0c0 20 77 65 6c 6c 2e 20 20 48 6f 77 65 76 65 72 2c   well.  However,
2c0d0 20 69 66 20 74 68 69 73 20 69 73 20 66 61 6c 73   if this is fals
2c0e0 65 2c 20 77 65 0d 0a 20 20 20 20 20 20 20 20 20  e, we..         
2c0f0 20 20 20 2f 2f 20 20 20 20 20 20 20 64 6f 20 6e     //       do n
2c100 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b  ot necessarily k
2c110 6e 6f 77 20 74 68 61 74 20 77 65 20 61 72 65 20  now that we are 
2c120 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 33 32 2d  running on a 32-
2c130 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bit..           
2c140 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74   //       operat
2c150 69 6e 67 20 73 79 73 74 65 6d 2c 20 64 75 65 20  ing system, due 
2c160 74 6f 20 57 6f 57 36 34 20 28 57 69 6e 33 32 2d  to WoW64 (Win32-
2c170 6f 6e 2d 57 69 6e 36 34 29 2c 20 65 74 63 2e 0d  on-Win64), etc..
2c180 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
2c190 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2c1a0 75 72 6e 20 28 49 6e 74 50 74 72 2e 53 69 7a 65  urn (IntPtr.Size
2c1b0 20 3d 3d 20 73 69 7a 65 6f 66 28 6c 6f 6e 67 29   == sizeof(long)
2c1c0 29 3b 20 2f 2f 20 4e 4f 54 45 3a 20 50 6f 69 6e  ); // NOTE: Poin
2c1d0 74 65 72 20 69 73 20 36 34 2d 62 69 74 73 3f 0d  ter is 64-bits?.
2c1e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2c1f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2c200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2c240 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2c250 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 53   static bool IsS
2c260 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28  upportedRootKey(
2c270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
2c280 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73  ckRegistry regis
2c290 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
2c2a0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
2c2b0 79 20 72 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20  y rootKey..     
2c2c0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2c2d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c2e0 20 72 65 74 75 72 6e 20 4f 62 6a 65 63 74 2e 52   return Object.R
2c2f0 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72  eferenceEquals(r
2c300 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79  ootKey, registry
2c310 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20 7c 7c  .CurrentUser) ||
2c320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c330 20 20 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e    Object.Referen
2c340 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79  ceEquals(rootKey
2c350 2c 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c  , registry.Local
2c360 4d 61 63 68 69 6e 65 29 3b 0d 0a 20 20 20 20 20  Machine);..     
2c370 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2c380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c3c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2c3d0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2c3e0 63 20 73 74 72 69 6e 67 20 47 65 74 52 6f 6f 74  c string GetRoot
2c3f0 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
2c400 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
2c410 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
2c420 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
2c430 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2c440 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c450 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2c460 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 41 70     // BUGFIX: Ap
2c470 70 61 72 65 6e 74 6c 79 2c 20 74 68 65 20 70 65  parently, the pe
2c480 72 2d 75 73 65 72 20 72 65 67 69 73 74 72 79 20  r-user registry 
2c490 68 69 76 65 20 64 6f 65 73 20 6e 6f 74 20 75 73  hive does not us
2c4a0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  e..            /
2c4b0 2f 20 20 20 20 20 20 20 20 20 74 68 65 20 22 57  /         the "W
2c4c0 6f 77 36 34 33 32 4e 6f 64 65 22 20 6e 6f 64 65  ow6432Node" node
2c4d0 20 74 6f 20 73 74 6f 72 65 20 73 65 74 74 69 6e   to store settin
2c4e0 67 73 20 66 6f 72 20 33 32 2d 62 69 74 0d 0a 20  gs for 32-bit.. 
2c4f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2c500 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 69 6f        applicatio
2c510 6e 73 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20  ns running on a 
2c520 36 34 2d 62 69 74 20 6f 70 65 72 61 74 69 6e 67  64-bit operating
2c530 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20   system...      
2c540 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
2c550 20 54 69 63 6b 65 74 20 5b 61 30 36 37 37 33 30   Ticket [a067730
2c560 39 66 30 5d 20 68 61 73 20 66 75 72 74 68 65 72  9f0] has further
2c570 20 64 65 74 61 69 6c 73 2e 0d 0a 20 20 20 20 20   details...     
2c580 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2c590 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
2c5a0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
2c5b0 7b 31 7d 22 2c 20 52 6f 6f 74 4b 65 79 4e 61 6d  {1}", RootKeyNam
2c5c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2c5d0 20 20 20 20 21 70 65 72 55 73 65 72 20 26 26 20      !perUser && 
2c5e0 77 6f 77 36 34 20 26 26 20 49 73 36 34 42 69 74  wow64 && Is64Bit
2c5f0 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20 20  Process() ?..   
2c600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c610 20 22 5c 5c 22 20 2b 20 57 6f 77 36 34 53 75 62   "\\" + Wow64Sub
2c620 4b 65 79 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67  KeyName : String
2c630 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20 20  .Empty);..      
2c640 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2c650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c690 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2c6a0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2c6b0 20 73 74 72 69 6e 67 20 47 65 74 53 79 73 74 65   string GetSyste
2c6c0 6d 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20  mDirectory(..   
2c6d0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2c6e0 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
2c6f0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23   )..        {..#
2c700 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20  if WINDOWS..    
2c710 20 20 20 20 20 20 20 20 69 66 20 28 77 6f 77 36          if (wow6
2c720 34 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4)..            
2c730 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c740 20 20 20 69 66 20 28 73 79 73 74 65 6d 44 69 72     if (systemDir
2c750 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 3d 20 6e  ectoryWow64 == n
2c760 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2c770 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c780 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79 73               sys
2c790 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36  temDirectoryWow6
2c7a0 34 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  4 =..           
2c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73               Uns
2c7c0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
2c7d0 2e 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74  .GetSystemDirect
2c7e0 6f 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ory();..        
2c7f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c800 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c810 75 72 6e 20 73 79 73 74 65 6d 44 69 72 65 63 74  urn systemDirect
2c820 6f 72 79 57 6f 77 36 34 3b 0d 0a 20 20 20 20 20  oryWow64;..     
2c830 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2c840 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64        else..#end
2c850 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
2c860 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c870 20 20 20 69 66 20 28 73 79 73 74 65 6d 44 69 72     if (systemDir
2c880 65 63 74 6f 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ectory == null).
2c890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c8a0 20 20 20 20 20 73 79 73 74 65 6d 44 69 72 65 63       systemDirec
2c8b0 74 6f 72 79 20 3d 20 45 6e 76 69 72 6f 6e 6d 65  tory = Environme
2c8c0 6e 74 2e 53 79 73 74 65 6d 44 69 72 65 63 74 6f  nt.SystemDirecto
2c8d0 72 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ry;....         
2c8e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 79         return sy
2c8f0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d 0a  stemDirectory;..
2c900 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2c910 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2c920 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2c930 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2c940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2c980 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
2c990 6f 6e 20 47 65 6e 65 72 69 63 20 53 74 72 69 6e  on Generic Strin
2c9a0 67 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  g Handling..    
2c9b0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2c9c0 69 63 20 73 74 72 69 6e 67 20 46 6f 72 44 69 73  ic string ForDis
2c9d0 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
2c9e0 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d     object value.
2c9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2ca00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ca10 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
2ca20 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2ca30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2ca40 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20  n "<null>";.... 
2ca50 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2ca60 67 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  g result;..     
2ca70 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70 65         Type type
2ca80 20 3d 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65   = value.GetType
2ca90 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2caa0 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74     if (type == t
2cab0 79 70 65 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e 74  ypeof(XmlElement
2cac0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2cad0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2cae0 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c     XmlElement el
2caf0 65 6d 65 6e 74 20 3d 20 28 58 6d 6c 45 6c 65 6d  ement = (XmlElem
2cb00 65 6e 74 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  ent)value;....  
2cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2cb20 73 75 6c 74 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f  sult = element.O
2cb30 75 74 65 72 58 6d 6c 3b 0d 0a 20 20 20 20 20 20  uterXml;..      
2cb40 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2cb50 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79       else if (ty
2cb60 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 56 65 72  pe == typeof(Ver
2cb70 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20  sion))..        
2cb80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2cb90 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
2cba0 65 72 73 69 6f 6e 20 3d 20 28 56 65 72 73 69 6f  ersion = (Versio
2cbb0 6e 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  n)value;....    
2cbc0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
2cbd0 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lt = String.Form
2cbe0 61 74 28 22 76 7b 30 7d 22 2c 20 76 65 72 73 69  at("v{0}", versi
2cbf0 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on);..          
2cc00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2cc10 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d   else if (type =
2cc20 3d 20 74 79 70 65 6f 66 28 50 72 6f 63 65 73 73  = typeof(Process
2cc30 53 74 61 72 74 49 6e 66 6f 29 29 0d 0a 20 20 20  StartInfo))..   
2cc40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2cc50 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 63              Proc
2cc60 65 73 73 53 74 61 72 74 49 6e 66 6f 20 73 74 61  essStartInfo sta
2cc70 72 74 49 6e 66 6f 20 3d 20 28 50 72 6f 63 65 73  rtInfo = (Proces
2cc80 73 53 74 61 72 74 49 6e 66 6f 29 76 61 6c 75 65  sStartInfo)value
2cc90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2cca0 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74       result = St
2ccb0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccd0 20 20 22 66 69 6c 65 4e 61 6d 65 20 3d 20 7b 30    "fileName = {0
2cce0 7d 2c 20 61 72 67 75 6d 65 6e 74 73 20 3d 20 7b  }, arguments = {
2ccf0 31 7d 2c 20 77 6f 72 6b 69 6e 67 44 69 72 65 63  1}, workingDirec
2cd00 74 6f 72 79 20 3d 20 7b 32 7d 2c 20 22 20 2b 0d  tory = {2}, " +.
2cd10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cd20 20 20 20 20 20 22 75 73 65 53 68 65 6c 6c 45 78       "useShellEx
2cd30 65 63 75 74 65 20 3d 20 7b 33 7d 2c 20 72 65 64  ecute = {3}, red
2cd40 69 72 65 63 74 53 74 61 6e 64 61 72 64 4f 75 74  irectStandardOut
2cd50 70 75 74 20 3d 20 7b 34 7d 2c 20 22 20 2b 0d 0a  put = {4}, " +..
2cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd70 20 20 20 20 22 72 65 64 69 72 65 63 74 53 74 61      "redirectSta
2cd80 6e 64 61 72 64 45 72 72 6f 72 20 3d 20 7b 35 7d  ndardError = {5}
2cd90 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ", ForDisplay(..
2cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdb0 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 46 69      startInfo.Fi
2cdc0 6c 65 4e 61 6d 65 29 2c 20 46 6f 72 44 69 73 70  leName), ForDisp
2cdd0 6c 61 79 28 73 74 61 72 74 49 6e 66 6f 2e 41 72  lay(startInfo.Ar
2cde0 67 75 6d 65 6e 74 73 29 2c 0d 0a 20 20 20 20 20  guments),..     
2cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
2ce00 6f 72 44 69 73 70 6c 61 79 28 73 74 61 72 74 49  orDisplay(startI
2ce10 6e 66 6f 2e 57 6f 72 6b 69 6e 67 44 69 72 65 63  nfo.WorkingDirec
2ce20 74 6f 72 79 29 2c 20 46 6f 72 44 69 73 70 6c 61  tory), ForDispla
2ce30 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2ce40 20 20 20 20 20 20 20 20 73 74 61 72 74 49 6e 66          startInf
2ce50 6f 2e 55 73 65 53 68 65 6c 6c 45 78 65 63 75 74  o.UseShellExecut
2ce60 65 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  e), ForDisplay(.
2ce70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ce80 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 52       startInfo.R
2ce90 65 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 4f  edirectStandardO
2cea0 75 74 70 75 74 29 2c 20 46 6f 72 44 69 73 70 6c  utput), ForDispl
2ceb0 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
2cec0 20 20 20 20 20 20 20 20 20 73 74 61 72 74 49 6e           startIn
2ced0 66 6f 2e 52 65 64 69 72 65 63 74 53 74 61 6e 64  fo.RedirectStand
2cee0 61 72 64 45 72 72 6f 72 29 29 3b 20 2f 2a 20 52  ardError)); /* R
2cef0 45 43 55 52 53 49 56 45 20 2a 2f 0d 0a 20 20 20  ECURSIVE */..   
2cf00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2cf10 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
2cf20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28  (type == typeof(
2cf30 50 72 6f 63 65 73 73 29 29 0d 0a 20 20 20 20 20  Process))..     
2cf40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2cf50 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65 73            Proces
2cf60 73 20 70 72 6f 63 65 73 73 20 3d 20 28 50 72 6f  s process = (Pro
2cf70 63 65 73 73 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  cess)value;.... 
2cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2cf90 65 73 75 6c 74 20 3d 20 70 72 6f 63 65 73 73 2e  esult = process.
2cfa0 49 64 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  Id.ToString();..
2cfb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2cfc0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
2cfd0 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
2cfe0 6f 66 28 44 61 74 61 52 65 63 65 69 76 65 64 45  of(DataReceivedE
2cff0 76 65 6e 74 41 72 67 73 29 29 0d 0a 20 20 20 20  ventArgs))..    
2d000 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d010 20 20 20 20 20 20 20 20 20 20 20 44 61 74 61 52             DataR
2d020 65 63 65 69 76 65 64 45 76 65 6e 74 41 72 67 73  eceivedEventArgs
2d030 20 65 76 65 6e 74 41 72 67 73 20 3d 20 28 44 61   eventArgs = (Da
2d040 74 61 52 65 63 65 69 76 65 64 45 76 65 6e 74 41  taReceivedEventA
2d050 72 67 73 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  rgs)value;....  
2d060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d070 73 75 6c 74 20 3d 20 46 6f 72 44 69 73 70 6c 61  sult = ForDispla
2d080 79 28 65 76 65 6e 74 41 72 67 73 2e 44 61 74 61  y(eventArgs.Data
2d090 29 3b 20 2f 2a 20 52 45 43 55 52 53 49 56 45 20  ); /* RECURSIVE 
2d0a0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
2d0b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
2d0c0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
2d0d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d0e0 20 20 20 20 72 65 73 75 6c 74 20 3d 20 76 61 6c      result = val
2d0f0 75 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  ue.ToString();..
2d100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d110 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e    if (result.Len
2d120 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  gth == 0)..     
2d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2d140 65 74 75 72 6e 20 22 3c 65 6d 70 74 79 3e 22 3b  eturn "<empty>";
2d150 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d160 20 20 20 20 69 66 20 28 74 79 70 65 2e 49 73 53      if (type.IsS
2d170 75 62 63 6c 61 73 73 4f 66 28 74 79 70 65 6f 66  ubclassOf(typeof
2d180 28 45 78 63 65 70 74 69 6f 6e 29 29 29 0d 0a 20  (Exception))).. 
2d190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2d1a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d1b0 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53        result = S
2d1c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1e0 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 30         "{0}{1}{0
2d1f0 7d 22 2c 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  }", Environment.
2d200 4e 65 77 4c 69 6e 65 2c 20 72 65 73 75 6c 74 29  NewLine, result)
2d210 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d220 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2d230 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 21        else if (!
2d240 74 79 70 65 2e 49 73 53 75 62 63 6c 61 73 73 4f  type.IsSubclassO
2d250 66 28 74 79 70 65 6f 66 28 56 61 6c 75 65 54 79  f(typeof(ValueTy
2d260 70 65 29 29 29 0d 0a 20 20 20 20 20 20 20 20 20  pe)))..         
2d270 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d290 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f  sult = String.Fo
2d2a0 72 6d 61 74 28 22 5c 22 7b 30 7d 5c 22 22 2c 20  rmat("\"{0}\"", 
2d2b0 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20 20  result);..      
2d2c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2d2d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d2e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d2f0 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
2d300 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2d310 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2d320 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2d370 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73        #region As
2d380 73 65 6d 62 6c 79 20 41 74 74 72 69 62 75 74 65  sembly Attribute
2d390 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
2d3a0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
2d3b0 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d   string GetAssem
2d3c0 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
2d3d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  (..            A
2d3e0 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
2d3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2d400 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2d410 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65          if (asse
2d420 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly != null).. 
2d430 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2d440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2d450 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
2d460 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d470 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73            if (as
2d480 73 65 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64  sembly.IsDefined
2d490 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2d4b0 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f  ypeof(AssemblyCo
2d4c0 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69  nfigurationAttri
2d4d0 62 75 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a  bute), false))..
2d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
2d510 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61  ssemblyConfigura
2d520 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 63 6f  tionAttribute co
2d530 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 0d 0a 20  nfiguration =.. 
2d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d550 20 20 20 20 20 20 20 20 20 20 20 28 41 73 73 65             (Asse
2d560 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
2d570 6e 41 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20  nAttribute)..   
2d580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d590 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c           assembl
2d5a0 79 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69  y.GetCustomAttri
2d5b0 62 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20  butes(..        
2d5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5d0 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41          typeof(A
2d5e0 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61  ssemblyConfigura
2d5f0 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 0d  tionAttribute),.
2d600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d620 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20   false)[0];.... 
2d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d640 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f         return co
2d650 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 6e 66  nfiguration.Conf
2d660 69 67 75 72 61 74 69 6f 6e 3b 0d 0a 20 20 20 20  iguration;..    
2d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d680 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2d690 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2d6a0 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
2d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2d6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6d0 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
2d6e0 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
2d6f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2d700 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2d710 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
2d720 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2d730 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2d740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2d780 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
2d790 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
2d7a0 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28  etAssemblyTitle(
2d7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73  ..            As
2d7c0 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d  sembly assembly.
2d7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2d7e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d7f0 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
2d800 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly != null)..  
2d810 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d820 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
2d830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d840 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d850 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73           if (ass
2d860 65 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28  embly.IsDefined(
2d870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
2d890 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74  peof(AssemblyTit
2d8a0 6c 65 41 74 74 72 69 62 75 74 65 29 2c 20 66 61  leAttribute), fa
2d8b0 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  lse))..         
2d8c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8e0 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 54 69        AssemblyTi
2d8f0 74 6c 65 41 74 74 72 69 62 75 74 65 20 74 69 74  tleAttribute tit
2d900 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  le =..          
2d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d920 20 20 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65    (AssemblyTitle
2d930 41 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20  Attribute)..    
2d940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d950 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79          assembly
2d960 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62  .GetCustomAttrib
2d970 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  utes(..         
2d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d990 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73         typeof(As
2d9a0 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69  semblyTitleAttri
2d9b0 62 75 74 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d  bute), false)[0]
2d9c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2d9e0 75 72 6e 20 74 69 74 6c 65 2e 54 69 74 6c 65 3b  urn title.Title;
2d9f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2da00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2da10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2da20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
2da30 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
2da40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2da50 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
2da60 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
2da70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2da80 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2da90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2daa0 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
2dab0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2dac0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2dad0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2dae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2daf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2db10 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2db20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54      #region .NET
2db30 20 46 72 61 6d 65 77 6f 72 6b 20 48 61 6e 64 6c   Framework Handl
2db40 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
2db50 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
2db60 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52  ng GetFrameworkR
2db70 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  ootKeyName(..   
2db80 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
2db90 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
2dba0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
2dbb0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2dbc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2dbd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
2dbe0 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c  ing.Format("{0}\
2dbf0 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54  \Microsoft\\.NET
2dc00 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20  Framework",..   
2dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
2dc20 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55  RootKeyName(perU
2dc30 73 65 72 2c 20 77 6f 77 36 34 29 29 3b 0d 0a 20  ser, wow64));.. 
2dc40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2dc50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2dc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2dca0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2dcb0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
2dcc0 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65  FrameworkKeyName
2dcd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
2dce0 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
2dcf0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2dd00 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
2dd10 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
2dd20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2dd30 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
2dd40 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2dd50 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
2dd60 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2dd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2dd80 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2dd90 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2dda0 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e  ormat = !String.
2ddb0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c  IsNullOrEmpty(pl
2ddc0 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20  atformName) ?.. 
2ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2dde0 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  {0}\\Microsoft\\
2ddf0 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20  {1}\\v{2}\\{3}" 
2de00 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
2de10 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f     "{0}\\Microso
2de20 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d  ft\\{1}\\v{2}";.
2de30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
2de40 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
2de50 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47 65 74 52  mat(format, GetR
2de60 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73  ootKeyName(perUs
2de70 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20  er, wow64),..   
2de80 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2de90 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
2dea0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
2deb0 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20  atformName);..  
2dec0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ded0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2dee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2def0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2df20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2df30 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 49  atic string GetI
2df40 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
2df50 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
2df60 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
2df70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2df80 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2df90 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
2dfa0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2dfb0 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
2dfc0 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 20  mbly assembly = 
2dfd0 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74  Assembly.Reflect
2dfe0 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28  ionOnlyLoadFrom(
2dff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e000 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 29 3b        fileName);
2e010 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a   /* throw */....
2e020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e030 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20  if (assembly != 
2e040 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2e050 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e060 6e 20 61 73 73 65 6d 62 6c 79 2e 49 6d 61 67 65  n assembly.Image
2e070 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d  RuntimeVersion;.
2e080 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2e090 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
2e0a0 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  h..            {
2e0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e0c0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
2e0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2e0e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
2e0f0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
2e100 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e110 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2e120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e150 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2e160 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2e170 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 72  tic string GetFr
2e180 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79  ameworkDirectory
2e190 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
2e1a0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2e1b0 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
2e1c0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
2e1d0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
2e1e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2e1f0 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
2e200 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2e210 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
2e220 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
2e230 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
2e240 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
2e250 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2e260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
2e270 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2e280 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
2e290 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2e2a0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2e2b0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2e2c0 65 79 2c 20 47 65 74 46 72 61 6d 65 77 6f 72 6b  ey, GetFramework
2e2d0 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55  RootKeyName(perU
2e2e0 73 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20  ser, wow64),..  
2e2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e300 20 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c    false, whatIf,
2e310 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2e320 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e330 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
2e340 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e360 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
2e370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e380 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
2e390 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47  RegistryHelper.G
2e3a0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2e3c0 79 2c 20 22 49 6e 73 74 61 6c 6c 52 6f 6f 74 22  y, "InstallRoot"
2e3d0 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20  , null, whatIf, 
2e3e0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
2e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2e400 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69  (!(value is stri
2e410 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ng))..          
2e420 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2e430 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
2e440 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2e450 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a   Path.Combine(..
2e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e470 20 20 20 20 28 73 74 72 69 6e 67 29 76 61 6c 75      (string)valu
2e480 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  e, String.Format
2e490 28 22 76 7b 30 7d 22 2c 20 66 72 61 6d 65 77 6f  ("v{0}", framewo
2e4a0 72 6b 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20  rkVersion));..  
2e4b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2e4c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2e4d0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
2e4e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2e4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2e530 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
2e540 20 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50   Per-Framework/P
2e550 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67  latform Handling
2e560 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2e570 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e  e static void In
2e580 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72  itializeFramewor
2e590 6b 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20  kList(..        
2e5a0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2e5b0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
2e5c0 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67            Config
2e5d0 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
2e5e0 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ation,..        
2e5f0 20 20 20 20 72 65 66 20 46 72 61 6d 65 77 6f 72      ref Framewor
2e600 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c  kList frameworkL
2e610 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ist..           
2e620 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2e630 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
2e640 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20  rameworkList == 
2e650 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2e660 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
2e670 4c 69 73 74 20 3d 20 6e 65 77 20 46 72 61 6d 65  List = new Frame
2e680 77 6f 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  workList();.... 
2e690 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
2e6a0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f  rameworkList.Roo
2e6b0 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
2e6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2e6d0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f  rameworkList.Roo
2e6e0 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d  tKey = rootKey;.
2e6f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2e700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e740 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2e750 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
2e760 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  ist.Names == nul
2e770 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2e780 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2e790 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
2e7a0 2e 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72  .Names = new Str
2e7b0 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ingList();....  
2e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2e7d0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2e7e0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2e7f0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65  nfiguration.NoDe
2e800 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20  sktop)..        
2e810 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2e820 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
2e830 41 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f  Add(".NETFramewo
2e840 72 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rk");....       
2e850 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2e860 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2e870 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2e880 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74  ration.NoCompact
2e890 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2e8a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e8b0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
2e8c0 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64  orkList.Names.Ad
2e8d0 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72  d(".NETCompactFr
2e8e0 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20  amework");..    
2e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e900 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
2e910 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d  mes.Add(".NETCom
2e920 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b  pactFramework");
2e930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e940 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
2e950 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e  ist.Names.Add(".
2e960 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77  NETCompactFramew
2e970 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ork");..        
2e980 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2e990 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e9a0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2e9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2e9f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
2ea00 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
2ea10 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
2ea20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2ea40 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
2ea50 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73  sions = new Vers
2ea60 69 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20  ionMap();....   
2ea70 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2ea80 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
2ea90 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
2eaa0 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73  figuration.NoDes
2eab0 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20  ktop)..         
2eac0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65                Ve
2eae0 72 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b 74 6f  rsionList deskto
2eaf0 70 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e  pVersionList = n
2eb00 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29  ew VersionList()
2eb10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2eb20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2eb30 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2eb40 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2eb50 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30  ration.NoNetFx20
2eb60 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2eb70 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74             deskt
2eb80 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  opVersionList.Ad
2eb90 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c  d(new Version(2,
2eba0 20 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a   0, 50727));....
2ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ebc0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2ebd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2ebe0 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72  OTE: The .NET Fr
2ebf0 61 6d 65 77 6f 72 6b 20 33 2e 35 20 64 6f 65 73  amework 3.5 does
2ec00 20 6e 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77   not have its ow
2ec10 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
2ec20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2ec30 64 69 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76  directory; howev
2ec40 65 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79  er, it still may
2ec50 20 68 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a   have assembly..
2ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec70 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c      //       fol
2ec80 64 65 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20  ders for use in 
2ec90 56 69 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65  Visual Studio, e
2eca0 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tc...           
2ecb0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ecd0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
2ece0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
2ecf0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
2ed00 6f 4e 65 74 46 78 33 35 29 0d 0a 20 20 20 20 20  oNetFx35)..     
2ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
2ed30 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
2ed40 72 73 69 6f 6e 28 33 2c 20 35 29 29 3b 0d 0a 0d  rsion(3, 5));...
2ed50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ed60 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
2ed70 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
2ed80 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
2ed90 6f 6e 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a 20  on.NoNetFx40).. 
2eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2edb0 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65         desktopVe
2edc0 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65  rsionList.Add(ne
2edd0 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20  w Version(4, 0, 
2ede0 33 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20 20  30319));....    
2edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee00 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2ee10 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2ee20 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77   The .NET Framew
2ee30 6f 72 6b 20 34 2e 35 20 64 6f 65 73 20 6e 6f 74  ork 4.5 does not
2ee40 20 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20   have its own.. 
2ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee60 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69 72 65     //       dire
2ee70 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20  ctory; however, 
2ee80 69 74 20 73 74 69 6c 6c 20 6d 61 79 20 68 61 76  it still may hav
2ee90 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  e assembly..    
2eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eeb0 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64 65 72 73  //       folders
2eec0 20 66 6f 72 20 75 73 65 20 69 6e 20 56 69 73 75   for use in Visu
2eed0 61 6c 20 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d  al Studio, etc..
2eee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2eef0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2ef10 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
2ef20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
2ef30 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74  figuration.NoNet
2ef40 46 78 34 35 29 0d 0a 20 20 20 20 20 20 20 20 20  Fx45)..         
2ef50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2ef60 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73  esktopVersionLis
2ef70 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  t.Add(new Versio
2ef80 6e 28 34 2c 20 35 2c 20 35 30 37 30 39 29 29 3b  n(4, 5, 50709));
2ef90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2efa0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2efc0 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45  // NOTE: The .NE
2efd0 54 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35 2e  T Framework 4.5.
2efe0 31 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  1 does not have 
2eff0 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20  its own..       
2f000 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2f010 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b        directory;
2f020 20 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69   however, it sti
2f030 6c 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73 65  ll may have asse
2f040 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mbly..          
2f050 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2f060 20 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75     folders for u
2f070 73 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75  se in Visual Stu
2f080 64 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20  dio, etc...     
2f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f0a0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2f0b0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
2f0c0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
2f0d0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
2f0e0 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 31 29  tion.NoNetFx451)
2f0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f100 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f            deskto
2f110 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64  pVersionList.Add
2f120 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20  (new Version(4, 
2f130 35 2c 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  5, 1));....     
2f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f150 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2f160 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2f170 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  The .NET Framewo
2f180 72 6b 20 34 2e 35 2e 32 20 64 6f 65 73 20 6e 6f  rk 4.5.2 does no
2f190 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a  t have its own..
2f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1b0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69 72      //       dir
2f1c0 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c  ectory; however,
2f1d0 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20 68 61   it still may ha
2f1e0 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ve assembly..   
2f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f200 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64 65 72   //       folder
2f210 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56 69 73  s for use in Vis
2f220 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74 63 2e  ual Studio, etc.
2f230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f240 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2f260 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2f270 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2f280 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65  nfiguration.NoNe
2f290 74 46 78 34 35 32 29 0d 0a 20 20 20 20 20 20 20  tFx452)..       
2f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2b0 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
2f2c0 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ist.Add(new Vers
2f2d0 69 6f 6e 28 34 2c 20 35 2c 20 32 29 29 3b 0d 0a  ion(4, 5, 2));..
2f2e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f2f0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f310 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20   NOTE: The .NET 
2f320 46 72 61 6d 65 77 6f 72 6b 20 34 2e 36 20 64 6f  Framework 4.6 do
2f330 65 73 20 6e 6f 74 20 68 61 76 65 20 69 74 73 20  es not have its 
2f340 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  own..           
2f350 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2f360 20 20 64 69 72 65 63 74 6f 72 79 3b 20 68 6f 77    directory; how
2f370 65 76 65 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d  ever, it still m
2f380 61 79 20 68 61 76 65 20 61 73 73 65 6d 62 6c 79  ay have assembly
2f390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f3a0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
2f3b0 6f 6c 64 65 72 73 20 66 6f 72 20 75 73 65 20 69  olders for use i
2f3c0 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 2c  n Visual Studio,
2f3d0 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20   etc...         
2f3e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f400 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
2f410 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
2f420 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
2f430 2e 4e 6f 4e 65 74 46 78 34 36 29 0d 0a 20 20 20  .NoNetFx46)..   
2f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f450 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73       desktopVers
2f460 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20  ionList.Add(new 
2f470 56 65 72 73 69 6f 6e 28 34 2c 20 36 29 29 3b 0d  Version(4, 6));.
2f480 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f490 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f4b0 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54  / NOTE: The .NET
2f4c0 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 36 2e 31   Framework 4.6.1
2f4d0 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69   does not have i
2f4e0 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20  ts own..        
2f4f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2f500 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20       directory; 
2f510 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c  however, it stil
2f520 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d  l may have assem
2f530 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bly..           
2f540 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2f550 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73    folders for us
2f560 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64  e in Visual Stud
2f570 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20  io, etc...      
2f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2f590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f5a0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
2f5b0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
2f5c0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
2f5d0 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 36 31 29 0d  ion.NoNetFx461).
2f5e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f5f0 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
2f600 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
2f610 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 36  new Version(4, 6
2f620 2c 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  , 1));....      
2f630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
2f640 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
2f650 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 46 72  ions.Add(".NETFr
2f660 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20  amework",..     
2f670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f680 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
2f690 6e 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20 20 20  nList);..       
2f6a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2f6c0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2f6d0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2f6e0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f  nfiguration.NoCo
2f6f0 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20  mpact)..        
2f700 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2f720 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
2f730 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 43  sions.Add(".NETC
2f740 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
2f750 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f760 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56             new V
2f770 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56  ersionList(new V
2f780 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20  ersion[] {..    
2f790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7a0 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 28      new Version(
2f7b0 32 2c 20 30 2c 20 30 2c 20 30 29 2c 20 6e 65 77  2, 0, 0, 0), new
2f7c0 20 56 65 72 73 69 6f 6e 28 33 2c 20 35 2c 20 30   Version(3, 5, 0
2f7d0 2c 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  , 0)..          
2f7e0 20 20 20 20 20 20 20 20 20 20 7d 29 29 3b 0d 0a            }));..
2f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f800 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2f810 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f  ////////////////
2f840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f860 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2f870 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
2f880 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
2f890 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
2f8a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f8b0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2f8c0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
2f8d0 72 6d 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74  rmNames = new St
2f8e0 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  ringList();.... 
2f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2f900 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
2f910 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
2f920 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44  onfiguration.NoD
2f930 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20  esktop)..       
2f940 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2f950 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
2f960 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 6e 75 6c  ormNames.Add(nul
2f970 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
2f980 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
2f990 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
2f9a0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
2f9b0 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
2f9c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f9d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f9e0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2f9f0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
2fa00 6d 65 73 2e 41 64 64 28 22 50 6f 63 6b 65 74 50  mes.Add("PocketP
2fa10 43 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  C");..          
2fa20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
2fa30 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
2fa40 4e 61 6d 65 73 2e 41 64 64 28 22 53 6d 61 72 74  Names.Add("Smart
2fa50 70 68 6f 6e 65 22 29 3b 0d 0a 20 20 20 20 20 20  phone");..      
2fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
2fa70 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
2fa80 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 57  formNames.Add("W
2fa90 69 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20 20  indowsCE");..   
2faa0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2fab0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2fac0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2fad0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2fae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2faf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2fb20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2fb30 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46  tatic bool HaveF
2fb40 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72  rameworkDirector
2fb50 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2fb60 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2fb70 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2fb80 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
2fb90 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
2fba0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
2fbb0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2fbc0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
2fbd0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
2fbe0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2fbf0 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
2fc00 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2fc10 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
2fc20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2fc30 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2fc40 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2fc50 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
2fc60 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72  tring installDir
2fc70 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..        
2fc80 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2fc90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2fca0 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
2fcb0 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61  etFrameworkKeyNa
2fcc0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2fcd0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
2fce0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2fcf0 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
2fd00 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  me, perUser,..  
2fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f                wo
2fd20 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
2fd30 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2fd40 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
2fd50 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2fd60 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
2fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd80 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
2fd90 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
2fda0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2fdb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2fdd0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
2fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fdf0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2fe00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fe10 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d      if (platform
2fe20 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f  Name != null) //
2fe30 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d   NOTE: Skip non-
2fe40 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20 20  desktop...      
2fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2fe60 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  turn true;....  
2fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
2fe80 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d  ring directory =
2fe90 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72   GetFrameworkDir
2fea0 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
2feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2fec0 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56  tKey, frameworkV
2fed0 65 72 73 69 6f 6e 2c 20 70 65 72 55 73 65 72 2c  ersion, perUser,
2fee0 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d   wow64, whatIf,.
2fef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ff00 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
2ff10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ff20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
2ff30 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63  ullOrEmpty(direc
2ff40 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tory))..        
2ff50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ff60 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
2ff70 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2ff80 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73  (!Directory.Exis
2ff90 74 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a  ts(directory))..
2ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffb0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2ffc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ffd0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
2ffe0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
2fff0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c  ePriority.Lower,
30000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30010 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
30020 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
30030 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
30040 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
30050 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
30060 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e  amework {0} foun
30070 64 20 76 69 61 20 64 69 72 65 63 74 6f 72 79 20  d via directory 
30080 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {1}.",..        
30090 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
300a0 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
300b0 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73  Version), ForDis
300c0 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29  play(directory))
300d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
300e0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
300f0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
30100 20 20 20 20 20 20 20 20 20 20 69 6e 73 74 61 6c            instal
30110 6c 44 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72  lDirectory = dir
30120 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
30130 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
30140 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
30150 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
30160 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
30170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
301a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
301b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
301c0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
301d0 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 52  l HaveFrameworkR
301e0 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20  egistry(..      
301f0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
30200 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
30210 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
30220 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
30230 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
30240 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
30250 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
30260 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
30270 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
30280 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
30290 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
302a0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
302b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
302c0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
302d0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
302e0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
302f0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
30300 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
30310 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72   keyName = GetFr
30320 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d  ameworkKeyName(.
30330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30340 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
30350 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
30360 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  , platformName, 
30370 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
30380 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29            wow64)
30390 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
303a0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
303b0 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
303c0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
303d0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
303e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
303f0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
30400 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
30410 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
30420 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30430 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
30440 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
30450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
30460 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
30470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30480 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  if (platformName
30490 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54   != null) // NOT
304a0 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b  E: Skip non-desk
304b0 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  top...          
304c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
304d0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
304e0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
304f0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
30500 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
30510 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ower,..         
30520 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
30530 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
30540 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
30550 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
30560 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
30570 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
30580 20 66 6f 75 6e 64 20 76 69 61 20 72 65 67 69 73   found via regis
30590 74 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20  try {1}.",..    
305a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305b0 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
305c0 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 20 46 6f  workVersion), Fo
305d0 72 44 69 73 70 6c 61 79 28 6b 65 79 4e 61 6d 65  rDisplay(keyName
305e0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
305f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
30600 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
30610 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30620 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
30630 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
30640 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
30650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30690 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
306a0 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
306b0 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
306c0 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
306d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
306e0 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68  tic bool ForEach
306f0 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28  FrameworkConfig(
30700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
30710 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73  ckRegistry regis
30720 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
30730 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20    FrameworkList 
30740 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a  frameworkList,..
30750 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
30760 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c 6c 62  eworkConfigCallb
30770 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ack callback,.. 
30780 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
30790 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f  g version, /* NO
307a0 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f  TE: Optional. */
307b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
307c0 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61  ring invariantNa
307d0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
307e0 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
307f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
30800 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a  g description,..
30810 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
30820 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  ng typeName,..  
30830 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
30840 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e  lyName assemblyN
30850 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
30860 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
30870 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
30880 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
30890 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
308a0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
308b0 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
308c0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
308d0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
308e0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
308f0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
30900 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
30910 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
30920 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
30930 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
30940 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
30950 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30960 20 20 69 66 20 28 72 65 67 69 73 74 72 79 20 3d    if (registry =
30970 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
30980 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30990 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
309a0 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72  "invalid registr
309b0 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
309c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
309d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
309e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
309f0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
30a00 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st == null)..   
30a10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30a20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
30a30 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61  r = "invalid fra
30a40 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20  mework list";.. 
30a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
30a60 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
30a70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
30a80 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
30a90 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
30aa0 65 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  ey = frameworkLi
30ab0 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20  st.RootKey;.... 
30ac0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
30ad0 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
30ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
30af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b00 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
30b10 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20   root key";..   
30b20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
30b30 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
30b40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
30b50 20 20 20 20 20 20 20 20 20 69 66 20 28 21 49 73           if (!Is
30b60 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79  SupportedRootKey
30b70 28 72 65 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b  (registry, rootK
30b80 65 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ey))..          
30b90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30ba0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f       error = "ro
30bb0 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70  ot key must be p
30bc0 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d  er-user or per-m
30bd0 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20  achine";..      
30be0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
30bf0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
30c00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
30c10 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
30c20 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d  orkList.Names ==
30c30 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
30c40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30c50 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
30c60 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d  no framework nam
30c70 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  es found";..    
30c80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30c90 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
30ca0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30cb0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
30cc0 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
30cd0 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
30ce0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30cf0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
30d00 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72  r = "no framewor
30d10 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64  k versions found
30d20 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
30d30 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
30d40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
30d50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30d60 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
30d70 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20  t.PlatformNames 
30d80 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
30d90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30da0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
30db0 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61   "no platform na
30dc0 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20  mes found";..   
30dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
30de0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
30df0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
30e00 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
30e10 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
30e20 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77  .Count != framew
30e30 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
30e40 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20  Names.Count)..  
30e50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30e60 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
30e70 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
30e80 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61  at("framework na
30e90 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65  me count {0} doe
30ea0 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20  s not " +..     
30eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
30ec0 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e  match platform n
30ed0 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20  ame count {1}", 
30ee0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
30ef0 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  mes.Count,..    
30f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f10 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
30f20 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
30f30 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
30f40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
30f50 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
30f60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
30f70 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65     for (int inde
30f80 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66  x = 0; index < f
30f90 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
30fa0 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b  es.Count; index+
30fb0 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +)..            
30fc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
30fd0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
30fe0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
30ff0 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66  Grab the name of
31000 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28   the framework (
31010 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77  e.g. ".NETFramew
31020 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20  ork")..         
31030 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
31040 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  and the name of 
31050 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e  the platform (e.
31060 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e  g. "WindowsCE").
31070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31080 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
31090 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
310a0 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61  meworkName = fra
310b0 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
310c0 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20  [index];..      
310d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
310e0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20   platformName = 
310f0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
31100 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65  atformNames[inde
31110 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x];....         
31120 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
31130 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
31140 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6e 6f 6e  TE: Skip all non
31150 2d 64 65 73 6b 74 6f 70 20 66 72 61 6d 65 77 6f  -desktop framewo
31160 72 6b 73 20 28 69 2e 65 2e 20 69 66 20 74 68 65  rks (i.e. if the
31170 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20   platform..     
31180 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
31190 20 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20      name is not 
311a0 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 20  null)...        
311b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
311c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
311d0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20  platformName != 
311e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
311f0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
31200 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
31210 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
31220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
31230 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 73 75  OTE: Grab the su
31240 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73  pported versions
31250 20 6f 66 20 74 68 69 73 20 70 61 72 74 69 63 75   of this particu
31260 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lar..           
31270 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72       //       fr
31280 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20  amework...      
31290 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
312a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65                Ve
312b0 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77  rsionList framew
312c0 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d  orkVersionList;.
312d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
312e0 20 20 20 69 66 20 28 76 65 72 73 69 6f 6e 20 21     if (version !
312f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
31300 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31320 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
31330 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
31340 20 4d 61 6e 75 61 6c 20 6f 76 65 72 72 69 64 65   Manual override
31350 20 6f 66 20 74 68 65 20 2a 4f 4e 45 2a 20 66 72   of the *ONE* fr
31360 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 0d  amework version.
31370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31380 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
31390 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20   process...     
313a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
313b0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
313c0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
313d0 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65  VersionList = ne
313e0 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b  w VersionList();
313f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31400 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56        frameworkV
31410 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
31420 65 77 20 56 65 72 73 69 6f 6e 28 76 65 72 73 69  ew Version(versi
31430 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  on));..         
31440 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
31450 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
31460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31470 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
31480 20 20 20 20 20 20 20 69 66 20 28 21 66 72 61 6d         if (!fram
31490 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
314a0 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d  ns.TryGetValue(.
314b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
314c0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
314d0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20  meworkName, out 
314e0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
314f0 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20  List) ||..      
31500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31510 20 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73    (frameworkVers
31520 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  ionList == null)
31530 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
31540 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31560 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
31570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31580 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
31590 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
315a0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
315b0 20 28 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77   (Version framew
315c0 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72  orkVersion in fr
315d0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
315e0 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st)..           
315f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31600 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
31610 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
31620 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
31630 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
31640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31650 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
31660 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
31670 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
31680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31690 20 20 20 20 20 20 20 22 66 72 61 6d 65 77 6f 72         "framewor
316a0 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61  kName = {0}, fra
316b0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20  meworkVersion = 
316c0 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  {1}, " +..      
316d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316e0 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20    "platformName 
316f0 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c  = {2}", ForDispl
31700 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ay(frameworkName
31710 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
31720 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
31730 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
31740 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
31750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31760 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 70 6c     ForDisplay(pl
31770 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72  atformName)), tr
31780 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
31790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
317a0 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 73 74       string inst
317b0 61 6c 6c 44 69 72 65 63 74 6f 72 79 20 3d 20 6e  allDirectory = n
317c0 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
317d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
317e0 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69  !HaveFrameworkDi
317f0 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
31800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31810 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
31820 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
31830 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
31840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31850 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61               pla
31860 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73  tformName, perUs
31870 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  er, wow64, whatI
31880 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  f, verbose,..   
31890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318a0 20 20 20 20 20 20 20 20 20 72 65 66 20 69 6e 73           ref ins
318b0 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 29 29 0d  tallDirectory)).
318c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
318d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
318e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318f0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
31900 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
31910 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20  rity.Low,..     
31920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31930 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
31940 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
31950 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
31960 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
31970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31980 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
31990 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 6e   {0} directory n
319a0 6f 74 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20  ot found, " +.. 
319b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319c0 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70             "skip
319d0 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73  ping...", ForDis
319e0 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
319f0 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
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 20 20 20                  
31a40 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
31a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
31a70 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c           if (cal
31a80 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  lback == null)..
31a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31aa0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
31ab0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31ac0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
31ad0 64 69 72 65 63 74 6f 72 79 20 3d 20 69 6e 73 74  directory = inst
31ae0 61 6c 6c 44 69 72 65 63 74 6f 72 79 3b 0d 0a 0d  allDirectory;...
31af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31b00 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
31b10 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69  IsNullOrEmpty(di
31b20 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
31b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
31b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31b50 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
31b60 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
31b70 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
31b80 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
31b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ba0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
31bb0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
31bc0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
31bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31be0 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
31bf0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64   Framework {0} d
31c00 69 72 65 63 74 6f 72 79 20 69 73 20 69 6e 76 61  irectory is inva
31c10 6c 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  lid, " +..      
31c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c30 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e        "skipping.
31c40 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ..", ForDisplay(
31c50 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
31c60 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
31c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c80 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
31c90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31ca0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
31cb0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
31cc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ce0 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20      directory = 
31cf0 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
31d00 65 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22  ectory, "Config"
31d10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31d20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44            if (!D
31d30 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28  irectory.Exists(
31d40 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
31d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31d70 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
31d80 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
31d90 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
31da0 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
31db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31dc0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
31dd0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
31de0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
31df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31e00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
31e10 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
31e20 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64   directory {1} d
31e30 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20  oes not " +..   
31e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e50 20 20 20 20 20 20 20 20 20 22 65 78 69 73 74 2c           "exist,
31e60 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46   skipping...", F
31e70 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
31e80 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
31e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ea0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
31eb0 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29  play(directory))
31ec0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
31ed0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
31ef0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
31f00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
31f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31f20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
31f30 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
31f40 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22  ine(directory, "
31f50 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29  machine.config")
31f60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31f70 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 69           if (!Fi
31f80 6c 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61  le.Exists(fileNa
31f90 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
31fa0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fc0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
31fd0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
31fe0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a  ePriority.Low,..
31ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32000 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
32010 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
32020 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
32030 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
32040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32050 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d        ".NET Fram
32060 65 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20 7b  ework {0} file {
32070 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  1} does not exis
32080 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  t, " +..        
32090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320a0 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e      "skipping...
320b0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72  ", ForDisplay(fr
320c0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
320d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
320e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
320f0 72 44 69 73 70 6c 61 79 28 66 69 6c 65 4e 61 6d  rDisplay(fileNam
32100 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
32110 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
32120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32130 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
32140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32150 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32160 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 63          bool loc
32170 61 6c 53 61 76 65 64 20 3d 20 66 61 6c 73 65 3b  alSaved = false;
32180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32190 20 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c          if (!cal
321a0 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
321b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321c0 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e      fileName, in
321d0 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20 6e 61 6d  variantName, nam
321e0 65 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d  e, description,.
321f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
32210 65 4e 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e  eName, assemblyN
32220 61 6d 65 2c 20 69 6e 73 74 61 6c 6c 44 69 72 65  ame, installDire
32230 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
32240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32250 20 20 20 20 63 6c 69 65 6e 74 44 61 74 61 2c 20      clientData, 
32260 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20  perUser, wow64, 
32270 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
32280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32290 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
322a0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
322b0 66 20 6c 6f 63 61 6c 53 61 76 65 64 2c 20 72 65  f localSaved, re
322c0 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
322d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
322e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
322f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
32300 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
32310 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
32320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32330 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
32340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
32350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32360 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f 63           if (loc
32370 61 6c 53 61 76 65 64 20 26 26 20 21 73 61 76 65  alSaved && !save
32380 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
32390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323a0 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d  saved = true;...
323b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
323c0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
323d0 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
323e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323f0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
32400 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
32410 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d  riority.Lowest,.
32420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32440 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
32450 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
32460 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
32470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
32490 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 7b 30 7d  localSaved = {0}
324a0 2c 20 73 61 76 65 64 20 3d 20 7b 31 7d 22 2c 0d  , saved = {1}",.
324b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
324c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324d0 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63 61   ForDisplay(loca
324e0 6c 53 61 76 65 64 29 2c 20 46 6f 72 44 69 73 70  lSaved), ForDisp
324f0 6c 61 79 28 73 61 76 65 64 29 29 2c 0d 0a 20 20  lay(saved)),..  
32500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
32520 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
32530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32540 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
32550 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
32560 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
32570 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
32580 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
32590 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
325a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
325b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
325c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
325d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
325e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  ....        [Met
325f0 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
32600 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
32610 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
32620 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
32630 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65  ool ForEachFrame
32640 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20  workRegistry(.. 
32650 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
32660 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
32670 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ,..            F
32680 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61  rameworkList fra
32690 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20  meworkList,..   
326a0 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
326b0 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  rkRegistryCallba
326c0 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  ck callback,..  
326d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
326e0 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54   version, /* NOT
326f0 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d  E: Optional. */.
32700 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
32710 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
32720 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
32730 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
32740 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
32750 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
32760 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
32770 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
32780 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
32790 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
327a0 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
327b0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
327c0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
327d0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
327e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
327f0 69 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20  if (registry == 
32800 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
32810 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
32820 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
32830 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72 79 22  nvalid registry"
32840 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
32850 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
32860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
32870 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
32880 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
32890 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
328a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
328b0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
328c0 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65  = "invalid frame
328d0 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20  work list";..   
328e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
328f0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
32900 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32910 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
32920 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
32930 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
32940 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20  .RootKey;....   
32950 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
32960 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
32970 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
32990 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
329a0 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20  oot key";..     
329b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
329c0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
329d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
329e0 20 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75         if (!IsSu
329f0 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72  pportedRootKey(r
32a00 65 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79  egistry, rootKey
32a10 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
32a20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
32a30 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74     error = "root
32a40 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72   key must be per
32a50 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63  -user or per-mac
32a60 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  hine";..        
32a70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
32a80 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
32a90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
32aa0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
32ab0 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e  kList.Names == n
32ac0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
32ad0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32ae0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f       error = "no
32af0 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73   framework names
32b00 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
32b10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
32b20 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
32b30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
32b40 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
32b50 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
32b60 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
32b70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
32b80 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
32b90 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20  = "no framework 
32ba0 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b  versions found";
32bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32bc0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
32bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
32be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
32bf0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
32c00 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d  PlatformNames ==
32c10 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
32c20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
32c30 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
32c40 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  no platform name
32c50 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
32c60 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
32c70 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
32c80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
32c90 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
32ca0 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43  workList.Names.C
32cb0 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f 72  ount != framewor
32cc0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
32cd0 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20  mes.Count)..    
32ce0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
32cf0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
32d00 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
32d10 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65  ("framework name
32d20 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20   count {0} does 
32d30 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  not " +..       
32d40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 61               "ma
32d50 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d  tch platform nam
32d60 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72  e count {1}", fr
32d70 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
32d80 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  s.Count,..      
32d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
32da0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
32db0 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29  formNames.Count)
32dc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32dd0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
32de0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
32df0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
32e00 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20   for (int index 
32e10 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72 61  = 0; index < fra
32e20 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
32e30 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29  .Count; index++)
32e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
32e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32e60 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
32e70 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
32e80 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ab the name of t
32e90 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e  he framework (e.
32ea0 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  g. ".NETFramewor
32eb0 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k")..           
32ec0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
32ed0 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
32ee0 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e  e platform (e.g.
32ef0 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a   "WindowsCE")...
32f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f10 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
32f20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
32f30 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65  workName = frame
32f40 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69  workList.Names[i
32f50 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20  ndex];..        
32f60 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
32f70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72  latformName = fr
32f80 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
32f90 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d  formNames[index]
32fa0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32fb0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
32fc0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
32fd0 3a 20 47 72 61 62 20 74 68 65 20 73 75 70 70 6f  : Grab the suppo
32fe0 72 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f 66  rted versions of
32ff0 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61 72   this particular
33000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33010 20 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d 65    //       frame
33020 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20  work...         
33030 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
33040 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
33050 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b  onList framework
33060 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a  VersionList;....
33070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33080 69 66 20 28 76 65 72 73 69 6f 6e 20 21 3d 20 6e  if (version != n
33090 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
330a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
330b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
330c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
330d0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61       // NOTE: Ma
330e0 6e 75 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 66  nual override of
330f0 20 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61 6d 65   the *ONE* frame
33100 77 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a 20 20  work version..  
33110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33120 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 70 72    //       to pr
33130 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ocess...        
33140 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
33150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33160 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72      frameworkVer
33170 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56  sionList = new V
33180 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20  ersionList();.. 
33190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331a0 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73     frameworkVers
331b0 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20  ionList.Add(new 
331c0 56 65 72 73 69 6f 6e 28 76 65 72 73 69 6f 6e 29  Version(version)
331d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
331e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
331f0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
33200 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
33210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33220 20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f      if (!framewo
33230 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  rkList.Versions.
33240 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  TryGetValue(..  
33250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33260 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
33270 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61  orkName, out fra
33280 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
33290 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  t) ||..         
332a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
332b0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
332c0 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  List == null))..
332d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
332f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
33300 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
33310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
33320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33330 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
33340 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56        foreach (V
33350 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
33360 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65  Version in frame
33370 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29  workVersionList)
33380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33390 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
333a0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
333b0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
333c0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
333d0 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  wer,..          
333e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
333f0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
33400 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
33410 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
33420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33430 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61      "frameworkNa
33440 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77  me = {0}, framew
33450 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d  orkVersion = {1}
33460 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
33470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
33480 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b  platformName = {
33490 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  2}", ForDisplay(
334a0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d  frameworkName),.
334b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
334c0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
334d0 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
334e0 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
334f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33500 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74 66  ForDisplay(platf
33510 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63 65  ormName)), trace
33520 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
33530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33540 20 20 69 66 20 28 21 48 61 76 65 46 72 61 6d 65    if (!HaveFrame
33550 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20  workRegistry(.. 
33560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33570 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
33580 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
33590 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
335a0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
335b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335c0 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20    platformName, 
335d0 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20  perUser, wow64, 
335e0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
335f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
33600 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33620 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
33630 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
33640 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20  iority.Low,..   
33650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33660 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
33670 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
33680 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
33690 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
336a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336b0 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
336c0 72 6b 20 7b 30 7d 20 72 65 67 69 73 74 72 79 20  rk {0} registry 
336d0 6e 6f 74 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a  not found, " +..
336e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336f0 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69              "ski
33700 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69  pping...", ForDi
33710 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
33720 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
33730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33740 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
33750 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
33760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33770 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
33780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33790 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
337a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
337b0 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d  llback == null).
337c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
337d0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
337e0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
337f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
33800 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  allback(..      
33810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33820 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
33830 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
33840 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
33850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33860 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61               pla
33870 74 66 6f 72 6d 4e 61 6d 65 2c 20 6e 75 6c 6c 2c  tformName, null,
33880 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 70 65 72   clientData, per
33890 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
338a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338b0 20 20 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f     wow64, throwO
338c0 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66  nMissing, whatIf
338d0 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  , verbose,..    
338e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338f0 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
33900 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
33910 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33930 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
33940 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
33950 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
33960 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
33970 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
33980 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
33990 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
339a0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
339b0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
339c0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
339d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
339e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
339f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33a00 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
33a10 20 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d      #region Per-
33a20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56 65  Visual Studio Ve
33a30 72 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a  rsion Handling..
33a40 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
33a50 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74  static void Init
33a60 69 61 6c 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20  ializeVsList(.. 
33a70 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
33a80 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
33a90 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
33aa0 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63   Configuration c
33ab0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20  onfiguration,.. 
33ac0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 56             ref V
33ad0 73 4c 69 73 74 20 76 73 4c 69 73 74 0d 0a 20 20  sList vsList..  
33ae0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
33af0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33b00 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d      if (vsList =
33b10 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
33b20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 20           vsList 
33b30 3d 20 6e 65 77 20 56 73 4c 69 73 74 28 29 3b 0d  = new VsList();.
33b40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
33b50 66 20 28 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65  f (vsList.RootKe
33b60 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
33b70 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
33b80 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f  st.RootKey = roo
33b90 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
33ba0 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e       if (vsList.
33bb0 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
33bc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
33bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33be0 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e    vsList.Version
33bf0 73 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c  s = new VersionL
33c00 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
33c10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
33c20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
33c30 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
33c40 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 35  uration.NoVs2005
33c50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
33c60 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
33c70 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
33c80 65 72 73 69 6f 6e 28 38 2c 20 30 29 29 3b 20 2f  ersion(8, 0)); /
33c90 2f 20 32 30 30 35 0d 0a 0d 0a 20 20 20 20 20 20  / 2005....      
33ca0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
33cb0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
33cc0 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
33cd0 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38  uration.NoVs2008
33ce0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
33cf0 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
33d00 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
33d10 65 72 73 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f  ersion(9, 0)); /
33d20 2f 20 32 30 30 38 0d 0a 0d 0a 20 20 20 20 20 20  / 2008....      
33d30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
33d40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
33d50 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
33d60 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30  uration.NoVs2010
33d70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
33d80 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
33d90 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
33da0 65 72 73 69 6f 6e 28 31 30 2c 20 30 29 29 3b 2f  ersion(10, 0));/
33db0 2f 20 32 30 31 30 0d 0a 0d 0a 20 20 20 20 20 20  / 2010....      
33dc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
33dd0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
33de0 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
33df0 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 32  uration.NoVs2012
33e00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
33e10 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
33e20 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
33e30 65 72 73 69 6f 6e 28 31 31 2c 20 30 29 29 3b 2f  ersion(11, 0));/
33e40 2f 20 32 30 31 32 0d 0a 0d 0a 20 20 20 20 20 20  / 2012....      
33e50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
33e60 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
33e70 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
33e80 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 33  uration.NoVs2013
33e90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
33ea0 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
33eb0 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
33ec0 65 72 73 69 6f 6e 28 31 32 2c 20 30 29 29 3b 2f  ersion(12, 0));/
33ed0 2f 20 32 30 31 33 0d 0a 0d 0a 20 20 20 20 20 20  / 2013....      
33ee0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
33ef0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
33f00 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
33f10 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 35  uration.NoVs2015
33f20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
33f30 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
33f40 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
33f50 65 72 73 69 6f 6e 28 31 34 2c 20 30 29 29 3b 2f  ersion(14, 0));/
33f60 2f 20 32 30 31 35 0d 0a 20 20 20 20 20 20 20 20  / 2015..        
33f70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
33f80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
33f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
33fe0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
33ff0 6f 6c 20 48 61 76 65 56 73 56 65 72 73 69 6f 6e  ol HaveVsVersion
34000 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20  Directory(..    
34010 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
34020 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
34030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
34040 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
34050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
34060 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
34070 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
34080 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
34090 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
340a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
340b0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
340c0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
340d0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
340e0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 69 6e     ref string in
340f0 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 0d 0a  stallDirectory..
34100 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
34110 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34120 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
34130 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
34140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34150 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
34160 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
34170 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
34180 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
34190 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55  on, suffix, perU
341a0 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a  ser, wow64);....
341b0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
341c0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
341d0 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
341e0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
341f0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
34200 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
34210 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
34220 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
34230 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
34240 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34250 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
34260 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
34270 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34280 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
34290 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
342a0 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74  t value = Regist
342b0 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75  ryHelper.GetValu
342c0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
342d0 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e          key, "In
342e0 73 74 61 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c 2c  stallDir", null,
342f0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
34300 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34310 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75        if (!(valu
34320 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20  e is string)).. 
34330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34340 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
34350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34360 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
34370 74 6f 72 79 20 3d 20 28 73 74 72 69 6e 67 29 76  tory = (string)v
34380 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
34390 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
343a0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
343b0 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  y(directory)).. 
343c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
343e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
343f0 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f      if (!Directo
34400 72 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74  ry.Exists(direct
34410 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
34420 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
34430 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
34440 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
34450 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
34460 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
34470 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
34480 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
34490 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
344a0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
344b0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
344c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
344d0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 7b 30  Visual Studio {0
344e0 7d 20 66 6f 75 6e 64 20 69 6e 20 64 69 72 65 63  } found in direc
344f0 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20  tory {1}.",..   
34500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34510 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
34520 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c  rsion), ForDispl
34530 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d  ay(directory)),.
34540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34550 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
34560 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
34570 20 20 20 20 20 20 20 20 69 6e 73 74 61 6c 6c 44          installD
34580 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63  irectory = direc
34590 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  tory;..         
345a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
345b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
345c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
345d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
345e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  ....        [Met
34630 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
34640 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
34650 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
34660 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
34670 6f 6f 6c 20 46 6f 72 45 61 63 68 56 73 56 65 72  ool ForEachVsVer
34680 73 69 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20  sionRegistry(.. 
34690 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
346a0 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
346b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
346c0 73 4c 69 73 74 20 76 73 4c 69 73 74 2c 0d 0a 20  sList vsList,.. 
346d0 20 20 20 20 20 20 20 20 20 20 20 56 69 73 75 61             Visua
346e0 6c 53 74 75 64 69 6f 52 65 67 69 73 74 72 79 43  lStudioRegistryC
346f0 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
34700 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
34710 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
34720 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
34730 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
34740 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
34750 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
34760 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
34770 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
34780 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
34790 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
347a0 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
347b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
347c0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
347d0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
347e0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
347f0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
34800 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
34810 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
34820 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
34830 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c  registry == null
34840 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
34850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34860 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
34870 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20  id registry";.. 
34880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
34890 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
348a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
348b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
348c0 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sList == null)..
348d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
348e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
348f0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
34900 56 53 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20  VS list";..     
34910 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
34920 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
34930 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
34940 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
34950 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d  tryKey rootKey =
34960 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b   vsList.RootKey;
34970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34980 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e  if (rootKey == n
34990 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
349a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
349b0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
349c0 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b  valid root key";
349d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
349e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
349f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
34a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
34a10 20 28 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f   (!IsSupportedRo
34a20 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20  otKey(registry, 
34a30 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20  rootKey))..     
34a40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34a50 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
34a60 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74  = "root key must
34a70 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20   be per-user or 
34a80 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20  per-machine";.. 
34a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
34aa0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
34ab0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
34ac0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
34ad0 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  sList.Versions =
34ae0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
34af0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34b00 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
34b10 22 6e 6f 20 56 53 20 76 65 72 73 69 6f 6e 73 20  "no VS versions 
34b20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20  found";..       
34b30 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
34b40 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
34b50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
34b60 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65       foreach (Ve
34b70 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 20  rsion vsVersion 
34b80 69 6e 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f  in vsList.Versio
34b90 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns)..           
34ba0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34bb0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
34bc0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
34bd0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
34be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34bf0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
34c00 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
34c10 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
34c20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
34c30 20 20 20 20 20 20 20 22 76 73 56 65 72 73 69 6f         "vsVersio
34c40 6e 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73  n = {0}", ForDis
34c50 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29 29  play(vsVersion))
34c60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34c70 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
34c80 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
34c90 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
34ca0 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72   installDirector
34cb0 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  y = null;....   
34cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
34cd0 28 21 48 61 76 65 56 73 56 65 72 73 69 6f 6e 44  (!HaveVsVersionD
34ce0 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  irectory(..     
34cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d00 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65     rootKey, vsVe
34d10 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70  rsion, suffix, p
34d20 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77  erUser, wow64, w
34d30 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
34d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d50 76 65 72 62 6f 73 65 2c 20 72 65 66 20 69 6e 73  verbose, ref ins
34d60 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 29 29 0d  tallDirectory)).
34d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34d80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34d90 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
34da0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
34db0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
34dc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34dd0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
34de0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
34df0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
34e00 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
34e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e20 20 22 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20   "Visual Studio 
34e30 7b 30 7d 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73  {0} not found, s
34e40 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20  kipping...",..  
34e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e60 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
34e70 28 76 73 56 65 72 73 69 6f 6e 29 29 2c 20 74 72  (vsVersion)), tr
34e80 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
34e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34ea0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
34eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ec0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
34ed0 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63       if (callbac
34ee0 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  k == null)..    
34ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f00 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
34f10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
34f20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20  (!callback(..   
34f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f40 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
34f50 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
34f60 20 70 61 63 6b 61 67 65 2c 20 69 6e 73 74 61 6c   package, instal
34f70 6c 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20  lDirectory,..   
34f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f90 20 20 20 20 20 63 6c 69 65 6e 74 44 61 74 61 2c       clientData,
34fa0 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
34fb0 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
34fc0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
34fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fe0 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65    verbose, ref e
34ff0 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
35000 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
35020 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
35030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
35040 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
35050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
35060 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
35070 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
35080 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
35090 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
350a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
350b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
350c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
350d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
350e0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
350f0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 46 69  Configuration Fi
35100 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  le Handling..   
35110 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
35120 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
35130 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
35140 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
35150 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
35160 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
35170 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
35180 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
35190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
351a0 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61  ring invariantNa
351b0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
351c0 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
351d0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
351e0 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a  g description,..
351f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
35200 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  ng typeName,..  
35210 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
35220 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e  lyName assemblyN
35230 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
35240 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
35250 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
35260 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
35270 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
35280 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
35290 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
352a0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
352b0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
352c0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
352d0 20 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d   dirty = false;.
352e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c  .            Xml
352f0 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e  Document documen
35300 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d  t = new XmlDocum
35310 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ent();....      
35320 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50        document.P
35330 72 65 73 65 72 76 65 57 68 69 74 65 73 70 61 63  reserveWhitespac
35340 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  e = true;..     
35350 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
35360 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  Load(fileName);.
35370 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58  ...            X
35380 6d 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65  mlElement addEle
35390 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  ment = document.
353a0 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65  SelectSingleNode
353b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
353c0 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
353d0 28 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d  (XPathForAddElem
353e0 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61  ent, invariantNa
353f0 6d 65 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65  me)) as XmlEleme
35400 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  nt;....         
35410 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e     if (addElemen
35420 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
35430 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35440 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
35450 67 5b 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73  g[] elementNames
35460 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20   = {..          
35470 20 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65            "syste
35480 6d 2e 64 61 74 61 22 2c 20 22 44 62 50 72 6f 76  m.data", "DbProv
35490 69 64 65 72 46 61 63 74 6f 72 69 65 73 22 0d 0a  iderFactories"..
354a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354b0 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  };....          
354c0 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74        XmlElement
354d0 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
354e0 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
354f0 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
35500 2e 44 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74  .DocumentElement
35510 3b 20 2f 2a 20 63 6f 6e 66 69 67 75 72 61 74 69  ; /* configurati
35520 6f 6e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  on */....       
35530 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
35540 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74   (string element
35550 4e 61 6d 65 20 69 6e 20 65 6c 65 6d 65 6e 74 4e  Name in elementN
35560 61 6d 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ames)..         
35570 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
35590 64 45 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76 69  dElement = previ
355a0 6f 75 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65 63  ousElement.Selec
355b0 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20  tSingleNode(..  
355c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355d0 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d        elementNam
355e0 65 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74  e) as XmlElement
355f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
35600 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64           if (add
35610 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  Element == null)
35620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35630 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35650 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f   addElement = do
35660 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65  cument.CreateEle
35670 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  ment(..         
35680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35690 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20     elementName, 
356a0 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
356b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
356c0 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f            previo
356d0 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64  usElement.Append
356e0 43 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74  Child(addElement
356f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
35700 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
35710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35720 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
35730 20 3d 20 61 64 64 45 6c 65 6d 65 6e 74 3b 0d 0a   = addElement;..
35740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35750 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
35760 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20       addElement 
35770 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74  = document.Creat
35780 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20  eElement(..     
35790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
357a0 61 64 64 22 2c 20 53 74 72 69 6e 67 2e 45 6d 70  add", String.Emp
357b0 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ty);....        
357c0 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73          previous
357d0 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68  Element.AppendCh
357e0 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b  ild(addElement);
357f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35800 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
35810 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
35820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35830 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
35840 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65  ls(addElement.Ge
35850 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65  tAttribute("name
35860 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "),..           
35870 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 53           name, S
35880 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
35890 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20  Ordinal))..     
358a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
358b0 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
358c0 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74  ment.SetAttribut
358d0 65 28 22 6e 61 6d 65 22 2c 20 6e 61 6d 65 29 3b  e("name", name);
358e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
358f0 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
35900 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
35910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
35920 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
35930 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41  (addElement.GetA
35940 74 74 72 69 62 75 74 65 28 22 69 6e 76 61 72 69  ttribute("invari
35950 61 6e 74 22 29 2c 0d 0a 20 20 20 20 20 20 20 20  ant"),..        
35960 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 76 61              inva
35970 72 69 61 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e  riantName, Strin
35980 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
35990 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nal))..         
359a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
359b0 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74        addElement
359c0 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22 69  .SetAttribute("i
359d0 6e 76 61 72 69 61 6e 74 22 2c 20 69 6e 76 61 72  nvariant", invar
359e0 69 61 6e 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  iantName);..    
359f0 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
35a00 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
35a10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
35a20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
35a30 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c  ing.Equals(addEl
35a40 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
35a50 74 65 28 22 64 65 73 63 72 69 70 74 69 6f 6e 22  te("description"
35a60 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
35a70 20 20 20 20 20 20 20 20 64 65 73 63 72 69 70 74          descript
35a80 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ion, StringCompa
35a90 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d  rison.Ordinal)).
35aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
35ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ac0 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74  addElement.SetAt
35ad0 74 72 69 62 75 74 65 28 22 64 65 73 63 72 69 70  tribute("descrip
35ae0 74 69 6f 6e 22 2c 20 64 65 73 63 72 69 70 74 69  tion", descripti
35af0 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on);..          
35b00 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
35b10 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
35b20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
35b30 20 20 73 74 72 69 6e 67 20 66 75 6c 6c 54 79 70    string fullTyp
35b40 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46  eName = String.F
35b50 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31 7d 22  ormat("{0}, {1}"
35b60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35b70 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73 73     typeName, ass
35b80 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  emblyName);.... 
35b90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
35ba0 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64  String.Equals(ad
35bb0 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72  dElement.GetAttr
35bc0 69 62 75 74 65 28 22 74 79 70 65 22 29 2c 0d 0a  ibute("type"),..
35bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35be0 20 20 20 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65      fullTypeName
35bf0 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
35c00 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20  on.Ordinal))..  
35c10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35c20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
35c30 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69  Element.SetAttri
35c40 62 75 74 65 28 22 74 79 70 65 22 2c 20 66 75 6c  bute("type", ful
35c50 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a 20 20 20  lTypeName);..   
35c60 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
35c70 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
35c80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
35c90 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 72           if (dir
35ca0 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20  ty || whatIf).. 
35cb0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
35cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
35cd0 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
35ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35cf0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
35d00 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
35d10 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
35d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d30 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
35d40 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
35d50 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
35d60 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
35d70 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 64               "ad
35d80 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c  dElement = {0}",
35d90 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64 45   ForDisplay(addE
35da0 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20  lement)),..     
35db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35dc0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
35dd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
35de0 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
35df0 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
35e00 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
35e10 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b  .Save(fileName);
35e20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35e30 20 20 20 20 66 69 6c 65 73 4d 6f 64 69 66 69 65      filesModifie
35e40 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d++;....        
35e50 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20          saved = 
35e60 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
35e70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35e80 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
35e90 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
35ea0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
35eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35ed0 2f 2f 2f 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 0d 0a  //////////////..
35ef0 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f  ..        [Metho
35f00 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
35f10 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
35f20 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72  ng)]..        pr
35f30 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
35f40 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64  l RemoveDbProvid
35f50 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
35f60 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
35f70 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
35f80 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76        string inv
35f90 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20  ariantName,..   
35fa0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
35fb0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
35fc0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
35fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
35fe0 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20  f bool saved,.. 
35ff0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
36000 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
36010 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
36020 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36030 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20     bool dirty = 
36040 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
36050 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20      XmlDocument 
36060 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58  document = new X
36070 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d  mlDocument();...
36080 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
36090 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68  ument.PreserveWh
360a0 69 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b  itespace = true;
360b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f  ..            do
360c0 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65  cument.Load(file
360d0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
360e0 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74        XmlElement
360f0 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f   addElement = do
36100 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e  cument.SelectSin
36110 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20  gleNode(..      
36120 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
36130 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72  .Format(XPathFor
36140 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61  AddElement, inva
36150 72 69 61 6e 74 4e 61 6d 65 29 29 20 61 73 20 58  riantName)) as X
36160 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
36170 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64            if (ad
36180 64 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c  dElement != null
36190 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
361a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
361b0 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 50 61 72    addElement.Par
361c0 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68  entNode.RemoveCh
361d0 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b  ild(addElement);
361e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
361f0 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
36200 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
36210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
36220 6c 45 6c 65 6d 65 6e 74 20 72 65 6d 6f 76 65 45  lElement removeE
36230 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
36240 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f  t.SelectSingleNo
36250 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de(..           
36260 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
36270 61 74 28 58 50 61 74 68 46 6f 72 52 65 6d 6f 76  at(XPathForRemov
36280 65 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69  eElement, invari
36290 61 6e 74 4e 61 6d 65 29 29 20 61 73 20 58 6d 6c  antName)) as Xml
362a0 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20  Element;....    
362b0 20 20 20 20 20 20 20 20 69 66 20 28 72 65 6d 6f          if (remo
362c0 76 65 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c  veElement != nul
362d0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
362e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
362f0 20 20 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74     removeElement
36300 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f  .ParentNode.Remo
36310 76 65 43 68 69 6c 64 28 72 65 6d 6f 76 65 45 6c  veChild(removeEl
36320 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  ement);..       
36330 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
36340 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
36350 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
36360 20 20 20 20 20 69 66 20 28 64 69 72 74 79 20 7c       if (dirty |
36370 7c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  | whatIf)..     
36380 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36390 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
363a0 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
363b0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
363c0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
363d0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
363e0 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
363f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36400 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
36410 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
36420 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
36430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36440 20 20 20 20 20 20 20 20 20 22 61 64 64 45 6c 65           "addEle
36450 6d 65 6e 74 20 3d 20 7b 30 7d 2c 20 72 65 6d 6f  ment = {0}, remo
36460 76 65 45 6c 65 6d 65 6e 74 20 3d 20 7b 31 7d 22  veElement = {1}"
36470 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36480 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
36490 73 70 6c 61 79 28 61 64 64 45 6c 65 6d 65 6e 74  splay(addElement
364a0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65  ), ForDisplay(re
364b0 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a  moveElement)),..
364c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
364e0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
364f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
36500 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
36510 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63               doc
36520 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e  ument.Save(fileN
36530 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
36540 20 20 20 20 20 20 20 20 20 66 69 6c 65 73 4d 6f           filesMo
36550 64 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20  dified++;....   
36560 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76               sav
36570 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
36580 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
36590 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
365a0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
365b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
365c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
365d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
365e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
365f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36600 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
36610 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
36620 6f 6c 20 50 72 6f 63 65 73 73 44 62 50 72 6f 76  ol ProcessDbProv
36630 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
36640 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
36650 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
36660 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
36670 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20  nvariantName,.. 
36680 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
36690 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
366a0 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63       string desc
366b0 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  ription,..      
366c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
366d0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
366e0 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65      AssemblyName
366f0 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a   assemblyName,..
36700 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
36710 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
36720 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
36730 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
36740 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
36750 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
36760 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
36770 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
36780 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
36790 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
367a0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
367b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
367c0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
367d0 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73        ref bool s
367e0 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
367f0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
36800 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
36810 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
36820 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
36830 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
36840 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61   pair = clientDa
36850 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74  ta as AnyPair<st
36860 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a  ring, bool>;....
36870 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
36880 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  pair == null).. 
36890 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
368a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
368b0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66  ror = "invalid f
368c0 72 61 6d 65 77 6f 72 6b 20 63 6f 6e 66 69 67 20  ramework config 
368d0 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d  callback data";.
368e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
368f0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
36900 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
36910 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
36920 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20  (pair.Y)..      
36930 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
36940 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
36950 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72  RemoveDbProvider
36960 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  Factory(..      
36970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
36980 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e  leName, invarian
36990 74 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76  tName, whatIf, v
369a0 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65  erbose, ref save
369b0 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
369c0 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
369d0 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  r) &&..         
369e0 20 20 20 20 20 20 20 41 64 64 44 62 50 72 6f 76         AddDbProv
369f0 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
36a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a10 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
36a20 72 69 61 6e 74 4e 61 6d 65 2c 20 6e 61 6d 65 2c  riantName, name,
36a30 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79   description, ty
36a40 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
36a50 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
36a60 65 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49  emblyName, whatI
36a70 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
36a80 73 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72  saved, ref error
36a90 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
36aa0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
36ab0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
36ac0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36ad0 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
36ae0 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  eDbProviderFacto
36af0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
36b00 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
36b10 65 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65  e, invariantName
36b20 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
36b30 65 2c 20 72 65 66 20 73 61 76 65 64 2c 0d 0a 20  e, ref saved,.. 
36b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b50 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a     ref error);..
36b60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
36b70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
36b80 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
36b90 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
36be0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
36bf0 6f 6e 20 41 73 73 65 6d 62 6c 79 20 46 6f 6c 64  on Assembly Fold
36c00 65 72 73 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ers Handling..  
36c10 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
36c20 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41  atic string GetA
36c30 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65  ssemblyFoldersKe
36c40 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
36c50 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
36c60 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
36c70 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
36c80 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
36c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
36ca0 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
36cb0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
36cc0 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
36cd0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
36ce0 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20  wow64..         
36cf0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
36d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
36d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
36d20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 67 69 73  NOTE: This regis
36d30 74 72 79 20 6b 65 79 20 61 70 70 65 61 72 73 20  try key appears 
36d40 74 6f 20 61 6c 77 61 79 73 20 62 65 20 33 32 2d  to always be 32-
36d50 62 69 74 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20  bit only..      
36d60 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28        //       (
36d70 69 2e 65 2e 20 70 72 6f 62 61 62 6c 79 20 62 65  i.e. probably be
36d80 63 61 75 73 65 20 69 74 20 69 73 20 6f 6e 6c 79  cause it is only
36d90 20 75 73 65 64 20 62 79 20 56 69 73 75 61 6c 0d   used by Visual.
36da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
36db0 20 20 20 20 20 20 53 74 75 64 69 6f 2c 20 77 68        Studio, wh
36dc0 69 63 68 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ich is currently
36dd0 20 61 6c 77 61 79 73 20 33 32 2d 62 69 74 20 6f   always 32-bit o
36de0 6e 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  nly)...         
36df0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
36e00 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74     string format
36e10 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c   = !String.IsNul
36e20 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72  lOrEmpty(platfor
36e30 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20  mName) ?..      
36e40 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c            "{0}\\
36e50 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c  Microsoft\\{1}\\
36e60 76 7b 32 7d 5c 5c 7b 33 7d 5c 5c 41 73 73 65 6d  v{2}\\{3}\\Assem
36e70 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 20 3a 0d  blyFoldersEx" :.
36e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36e90 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74   "{0}\\Microsoft
36ea0 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 41 73 73  \\{1}\\v{2}\\Ass
36eb0 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 3b  emblyFoldersEx";
36ec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36ed0 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
36ee0 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47 65 74  rmat(format, Get
36ef0 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55  RootKeyName(perU
36f00 73 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20  ser, wow64),..  
36f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
36f20 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
36f30 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
36f40 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20  latformName);.. 
36f50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
36f60 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
36f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
36fb0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
36fc0 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 54 6f  tatic bool AddTo
36fd0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
36fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
36ff0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
37000 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
37010 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
37020 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
37030 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
37040 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
37050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
37060 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
37070 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
37080 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
37090 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
370a0 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
370b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
370c0 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
370d0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
370e0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
370f0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
37100 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
37110 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
37120 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
37130 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
37140 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
37150 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
37160 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
37170 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64   GetAssemblyFold
37180 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  ersKeyName(..   
37190 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
371a0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
371b0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
371c0 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55  atformName, perU
371d0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
371e0 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d        wow64);...
371f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
37200 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
37210 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
37220 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
37230 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
37240 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
37250 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72 75 65  y, keyName, true
37260 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
37270 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
37280 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
37290 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
372a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
372b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
372c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
372d0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
372e0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
372f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
37300 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
37310 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
37320 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
37330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
37340 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
37350 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
37360 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
37370 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
37380 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
37390 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
373a0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
373b0 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
373c0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
373d0 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  teSubKey(..     
373e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373f0 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61     key, subKeyNa
37400 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  me, whatIf, verb
37410 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
37420 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
37440 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
37450 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37460 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37480 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
37490 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
374a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374b0 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
374c0 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79   create registry
374d0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
374e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
374f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
37500 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d  y, subKeyName);.
37510 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37520 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
37530 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
37540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
37550 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37560 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
37570 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
37580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37590 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
375a0 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79   null, directory
375b0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
375c0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
375d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
375e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
375f0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
37600 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
37610 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
37650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
37660 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
37670 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52  te static bool R
37680 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c  emoveFromAssembl
37690 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
376a0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
376b0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
376c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
376d0 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
376e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
376f0 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
37700 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
37710 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
37720 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
37730 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
37740 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
37750 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
37760 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
37770 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
37780 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
37790 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
377a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
377b0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
377c0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
377d0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
377e0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
377f0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
37800 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
37810 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
37820 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
37830 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b  AssemblyFoldersK
37840 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
37850 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
37860 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
37870 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
37880 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c  rmName, perUser,
37890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
378a0 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20    wow64);....   
378b0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
378c0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
378d0 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
378e0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
378f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37900 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
37910 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68  eyName, true, wh
37920 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
37930 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
37940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37950 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
37960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37970 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
37980 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
37990 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
379a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
379b0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
379c0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
379d0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
379e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
379f0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
37a00 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
37a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37a20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
37a30 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
37a40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
37a50 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
37a60 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75  yHelper.DeleteSu
37a70 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
37a80 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
37a90 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f  subKeyName, thro
37aa0 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74  wOnMissing, what
37ab0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
37ac0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
37ad0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
37ae0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
37af0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
37b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
37b50 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
37b60 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 41 73 73   bool ProcessAss
37b70 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20  emblyFolders(.. 
37b80 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
37b90 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
37ba0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
37bb0 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
37bc0 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  kName,..        
37bd0 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
37be0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
37bf0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
37c00 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  g platformName,.
37c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
37c20 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ing directory,..
37c30 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
37c40 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
37c50 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
37c60 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
37c70 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
37c80 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
37c90 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
37ca0 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
37cb0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
37cc0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
37cd0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
37ce0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
37cf0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
37d00 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
37d10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  {..            A
37d20 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
37d30 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
37d40 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
37d50 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
37d60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37d70 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
37d80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
37d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37da0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
37db0 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63 61 6c  id framework cal
37dc0 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20  lback data";..  
37dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
37de0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
37df0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
37e00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
37e10 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20  ir.Y)..         
37e20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
37e30 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d        return Rem
37e40 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46  oveFromAssemblyF
37e50 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20  olders(..       
37e60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
37e70 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
37e80 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
37e90 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
37ea0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
37eb0 20 20 20 20 20 20 20 20 20 20 4c 65 67 61 63 79            Legacy
37ec0 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 65 72  ProjectName, per
37ed0 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 66 61 6c  User, wow64, fal
37ee0 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
37ef0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
37f00 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
37f10 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ror) &&..       
37f20 20 20 20 20 20 20 20 20 20 41 64 64 54 6f 41 73           AddToAs
37f30 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a  semblyFolders(..
37f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f50 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
37f60 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
37f70 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
37f80 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
37f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fa0 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 61   ProjectName, pa
37fb0 69 72 2e 58 2c 20 70 65 72 55 73 65 72 2c 20 77  ir.X, perUser, w
37fc0 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65  ow64, whatIf, ve
37fd0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
37fe0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
37ff0 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
38000 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
38010 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
38020 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
38030 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
38040 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62  RemoveFromAssemb
38050 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
38060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38070 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
38080 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
38090 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
380a0 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
380b0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
380c0 6a 65 63 74 4e 61 6d 65 2c 20 70 65 72 55 73 65  jectName, perUse
380d0 72 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f  r, wow64, throwO
380e0 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66  nMissing, whatIf
380f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
38100 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20         verbose, 
38110 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
38120 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
38130 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
38140 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
38150 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
38190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
381a0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
381b0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 48 61  Visual Studio Ha
381c0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
381d0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
381e0 74 72 69 6e 67 20 47 65 74 56 73 52 6f 6f 74 4b  tring GetVsRootK
381f0 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  eyName(..       
38200 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
38210 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
38220 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20  bool wow64..    
38230 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
38240 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
38250 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
38260 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63  Format("{0}\\Mic
38270 72 6f 73 6f 66 74 5c 5c 56 69 73 75 61 6c 53 74  rosoft\\VisualSt
38280 75 64 69 6f 22 2c 0d 0a 20 20 20 20 20 20 20 20  udio",..        
38290 20 20 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b          GetRootK
382a0 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20  eyName(perUser, 
382b0 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20  wow64));..      
382c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
382d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
382e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
382f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38310 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
38320 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
38330 20 73 74 72 69 6e 67 20 47 65 74 56 73 4b 65 79   string GetVsKey
38340 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
38350 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
38360 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
38370 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
38380 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
38390 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
383a0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
383b0 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
383c0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
383d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
383e0 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
383f0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
38400 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
38410 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
38420 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
38430 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
38440 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 7b 31 7d         "{0}\\{1}
38450 7b 32 7d 22 2c 20 47 65 74 56 73 52 6f 6f 74 4b  {2}", GetVsRootK
38460 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20  eyName(perUser, 
38470 77 6f 77 36 34 29 2c 20 76 73 56 65 72 73 69 6f  wow64), vsVersio
38480 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
38490 20 20 20 20 73 75 66 66 69 78 29 3b 0d 0a 20 20      suffix);..  
384a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
384b0 20 20 20 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 2f 2f  ////////////////
384d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
384e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
384f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
38500 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69        #region Vi
38510 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61  sual Studio Data
38520 20 53 6f 75 72 63 65 20 48 61 6e 64 6c 69 6e 67   Source Handling
38530 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
38540 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64  e static bool Ad
38550 64 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  dVsDataSource(..
38560 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
38570 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
38580 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
38590 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
385a0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
385b0 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
385c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
385d0 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
385e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
385f0 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
38600 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
38610 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
38620 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
38630 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
38640 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
38650 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
38660 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
38670 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
38680 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
38690 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
386a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
386b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
386c0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
386d0 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22  alid VS version"
386e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
386f0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
38700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
38710 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
38720 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
38730 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
38740 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
38750 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
38760 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22  alid VS package"
38770 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
38780 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
38790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
387a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
387b0 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
387c0 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
387d0 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
387e0 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b  perUser, wow64);
387f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
38800 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
38810 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
38820 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
38830 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
38840 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
38850 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
38860 61 6c 73 65 2c 20 77