| 
					
				 | 
			
			
				@@ -1,691 +0,0 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-using System; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-using System.Collections; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-using System.Collections.Generic; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-using System.Text; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-namespace MediaBrowser.Model.Services 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public static class MyHttpUtility 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // Must be sorted 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        static readonly long[] entities = new long[] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'A' << 56 | (long)'E' << 48 | (long)'l' << 40 | (long)'i' << 32 | (long)'g' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'A' << 56 | (long)'a' << 48 | (long)'c' << 40 | (long)'u' << 32 | (long)'t' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'A' << 56 | (long)'c' << 48 | (long)'i' << 40 | (long)'r' << 32 | (long)'c' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'A' << 56 | (long)'g' << 48 | (long)'r' << 40 | (long)'a' << 32 | (long)'v' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'A' << 56 | (long)'l' << 48 | (long)'p' << 40 | (long)'h' << 32 | (long)'a' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'A' << 56 | (long)'r' << 48 | (long)'i' << 40 | (long)'n' << 32 | (long)'g' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'A' << 56 | (long)'t' << 48 | (long)'i' << 40 | (long)'l' << 32 | (long)'d' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'A' << 56 | (long)'u' << 48 | (long)'m' << 40 | (long)'l' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'B' << 56 | (long)'e' << 48 | (long)'t' << 40 | (long)'a' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'C' << 56 | (long)'c' << 48 | (long)'e' << 40 | (long)'d' << 32 | (long)'i' << 24 | (long)'l' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'C' << 56 | (long)'h' << 48 | (long)'i' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'D' << 56 | (long)'a' << 48 | (long)'g' << 40 | (long)'g' << 32 | (long)'e' << 24 | (long)'r' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'D' << 56 | (long)'e' << 48 | (long)'l' << 40 | (long)'t' << 32 | (long)'a' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'E' << 56 | (long)'T' << 48 | (long)'H' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'E' << 56 | (long)'a' << 48 | (long)'c' << 40 | (long)'u' << 32 | (long)'t' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'E' << 56 | (long)'c' << 48 | (long)'i' << 40 | (long)'r' << 32 | (long)'c' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'E' << 56 | (long)'g' << 48 | (long)'r' << 40 | (long)'a' << 32 | (long)'v' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'E' << 56 | (long)'p' << 48 | (long)'s' << 40 | (long)'i' << 32 | (long)'l' << 24 | (long)'o' << 16 | (long)'n' << 8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'E' << 56 | (long)'t' << 48 | (long)'a' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'E' << 56 | (long)'u' << 48 | (long)'m' << 40 | (long)'l' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'G' << 56 | (long)'a' << 48 | (long)'m' << 40 | (long)'m' << 32 | (long)'a' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'I' << 56 | (long)'a' << 48 | (long)'c' << 40 | (long)'u' << 32 | (long)'t' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'I' << 56 | (long)'c' << 48 | (long)'i' << 40 | (long)'r' << 32 | (long)'c' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'I' << 56 | (long)'g' << 48 | (long)'r' << 40 | (long)'a' << 32 | (long)'v' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'I' << 56 | (long)'o' << 48 | (long)'t' << 40 | (long)'a' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'I' << 56 | (long)'u' << 48 | (long)'m' << 40 | (long)'l' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'K' << 56 | (long)'a' << 48 | (long)'p' << 40 | (long)'p' << 32 | (long)'a' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'L' << 56 | (long)'a' << 48 | (long)'m' << 40 | (long)'b' << 32 | (long)'d' << 24 | (long)'a' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'M' << 56 | (long)'u' << 48, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'N' << 56 | (long)'t' << 48 | (long)'i' << 40 | (long)'l' << 32 | (long)'d' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'N' << 56 | (long)'u' << 48, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'O' << 56 | (long)'E' << 48 | (long)'l' << 40 | (long)'i' << 32 | (long)'g' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'O' << 56 | (long)'a' << 48 | (long)'c' << 40 | (long)'u' << 32 | (long)'t' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'O' << 56 | (long)'c' << 48 | (long)'i' << 40 | (long)'r' << 32 | (long)'c' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'O' << 56 | (long)'g' << 48 | (long)'r' << 40 | (long)'a' << 32 | (long)'v' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'O' << 56 | (long)'m' << 48 | (long)'e' << 40 | (long)'g' << 32 | (long)'a' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'O' << 56 | (long)'m' << 48 | (long)'i' << 40 | (long)'c' << 32 | (long)'r' << 24 | (long)'o' << 16 | (long)'n' << 8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'O' << 56 | (long)'s' << 48 | (long)'l' << 40 | (long)'a' << 32 | (long)'s' << 24 | (long)'h' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'O' << 56 | (long)'t' << 48 | (long)'i' << 40 | (long)'l' << 32 | (long)'d' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'O' << 56 | (long)'u' << 48 | (long)'m' << 40 | (long)'l' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'P' << 56 | (long)'h' << 48 | (long)'i' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'P' << 56 | (long)'i' << 48, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'P' << 56 | (long)'r' << 48 | (long)'i' << 40 | (long)'m' << 32 | (long)'e' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'P' << 56 | (long)'s' << 48 | (long)'i' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'R' << 56 | (long)'h' << 48 | (long)'o' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'S' << 56 | (long)'c' << 48 | (long)'a' << 40 | (long)'r' << 32 | (long)'o' << 24 | (long)'n' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'S' << 56 | (long)'i' << 48 | (long)'g' << 40 | (long)'m' << 32 | (long)'a' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'T' << 56 | (long)'H' << 48 | (long)'O' << 40 | (long)'R' << 32 | (long)'N' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'T' << 56 | (long)'a' << 48 | (long)'u' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'T' << 56 | (long)'h' << 48 | (long)'e' << 40 | (long)'t' << 32 | (long)'a' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'U' << 56 | (long)'a' << 48 | (long)'c' << 40 | (long)'u' << 32 | (long)'t' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'U' << 56 | (long)'c' << 48 | (long)'i' << 40 | (long)'r' << 32 | (long)'c' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'U' << 56 | (long)'g' << 48 | (long)'r' << 40 | (long)'a' << 32 | (long)'v' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'U' << 56 | (long)'p' << 48 | (long)'s' << 40 | (long)'i' << 32 | (long)'l' << 24 | (long)'o' << 16 | (long)'n' << 8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'U' << 56 | (long)'u' << 48 | (long)'m' << 40 | (long)'l' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'X' << 56 | (long)'i' << 48, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'Y' << 56 | (long)'a' << 48 | (long)'c' << 40 | (long)'u' << 32 | (long)'t' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'Y' << 56 | (long)'u' << 48 | (long)'m' << 40 | (long)'l' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'Z' << 56 | (long)'e' << 48 | (long)'t' << 40 | (long)'a' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'a' << 56 | (long)'a' << 48 | (long)'c' << 40 | (long)'u' << 32 | (long)'t' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'a' << 56 | (long)'c' << 48 | (long)'i' << 40 | (long)'r' << 32 | (long)'c' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'a' << 56 | (long)'c' << 48 | (long)'u' << 40 | (long)'t' << 32 | (long)'e' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'a' << 56 | (long)'e' << 48 | (long)'l' << 40 | (long)'i' << 32 | (long)'g' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'a' << 56 | (long)'g' << 48 | (long)'r' << 40 | (long)'a' << 32 | (long)'v' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'a' << 56 | (long)'l' << 48 | (long)'e' << 40 | (long)'f' << 32 | (long)'s' << 24 | (long)'y' << 16 | (long)'m' << 8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'a' << 56 | (long)'l' << 48 | (long)'p' << 40 | (long)'h' << 32 | (long)'a' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'a' << 56 | (long)'m' << 48 | (long)'p' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'a' << 56 | (long)'n' << 48 | (long)'d' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'a' << 56 | (long)'n' << 48 | (long)'g' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'a' << 56 | (long)'p' << 48 | (long)'o' << 40 | (long)'s' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'a' << 56 | (long)'r' << 48 | (long)'i' << 40 | (long)'n' << 32 | (long)'g' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'a' << 56 | (long)'s' << 48 | (long)'y' << 40 | (long)'m' << 32 | (long)'p' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'a' << 56 | (long)'t' << 48 | (long)'i' << 40 | (long)'l' << 32 | (long)'d' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'a' << 56 | (long)'u' << 48 | (long)'m' << 40 | (long)'l' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'b' << 56 | (long)'d' << 48 | (long)'q' << 40 | (long)'u' << 32 | (long)'o' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'b' << 56 | (long)'e' << 48 | (long)'t' << 40 | (long)'a' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'b' << 56 | (long)'r' << 48 | (long)'v' << 40 | (long)'b' << 32 | (long)'a' << 24 | (long)'r' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'b' << 56 | (long)'u' << 48 | (long)'l' << 40 | (long)'l' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'c' << 56 | (long)'a' << 48 | (long)'p' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'c' << 56 | (long)'c' << 48 | (long)'e' << 40 | (long)'d' << 32 | (long)'i' << 24 | (long)'l' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'c' << 56 | (long)'e' << 48 | (long)'d' << 40 | (long)'i' << 32 | (long)'l' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'c' << 56 | (long)'e' << 48 | (long)'n' << 40 | (long)'t' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'c' << 56 | (long)'h' << 48 | (long)'i' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'c' << 56 | (long)'i' << 48 | (long)'r' << 40 | (long)'c' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'c' << 56 | (long)'l' << 48 | (long)'u' << 40 | (long)'b' << 32 | (long)'s' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'c' << 56 | (long)'o' << 48 | (long)'n' << 40 | (long)'g' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'c' << 56 | (long)'o' << 48 | (long)'p' << 40 | (long)'y' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'c' << 56 | (long)'r' << 48 | (long)'a' << 40 | (long)'r' << 32 | (long)'r' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'c' << 56 | (long)'u' << 48 | (long)'p' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'c' << 56 | (long)'u' << 48 | (long)'r' << 40 | (long)'r' << 32 | (long)'e' << 24 | (long)'n' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'d' << 56 | (long)'A' << 48 | (long)'r' << 40 | (long)'r' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'d' << 56 | (long)'a' << 48 | (long)'g' << 40 | (long)'g' << 32 | (long)'e' << 24 | (long)'r' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'d' << 56 | (long)'a' << 48 | (long)'r' << 40 | (long)'r' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'d' << 56 | (long)'e' << 48 | (long)'g' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'d' << 56 | (long)'e' << 48 | (long)'l' << 40 | (long)'t' << 32 | (long)'a' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'d' << 56 | (long)'i' << 48 | (long)'a' << 40 | (long)'m' << 32 | (long)'s' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'d' << 56 | (long)'i' << 48 | (long)'v' << 40 | (long)'i' << 32 | (long)'d' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'e' << 56 | (long)'a' << 48 | (long)'c' << 40 | (long)'u' << 32 | (long)'t' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'e' << 56 | (long)'c' << 48 | (long)'i' << 40 | (long)'r' << 32 | (long)'c' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'e' << 56 | (long)'g' << 48 | (long)'r' << 40 | (long)'a' << 32 | (long)'v' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'e' << 56 | (long)'m' << 48 | (long)'p' << 40 | (long)'t' << 32 | (long)'y' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'e' << 56 | (long)'m' << 48 | (long)'s' << 40 | (long)'p' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'e' << 56 | (long)'n' << 48 | (long)'s' << 40 | (long)'p' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'e' << 56 | (long)'p' << 48 | (long)'s' << 40 | (long)'i' << 32 | (long)'l' << 24 | (long)'o' << 16 | (long)'n' << 8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'e' << 56 | (long)'q' << 48 | (long)'u' << 40 | (long)'i' << 32 | (long)'v' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'e' << 56 | (long)'t' << 48 | (long)'a' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'e' << 56 | (long)'t' << 48 | (long)'h' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'e' << 56 | (long)'u' << 48 | (long)'m' << 40 | (long)'l' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'e' << 56 | (long)'u' << 48 | (long)'r' << 40 | (long)'o' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'e' << 56 | (long)'x' << 48 | (long)'i' << 40 | (long)'s' << 32 | (long)'t' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'f' << 56 | (long)'n' << 48 | (long)'o' << 40 | (long)'f' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'f' << 56 | (long)'o' << 48 | (long)'r' << 40 | (long)'a' << 32 | (long)'l' << 24 | (long)'l' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'f' << 56 | (long)'r' << 48 | (long)'a' << 40 | (long)'c' << 32 | (long)'1' << 24 | (long)'2' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'f' << 56 | (long)'r' << 48 | (long)'a' << 40 | (long)'c' << 32 | (long)'1' << 24 | (long)'4' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'f' << 56 | (long)'r' << 48 | (long)'a' << 40 | (long)'c' << 32 | (long)'3' << 24 | (long)'4' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'f' << 56 | (long)'r' << 48 | (long)'a' << 40 | (long)'s' << 32 | (long)'l' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'g' << 56 | (long)'a' << 48 | (long)'m' << 40 | (long)'m' << 32 | (long)'a' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'g' << 56 | (long)'e' << 48, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'g' << 56 | (long)'t' << 48, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'h' << 56 | (long)'A' << 48 | (long)'r' << 40 | (long)'r' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'h' << 56 | (long)'a' << 48 | (long)'r' << 40 | (long)'r' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'h' << 56 | (long)'e' << 48 | (long)'a' << 40 | (long)'r' << 32 | (long)'t' << 24 | (long)'s' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'h' << 56 | (long)'e' << 48 | (long)'l' << 40 | (long)'l' << 32 | (long)'i' << 24 | (long)'p' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'i' << 56 | (long)'a' << 48 | (long)'c' << 40 | (long)'u' << 32 | (long)'t' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'i' << 56 | (long)'c' << 48 | (long)'i' << 40 | (long)'r' << 32 | (long)'c' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'i' << 56 | (long)'e' << 48 | (long)'x' << 40 | (long)'c' << 32 | (long)'l' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'i' << 56 | (long)'g' << 48 | (long)'r' << 40 | (long)'a' << 32 | (long)'v' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'i' << 56 | (long)'m' << 48 | (long)'a' << 40 | (long)'g' << 32 | (long)'e' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'i' << 56 | (long)'n' << 48 | (long)'f' << 40 | (long)'i' << 32 | (long)'n' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'i' << 56 | (long)'n' << 48 | (long)'t' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'i' << 56 | (long)'o' << 48 | (long)'t' << 40 | (long)'a' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'i' << 56 | (long)'q' << 48 | (long)'u' << 40 | (long)'e' << 32 | (long)'s' << 24 | (long)'t' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'i' << 56 | (long)'s' << 48 | (long)'i' << 40 | (long)'n' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'i' << 56 | (long)'u' << 48 | (long)'m' << 40 | (long)'l' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'k' << 56 | (long)'a' << 48 | (long)'p' << 40 | (long)'p' << 32 | (long)'a' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'l' << 56 | (long)'A' << 48 | (long)'r' << 40 | (long)'r' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'l' << 56 | (long)'a' << 48 | (long)'m' << 40 | (long)'b' << 32 | (long)'d' << 24 | (long)'a' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'l' << 56 | (long)'a' << 48 | (long)'n' << 40 | (long)'g' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'l' << 56 | (long)'a' << 48 | (long)'q' << 40 | (long)'u' << 32 | (long)'o' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'l' << 56 | (long)'a' << 48 | (long)'r' << 40 | (long)'r' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'l' << 56 | (long)'c' << 48 | (long)'e' << 40 | (long)'i' << 32 | (long)'l' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'l' << 56 | (long)'d' << 48 | (long)'q' << 40 | (long)'u' << 32 | (long)'o' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'l' << 56 | (long)'e' << 48, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'l' << 56 | (long)'f' << 48 | (long)'l' << 40 | (long)'o' << 32 | (long)'o' << 24 | (long)'r' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'l' << 56 | (long)'o' << 48 | (long)'w' << 40 | (long)'a' << 32 | (long)'s' << 24 | (long)'t' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'l' << 56 | (long)'o' << 48 | (long)'z' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'l' << 56 | (long)'r' << 48 | (long)'m' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'l' << 56 | (long)'s' << 48 | (long)'a' << 40 | (long)'q' << 32 | (long)'u' << 24 | (long)'o' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'l' << 56 | (long)'s' << 48 | (long)'q' << 40 | (long)'u' << 32 | (long)'o' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'l' << 56 | (long)'t' << 48, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'m' << 56 | (long)'a' << 48 | (long)'c' << 40 | (long)'r' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'m' << 56 | (long)'d' << 48 | (long)'a' << 40 | (long)'s' << 32 | (long)'h' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'m' << 56 | (long)'i' << 48 | (long)'c' << 40 | (long)'r' << 32 | (long)'o' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'m' << 56 | (long)'i' << 48 | (long)'d' << 40 | (long)'d' << 32 | (long)'o' << 24 | (long)'t' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'m' << 56 | (long)'i' << 48 | (long)'n' << 40 | (long)'u' << 32 | (long)'s' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'m' << 56 | (long)'u' << 48, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'n' << 56 | (long)'a' << 48 | (long)'b' << 40 | (long)'l' << 32 | (long)'a' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'n' << 56 | (long)'b' << 48 | (long)'s' << 40 | (long)'p' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'n' << 56 | (long)'d' << 48 | (long)'a' << 40 | (long)'s' << 32 | (long)'h' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'n' << 56 | (long)'e' << 48, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'n' << 56 | (long)'i' << 48, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'n' << 56 | (long)'o' << 48 | (long)'t' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'n' << 56 | (long)'o' << 48 | (long)'t' << 40 | (long)'i' << 32 | (long)'n' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'n' << 56 | (long)'s' << 48 | (long)'u' << 40 | (long)'b' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'n' << 56 | (long)'t' << 48 | (long)'i' << 40 | (long)'l' << 32 | (long)'d' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'n' << 56 | (long)'u' << 48, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'o' << 56 | (long)'a' << 48 | (long)'c' << 40 | (long)'u' << 32 | (long)'t' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'o' << 56 | (long)'c' << 48 | (long)'i' << 40 | (long)'r' << 32 | (long)'c' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'o' << 56 | (long)'e' << 48 | (long)'l' << 40 | (long)'i' << 32 | (long)'g' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'o' << 56 | (long)'g' << 48 | (long)'r' << 40 | (long)'a' << 32 | (long)'v' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'o' << 56 | (long)'l' << 48 | (long)'i' << 40 | (long)'n' << 32 | (long)'e' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'o' << 56 | (long)'m' << 48 | (long)'e' << 40 | (long)'g' << 32 | (long)'a' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'o' << 56 | (long)'m' << 48 | (long)'i' << 40 | (long)'c' << 32 | (long)'r' << 24 | (long)'o' << 16 | (long)'n' << 8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'o' << 56 | (long)'p' << 48 | (long)'l' << 40 | (long)'u' << 32 | (long)'s' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'o' << 56 | (long)'r' << 48, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'o' << 56 | (long)'r' << 48 | (long)'d' << 40 | (long)'f' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'o' << 56 | (long)'r' << 48 | (long)'d' << 40 | (long)'m' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'o' << 56 | (long)'s' << 48 | (long)'l' << 40 | (long)'a' << 32 | (long)'s' << 24 | (long)'h' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'o' << 56 | (long)'t' << 48 | (long)'i' << 40 | (long)'l' << 32 | (long)'d' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'o' << 56 | (long)'t' << 48 | (long)'i' << 40 | (long)'m' << 32 | (long)'e' << 24 | (long)'s' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'o' << 56 | (long)'u' << 48 | (long)'m' << 40 | (long)'l' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'p' << 56 | (long)'a' << 48 | (long)'r' << 40 | (long)'a' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'p' << 56 | (long)'a' << 48 | (long)'r' << 40 | (long)'t' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'p' << 56 | (long)'e' << 48 | (long)'r' << 40 | (long)'m' << 32 | (long)'i' << 24 | (long)'l' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'p' << 56 | (long)'e' << 48 | (long)'r' << 40 | (long)'p' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'p' << 56 | (long)'h' << 48 | (long)'i' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'p' << 56 | (long)'i' << 48, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'p' << 56 | (long)'i' << 48 | (long)'v' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'p' << 56 | (long)'l' << 48 | (long)'u' << 40 | (long)'s' << 32 | (long)'m' << 24 | (long)'n' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'p' << 56 | (long)'o' << 48 | (long)'u' << 40 | (long)'n' << 32 | (long)'d' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'p' << 56 | (long)'r' << 48 | (long)'i' << 40 | (long)'m' << 32 | (long)'e' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'p' << 56 | (long)'r' << 48 | (long)'o' << 40 | (long)'d' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'p' << 56 | (long)'r' << 48 | (long)'o' << 40 | (long)'p' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'p' << 56 | (long)'s' << 48 | (long)'i' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'q' << 56 | (long)'u' << 48 | (long)'o' << 40 | (long)'t' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'r' << 56 | (long)'A' << 48 | (long)'r' << 40 | (long)'r' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'r' << 56 | (long)'a' << 48 | (long)'d' << 40 | (long)'i' << 32 | (long)'c' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'r' << 56 | (long)'a' << 48 | (long)'n' << 40 | (long)'g' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'r' << 56 | (long)'a' << 48 | (long)'q' << 40 | (long)'u' << 32 | (long)'o' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'r' << 56 | (long)'a' << 48 | (long)'r' << 40 | (long)'r' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'r' << 56 | (long)'c' << 48 | (long)'e' << 40 | (long)'i' << 32 | (long)'l' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'r' << 56 | (long)'d' << 48 | (long)'q' << 40 | (long)'u' << 32 | (long)'o' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'r' << 56 | (long)'e' << 48 | (long)'a' << 40 | (long)'l' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'r' << 56 | (long)'e' << 48 | (long)'g' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'r' << 56 | (long)'f' << 48 | (long)'l' << 40 | (long)'o' << 32 | (long)'o' << 24 | (long)'r' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'r' << 56 | (long)'h' << 48 | (long)'o' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'r' << 56 | (long)'l' << 48 | (long)'m' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'r' << 56 | (long)'s' << 48 | (long)'a' << 40 | (long)'q' << 32 | (long)'u' << 24 | (long)'o' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'r' << 56 | (long)'s' << 48 | (long)'q' << 40 | (long)'u' << 32 | (long)'o' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'b' << 48 | (long)'q' << 40 | (long)'u' << 32 | (long)'o' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'c' << 48 | (long)'a' << 40 | (long)'r' << 32 | (long)'o' << 24 | (long)'n' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'d' << 48 | (long)'o' << 40 | (long)'t' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'e' << 48 | (long)'c' << 40 | (long)'t' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'h' << 48 | (long)'y' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'i' << 48 | (long)'g' << 40 | (long)'m' << 32 | (long)'a' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'i' << 48 | (long)'g' << 40 | (long)'m' << 32 | (long)'a' << 24 | (long)'f' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'i' << 48 | (long)'m' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'p' << 48 | (long)'a' << 40 | (long)'d' << 32 | (long)'e' << 24 | (long)'s' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'u' << 48 | (long)'b' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'u' << 48 | (long)'b' << 40 | (long)'e' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'u' << 48 | (long)'m' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'u' << 48 | (long)'p' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'u' << 48 | (long)'p' << 40 | (long)'1' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'u' << 48 | (long)'p' << 40 | (long)'2' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'u' << 48 | (long)'p' << 40 | (long)'3' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'u' << 48 | (long)'p' << 40 | (long)'e' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'s' << 56 | (long)'z' << 48 | (long)'l' << 40 | (long)'i' << 32 | (long)'g' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'t' << 56 | (long)'a' << 48 | (long)'u' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'t' << 56 | (long)'h' << 48 | (long)'e' << 40 | (long)'r' << 32 | (long)'e' << 24 | (long)'4' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'t' << 56 | (long)'h' << 48 | (long)'e' << 40 | (long)'t' << 32 | (long)'a' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'t' << 56 | (long)'h' << 48 | (long)'e' << 40 | (long)'t' << 32 | (long)'a' << 24 | (long)'s' << 16 | (long)'y' << 8 | (long)'m' << 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'t' << 56 | (long)'h' << 48 | (long)'i' << 40 | (long)'n' << 32 | (long)'s' << 24 | (long)'p' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'t' << 56 | (long)'h' << 48 | (long)'o' << 40 | (long)'r' << 32 | (long)'n' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'t' << 56 | (long)'i' << 48 | (long)'l' << 40 | (long)'d' << 32 | (long)'e' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'t' << 56 | (long)'i' << 48 | (long)'m' << 40 | (long)'e' << 32 | (long)'s' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'t' << 56 | (long)'r' << 48 | (long)'a' << 40 | (long)'d' << 32 | (long)'e' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'u' << 56 | (long)'A' << 48 | (long)'r' << 40 | (long)'r' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'u' << 56 | (long)'a' << 48 | (long)'c' << 40 | (long)'u' << 32 | (long)'t' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'u' << 56 | (long)'a' << 48 | (long)'r' << 40 | (long)'r' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'u' << 56 | (long)'c' << 48 | (long)'i' << 40 | (long)'r' << 32 | (long)'c' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'u' << 56 | (long)'g' << 48 | (long)'r' << 40 | (long)'a' << 32 | (long)'v' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'u' << 56 | (long)'m' << 48 | (long)'l' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'u' << 56 | (long)'p' << 48 | (long)'s' << 40 | (long)'i' << 32 | (long)'h' << 24, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'u' << 56 | (long)'p' << 48 | (long)'s' << 40 | (long)'i' << 32 | (long)'l' << 24 | (long)'o' << 16 | (long)'n' << 8, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'u' << 56 | (long)'u' << 48 | (long)'m' << 40 | (long)'l' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'w' << 56 | (long)'e' << 48 | (long)'i' << 40 | (long)'e' << 32 | (long)'r' << 24 | (long)'p' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'x' << 56 | (long)'i' << 48, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'y' << 56 | (long)'a' << 48 | (long)'c' << 40 | (long)'u' << 32 | (long)'t' << 24 | (long)'e' << 16, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'y' << 56 | (long)'e' << 48 | (long)'n' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'y' << 56 | (long)'u' << 48 | (long)'m' << 40 | (long)'l' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'z' << 56 | (long)'e' << 48 | (long)'t' << 40 | (long)'a' << 32, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'z' << 56 | (long)'w' << 48 | (long)'j' << 40, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            (long)'z' << 56 | (long)'w' << 48 | (long)'n' << 40 | (long)'j' << 32 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        static readonly char[] entities_values = new char[] { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u00C6', '\u00C1', '\u00C2', '\u00C0', '\u0391', '\u00C5', '\u00C3', '\u00C4', '\u0392', '\u00C7', '\u03A7', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u2021', '\u0394', '\u00D0', '\u00C9', '\u00CA', '\u00C8', '\u0395', '\u0397', '\u00CB', '\u0393', '\u00CD', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u00CE', '\u00CC', '\u0399', '\u00CF', '\u039A', '\u039B', '\u039C', '\u00D1', '\u039D', '\u0152', '\u00D3', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u00D4', '\u00D2', '\u03A9', '\u039F', '\u00D8', '\u00D5', '\u00D6', '\u03A6', '\u03A0', '\u2033', '\u03A8', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u03A1', '\u0160', '\u03A3', '\u00DE', '\u03A4', '\u0398', '\u00DA', '\u00DB', '\u00D9', '\u03A5', '\u00DC', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u039E', '\u00DD', '\u0178', '\u0396', '\u00E1', '\u00E2', '\u00B4', '\u00E6', '\u00E0', '\u2135', '\u03B1', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u0026', '\u2227', '\u2220', '\u0027', '\u00E5', '\u2248', '\u00E3', '\u00E4', '\u201E', '\u03B2', '\u00A6', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u2022', '\u2229', '\u00E7', '\u00B8', '\u00A2', '\u03C7', '\u02C6', '\u2663', '\u2245', '\u00A9', '\u21B5', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u222A', '\u00A4', '\u21D3', '\u2020', '\u2193', '\u00B0', '\u03B4', '\u2666', '\u00F7', '\u00E9', '\u00EA', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u00E8', '\u2205', '\u2003', '\u2002', '\u03B5', '\u2261', '\u03B7', '\u00F0', '\u00EB', '\u20AC', '\u2203', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u0192', '\u2200', '\u00BD', '\u00BC', '\u00BE', '\u2044', '\u03B3', '\u2265', '\u003E', '\u21D4', '\u2194', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u2665', '\u2026', '\u00ED', '\u00EE', '\u00A1', '\u00EC', '\u2111', '\u221E', '\u222B', '\u03B9', '\u00BF', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u2208', '\u00EF', '\u03BA', '\u21D0', '\u03BB', '\u2329', '\u00AB', '\u2190', '\u2308', '\u201C', '\u2264', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u230A', '\u2217', '\u25CA', '\u200E', '\u2039', '\u2018', '\u003C', '\u00AF', '\u2014', '\u00B5', '\u00B7', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u2212', '\u03BC', '\u2207', '\u00A0', '\u2013', '\u2260', '\u220B', '\u00AC', '\u2209', '\u2284', '\u00F1', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u03BD', '\u00F3', '\u00F4', '\u0153', '\u00F2', '\u203E', '\u03C9', '\u03BF', '\u2295', '\u2228', '\u00AA', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u00BA', '\u00F8', '\u00F5', '\u2297', '\u00F6', '\u00B6', '\u2202', '\u2030', '\u22A5', '\u03C6', '\u03C0', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u03D6', '\u00B1', '\u00A3', '\u2032', '\u220F', '\u221D', '\u03C8', '\u0022', '\u21D2', '\u221A', '\u232A', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u00BB', '\u2192', '\u2309', '\u201D', '\u211C', '\u00AE', '\u230B', '\u03C1', '\u200F', '\u203A', '\u2019', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u201A', '\u0161', '\u22C5', '\u00A7', '\u00AD', '\u03C3', '\u03C2', '\u223C', '\u2660', '\u2282', '\u2286', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u2211', '\u2283', '\u00B9', '\u00B2', '\u00B3', '\u2287', '\u00DF', '\u03C4', '\u2234', '\u03B8', '\u03D1', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u2009', '\u00FE', '\u02DC', '\u00D7', '\u2122', '\u21D1', '\u00FA', '\u2191', '\u00FB', '\u00F9', '\u00A8', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            '\u03D2', '\u03C5', '\u00FC', '\u2118', '\u03BE', '\u00FD', '\u00A5', '\u00FF', '\u03B6', '\u200D', '\u200C' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        #region Methods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        static void WriteCharBytes(IList buf, char ch, Encoding e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (ch > 255) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                foreach (byte b in e.GetBytes(new char[] { ch })) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    buf.Add(b); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                buf.Add((byte)ch); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        public static string UrlDecode(string s, Encoding e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (null == s) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (s.IndexOf('%') == -1 && s.IndexOf('+') == -1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return s; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (e == null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                e = Encoding.UTF8; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            long len = s.Length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var bytes = new List<byte>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int xchar; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            char ch; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (int i = 0; i < len; i++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ch = s[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (ch == '%' && i + 2 < len && s[i + 1] != '%') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (s[i + 1] == 'u' && i + 5 < len) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        // unicode hex sequence 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        xchar = GetChar(s, i + 2, 4); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (xchar != -1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            WriteCharBytes(bytes, (char)xchar, e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            i += 5; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            WriteCharBytes(bytes, '%', e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    else if ((xchar = GetChar(s, i + 1, 2)) != -1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        WriteCharBytes(bytes, (char)xchar, e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        i += 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        WriteCharBytes(bytes, '%', e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (ch == '+') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    WriteCharBytes(bytes, ' ', e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    WriteCharBytes(bytes, ch, e); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            byte[] buf = bytes.ToArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            bytes = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return e.GetString(buf, 0, buf.Length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        static int GetInt(byte b) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            char c = (char)b; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (c >= '0' && c <= '9') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return c - '0'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (c >= 'a' && c <= 'f') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return c - 'a' + 10; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (c >= 'A' && c <= 'F') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return c - 'A' + 10; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        static int GetChar(string str, int offset, int length) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int val = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int end = length + offset; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (int i = offset; i < end; i++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                char c = str[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (c > 127) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                int current = GetInt((byte)c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (current == -1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                val = (val << 4) + current; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return val; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        static bool TryConvertKeyToEntity(string key, out char value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var token = CalculateKeyValue(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (token == 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                value = '\0'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var idx = Array.BinarySearch(entities, token); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (idx < 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                value = '\0'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            value = entities_values[idx]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        static long CalculateKeyValue(string s) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (s.Length > 8) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            long key = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (int i = 0; i < s.Length; ++i) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                long ch = s[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (ch > 'z' || ch < '0') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                key |= ch << ((7 - i) * 8); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return key; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /// <summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /// Decodes an HTML-encoded string and returns the decoded string. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /// </summary> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /// <param name="s">The HTML string to decode. </param> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /// <returns>The decoded text.</returns> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        public static string HtmlDecode(string s) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (s == null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                throw new ArgumentNullException(nameof(s)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (s.IndexOf('&') == -1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return s; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var entity = new StringBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var output = new StringBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int len = s.Length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 0 -> nothing, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 1 -> right after '&' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 2 -> between '&' and ';' but no '#' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // 3 -> '#' found after '&' and getting numbers 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int state = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int number = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int digit_start = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            bool hex_number = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for (int i = 0; i < len; i++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                char c = s[i]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (state == 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (c == '&') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        entity.Append(c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        state = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        output.Append(c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (c == '&') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    state = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (digit_start > 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        entity.Append(s, digit_start, i - digit_start); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        digit_start = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    output.Append(entity.ToString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    entity.Length = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    entity.Append('&'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                switch (state) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case 1: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (c == ';') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            state = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            output.Append(entity.ToString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            output.Append(c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            entity.Length = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        number = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        hex_number = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (c != '#') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            state = 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            state = 3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        entity.Append(c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case 2: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        entity.Append(c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (c == ';') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            string key = entity.ToString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            state = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            entity.Length = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (key.Length > 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                var skey = key.Substring(1, key.Length - 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                if (TryConvertKeyToEntity(skey, out c)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    output.Append(c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            output.Append(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    case 3: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (c == ';') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (number < 0x10000) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                output.Append((char)number); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                output.Append((char)(0xd800 + ((number - 0x10000) >> 10))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                output.Append((char)(0xdc00 + ((number - 0x10000) & 0x3ff))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            state = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            entity.Length = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            digit_start = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (c == 'x' || c == 'X' && !hex_number) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            digit_start = i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            hex_number = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (char.IsDigit(c)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (digit_start == 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                digit_start = i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            number = number * (hex_number ? 16 : 10) + ((int)c - '0'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (hex_number) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (c >= 'a' && c <= 'f') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                number = number * 16 + 10 + ((int)c - 'a'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (c >= 'A' && c <= 'F') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                number = number * 16 + 10 + ((int)c - 'A'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        state = 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (digit_start > 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            entity.Append(s, digit_start, i - digit_start); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            digit_start = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        entity.Append(c); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (entity.Length > 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                output.Append(entity); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            else if (digit_start > 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                output.Append(s, digit_start, s.Length - digit_start); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return output.ToString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        public static QueryParamCollection ParseQueryString(string query) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return ParseQueryString(query, Encoding.UTF8); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        public static QueryParamCollection ParseQueryString(string query, Encoding encoding) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (query == null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                throw new ArgumentNullException(nameof(query)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (encoding == null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                throw new ArgumentNullException(nameof(encoding)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (query.Length == 0 || (query.Length == 1 && query[0] == '?')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return new QueryParamCollection(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (query[0] == '?') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                query = query.Substring(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var result = new QueryParamCollection(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ParseQueryString(query, encoding, result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        internal static void ParseQueryString(string query, Encoding encoding, QueryParamCollection result) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (query.Length == 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            string decoded = HtmlDecode(query); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int decodedLength = decoded.Length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            int namePos = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            bool first = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            while (namePos <= decodedLength) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                int valuePos = -1, valueEnd = -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                for (int q = namePos; q < decodedLength; q++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (valuePos == -1 && decoded[q] == '=') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        valuePos = q + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    else if (decoded[q] == '&') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        valueEnd = q; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (first) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    first = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (decoded[namePos] == '?') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        namePos++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                string name, value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (valuePos == -1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    name = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    valuePos = namePos; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    name = UrlDecode(decoded.Substring(namePos, valuePos - namePos - 1), encoding); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (valueEnd < 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    namePos = -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    valueEnd = decoded.Length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    namePos = valueEnd + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                value = UrlDecode(decoded.Substring(valuePos, valueEnd - valuePos), encoding); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                result.Add(name, value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (namePos == -1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        #endregion // Methods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 |