private static string UrlDecodeInternal(byte[] bytes, int offset, int count, Encoding encoding)
        {
            if (!XmlaHttpUtility.ValidateUrlEncodingParameters(bytes, offset, count))
            {
                return(null);
            }
            XmlaHttpUtility.UrlDecoder urlDecoder = new XmlaHttpUtility.UrlDecoder(count, encoding);
            int i = 0;

            while (i < count)
            {
                int  num = offset + i;
                byte b   = bytes[num];
                if (b == 43)
                {
                    b = 32;
                    goto IL_E6;
                }
                if (b != 37 || i >= count - 2)
                {
                    goto IL_E6;
                }
                if (bytes[num + 1] == 117 && i < count - 5)
                {
                    int num2 = XmlaHttpUtility.HexToInt((char)bytes[num + 2]);
                    int num3 = XmlaHttpUtility.HexToInt((char)bytes[num + 3]);
                    int num4 = XmlaHttpUtility.HexToInt((char)bytes[num + 4]);
                    int num5 = XmlaHttpUtility.HexToInt((char)bytes[num + 5]);
                    if (num2 < 0 || num3 < 0 || num4 < 0 || num5 < 0)
                    {
                        goto IL_E6;
                    }
                    char ch = (char)(num2 << 12 | num3 << 8 | num4 << 4 | num5);
                    i += 5;
                    urlDecoder.AddChar(ch);
                }
                else
                {
                    int num6 = XmlaHttpUtility.HexToInt((char)bytes[num + 1]);
                    int num7 = XmlaHttpUtility.HexToInt((char)bytes[num + 2]);
                    if (num6 >= 0 && num7 >= 0)
                    {
                        b  = (byte)(num6 << 4 | num7);
                        i += 2;
                        goto IL_E6;
                    }
                    goto IL_E6;
                }
IL_ED:
                i++;
                continue;
IL_E6:
                urlDecoder.AddByte(b);
                goto IL_ED;
            }
            return(urlDecoder.GetString());
        }
        private static byte[] UrlEncode(byte[] bytes, int offset, int count)
        {
            if (!XmlaHttpUtility.ValidateUrlEncodingParameters(bytes, offset, count))
            {
                return(null);
            }
            int num  = 0;
            int num2 = 0;

            for (int i = 0; i < count; i++)
            {
                char c = (char)bytes[offset + i];
                if (c == ' ')
                {
                    num++;
                }
                else if (!XmlaHttpUtility.IsUrlSafeChar(c))
                {
                    num2++;
                }
            }
            if (num == 0 && num2 == 0)
            {
                return(bytes);
            }
            byte[] array = new byte[count + num2 * 2];
            int    num3  = 0;

            for (int j = 0; j < count; j++)
            {
                byte b  = bytes[offset + j];
                char c2 = (char)b;
                if (XmlaHttpUtility.IsUrlSafeChar(c2))
                {
                    array[num3++] = b;
                }
                else if (c2 == ' ')
                {
                    array[num3++] = 43;
                }
                else
                {
                    array[num3++] = 37;
                    array[num3++] = (byte)XmlaHttpUtility.IntToHex(b >> 4 & 15);
                    array[num3++] = (byte)XmlaHttpUtility.IntToHex((int)(b & 15));
                }
            }
            return(array);
        }
        private static byte[] UrlEncodeNonAscii(byte[] bytes, int offset, int count, bool alwaysCreateNewReturnValue)
        {
            if (!XmlaHttpUtility.ValidateUrlEncodingParameters(bytes, offset, count))
            {
                return(null);
            }
            int num = 0;

            for (int i = 0; i < count; i++)
            {
                if (XmlaHttpUtility.IsNonAsciiByte(bytes[offset + i]))
                {
                    num++;
                }
            }
            if (!alwaysCreateNewReturnValue && num == 0)
            {
                return(bytes);
            }
            byte[] array = new byte[count + num * 2];
            int    num2  = 0;

            for (int j = 0; j < count; j++)
            {
                byte b = bytes[offset + j];
                if (XmlaHttpUtility.IsNonAsciiByte(b))
                {
                    array[num2++] = 37;
                    array[num2++] = (byte)XmlaHttpUtility.IntToHex(b >> 4 & 15);
                    array[num2++] = (byte)XmlaHttpUtility.IntToHex((int)(b & 15));
                }
                else
                {
                    array[num2++] = b;
                }
            }
            return(array);
        }
        private static byte[] UrlDecodeInternal(byte[] bytes, int offset, int count)
        {
            if (!XmlaHttpUtility.ValidateUrlEncodingParameters(bytes, offset, count))
            {
                return(null);
            }
            int num = 0;

            byte[] array = new byte[count];
            for (int i = 0; i < count; i++)
            {
                int  num2 = offset + i;
                byte b    = bytes[num2];
                if (b == 43)
                {
                    b = 32;
                }
                else if (b == 37 && i < count - 2)
                {
                    int num3 = XmlaHttpUtility.HexToInt((char)bytes[num2 + 1]);
                    int num4 = XmlaHttpUtility.HexToInt((char)bytes[num2 + 2]);
                    if (num3 >= 0 && num4 >= 0)
                    {
                        b  = (byte)(num3 << 4 | num4);
                        i += 2;
                    }
                }
                array[num++] = b;
            }
            if (num < array.Length)
            {
                byte[] array2 = new byte[num];
                Array.Copy(array, array2, num);
                array = array2;
            }
            return(array);
        }