Decompiled source of DiscJockey v1.2.1

plugins/Lib/Concentus.dll

Decompiled 10 months ago
#define DEBUG
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Text;
using Concentus.Celt;
using Concentus.Celt.Structs;
using Concentus.Common;
using Concentus.Common.CPlusPlus;
using Concentus.Enums;
using Concentus.Silk;
using Concentus.Silk.Enums;
using Concentus.Silk.Structs;
using Concentus.Structs;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Logan Stromberg")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyCopyright("Copyright © Xiph.Org Foundation, Skype Limited, CSIRO, Microsoft Corp.")]
[assembly: AssemblyDescription("This package is a pure portable C# implementation of the Opus audio compression codec (see https://opus-codec.org/ for more details). This package contains the Opus encoder, decoder, multistream codecs, repacketizer, as well as a port of the libspeexdsp resampler. It does NOT contain code to parse .ogg or .opus container files or to manage RTP packet streams")]
[assembly: AssemblyFileVersion("1.1.6.0")]
[assembly: AssemblyInformationalVersion("1.1.6.0")]
[assembly: AssemblyProduct("Concentus")]
[assembly: AssemblyTitle("Concentus")]
[assembly: AssemblyVersion("1.1.6.0")]
namespace Concentus
{
	internal static class Analysis
	{
		private const double M_PI = 3.141592653;

		private const float cA = 0.43157974f;

		private const float cB = 0.678484f;

		private const float cC = 0.08595542f;

		private const float cE = MathF.PI / 2f;

		private const int NB_TONAL_SKIP_BANDS = 9;

		internal static float fast_atan2f(float y, float x)
		{
			if (Inlines.ABS16(x) + Inlines.ABS16(y) < 1E-09f)
			{
				x *= 1E+12f;
				y *= 1E+12f;
			}
			float num = x * x;
			float num2 = y * y;
			if (num < num2)
			{
				float num3 = (num2 + 0.678484f * num) * (num2 + 0.08595542f * num);
				if (num3 != 0f)
				{
					return (0f - x) * y * (num2 + 0.43157974f * num) / num3 + ((y < 0f) ? (-MathF.PI / 2f) : (MathF.PI / 2f));
				}
				return (y < 0f) ? (-MathF.PI / 2f) : (MathF.PI / 2f);
			}
			float num4 = (num + 0.678484f * num2) * (num + 0.08595542f * num2);
			if (num4 != 0f)
			{
				return x * y * (num + 0.43157974f * num2) / num4 + ((y < 0f) ? (-MathF.PI / 2f) : (MathF.PI / 2f)) - ((x * y < 0f) ? (-MathF.PI / 2f) : (MathF.PI / 2f));
			}
			return ((y < 0f) ? (-MathF.PI / 2f) : (MathF.PI / 2f)) - ((x * y < 0f) ? (-MathF.PI / 2f) : (MathF.PI / 2f));
		}

		internal static void tonality_analysis_init(TonalityAnalysisState tonal)
		{
			tonal.Reset();
		}

		internal static void tonality_get_info(TonalityAnalysisState tonal, AnalysisInfo info_out, int len)
		{
			int num = tonal.read_pos;
			int num2 = tonal.write_pos - tonal.read_pos;
			if (num2 < 0)
			{
				num2 += 200;
			}
			if (len > 480 && num != tonal.write_pos)
			{
				num++;
				if (num == 200)
				{
					num = 0;
				}
			}
			if (num == tonal.write_pos)
			{
				num--;
			}
			if (num < 0)
			{
				num = 199;
			}
			info_out.Assign(tonal.info[num]);
			tonal.read_subframe += len / 120;
			while (tonal.read_subframe >= 4)
			{
				tonal.read_subframe -= 4;
				tonal.read_pos++;
			}
			if (tonal.read_pos >= 200)
			{
				tonal.read_pos -= 200;
			}
			num2 = Inlines.IMAX(num2 - 10, 0);
			float num3 = 0f;
			int i;
			for (i = 0; i < 200 - num2; i++)
			{
				num3 += tonal.pmusic[i];
			}
			for (; i < 200; i++)
			{
				num3 += tonal.pspeech[i];
			}
			num3 = num3 * tonal.music_confidence + (1f - num3) * tonal.speech_confidence;
			info_out.music_prob = num3;
		}

		internal static void tonality_analysis<T>(TonalityAnalysisState tonal, CeltMode celt_mode, T[] x, int x_ptr, int len, int offset, int c1, int c2, int C, int lsb_depth, Downmix.downmix_func<T> downmix)
		{
			int num = 480;
			int num2 = 240;
			float[] angle = tonal.angle;
			float[] d_angle = tonal.d_angle;
			float[] d2_angle = tonal.d2_angle;
			float[] array = new float[18];
			float[] array2 = new float[18];
			float[] array3 = new float[8];
			float[] array4 = new float[25];
			float num3 = 97.40909f;
			float num4 = 0f;
			float[] array5 = new float[2];
			int num5 = 0;
			float num6 = 0f;
			tonal.last_transition++;
			float num7 = 1f / (float)Inlines.IMIN(20, 1 + tonal.count);
			float num8 = 1f / (float)Inlines.IMIN(50, 1 + tonal.count);
			float num9 = 1f / (float)Inlines.IMIN(1000, 1 + tonal.count);
			if (tonal.count < 4)
			{
				tonal.music_prob = 0.5f;
			}
			FFTState st = celt_mode.mdct.kfft[0];
			if (tonal.count == 0)
			{
				tonal.mem_fill = 240;
			}
			downmix(x, x_ptr, tonal.inmem, tonal.mem_fill, Inlines.IMIN(len, 720 - tonal.mem_fill), offset, c1, c2, C);
			if (tonal.mem_fill + len < 720)
			{
				tonal.mem_fill += len;
				return;
			}
			AnalysisInfo analysisInfo = tonal.info[tonal.write_pos++];
			if (tonal.write_pos >= 200)
			{
				tonal.write_pos -= 200;
			}
			int[] array6 = new int[960];
			int[] array7 = new int[960];
			float[] array8 = new float[240];
			float[] array9 = new float[240];
			for (int i = 0; i < num2; i++)
			{
				float num10 = Tables.analysis_window[i];
				array6[2 * i] = (int)(num10 * (float)tonal.inmem[i]);
				array6[2 * i + 1] = (int)(num10 * (float)tonal.inmem[num2 + i]);
				array6[2 * (num - i - 1)] = (int)(num10 * (float)tonal.inmem[num - i - 1]);
				array6[2 * (num - i - 1) + 1] = (int)(num10 * (float)tonal.inmem[num + num2 - i - 1]);
			}
			Arrays.MemMoveInt(tonal.inmem, 480, 0, 240);
			int num11 = len - (720 - tonal.mem_fill);
			downmix(x, x_ptr, tonal.inmem, 240, num11, offset + 720 - tonal.mem_fill, c1, c2, C);
			tonal.mem_fill = 240 + num11;
			KissFFT.opus_fft(st, array6, array7);
			for (int i = 1; i < num2; i++)
			{
				float x2 = (float)array7[2 * i] + (float)array7[2 * (num - i)];
				float y = (float)array7[2 * i + 1] - (float)array7[2 * (num - i) + 1];
				float x3 = (float)array7[2 * i + 1] + (float)array7[2 * (num - i) + 1];
				float y2 = (float)array7[2 * (num - i)] - (float)array7[2 * i];
				float num12 = 1f / (2f * MathF.PI) * fast_atan2f(y, x2);
				float num13 = num12 - angle[i];
				float num14 = num13 - d_angle[i];
				float num15 = 1f / (2f * MathF.PI) * fast_atan2f(y2, x3);
				float num16 = num15 - num12;
				float num17 = num16 - num13;
				float num18 = num14 - (float)Math.Floor(0.5f + num14);
				array9[i] = Inlines.ABS16(num18);
				num18 *= num18;
				num18 *= num18;
				float num19 = num17 - (float)Math.Floor(0.5f + num17);
				array9[i] += Inlines.ABS16(num19);
				num19 *= num19;
				num19 *= num19;
				float num20 = 0.25f * (d2_angle[i] + 2f * num18 + num19);
				array8[i] = 1f / (1f + 640f * num3 * num20) - 0.015f;
				angle[i] = num15;
				d_angle[i] = num16;
				d2_angle[i] = num19;
			}
			float num21 = 0f;
			float num22 = 0f;
			analysisInfo.activity = 0f;
			float num23 = 0f;
			float num24 = 0f;
			if (tonal.count == 0)
			{
				for (int j = 0; j < 18; j++)
				{
					tonal.lowE[j] = 1E+10f;
					tonal.highE[j] = -1E+10f;
				}
			}
			float num25 = 0f;
			float num26 = 0f;
			for (int j = 0; j < 18; j++)
			{
				float num27 = 0f;
				float num28 = 0f;
				float num29 = 0f;
				for (int i = Tables.tbands[j]; i < Tables.tbands[j + 1]; i++)
				{
					float num30 = (float)array7[2 * i] * (float)array7[2 * i] + (float)array7[2 * (num - i)] * (float)array7[2 * (num - i)] + (float)array7[2 * i + 1] * (float)array7[2 * i + 1] + (float)array7[2 * (num - i) + 1] * (float)array7[2 * (num - i) + 1];
					num30 *= 5.55E-17f;
					num27 += num30;
					num28 += num30 * array8[i];
					num29 += num30 * 2f * (0.5f - array9[i]);
				}
				tonal.E[tonal.E_count][j] = num27;
				num23 += num29 / (1E-15f + num27);
				num26 += (float)Math.Sqrt(num27 + 1E-10f);
				array2[j] = (float)Math.Log(num27 + 1E-10f);
				tonal.lowE[j] = Inlines.MIN32(array2[j], tonal.lowE[j] + 0.01f);
				tonal.highE[j] = Inlines.MAX32(array2[j], tonal.highE[j] - 0.1f);
				if (tonal.highE[j] < tonal.lowE[j] + 1f)
				{
					tonal.highE[j] += 0.5f;
					tonal.lowE[j] -= 0.5f;
				}
				num25 += (array2[j] - tonal.lowE[j]) / (1E-15f + tonal.highE[j] - tonal.lowE[j]);
				float num31;
				float num32 = (num31 = 0f);
				for (int i = 0; i < 8; i++)
				{
					num32 += (float)Math.Sqrt(tonal.E[i][j]);
					num31 += tonal.E[i][j];
				}
				float num33 = Inlines.MIN16(0.99f, num32 / (float)Math.Sqrt(1E-15 + (double)(8f * num31)));
				num33 *= num33;
				num33 *= num33;
				num24 += num33;
				array[j] = Inlines.MAX16(num28 / (1E-15f + num27), num33 * tonal.prev_band_tonality[j]);
				num21 += array[j];
				if (j >= 9)
				{
					num21 -= array[j - 18 + 9];
				}
				num22 = Inlines.MAX16(num22, (1f + 0.03f * (float)(j - 18)) * num21);
				num4 += array[j] * (float)(j - 8);
				tonal.prev_band_tonality[j] = array[j];
			}
			float num34 = 0f;
			num5 = 0;
			num6 = 0f;
			float num35 = 0.00057f / (float)(1 << Inlines.IMAX(0, lsb_depth - 8));
			num35 *= 134217730f;
			num35 *= num35;
			for (int j = 0; j < 21; j++)
			{
				float num36 = 0f;
				int num37 = Tables.extra_bands[j];
				int num38 = Tables.extra_bands[j + 1];
				for (int i = num37; i < num38; i++)
				{
					float num39 = (float)array7[2 * i] * (float)array7[2 * i] + (float)array7[2 * (num - i)] * (float)array7[2 * (num - i)] + (float)array7[2 * i + 1] * (float)array7[2 * i + 1] + (float)array7[2 * (num - i) + 1] * (float)array7[2 * (num - i) + 1];
					num36 += num39;
				}
				num6 = Inlines.MAX32(num6, num36);
				tonal.meanE[j] = Inlines.MAX32((1f - num9) * tonal.meanE[j], num36);
				num36 = Inlines.MAX32(num36, tonal.meanE[j]);
				num34 = Inlines.MAX32(0.05f * num34, num36);
				if ((double)num36 > 0.1 * (double)num34 && num36 * 1E+09f > num6 && num36 > num35 * (float)(num38 - num37))
				{
					num5 = j;
				}
			}
			if (tonal.count <= 2)
			{
				num5 = 20;
			}
			num26 = 20f * (float)Math.Log10(num26);
			tonal.Etracker = Inlines.MAX32(tonal.Etracker - 0.03f, num26);
			tonal.lowECount *= 1f - num8;
			if (num26 < tonal.Etracker - 30f)
			{
				tonal.lowECount += num8;
			}
			for (int i = 0; i < 8; i++)
			{
				float num40 = 0f;
				for (int j = 0; j < 16; j++)
				{
					num40 += Tables.dct_table[i * 16 + j] * array2[j];
				}
				array3[i] = num40;
			}
			num24 /= 18f;
			num25 /= 18f;
			if (tonal.count < 10)
			{
				num25 = 0.5f;
			}
			num23 /= 18f;
			analysisInfo.activity = num23 + (1f - num23) * num25;
			num21 = num22 / 9f;
			num21 = (tonal.prev_tonality = Inlines.MAX16(num21, tonal.prev_tonality * 0.8f));
			num4 /= 64f;
			analysisInfo.tonality_slope = num4;
			tonal.E_count = (tonal.E_count + 1) % 8;
			tonal.count++;
			analysisInfo.tonality = num21;
			for (int i = 0; i < 4; i++)
			{
				array4[i] = -0.12299f * (array3[i] + tonal.mem[i + 24]) + 0.49195f * (tonal.mem[i] + tonal.mem[i + 16]) + 0.69693f * tonal.mem[i + 8] - 1.4349f * tonal.cmean[i];
			}
			for (int i = 0; i < 4; i++)
			{
				tonal.cmean[i] = (1f - num7) * tonal.cmean[i] + num7 * array3[i];
			}
			for (int i = 0; i < 4; i++)
			{
				array4[4 + i] = 0.63246f * (array3[i] - tonal.mem[i + 24]) + 0.31623f * (tonal.mem[i] - tonal.mem[i + 16]);
			}
			for (int i = 0; i < 3; i++)
			{
				array4[8 + i] = 0.53452f * (array3[i] + tonal.mem[i + 24]) - 0.26726f * (tonal.mem[i] + tonal.mem[i + 16]) - 0.53452f * tonal.mem[i + 8];
			}
			if (tonal.count > 5)
			{
				for (int i = 0; i < 9; i++)
				{
					tonal.std[i] = (1f - num7) * tonal.std[i] + num7 * array4[i] * array4[i];
				}
			}
			for (int i = 0; i < 8; i++)
			{
				tonal.mem[i + 24] = tonal.mem[i + 16];
				tonal.mem[i + 16] = tonal.mem[i + 8];
				tonal.mem[i + 8] = tonal.mem[i];
				tonal.mem[i] = array3[i];
			}
			for (int i = 0; i < 9; i++)
			{
				array4[11 + i] = (float)Math.Sqrt(tonal.std[i]);
			}
			array4[20] = analysisInfo.tonality;
			array4[21] = analysisInfo.activity;
			array4[22] = num24;
			array4[23] = analysisInfo.tonality_slope;
			array4[24] = tonal.lowECount;
			mlp.mlp_process(Tables.net, array4, array5);
			array5[0] = 0.5f * (array5[0] + 1f);
			array5[0] = 0.01f + 1.21f * array5[0] * array5[0] - 0.23f * (float)Math.Pow(array5[0], 10.0);
			array5[1] = 0.5f * array5[1] + 0.5f;
			array5[0] = array5[1] * array5[0] + (1f - array5[1]) * 0.5f;
			float num41 = 5E-05f * array5[1];
			float num42 = 0.05f;
			float num43 = Inlines.MAX16(0.05f, Inlines.MIN16(0.95f, array5[0]));
			float num44 = Inlines.MAX16(0.05f, Inlines.MIN16(0.95f, tonal.music_prob));
			num42 = 0.01f + 0.05f * Inlines.ABS16(num43 - num44) / (num43 * (1f - num44) + num44 * (1f - num43));
			float num45 = (1f - tonal.music_prob) * (1f - num41) + tonal.music_prob * num41;
			float num46 = tonal.music_prob * (1f - num41) + (1f - tonal.music_prob) * num41;
			num45 *= (float)Math.Pow(1f - array5[0], num42);
			num46 *= (float)Math.Pow(array5[0], num42);
			tonal.music_prob = num46 / (num45 + num46);
			analysisInfo.music_prob = tonal.music_prob;
			float num47 = 1E-20f;
			float num48 = (float)Math.Pow(1f - array5[0], num42);
			float num49 = (float)Math.Pow(array5[0], num42);
			if (tonal.count == 1)
			{
				tonal.pspeech[0] = 0.5f;
				tonal.pmusic[0] = 0.5f;
			}
			float num50 = tonal.pspeech[0] + tonal.pspeech[1];
			float num51 = tonal.pmusic[0] + tonal.pmusic[1];
			tonal.pspeech[0] = num50 * (1f - num41) * num48;
			tonal.pmusic[0] = num51 * (1f - num41) * num49;
			for (int i = 1; i < 199; i++)
			{
				tonal.pspeech[i] = tonal.pspeech[i + 1] * num48;
				tonal.pmusic[i] = tonal.pmusic[i + 1] * num49;
			}
			tonal.pspeech[199] = num51 * num41 * num48;
			tonal.pmusic[199] = num50 * num41 * num49;
			for (int i = 0; i < 200; i++)
			{
				num47 += tonal.pspeech[i] + tonal.pmusic[i];
			}
			num47 = 1f / num47;
			for (int i = 0; i < 200; i++)
			{
				tonal.pspeech[i] *= num47;
				tonal.pmusic[i] *= num47;
			}
			num47 = tonal.pmusic[0];
			for (int i = 1; i < 200; i++)
			{
				num47 += tonal.pspeech[i];
			}
			if ((double)array5[1] > 0.75)
			{
				if ((double)tonal.music_prob > 0.9)
				{
					float num52 = 1f / (float)(++tonal.music_confidence_count);
					tonal.music_confidence_count = Inlines.IMIN(tonal.music_confidence_count, 500);
					tonal.music_confidence += num52 * Inlines.MAX16(-0.2f, array5[0] - tonal.music_confidence);
				}
				if ((double)tonal.music_prob < 0.1)
				{
					float num53 = 1f / (float)(++tonal.speech_confidence_count);
					tonal.speech_confidence_count = Inlines.IMIN(tonal.speech_confidence_count, 500);
					tonal.speech_confidence += num53 * Inlines.MIN16(0.2f, array5[0] - tonal.speech_confidence);
				}
			}
			else
			{
				if (tonal.music_confidence_count == 0)
				{
					tonal.music_confidence = 0.9f;
				}
				if (tonal.speech_confidence_count == 0)
				{
					tonal.speech_confidence = 0.1f;
				}
			}
			if (tonal.last_music != ((tonal.music_prob > 0.5f) ? 1 : 0))
			{
				tonal.last_transition = 0;
			}
			tonal.last_music = ((tonal.music_prob > 0.5f) ? 1 : 0);
			analysisInfo.bandwidth = num5;
			analysisInfo.noisiness = num23;
			analysisInfo.valid = 1;
		}

		internal static void run_analysis<T>(TonalityAnalysisState analysis, CeltMode celt_mode, T[] analysis_pcm, int analysis_pcm_ptr, int analysis_frame_size, int frame_size, int c1, int c2, int C, int Fs, int lsb_depth, Downmix.downmix_func<T> downmix, AnalysisInfo analysis_info)
		{
			if (analysis_pcm != null)
			{
				analysis_frame_size = Inlines.IMIN(195 * Fs / 100, analysis_frame_size);
				int num = analysis_frame_size - analysis.analysis_offset;
				int num2 = analysis.analysis_offset;
				do
				{
					tonality_analysis(analysis, celt_mode, analysis_pcm, analysis_pcm_ptr, Inlines.IMIN(480, num), num2, c1, c2, C, lsb_depth, downmix);
					num2 += 480;
					num -= 480;
				}
				while (num > 0);
				analysis.analysis_offset = analysis_frame_size;
				analysis.analysis_offset -= frame_size;
			}
			analysis_info.valid = 0;
			tonality_get_info(analysis, analysis_info, frame_size);
		}
	}
	public static class CodecHelpers
	{
		private const int MAX_DYNAMIC_FRAMESIZE = 24;

		internal static byte gen_toc(OpusMode mode, int framerate, OpusBandwidth bandwidth, int channels)
		{
			int num = 0;
			while (framerate < 400)
			{
				framerate <<= 1;
				num++;
			}
			byte b;
			switch (mode)
			{
			case OpusMode.MODE_SILK_ONLY:
				b = (byte)((int)(bandwidth - 1101) << 5);
				b |= (byte)(num - 2 << 3);
				break;
			case OpusMode.MODE_CELT_ONLY:
			{
				int num2 = (int)(bandwidth - 1102);
				if (num2 < 0)
				{
					num2 = 0;
				}
				b = 128;
				b |= (byte)(num2 << 5);
				b |= (byte)(num << 3);
				break;
			}
			default:
				b = 96;
				b |= (byte)((int)(bandwidth - 1104) << 4);
				b |= (byte)(num - 2 << 3);
				break;
			}
			return (byte)(b | (byte)(((channels == 2) ? 1u : 0u) << 2));
		}

		internal static void hp_cutoff(short[] input, int input_ptr, int cutoff_Hz, short[] output, int output_ptr, int[] hp_mem, int len, int channels, int Fs)
		{
			int[] array = new int[3];
			int[] array2 = new int[2];
			Inlines.OpusAssert(cutoff_Hz <= 869074);
			int num = Inlines.silk_DIV32_16(Inlines.silk_SMULBB(2471, cutoff_Hz), Fs / 1000);
			Inlines.OpusAssert(num > 0 && num < 32768);
			int num2 = (array[0] = 268435456 - Inlines.silk_MUL(471, num));
			array[1] = Inlines.silk_LSHIFT(-num2, 1);
			array[2] = num2;
			int num3 = Inlines.silk_RSHIFT(num2, 6);
			array2[0] = Inlines.silk_SMULWW(num3, Inlines.silk_SMULWW(num, num) - 8388608);
			array2[1] = Inlines.silk_SMULWW(num3, num3);
			Filters.silk_biquad_alt(input, input_ptr, array, array2, hp_mem, 0, output, output_ptr, len, channels);
			if (channels == 2)
			{
				Filters.silk_biquad_alt(input, input_ptr + 1, array, array2, hp_mem, 2, output, output_ptr + 1, len, channels);
			}
		}

		internal static void dc_reject(short[] input, int input_ptr, int cutoff_Hz, short[] output, int output_ptr, int[] hp_mem, int len, int channels, int Fs)
		{
			int shift = Inlines.celt_ilog2(Fs / (cutoff_Hz * 3));
			for (int i = 0; i < channels; i++)
			{
				for (int j = 0; j < len; j++)
				{
					int num = Inlines.SHL32(Inlines.EXTEND32(input[channels * j + i + input_ptr]), 15);
					int num2 = num - hp_mem[2 * i];
					hp_mem[2 * i] += Inlines.PSHR32(num - hp_mem[2 * i], shift);
					int a = num2 - hp_mem[2 * i + 1];
					hp_mem[2 * i + 1] += Inlines.PSHR32(num2 - hp_mem[2 * i + 1], shift);
					output[channels * j + i + output_ptr] = Inlines.EXTRACT16(Inlines.SATURATE(Inlines.PSHR32(a, 15), 32767));
				}
			}
		}

		internal static void stereo_fade(short[] pcm_buf, int g1, int g2, int overlap48, int frame_size, int channels, int[] window, int Fs)
		{
			int num = 48000 / Fs;
			int num2 = overlap48 / num;
			g1 = 32767 - g1;
			g2 = 32767 - g2;
			int i;
			for (i = 0; i < num2; i++)
			{
				int num3 = Inlines.MULT16_16_Q15(window[i * num], window[i * num]);
				int a = Inlines.SHR32(Inlines.MAC16_16(Inlines.MULT16_16(num3, g2), 32767 - num3, g1), 15);
				int b = Inlines.EXTRACT16(Inlines.HALF32(pcm_buf[i * channels] - pcm_buf[i * channels + 1]));
				b = Inlines.MULT16_16_Q15(a, b);
				pcm_buf[i * channels] = (short)(pcm_buf[i * channels] - b);
				pcm_buf[i * channels + 1] = (short)(pcm_buf[i * channels + 1] + b);
			}
			for (; i < frame_size; i++)
			{
				int b2 = Inlines.EXTRACT16(Inlines.HALF32(pcm_buf[i * channels] - pcm_buf[i * channels + 1]));
				b2 = Inlines.MULT16_16_Q15(g2, b2);
				pcm_buf[i * channels] = (short)(pcm_buf[i * channels] - b2);
				pcm_buf[i * channels + 1] = (short)(pcm_buf[i * channels + 1] + b2);
			}
		}

		internal static void gain_fade(short[] buffer, int buf_ptr, int g1, int g2, int overlap48, int frame_size, int channels, int[] window, int Fs)
		{
			int num = 48000 / Fs;
			int num2 = overlap48 / num;
			if (channels == 1)
			{
				for (int i = 0; i < num2; i++)
				{
					int num3 = Inlines.MULT16_16_Q15(window[i * num], window[i * num]);
					int a = Inlines.SHR32(Inlines.MAC16_16(Inlines.MULT16_16(num3, g2), 32767 - num3, g1), 15);
					buffer[buf_ptr + i] = (short)Inlines.MULT16_16_Q15(a, buffer[buf_ptr + i]);
				}
			}
			else
			{
				for (int i = 0; i < num2; i++)
				{
					int num4 = Inlines.MULT16_16_Q15(window[i * num], window[i * num]);
					int a2 = Inlines.SHR32(Inlines.MAC16_16(Inlines.MULT16_16(num4, g2), 32767 - num4, g1), 15);
					buffer[buf_ptr + i * 2] = (short)Inlines.MULT16_16_Q15(a2, buffer[buf_ptr + i * 2]);
					buffer[buf_ptr + i * 2 + 1] = (short)Inlines.MULT16_16_Q15(a2, buffer[buf_ptr + i * 2 + 1]);
				}
			}
			int num5 = 0;
			do
			{
				for (int i = num2; i < frame_size; i++)
				{
					buffer[buf_ptr + i * channels + num5] = (short)Inlines.MULT16_16_Q15(g2, buffer[buf_ptr + i * channels + num5]);
				}
			}
			while (++num5 < channels);
		}

		internal static float transient_boost(float[] E, int E_ptr, float[] E_1, int LM, int maxM)
		{
			float num = 0f;
			float num2 = 0f;
			int num3 = Inlines.IMIN(maxM, (1 << LM) + 1);
			for (int i = E_ptr; i < num3 + E_ptr; i++)
			{
				num += E[i];
				num2 += E_1[i];
			}
			float num4 = num * num2 / (float)(num3 * num3);
			return Inlines.MIN16(1f, (float)Math.Sqrt(Inlines.MAX16(0f, 0.05f * (num4 - 2f))));
		}

		internal static int transient_viterbi(float[] E, float[] E_1, int N, int frame_cost, int rate)
		{
			float[][] array = Arrays.InitTwoDimensionalArray<float>(24, 16);
			int[][] array2 = Arrays.InitTwoDimensionalArray<int>(24, 16);
			float num = ((rate < 80) ? 0f : ((rate <= 160) ? (((float)rate - 80f) / 80f) : 1f));
			for (int i = 0; i < 16; i++)
			{
				array2[0][i] = -1;
				array[0][i] = 1E+10f;
			}
			for (int i = 0; i < 4; i++)
			{
				array[0][1 << i] = (float)(frame_cost + rate * (1 << i)) * (1f + num * transient_boost(E, 0, E_1, i, N + 1));
				array2[0][1 << i] = i;
			}
			for (int i = 1; i < N; i++)
			{
				for (int j = 2; j < 16; j++)
				{
					array[i][j] = array[i - 1][j - 1];
					array2[i][j] = j - 1;
				}
				for (int j = 0; j < 4; j++)
				{
					array2[i][1 << j] = 1;
					float num2 = array[i - 1][1];
					for (int k = 1; k < 4; k++)
					{
						float num3 = array[i - 1][(1 << k + 1) - 1];
						if (num3 < num2)
						{
							array2[i][1 << j] = (1 << k + 1) - 1;
							num2 = num3;
						}
					}
					float num4 = (float)(frame_cost + rate * (1 << j)) * (1f + num * transient_boost(E, i, E_1, j, N - i + 1));
					array[i][1 << j] = num2;
					if (N - i < 1 << j)
					{
						array[i][1 << j] += num4 * (float)(N - i) / (float)(1 << j);
					}
					else
					{
						array[i][1 << j] += num4;
					}
				}
			}
			int num5 = 1;
			float num6 = array[N - 1][1];
			for (int i = 2; i < 16; i++)
			{
				if (array[N - 1][i] < num6)
				{
					num6 = array[N - 1][i];
					num5 = i;
				}
			}
			for (int i = N - 1; i >= 0; i--)
			{
				num5 = array2[i][num5];
			}
			return num5;
		}

		internal static int optimize_framesize<T>(T[] x, int x_ptr, int len, int C, int Fs, int bitrate, int tonality, float[] mem, int buffering, Downmix.downmix_func<T> downmix)
		{
			float[] array = new float[28];
			float[] array2 = new float[27];
			int num = 0;
			int num2 = Fs / 400;
			int[] array3 = new int[num2];
			array[0] = mem[0];
			array2[0] = 1f / (1f + mem[0]);
			int num3;
			int num4;
			if (buffering != 0)
			{
				num3 = 2 * num2 - buffering;
				Inlines.OpusAssert(num3 >= 0 && num3 <= num2);
				len -= num3;
				array[1] = mem[1];
				array2[1] = 1f / (1f + mem[1]);
				array[2] = mem[2];
				array2[2] = 1f / (1f + mem[2]);
				num4 = 3;
			}
			else
			{
				num4 = 1;
				num3 = 0;
			}
			int num5 = Inlines.IMIN(len / num2, 24);
			int num6 = 0;
			int i;
			for (i = 0; i < num5; i++)
			{
				float num7 = 1f;
				downmix(x, x_ptr, array3, 0, num2, i * num2 + num3, 0, -2, C);
				if (i == 0)
				{
					num6 = array3[0];
				}
				for (int j = 0; j < num2; j++)
				{
					int num8 = array3[j];
					num7 += (float)(num8 - num6) * (float)(num8 - num6);
					num6 = num8;
				}
				array[i + num4] = num7;
				array2[i + num4] = 1f / num7;
			}
			array[i + num4] = array[i + num4 - 1];
			if (buffering != 0)
			{
				num5 = Inlines.IMIN(24, num5 + 2);
			}
			num = transient_viterbi(array, array2, num5, (int)((1f + 0.5f * (float)tonality) * (float)(60 * C + 40)), bitrate / 400);
			mem[0] = array[1 << num];
			if (buffering != 0)
			{
				mem[1] = array[(1 << num) + 1];
				mem[2] = array[(1 << num) + 2];
			}
			return num;
		}

		internal static int frame_size_select(int frame_size, OpusFramesize variable_duration, int Fs)
		{
			if (frame_size < Fs / 400)
			{
				return -1;
			}
			int num;
			if (variable_duration == OpusFramesize.OPUS_FRAMESIZE_ARG)
			{
				num = frame_size;
			}
			else if (variable_duration == OpusFramesize.OPUS_FRAMESIZE_VARIABLE)
			{
				num = Fs / 50;
			}
			else
			{
				if (variable_duration < OpusFramesize.OPUS_FRAMESIZE_2_5_MS || variable_duration > OpusFramesize.OPUS_FRAMESIZE_60_MS)
				{
					return -1;
				}
				num = Inlines.IMIN(3 * Fs / 50, Fs / 400 << (int)(variable_duration - 5001));
			}
			if (num > frame_size)
			{
				return -1;
			}
			if (400 * num != Fs && 200 * num != Fs && 100 * num != Fs && 50 * num != Fs && 25 * num != Fs && 50 * num != 3 * Fs)
			{
				return -1;
			}
			return num;
		}

		internal static int compute_frame_size<T>(T[] analysis_pcm, int analysis_pcm_ptr, int frame_size, OpusFramesize variable_duration, int C, int Fs, int bitrate_bps, int delay_compensation, Downmix.downmix_func<T> downmix, float[] subframe_mem, bool analysis_enabled)
		{
			if (analysis_enabled && variable_duration == OpusFramesize.OPUS_FRAMESIZE_VARIABLE && frame_size >= Fs / 200)
			{
				int num = 3;
				num = optimize_framesize(analysis_pcm, analysis_pcm_ptr, frame_size, C, Fs, bitrate_bps, 0, subframe_mem, delay_compensation, downmix);
				while (Fs / 400 << num > frame_size)
				{
					num--;
				}
				frame_size = Fs / 400 << num;
			}
			else
			{
				frame_size = frame_size_select(frame_size, variable_duration, Fs);
			}
			if (frame_size < 0)
			{
				return -1;
			}
			return frame_size;
		}

		internal static int compute_stereo_width(short[] pcm, int pcm_ptr, int frame_size, int Fs, StereoWidthState mem)
		{
			int num = Fs / frame_size;
			int a = 32767 - 819175 / Inlines.IMAX(50, num);
			int num3;
			int num2;
			int num4 = (num3 = (num2 = 0));
			for (int i = 0; i < frame_size - 3; i += 4)
			{
				int num5 = 0;
				int num6 = 0;
				int num7 = 0;
				int num8 = pcm_ptr + 2 * i;
				int num9 = pcm[num8];
				int num10 = pcm[num8 + 1];
				num5 = Inlines.SHR32(Inlines.MULT16_16(num9, num9), 2);
				num6 = Inlines.SHR32(Inlines.MULT16_16(num9, num10), 2);
				num7 = Inlines.SHR32(Inlines.MULT16_16(num10, num10), 2);
				num9 = pcm[num8 + 2];
				num10 = pcm[num8 + 3];
				num5 += Inlines.SHR32(Inlines.MULT16_16(num9, num9), 2);
				num6 += Inlines.SHR32(Inlines.MULT16_16(num9, num10), 2);
				num7 += Inlines.SHR32(Inlines.MULT16_16(num10, num10), 2);
				num9 = pcm[num8 + 4];
				num10 = pcm[num8 + 5];
				num5 += Inlines.SHR32(Inlines.MULT16_16(num9, num9), 2);
				num6 += Inlines.SHR32(Inlines.MULT16_16(num9, num10), 2);
				num7 += Inlines.SHR32(Inlines.MULT16_16(num10, num10), 2);
				num9 = pcm[num8 + 6];
				num10 = pcm[num8 + 7];
				num5 += Inlines.SHR32(Inlines.MULT16_16(num9, num9), 2);
				num6 += Inlines.SHR32(Inlines.MULT16_16(num9, num10), 2);
				num7 += Inlines.SHR32(Inlines.MULT16_16(num10, num10), 2);
				num4 += Inlines.SHR32(num5, 10);
				num3 += Inlines.SHR32(num6, 10);
				num2 += Inlines.SHR32(num7, 10);
			}
			mem.XX += Inlines.MULT16_32_Q15(a, num4 - mem.XX);
			mem.XY += Inlines.MULT16_32_Q15(a, num3 - mem.XY);
			mem.YY += Inlines.MULT16_32_Q15(a, num2 - mem.YY);
			mem.XX = Inlines.MAX32(0, mem.XX);
			mem.XY = Inlines.MAX32(0, mem.XY);
			mem.YY = Inlines.MAX32(0, mem.YY);
			if (Inlines.MAX32(mem.XX, mem.YY) > 210)
			{
				int num11 = Inlines.celt_sqrt(mem.XX);
				int num12 = Inlines.celt_sqrt(mem.YY);
				int num13 = Inlines.celt_sqrt(num11);
				int num14 = Inlines.celt_sqrt(num12);
				mem.XY = Inlines.MIN32(mem.XY, num11 * num12);
				int num15 = Inlines.SHR32(Inlines.frac_div32(mem.XY, 1 + Inlines.MULT16_16(num11, num12)), 16);
				int b = 32767 * Inlines.ABS16(num13 - num14) / (1 + num13 + num14);
				int num16 = Inlines.MULT16_16_Q15(Inlines.celt_sqrt(1073741824 - Inlines.MULT16_16(num15, num15)), b);
				mem.smoothed_width += (num16 - mem.smoothed_width) / num;
				mem.max_follower = Inlines.MAX16(mem.max_follower - 655 / num, mem.smoothed_width);
			}
			else
			{
				int num16 = 0;
				int num15 = 32767;
				int b = 0;
			}
			return Inlines.EXTRACT16(Inlines.MIN32(32767, 20 * mem.max_follower));
		}

		internal static void smooth_fade(short[] in1, int in1_ptr, short[] in2, int in2_ptr, short[] output, int output_ptr, int overlap, int channels, int[] window, int Fs)
		{
			int num = 48000 / Fs;
			for (int i = 0; i < channels; i++)
			{
				for (int j = 0; j < overlap; j++)
				{
					int num2 = Inlines.MULT16_16_Q15(window[j * num], window[j * num]);
					output[output_ptr + j * channels + i] = (short)Inlines.SHR32(Inlines.MAC16_16(Inlines.MULT16_16(num2, in2[in2_ptr + j * channels + i]), 32767 - num2, in1[in1_ptr + j * channels + i]), 15);
				}
			}
		}

		internal static string opus_strerror(int error)
		{
			string[] array = new string[8] { "success", "invalid argument", "buffer too small", "internal error", "corrupted stream", "request not implemented", "invalid state", "memory allocation failed" };
			if (error > 0 || error < -7)
			{
				return "unknown error";
			}
			return array[-error];
		}

		public static string GetVersionString()
		{
			return "Concentus 1.1.6-debug-nonparity";
		}
	}
	internal static class Downmix
	{
		public delegate void downmix_func<T>(T[] _x, int x_ptr, int[] sub, int sub_ptr, int subframe, int offset, int c1, int c2, int C);

		internal static void downmix_float(float[] x, int x_ptr, int[] sub, int sub_ptr, int subframe, int offset, int c1, int c2, int C)
		{
			int num = c1 + x_ptr;
			for (int i = 0; i < subframe; i++)
			{
				sub[sub_ptr + i] = Inlines.FLOAT2INT16(x[(i + offset) * C + num]);
			}
			if (c2 > -1)
			{
				int num2 = c2 + x_ptr;
				for (int i = 0; i < subframe; i++)
				{
					sub[sub_ptr + i] += Inlines.FLOAT2INT16(x[(i + offset) * C + num2]);
				}
			}
			else if (c2 == -2)
			{
				for (int j = 1; j < C; j++)
				{
					int num3 = j + x_ptr;
					for (int i = 0; i < subframe; i++)
					{
						sub[sub_ptr + i] += Inlines.FLOAT2INT16(x[(i + offset) * C + num3]);
					}
				}
			}
			int num4 = 4096;
			num4 = ((C != -2) ? (num4 / 2) : (num4 / C));
			for (int i = 0; i < subframe; i++)
			{
				sub[sub_ptr + i] *= num4;
			}
		}

		internal static void downmix_int(short[] x, int x_ptr, int[] sub, int sub_ptr, int subframe, int offset, int c1, int c2, int C)
		{
			for (int i = 0; i < subframe; i++)
			{
				sub[i + sub_ptr] = x[(i + offset) * C + c1];
			}
			if (c2 > -1)
			{
				for (int i = 0; i < subframe; i++)
				{
					sub[i + sub_ptr] += x[(i + offset) * C + c2];
				}
			}
			else if (c2 == -2)
			{
				for (int j = 1; j < C; j++)
				{
					for (int i = 0; i < subframe; i++)
					{
						sub[i + sub_ptr] += x[(i + offset) * C + j];
					}
				}
			}
			int num = 4096;
			num = ((C != -2) ? (num / 2) : (num / C));
			for (int i = 0; i < subframe; i++)
			{
				sub[i + sub_ptr] *= num;
			}
		}
	}
	internal static class mlp
	{
		private const int MAX_NEURONS = 100;

		internal static float tansig_approx(float x)
		{
			float num = 1f;
			if (!(x < 8f))
			{
				return 1f;
			}
			if (!(x > -8f))
			{
				return -1f;
			}
			if (x < 0f)
			{
				x = 0f - x;
				num = -1f;
			}
			int num2 = (int)Math.Floor(0.5f + 25f * x);
			x -= 0.04f * (float)num2;
			float num3 = Tables.tansig_table[num2];
			float num4 = 1f - num3 * num3;
			num3 += x * num4 * (1f - num3 * x);
			return num * num3;
		}

		internal static void mlp_process(MLP m, float[] input, float[] output)
		{
			float[] array = new float[100];
			float[] weights = m.weights;
			int num = 0;
			for (int i = 0; i < m.topo[1]; i++)
			{
				float num2 = weights[num];
				num++;
				for (int j = 0; j < m.topo[0]; j++)
				{
					num2 += input[j] * weights[num];
					num++;
				}
				array[i] = tansig_approx(num2);
			}
			for (int i = 0; i < m.topo[2]; i++)
			{
				float num3 = weights[num];
				num++;
				for (int k = 0; k < m.topo[1]; k++)
				{
					num3 += array[k] * weights[num];
					num++;
				}
				output[i] = tansig_approx(num3);
			}
		}
	}
	internal static class OpusCompare
	{
		private const int NBANDS = 21;

		private const int NFREQS = 240;

		private const int TEST_WIN_SIZE = 480;

		private const int TEST_WIN_STEP = 120;

		private static readonly int[] BANDS = new int[22]
		{
			0, 2, 4, 6, 8, 10, 12, 14, 16, 20,
			24, 28, 32, 40, 48, 56, 68, 80, 96, 120,
			156, 200
		};

		private static void band_energy(Pointer<float> _out, Pointer<float> _ps, Pointer<int> _bands, int _nbands, Pointer<float> _in, int _nchannels, int _nframes, int _window_sz, int _step, int _downsample)
		{
			Pointer<float> pointer = Concentus.Common.CPlusPlus.Pointer.Malloc<float>((3 + _nchannels) * _window_sz);
			Pointer<float> pointer2 = pointer.Point(_window_sz);
			Pointer<float> pointer3 = pointer2.Point(_window_sz);
			Pointer<float> pointer4 = pointer3.Point(_window_sz);
			int num = _window_sz / 2;
			for (int i = 0; i < _window_sz; i++)
			{
				pointer[i] = (float)(0.5 - 0.5 * Math.Cos(Math.PI * 2.0 / (double)(_window_sz - 1) * (double)i));
			}
			for (int i = 0; i < _window_sz; i++)
			{
				pointer2[i] = (float)Math.Cos(Math.PI * 2.0 / (double)_window_sz * (double)i);
			}
			for (int i = 0; i < _window_sz; i++)
			{
				pointer3[i] = (float)Math.Sin(Math.PI * 2.0 / (double)_window_sz * (double)i);
			}
			for (int j = 0; j < _nframes; j++)
			{
				for (int k = 0; k < _nchannels; k++)
				{
					for (int l = 0; l < _window_sz; l++)
					{
						pointer4[k * _window_sz + l] = pointer[l] * _in[(j * _step + l) * _nchannels + k];
					}
				}
				int i;
				for (int m = (i = 0); m < _nbands; m++)
				{
					float[] array = new float[2];
					for (; i < _bands[m + 1]; i++)
					{
						for (int k = 0; k < _nchannels; k++)
						{
							int num2 = 0;
							float num3;
							float num4 = (num3 = 0f);
							for (int l = 0; l < _window_sz; l++)
							{
								num4 += pointer2[num2] * pointer4[k * _window_sz + l];
								num3 -= pointer3[num2] * pointer4[k * _window_sz + l];
								num2 += i;
								if (num2 >= _window_sz)
								{
									num2 -= _window_sz;
								}
							}
							num4 *= (float)_downsample;
							num3 *= (float)_downsample;
							_ps[(j * num + i) * _nchannels + k] = num4 * num4 + num3 * num3 + 100000f;
							array[k] += _ps[(j * num + i) * _nchannels + k];
						}
					}
					if (_out != null)
					{
						_out[(j * _nbands + m) * _nchannels] = array[0] / (float)(_bands[m + 1] - _bands[m]);
						if (_nchannels == 2)
						{
							_out[(j * _nbands + m) * _nchannels + 1] = array[1] / (float)(_bands[m + 1] - _bands[m]);
						}
					}
				}
			}
		}

		internal static float compare(float[] x, float[] y, int nchannels, int rate = 48000)
		{
			int num = x.Length;
			int num2 = y.Length;
			int num3 = 21;
			int num4 = 240;
			if (rate != 8000 && rate != 12000 && rate != 16000 && rate != 24000 && rate != 48000)
			{
				throw new ArgumentException("Sampling rate must be 8000, 12000, 16000, 24000, or 48000\n");
			}
			int num5;
			if (rate != 48000)
			{
				num5 = 48000 / rate;
				switch (rate)
				{
				case 8000:
					num3 = 13;
					break;
				case 12000:
					num3 = 15;
					break;
				case 16000:
					num3 = 17;
					break;
				case 24000:
					num3 = 19;
					break;
				}
				num4 = 240 / num5;
			}
			else
			{
				num5 = 1;
			}
			if (num != num2 * num5)
			{
				throw new ArgumentException("Sample counts do not match");
			}
			if (num < 480)
			{
				throw new ArgumentException("Insufficient sample data");
			}
			int num6 = (num - 480 + 120) / 120;
			Pointer<float> pointer = Concentus.Common.CPlusPlus.Pointer.Malloc<float>(num6 * 21 * nchannels);
			Pointer<float> pointer2 = Concentus.Common.CPlusPlus.Pointer.Malloc<float>(num6 * 240 * nchannels);
			Pointer<float> pointer3 = Concentus.Common.CPlusPlus.Pointer.Malloc<float>(num6 * num4 * nchannels);
			band_energy(pointer, pointer2, BANDS.GetPointer(), 21, x.GetPointer(), nchannels, num6, 480, 120, 1);
			band_energy(null, pointer3, BANDS.GetPointer(), num3, y.GetPointer(), nchannels, num6, 480 / num5, 120 / num5, num5);
			for (int i = 0; i < num6; i++)
			{
				int j;
				for (j = 1; j < 21; j++)
				{
					for (int k = 0; k < nchannels; k++)
					{
						pointer[(i * 21 + j) * nchannels + k] += 0.1f * pointer[(i * 21 + j - 1) * nchannels + k];
					}
				}
				j = 20;
				while (j-- > 0)
				{
					for (int k = 0; k < nchannels; k++)
					{
						pointer[(i * 21 + j) * nchannels + k] += 0.03f * pointer[(i * 21 + j + 1) * nchannels + k];
					}
				}
				if (i > 0)
				{
					for (j = 0; j < 21; j++)
					{
						for (int k = 0; k < nchannels; k++)
						{
							pointer[(i * 21 + j) * nchannels + k] += 0.5f * pointer[((i - 1) * 21 + j) * nchannels + k];
						}
					}
				}
				if (nchannels == 2)
				{
					for (j = 0; j < 21; j++)
					{
						float num7 = pointer[(i * 21 + j) * nchannels];
						float num8 = pointer[(i * 21 + j) * nchannels + 1];
						pointer[(i * 21 + j) * nchannels] += 0.01f * num8;
						pointer[(i * 21 + j) * nchannels + 1] += 0.01f * num7;
					}
				}
				for (j = 0; j < num3; j++)
				{
					for (int l = BANDS[j]; l < BANDS[j + 1]; l++)
					{
						for (int k = 0; k < nchannels; k++)
						{
							pointer2[(i * 240 + l) * nchannels + k] += 0.1f * pointer[(i * 21 + j) * nchannels + k];
							pointer3[(i * num4 + l) * nchannels + k] += 0.1f * pointer[(i * 21 + j) * nchannels + k];
						}
					}
				}
			}
			for (int j = 0; j < num3; j++)
			{
				for (int l = BANDS[j]; l < BANDS[j + 1]; l++)
				{
					for (int k = 0; k < nchannels; k++)
					{
						float num9 = pointer2[l * nchannels + k];
						float num10 = pointer3[l * nchannels + k];
						for (int i = 1; i < num6; i++)
						{
							float num11 = pointer2[(i * 240 + l) * nchannels + k];
							float num12 = pointer3[(i * num4 + l) * nchannels + k];
							pointer2[(i * 240 + l) * nchannels + k] += num9;
							pointer3[(i * num4 + l) * nchannels + k] += num10;
							num9 = num11;
							num10 = num12;
						}
					}
				}
			}
			int num13 = rate switch
			{
				48000 => BANDS[21], 
				12000 => BANDS[num3], 
				_ => BANDS[num3] - 3, 
			};
			double num14 = 0.0;
			for (int i = 0; i < num6; i++)
			{
				double num15 = 0.0;
				for (int j = 0; j < num3; j++)
				{
					double num16 = 0.0;
					for (int l = BANDS[j]; l < BANDS[j + 1] && l < num13; l++)
					{
						for (int k = 0; k < nchannels; k++)
						{
							float num17 = pointer3[(i * num4 + l) * nchannels + k] / pointer2[(i * 240 + l) * nchannels + k];
							float num18 = num17 - (float)Math.Log(num17) - 1f;
							if (l >= 79 && l <= 81)
							{
								num18 *= 0.1f;
							}
							if (l == 80)
							{
								num18 *= 0.1f;
							}
							num16 += (double)num18;
						}
					}
					num16 /= (double)((BANDS[j + 1] - BANDS[j]) * nchannels);
					num15 += num16 * num16;
				}
				num15 /= 21.0;
				num15 *= num15;
				num14 += num15 * num15;
			}
			num14 = Math.Pow(num14 / (double)num6, 0.0625);
			float num19 = (float)(100.0 * (1.0 - 0.5 * Math.Log(1.0 + num14) / Math.Log(1.13)));
			if (num19 < 0f)
			{
				Debug.WriteLine("Test vector FAILS");
				Debug.WriteLine($"Internal weighted error is {num14}");
			}
			else
			{
				Debug.WriteLine("Test vector PASSES");
				Debug.WriteLine($"Opus quality metric: {num19} (internal weighted error is {num14})");
			}
			return num19;
		}
	}
	public static class OpusConstants
	{
		public const int OPUS_AUTO = -1000;

		public const int OPUS_BITRATE_MAX = -1;

		public const int NB_FRAMES = 8;

		public const int NB_TBANDS = 18;

		public const int NB_TOT_BANDS = 21;

		public const int NB_TONAL_SKIP_BANDS = 9;

		public const int ANALYSIS_BUF_SIZE = 720;

		public const int DETECT_SIZE = 200;

		public const int MAX_ENCODER_BUFFER = 480;
	}
	public class OpusException : Exception
	{
		public OpusException()
		{
		}

		public OpusException(string message)
			: base(message)
		{
		}

		public OpusException(string message, int opus_error_code)
			: base(message + ": " + CodecHelpers.opus_strerror(opus_error_code))
		{
		}
	}
	internal static class OpusMultistream
	{
		internal static int validate_layout(ChannelLayout layout)
		{
			int num = layout.nb_streams + layout.nb_coupled_streams;
			if (num > 255)
			{
				return 0;
			}
			for (int i = 0; i < layout.nb_channels; i++)
			{
				if (layout.mapping[i] >= num && layout.mapping[i] != byte.MaxValue)
				{
					return 0;
				}
			}
			return 1;
		}

		internal static int get_left_channel(ChannelLayout layout, int stream_id, int prev)
		{
			for (int i = ((prev >= 0) ? (prev + 1) : 0); i < layout.nb_channels; i++)
			{
				if (layout.mapping[i] == stream_id * 2)
				{
					return i;
				}
			}
			return -1;
		}

		internal static int get_right_channel(ChannelLayout layout, int stream_id, int prev)
		{
			for (int i = ((prev >= 0) ? (prev + 1) : 0); i < layout.nb_channels; i++)
			{
				if (layout.mapping[i] == stream_id * 2 + 1)
				{
					return i;
				}
			}
			return -1;
		}

		internal static int get_mono_channel(ChannelLayout layout, int stream_id, int prev)
		{
			for (int i = ((prev >= 0) ? (prev + 1) : 0); i < layout.nb_channels; i++)
			{
				if (layout.mapping[i] == stream_id + layout.nb_coupled_streams)
				{
					return i;
				}
			}
			return -1;
		}
	}
	internal static class Tables
	{
		internal static readonly float[] dct_table = new float[128]
		{
			0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f,
			0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.351851f, 0.33833f, 0.311806f, 0.2733f,
			0.224292f, 0.166664f, 0.102631f, 0.034654f, -0.034654f, -0.102631f, -0.166664f, -0.224292f, -0.2733f, -0.311806f,
			-0.33833f, -0.351851f, 0.34676f, 0.293969f, 0.196424f, 0.068975f, -0.068975f, -0.196424f, -0.293969f, -0.34676f,
			-0.34676f, -0.293969f, -0.196424f, -0.068975f, 0.068975f, 0.196424f, 0.293969f, 0.34676f, 0.33833f, 0.224292f,
			0.034654f, -0.166664f, -0.311806f, -0.351851f, -0.2733f, -0.102631f, 0.102631f, 0.2733f, 0.351851f, 0.311806f,
			0.166664f, -0.034654f, -0.224292f, -0.33833f, 0.326641f, 0.135299f, -0.135299f, -0.326641f, -0.326641f, -0.135299f,
			0.135299f, 0.326641f, 0.326641f, 0.135299f, -0.135299f, -0.326641f, -0.326641f, -0.135299f, 0.135299f, 0.326641f,
			0.311806f, 0.034654f, -0.2733f, -0.33833f, -0.102631f, 0.224292f, 0.351851f, 0.166664f, -0.166664f, -0.351851f,
			-0.224292f, 0.102631f, 0.33833f, 0.2733f, -0.034654f, -0.311806f, 0.293969f, -0.068975f, -0.34676f, -0.196424f,
			0.196424f, 0.34676f, 0.068975f, -0.293969f, -0.293969f, 0.068975f, 0.34676f, 0.196424f, -0.196424f, -0.34676f,
			-0.068975f, 0.293969f, 0.2733f, -0.166664f, -0.33833f, 0.034654f, 0.351851f, 0.102631f, -0.311806f, -0.224292f,
			0.224292f, 0.311806f, -0.102631f, -0.351851f, -0.034654f, 0.33833f, 0.166664f, -0.2733f
		};

		internal static readonly float[] analysis_window = new float[240]
		{
			4.3E-05f, 0.000171f, 0.000385f, 0.000685f, 0.001071f, 0.001541f, 0.002098f, 0.002739f, 0.003466f, 0.004278f,
			0.005174f, 0.006156f, 0.007222f, 0.008373f, 0.009607f, 0.010926f, 0.012329f, 0.013815f, 0.015385f, 0.017037f,
			0.018772f, 0.02059f, 0.02249f, 0.024472f, 0.026535f, 0.028679f, 0.030904f, 0.03321f, 0.035595f, 0.03806f,
			0.040604f, 0.043227f, 0.045928f, 0.048707f, 0.051564f, 0.054497f, 0.057506f, 0.060591f, 0.063752f, 0.066987f,
			0.070297f, 0.07368f, 0.077136f, 0.080665f, 0.084265f, 0.087937f, 0.091679f, 0.095492f, 0.099373f, 0.103323f,
			0.107342f, 0.111427f, 0.115579f, 0.119797f, 0.12408f, 0.128428f, 0.132839f, 0.137313f, 0.141849f, 0.146447f,
			0.151105f, 0.155823f, 0.1606f, 0.165435f, 0.170327f, 0.175276f, 0.18028f, 0.18534f, 0.190453f, 0.195619f,
			0.200838f, 0.206107f, 0.211427f, 0.216797f, 0.222215f, 0.22768f, 0.233193f, 0.238751f, 0.244353f, 0.25f,
			0.255689f, 0.261421f, 0.267193f, 0.273005f, 0.278856f, 0.284744f, 0.29067f, 0.296632f, 0.302628f, 0.308658f,
			0.314721f, 0.320816f, 0.326941f, 0.333097f, 0.33928f, 0.345492f, 0.351729f, 0.357992f, 0.36428f, 0.37059f,
			0.376923f, 0.383277f, 0.389651f, 0.396044f, 0.402455f, 0.408882f, 0.415325f, 0.421783f, 0.428254f, 0.434737f,
			0.441231f, 0.447736f, 0.454249f, 0.46077f, 0.467298f, 0.473832f, 0.48037f, 0.486912f, 0.493455f, 0.5f,
			0.506545f, 0.513088f, 0.51963f, 0.526168f, 0.532702f, 0.53923f, 0.545751f, 0.552264f, 0.558769f, 0.565263f,
			0.571746f, 0.578217f, 0.584675f, 0.591118f, 0.597545f, 0.603956f, 0.610349f, 0.616723f, 0.623077f, 0.62941f,
			0.63572f, 0.642008f, 0.648271f, 0.654508f, 0.66072f, 0.666903f, 0.673059f, 0.679184f, 0.685279f, 0.691342f,
			0.697372f, 0.703368f, 0.70933f, 0.715256f, 0.721144f, 0.726995f, 0.732807f, 0.738579f, 0.744311f, 0.75f,
			0.755647f, 0.761249f, 0.766807f, 0.77232f, 0.777785f, 0.783203f, 0.788573f, 0.793893f, 0.799162f, 0.804381f,
			0.809547f, 0.81466f, 0.81972f, 0.824724f, 0.829673f, 0.834565f, 0.8394f, 0.844177f, 0.848895f, 0.853553f,
			0.858151f, 0.862687f, 0.867161f, 0.871572f, 0.87592f, 0.880203f, 0.884421f, 0.888573f, 0.892658f, 0.896677f,
			0.900627f, 0.904508f, 0.908321f, 0.912063f, 0.915735f, 0.919335f, 0.922864f, 0.92632f, 0.929703f, 0.933013f,
			0.936248f, 0.939409f, 0.942494f, 0.945503f, 0.948436f, 0.951293f, 0.954072f, 0.956773f, 0.959396f, 0.96194f,
			0.964405f, 0.96679f, 0.969096f, 0.971321f, 0.973465f, 0.975528f, 0.97751f, 0.97941f, 0.981228f, 0.982963f,
			0.984615f, 0.986185f, 0.987671f, 0.989074f, 0.990393f, 0.991627f, 0.992778f, 0.993844f, 0.994826f, 0.995722f,
			0.996534f, 0.997261f, 0.997902f, 0.998459f, 0.998929f, 0.999315f, 0.999615f, 0.999829f, 0.999957f, 1f
		};

		internal static readonly int[] tbands = new int[19]
		{
			2, 4, 6, 8, 10, 12, 14, 16, 20, 24,
			28, 32, 40, 48, 56, 68, 80, 96, 120
		};

		internal static readonly int[] extra_bands = new int[22]
		{
			1, 2, 4, 6, 8, 10, 12, 14, 16, 20,
			24, 28, 32, 40, 48, 56, 68, 80, 96, 120,
			160, 200
		};

		internal static readonly float[] weights = new float[422]
		{
			-0.0941125f,
			-0.302976f,
			-0.603555f,
			-0.19393f,
			-0.185983f,
			-0.601617f,
			-0.0465317f,
			-0.114563f,
			-0.103599f,
			-0.618938f,
			-0.317859f,
			-0.169949f,
			-0.0702885f,
			0.148065f,
			0.409524f,
			0.548432f,
			0.367649f,
			-0.494393f,
			0.764306f,
			-1.83957f,
			0.170849f,
			12.786f,
			-1.08848f,
			-1.27284f,
			-16.2606f,
			24.1773f,
			-5.57454f,
			-0.17276f,
			-0.163388f,
			-0.224421f,
			-0.0948944f,
			-0.0728695f,
			-0.26557f,
			-0.100283f,
			-0.0515459f,
			-0.146142f,
			-0.120674f,
			-0.180655f,
			0.12857f,
			0.442138f,
			-0.493735f,
			0.167767f,
			0.206699f,
			-0.197567f,
			0.417999f,
			1.50364f,
			-0.773341f,
			-10.0401f,
			0.401872f,
			2.97966f,
			15.2165f,
			-1.88905f,
			-1.19254f,
			0.0285397f,
			-0.00405139f,
			0.0707565f,
			0.00825699f,
			-0.0927269f,
			-0.010393f,
			-0.00428882f,
			-0.00489743f,
			-0.0709731f,
			-0.00255992f,
			0.0395619f,
			0.226424f,
			0.0325231f,
			0.162175f,
			-0.100118f,
			0.485789f,
			0.12697f,
			0.285937f,
			0.0155637f,
			0.10546f,
			3.05558f,
			1.15059f,
			-1.00904f,
			-1.83088f,
			3.31766f,
			-3.42516f,
			-0.119135f,
			-0.0405654f,
			0.00690068f,
			0.0179877f,
			-0.0382487f,
			0.00597941f,
			-0.0183611f,
			0.00190395f,
			-0.144322f,
			-0.0435671f,
			0.000990594f,
			0.221087f,
			0.142405f,
			0.484066f,
			0.404395f,
			0.511955f,
			-0.237255f,
			0.241742f,
			0.35045f,
			-0.699428f,
			10.3993f,
			2.6507f,
			-2.43459f,
			-4.18838f,
			1.05928f,
			1.71067f,
			0.00667811f,
			-0.0721335f,
			-0.0397346f,
			0.0362704f,
			-0.11496f,
			-0.0235776f,
			0.0082161f,
			-0.0141741f,
			-0.0329699f,
			-0.0354253f,
			0.00277404f,
			-0.290654f,
			-1.14767f,
			-0.319157f,
			-0.686544f,
			0.36897f,
			0.478899f,
			0.182579f,
			-0.411069f,
			0.881104f,
			-4.60683f,
			1.4697f,
			325f / (356f * MathF.E),
			-1.81905f,
			-30.1699f,
			5.55225f,
			0.0019508f,
			-0.123576f,
			-0.0727332f,
			-0.0641597f,
			-0.0534458f,
			-0.108166f,
			-0.0937368f,
			-0.0697883f,
			-0.0275475f,
			-0.192309f,
			-0.110074f,
			0.285375f,
			-0.405597f,
			0.0926724f,
			-0.287881f,
			-0.851193f,
			-0.099493f,
			-0.233764f,
			-1.2852f,
			1.13611f,
			3.12168f,
			-0.0699f,
			-1.86216f,
			2.65292f,
			-7.31036f,
			2.44776f,
			-0.00111802f,
			-0.0632786f,
			-0.0376296f,
			-0.149851f,
			0.142963f,
			0.184368f,
			0.123433f,
			0.0756158f,
			0.117312f,
			0.0933395f,
			0.0692163f,
			0.0842592f,
			0.0704683f,
			0.0589963f,
			0.0942205f,
			-0.448862f,
			0.0262677f,
			0.270352f,
			-0.262317f,
			0.172586f,
			2.00227f,
			-0.159216f,
			0.038422f,
			10.2073f,
			4.15536f,
			-2.3407f,
			-0.0550265f,
			0.00964792f,
			-0.141336f,
			0.0274501f,
			0.0343921f,
			-0.0487428f,
			0.0950172f,
			-0.00775017f,
			-0.0372492f,
			-0.00548121f,
			-0.0663695f,
			0.0960506f,
			-0.200008f,
			-0.0412827f,
			0.58728f,
			0.0515787f,
			0.337254f,
			0.855024f,
			0.668371f,
			-0.114904f,
			-3.62962f,
			-0.467477f,
			-0.215472f,
			2.61537f,
			0.406117f,
			-1.36373f,
			0.0425394f,
			0.12208f,
			0.0934502f,
			0.123055f,
			0.0340935f,
			-0.142466f,
			0.035037f,
			-0.0490666f,
			0.0733208f,
			0.0576672f,
			0.123984f,
			-0.0517194f,
			-0.253018f,
			0.590565f,
			0.145849f,
			0.315185f,
			0.221534f,
			-0.149081f,
			0.216161f,
			-0.349575f,
			24.5664f,
			-0.994196f,
			0.614289f,
			-18.7905f,
			-2.83277f,
			-0.716801f,
			-0.347201f,
			0.479515f,
			-0.246027f,
			0.0758683f,
			0.137293f,
			-0.17781f,
			0.118751f,
			-0.00108329f,
			-0.237334f,
			0.355732f,
			-0.12991f,
			-0.0547627f,
			-0.318576f,
			-0.325524f,
			0.180494f,
			-0.0625604f,
			0.141219f,
			0.344064f,
			0.37658f,
			-0.591772f,
			5.8427f,
			-0.38075f,
			0.221894f,
			-1.41934f,
			-1879430f,
			1.34114f,
			0.0283355f,
			-0.0447856f,
			-0.0211466f,
			-0.0256927f,
			0.0139618f,
			0.0207934f,
			-0.0107666f,
			0.0110969f,
			0.0586069f,
			-0.0253545f,
			-0.0328433f,
			0.11872f,
			-0.216943f,
			0.145748f,
			0.119808f,
			-0.0915211f,
			-0.120647f,
			-0.0787719f,
			-0.143644f,
			-0.595116f,
			-1.152f,
			-1.25335f,
			-1.17092f,
			4.34023f,
			-975268f,
			-1.37033f,
			-0.0401123f,
			0.210602f,
			-0.136656f,
			0.135962f,
			-0.0523293f,
			0.0444604f,
			0.0143928f,
			0.00412666f,
			-0.0193003f,
			0.218452f,
			-0.110204f,
			-2.02563f,
			0.918238f,
			-2.45362f,
			1.19542f,
			-0.061362f,
			-1.92243f,
			0.308111f,
			0.49764f,
			0.912356f,
			0.209272f,
			-2.34525f,
			2.19326f,
			-6.47121f,
			1.69771f,
			-0.725123f,
			0.0118929f,
			0.0377944f,
			0.0554003f,
			0.0226452f,
			-0.0704421f,
			-0.0300309f,
			0.0122978f,
			-0.0041782f,
			-0.0686612f,
			0.0313115f,
			0.039111f,
			0.364111f,
			-0.0945548f,
			0.0229876f,
			-0.17414f,
			0.329795f,
			0.114714f,
			0.30022f,
			0.106997f,
			0.132355f,
			5.79932f,
			0.908058f,
			-0.905324f,
			-3.3561f,
			0.190647f,
			0.184211f,
			-0.673648f,
			0.231807f,
			-0.0586222f,
			0.230752f,
			-0.438277f,
			0.245857f,
			-0.17215f,
			0.0876383f,
			-0.720512f,
			0.162515f,
			0.0170571f,
			0.101781f,
			0.388477f,
			1.32931f,
			1.08548f,
			-0.936301f,
			-2.36958f,
			-6.71988f,
			-3.44376f,
			2.13818f,
			14.2318f,
			4.91459f,
			-3.09052f,
			-9.69191f,
			-0.768234f,
			1.79604f,
			0.0549653f,
			0.163399f,
			0.0797025f,
			0.0343933f,
			-0.0555876f,
			-0.00505673f,
			0.0187258f,
			0.0326628f,
			0.0231486f,
			0.15573f,
			0.0476223f,
			-0.254824f,
			1.60155f,
			-0.801221f,
			2.55496f,
			0.737629f,
			-1.36249f,
			-0.695463f,
			-2.44301f,
			-1.73188f,
			3.95279f,
			1.89068f,
			0.486087f,
			-11.3343f,
			3941600f,
			-0.381439f,
			0.12115f,
			-0.906927f,
			2.93878f,
			1.6388f,
			0.882811f,
			0.874344f,
			1.21726f,
			-0.874545f,
			0.321706f,
			0.785055f,
			0.946558f,
			-0.575066f,
			-3.46553f,
			0.884905f,
			0.0924047f,
			-9.90712f,
			0.391338f,
			0.160103f,
			-2.04954f,
			4.1455f,
			0.0684029f,
			-0.144761f,
			-0.285282f,
			0.379244f,
			-1.1584f,
			-0.0277241f,
			-9.85f,
			-4.82386f,
			3.71333f,
			3.87308f,
			3.52558f
		};

		internal static readonly int[] topo = new int[3] { 25, 15, 2 };

		internal static readonly MLP net = new MLP
		{
			layers = 3,
			topo = topo,
			weights = weights
		};

		internal static readonly float[] tansig_table = new float[201]
		{
			0f, 0.039979f, 0.07983f, 0.119427f, 0.158649f, 0.197375f, 0.235496f, 0.272905f, 0.309507f, 0.345214f,
			0.379949f, 0.413644f, 0.446244f, 0.4777f, 0.507977f, 0.53705f, 0.5649f, 0.591519f, 0.616909f, 0.641077f,
			0.664037f, 0.685809f, 0.706419f, 0.725897f, 0.744277f, 0.761594f, 0.777888f, 0.793199f, 0.807569f, 0.82104f,
			0.833655f, 0.845456f, 0.856485f, 0.866784f, 0.876393f, 0.885352f, 0.893698f, 0.901468f, 0.908698f, 0.91542f,
			0.921669f, 0.927473f, 0.932862f, 0.937863f, 0.942503f, 0.946806f, 0.950795f, 0.954492f, 0.957917f, 0.96109f,
			0.964028f, 0.966747f, 0.969265f, 0.971594f, 0.973749f, 0.975743f, 0.977587f, 0.979293f, 0.980869f, 0.982327f,
			0.983675f, 0.984921f, 0.986072f, 0.987136f, 0.988119f, 0.989027f, 0.989867f, 0.990642f, 0.991359f, 0.99202f,
			0.992631f, 0.993196f, 0.993718f, 0.994199f, 0.994644f, 0.995055f, 0.995434f, 0.995784f, 0.996108f, 0.996407f,
			0.996682f, 0.996937f, 0.997172f, 0.997389f, 0.99759f, 0.997775f, 0.997946f, 0.998104f, 0.998249f, 0.998384f,
			0.998508f, 0.998623f, 0.998728f, 0.998826f, 0.998916f, 0.999f, 0.999076f, 0.999147f, 0.999213f, 0.999273f,
			0.999329f, 0.999381f, 0.999428f, 0.999472f, 0.999513f, 0.99955f, 0.999585f, 0.999617f, 0.999646f, 0.999673f,
			0.999699f, 0.999722f, 0.999743f, 0.999763f, 0.999781f, 0.999798f, 0.999813f, 0.999828f, 0.999841f, 0.999853f,
			0.999865f, 0.999875f, 0.999885f, 0.999893f, 0.999902f, 0.999909f, 0.999916f, 0.999923f, 0.999929f, 0.999934f,
			0.999939f, 0.999944f, 0.999948f, 0.999952f, 0.999956f, 0.999959f, 0.999962f, 0.999965f, 0.999968f, 0.99997f,
			0.999973f, 0.999975f, 0.999977f, 0.999978f, 0.99998f, 0.999982f, 0.999983f, 0.999984f, 0.999986f, 0.999987f,
			0.999988f, 0.999989f, 0.99999f, 0.99999f, 0.999991f, 0.999992f, 0.999992f, 0.999993f, 0.999994f, 0.999994f,
			0.999994f, 0.999995f, 0.999995f, 0.999996f, 0.999996f, 0.999996f, 0.999997f, 0.999997f, 0.999997f, 0.999997f,
			0.999997f, 0.999998f, 0.999998f, 0.999998f, 0.999998f, 0.999998f, 0.999998f, 0.999999f, 0.999999f, 0.999999f,
			0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f, 0.999999f,
			1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f, 1f,
			1f
		};

		internal static readonly int[] mono_voice_bandwidth_thresholds = new int[8] { 11000, 1000, 14000, 1000, 17000, 1000, 21000, 2000 };

		internal static readonly int[] mono_music_bandwidth_thresholds = new int[8] { 12000, 1000, 15000, 1000, 18000, 2000, 22000, 2000 };

		internal static readonly int[] stereo_voice_bandwidth_thresholds = new int[8] { 11000, 1000, 14000, 1000, 21000, 2000, 28000, 2000 };

		internal static readonly int[] stereo_music_bandwidth_thresholds = new int[8] { 12000, 1000, 18000, 2000, 21000, 2000, 30000, 2000 };

		public const int stereo_voice_threshold = 30000;

		public const int stereo_music_threshold = 30000;

		internal static readonly int[][] mode_thresholds = new int[2][]
		{
			new int[2] { 64000, 16000 },
			new int[2] { 36000, 16000 }
		};
	}
}
namespace Concentus.Silk
{
	internal static class ApplySineWindow
	{
		private static readonly short[] freq_table_Q16 = new short[27]
		{
			12111, 9804, 8235, 7100, 6239, 5565, 5022, 4575, 4202, 3885,
			3612, 3375, 3167, 2984, 2820, 2674, 2542, 2422, 2313, 2214,
			2123, 2038, 1961, 1889, 1822, 1760, 1702
		};

		internal static void silk_apply_sine_window(short[] px_win, int px_win_ptr, short[] px, int px_ptr, int win_type, int length)
		{
			Inlines.OpusAssert(win_type == 1 || win_type == 2);
			Inlines.OpusAssert(length >= 16 && length <= 120);
			Inlines.OpusAssert((length & 3) == 0);
			int num = (length >> 2) - 4;
			Inlines.OpusAssert(num >= 0 && num <= 26);
			int num2 = freq_table_Q16[num];
			int num3 = Inlines.silk_SMULWB(num2, -num2);
			Inlines.OpusAssert(num3 >= -32768);
			int num4;
			int num5;
			if (win_type == 1)
			{
				num4 = 0;
				num5 = num2 + Inlines.silk_RSHIFT(length, 3);
			}
			else
			{
				num4 = 65536;
				num5 = 65536 + Inlines.silk_RSHIFT(num3, 1) + Inlines.silk_RSHIFT(length, 4);
			}
			for (num = 0; num < length; num += 4)
			{
				int num6 = px_win_ptr + num;
				int num7 = px_ptr + num;
				px_win[num6] = (short)Inlines.silk_SMULWB(Inlines.silk_RSHIFT(num4 + num5, 1), px[num7]);
				px_win[num6 + 1] = (short)Inlines.silk_SMULWB(num5, px[num7 + 1]);
				num4 = Inlines.silk_SMULWB(num5, num3) + Inlines.silk_LSHIFT(num5, 1) - num4 + 1;
				num4 = Inlines.silk_min(num4, 65536);
				px_win[num6 + 2] = (short)Inlines.silk_SMULWB(Inlines.silk_RSHIFT(num4 + num5, 1), px[num7 + 2]);
				px_win[num6 + 3] = (short)Inlines.silk_SMULWB(num4, px[num7 + 3]);
				num5 = Inlines.silk_SMULWB(num4, num3) + Inlines.silk_LSHIFT(num4, 1) - num5;
				num5 = Inlines.silk_min(num5, 65536);
			}
		}
	}
	internal static class BurgModified
	{
		private const int MAX_FRAME_SIZE = 384;

		private const int QA = 25;

		private const int N_BITS_HEAD_ROOM = 2;

		private const int MIN_RSHIFTS = -16;

		private const int MAX_RSHIFTS = 7;

		internal static void silk_burg_modified(BoxedValueInt res_nrg, BoxedValueInt res_nrg_Q, int[] A_Q16, short[] x, int x_ptr, int minInvGain_Q30, int subfr_length, int nb_subfr, int D)
		{
			int[] array = new int[16];
			int[] array2 = new int[16];
			int[] array3 = new int[16];
			int[] array4 = new int[17];
			int[] array5 = new int[17];
			int[] array6 = new int[16];
			Inlines.OpusAssert(subfr_length * nb_subfr <= 384);
			long num = Inlines.silk_inner_prod16_aligned_64(x, x_ptr, x, x_ptr, subfr_length * nb_subfr);
			int num2 = Inlines.silk_CLZ64(num);
			int num3 = 35 - num2;
			if (num3 > 7)
			{
				num3 = 7;
			}
			if (num3 < -16)
			{
				num3 = -16;
			}
			int num4 = (int)((num3 <= 0) ? Inlines.silk_LSHIFT32((int)num, -num3) : Inlines.silk_RSHIFT64(num, num3));
			array5[0] = (array4[0] = num4 + Inlines.silk_SMMUL(42950, num4) + 1);
			Arrays.MemSetInt(array, 0, 16);
			if (num3 > 0)
			{
				for (int i = 0; i < nb_subfr; i++)
				{
					int num5 = x_ptr + i * subfr_length;
					for (int j = 1; j < D + 1; j++)
					{
						array[j - 1] += (int)Inlines.silk_RSHIFT64(Inlines.silk_inner_prod16_aligned_64(x, num5, x, num5 + j, subfr_length - j), num3);
					}
				}
			}
			else
			{
				for (int i = 0; i < nb_subfr; i++)
				{
					int num5 = x_ptr + i * subfr_length;
					CeltPitchXCorr.pitch_xcorr(x, num5, x, num5 + 1, array6, subfr_length - D, D);
					for (int j = 1; j < D + 1; j++)
					{
						int k = j + subfr_length - D;
						int num6 = 0;
						for (; k < subfr_length; k++)
						{
							num6 = Inlines.MAC16_16(num6, x[num5 + k], x[num5 + k - j]);
						}
						array6[j - 1] += num6;
					}
					for (int j = 1; j < D + 1; j++)
					{
						array[j - 1] += Inlines.silk_LSHIFT32(array6[j - 1], -num3);
					}
				}
			}
			Array.Copy(array, array2, 16);
			array5[0] = (array4[0] = num4 + Inlines.silk_SMMUL(42950, num4) + 1);
			int num7 = 1073741824;
			int num8 = 0;
			for (int j = 0; j < D; j++)
			{
				int num9;
				int num10;
				if (num3 > -2)
				{
					for (int i = 0; i < nb_subfr; i++)
					{
						int num5 = x_ptr + i * subfr_length;
						int b = -Inlines.silk_LSHIFT32(x[num5 + j], 16 - num3);
						int b2 = -Inlines.silk_LSHIFT32(x[num5 + subfr_length - j - 1], 16 - num3);
						num9 = Inlines.silk_LSHIFT32(x[num5 + j], 9);
						num10 = Inlines.silk_LSHIFT32(x[num5 + subfr_length - j - 1], 9);
						for (int l = 0; l < j; l++)
						{
							array[l] = Inlines.silk_SMLAWB(array[l], b, x[num5 + j - l - 1]);
							array2[l] = Inlines.silk_SMLAWB(array2[l], b2, x[num5 + subfr_length - j + l]);
							int b3 = array3[l];
							num9 = Inlines.silk_SMLAWB(num9, b3, x[num5 + j - l - 1]);
							num10 = Inlines.silk_SMLAWB(num10, b3, x[num5 + subfr_length - j + l]);
						}
						num9 = Inlines.silk_LSHIFT32(-num9, 7 - num3);
						num10 = Inlines.silk_LSHIFT32(-num10, 7 - num3);
						for (int l = 0; l <= j; l++)
						{
							array4[l] = Inlines.silk_SMLAWB(array4[l], num9, x[num5 + j - l]);
							array5[l] = Inlines.silk_SMLAWB(array5[l], num10, x[num5 + subfr_length - j + l - 1]);
						}
					}
				}
				else
				{
					for (int i = 0; i < nb_subfr; i++)
					{
						int num5 = x_ptr + i * subfr_length;
						int b = -Inlines.silk_LSHIFT32(x[num5 + j], -num3);
						int b2 = -Inlines.silk_LSHIFT32(x[num5 + subfr_length - j - 1], -num3);
						num9 = Inlines.silk_LSHIFT32(x[num5 + j], 17);
						num10 = Inlines.silk_LSHIFT32(x[num5 + subfr_length - j - 1], 17);
						for (int l = 0; l < j; l++)
						{
							array[l] = Inlines.silk_MLA(array[l], b, x[num5 + j - l - 1]);
							array2[l] = Inlines.silk_MLA(array2[l], b2, x[num5 + subfr_length - j + l]);
							int c = Inlines.silk_RSHIFT_ROUND(array3[l], 8);
							num9 = Inlines.silk_MLA(num9, x[num5 + j - l - 1], c);
							num10 = Inlines.silk_MLA(num10, x[num5 + subfr_length - j + l], c);
						}
						num9 = -num9;
						num10 = -num10;
						for (int l = 0; l <= j; l++)
						{
							array4[l] = Inlines.silk_SMLAWW(array4[l], num9, Inlines.silk_LSHIFT32(x[num5 + j - l], -num3 - 1));
							array5[l] = Inlines.silk_SMLAWW(array5[l], num10, Inlines.silk_LSHIFT32(x[num5 + subfr_length - j + l - 1], -num3 - 1));
						}
					}
				}
				num9 = array[j];
				num10 = array2[j];
				int a = 0;
				int num11 = Inlines.silk_ADD32(array5[0], array4[0]);
				for (int l = 0; l < j; l++)
				{
					int b3 = array3[l];
					num2 = Inlines.silk_CLZ32(Inlines.silk_abs(b3)) - 1;
					num2 = Inlines.silk_min(7, num2);
					int c = Inlines.silk_LSHIFT32(b3, num2);
					num9 = Inlines.silk_ADD_LSHIFT32(num9, Inlines.silk_SMMUL(array2[j - l - 1], c), 7 - num2);
					num10 = Inlines.silk_ADD_LSHIFT32(num10, Inlines.silk_SMMUL(array[j - l - 1], c), 7 - num2);
					a = Inlines.silk_ADD_LSHIFT32(a, Inlines.silk_SMMUL(array5[j - l], c), 7 - num2);
					num11 = Inlines.silk_ADD_LSHIFT32(num11, Inlines.silk_SMMUL(Inlines.silk_ADD32(array5[l + 1], array4[l + 1]), c), 7 - num2);
				}
				array4[j + 1] = num9;
				array5[j + 1] = num10;
				a = Inlines.silk_ADD32(a, num10);
				a = Inlines.silk_LSHIFT32(-a, 1);
				int num12 = ((Inlines.silk_abs(a) >= num11) ? ((a > 0) ? int.MaxValue : int.MinValue) : Inlines.silk_DIV32_varQ(a, num11, 31));
				num9 = 1073741824 - Inlines.silk_SMMUL(num12, num12);
				num9 = Inlines.silk_LSHIFT(Inlines.silk_SMMUL(num7, num9), 2);
				if (num9 <= minInvGain_Q30)
				{
					num10 = 1073741824 - Inlines.silk_DIV32_varQ(minInvGain_Q30, num7, 30);
					num12 = Inlines.silk_SQRT_APPROX(num10);
					num12 = Inlines.silk_RSHIFT32(num12 + Inlines.silk_DIV32(num10, num12), 1);
					num12 = Inlines.silk_LSHIFT32(num12, 16);
					if (a < 0)
					{
						num12 = -num12;
					}
					num7 = minInvGain_Q30;
					num8 = 1;
				}
				else
				{
					num7 = num9;
				}
				for (int l = 0; l < j + 1 >> 1; l++)
				{
					num9 = array3[l];
					num10 = array3[j - l - 1];
					array3[l] = Inlines.silk_ADD_LSHIFT32(num9, Inlines.silk_SMMUL(num10, num12), 1);
					array3[j - l - 1] = Inlines.silk_ADD_LSHIFT32(num10, Inlines.silk_SMMUL(num9, num12), 1);
				}
				array3[j] = Inlines.silk_RSHIFT32(num12, 6);
				if (num8 != 0)
				{
					for (int l = j + 1; l < D; l++)
					{
						array3[l] = 0;
					}
					break;
				}
				for (int l = 0; l <= j + 1; l++)
				{
					num9 = array4[l];
					num10 = array5[j - l + 1];
					array4[l] = Inlines.silk_ADD_LSHIFT32(num9, Inlines.silk_SMMUL(num10, num12), 1);
					array5[j - l + 1] = Inlines.silk_ADD_LSHIFT32(num10, Inlines.silk_SMMUL(num9, num12), 1);
				}
			}
			if (num8 != 0)
			{
				for (int l = 0; l < D; l++)
				{
					A_Q16[l] = -Inlines.silk_RSHIFT_ROUND(array3[l], 9);
				}
				if (num3 > 0)
				{
					for (int i = 0; i < nb_subfr; i++)
					{
						int num5 = x_ptr + i * subfr_length;
						num4 -= (int)Inlines.silk_RSHIFT64(Inlines.silk_inner_prod16_aligned_64(x, num5, x, num5, D), num3);
					}
				}
				else
				{
					for (int i = 0; i < nb_subfr; i++)
					{
						int num5 = x_ptr + i * subfr_length;
						num4 -= Inlines.silk_LSHIFT32(Inlines.silk_inner_prod_self(x, num5, D), -num3);
					}
				}
				res_nrg.Val = Inlines.silk_LSHIFT(Inlines.silk_SMMUL(num7, num4), 2);
				res_nrg_Q.Val = -num3;
			}
			else
			{
				int num11 = array4[0];
				int num9 = 65536;
				for (int l = 0; l < D; l++)
				{
					int c = Inlines.silk_RSHIFT_ROUND(array3[l], 9);
					num11 = Inlines.silk_SMLAWW(num11, array4[l + 1], c);
					num9 = Inlines.silk_SMLAWW(num9, c, c);
					A_Q16[l] = -c;
				}
				res_nrg.Val = Inlines.silk_SMLAWW(num11, Inlines.silk_SMMUL(42950, num4), -num9);
				res_nrg_Q.Val = -num3;
			}
		}
	}
	internal static class BWExpander
	{
		internal static void silk_bwexpander_32(int[] ar, int d, int chirp_Q16)
		{
			int b = chirp_Q16 - 65536;
			for (int i = 0; i < d - 1; i++)
			{
				ar[i] = Inlines.silk_SMULWW(chirp_Q16, ar[i]);
				chirp_Q16 += Inlines.silk_RSHIFT_ROUND(Inlines.silk_MUL(chirp_Q16, b), 16);
			}
			ar[d - 1] = Inlines.silk_SMULWW(chirp_Q16, ar[d - 1]);
		}

		internal static void silk_bwexpander(short[] ar, int d, int chirp_Q16)
		{
			int b = chirp_Q16 - 65536;
			for (int i = 0; i < d - 1; i++)
			{
				ar[i] = (short)Inlines.silk_RSHIFT_ROUND(Inlines.silk_MUL(chirp_Q16, ar[i]), 16);
				chirp_Q16 += Inlines.silk_RSHIFT_ROUND(Inlines.silk_MUL(chirp_Q16, b), 16);
			}
			ar[d - 1] = (short)Inlines.silk_RSHIFT_ROUND(Inlines.silk_MUL(chirp_Q16, ar[d - 1]), 16);
		}
	}
	internal static class CNG
	{
		internal static void silk_CNG_exc(int[] exc_Q10, int exc_Q10_ptr, int[] exc_buf_Q14, int Gain_Q16, int length, ref int rand_seed)
		{
			int num;
			for (num = 255; num > length; num = Inlines.silk_RSHIFT(num, 1))
			{
			}
			int num2 = rand_seed;
			for (int i = exc_Q10_ptr; i < exc_Q10_ptr + length; i++)
			{
				num2 = Inlines.silk_RAND(num2);
				int num3 = Inlines.silk_RSHIFT(num2, 24) & num;
				Inlines.OpusAssert(num3 >= 0);
				Inlines.OpusAssert(num3 <= 255);
				exc_Q10[i] = (short)Inlines.silk_SAT16(Inlines.silk_SMULWW(exc_buf_Q14[num3], Gain_Q16 >> 4));
			}
			rand_seed = num2;
		}

		internal static void silk_CNG_Reset(SilkChannelDecoder psDec)
		{
			int num = Inlines.silk_DIV32_16(32767, (short)(psDec.LPC_order + 1));
			int num2 = 0;
			for (int i = 0; i < psDec.LPC_order; i++)
			{
				num2 += num;
				psDec.sCNG.CNG_smth_NLSF_Q15[i] = (short)num2;
			}
			psDec.sCNG.CNG_smth_Gain_Q16 = 0;
			psDec.sCNG.rand_seed = 3176576;
		}

		internal static void silk_CNG(SilkChannelDecoder psDec, SilkDecoderControl psDecCtrl, short[] frame, int frame_ptr, int length)
		{
			short[] array = new short[psDec.LPC_order];
			CNGState sCNG = psDec.sCNG;
			if (psDec.fs_kHz != sCNG.fs_kHz)
			{
				silk_CNG_Reset(psDec);
				sCNG.fs_kHz = psDec.fs_kHz;
			}
			if (psDec.lossCnt == 0 && psDec.prevSignalType == 0)
			{
				for (int i = 0; i < psDec.LPC_order; i++)
				{
					sCNG.CNG_smth_NLSF_Q15[i] += (short)Inlines.silk_SMULWB(psDec.prevNLSF_Q15[i] - sCNG.CNG_smth_NLSF_Q15[i], 16348);
				}
				int num = 0;
				int num2 = 0;
				for (int i = 0; i < psDec.nb_subfr; i++)
				{
					if (psDecCtrl.Gains_Q16[i] > num)
					{
						num = psDecCtrl.Gains_Q16[i];
						num2 = i;
					}
				}
				Arrays.MemMoveInt(sCNG.CNG_exc_buf_Q14, 0, psDec.subfr_length, (psDec.nb_subfr - 1) * psDec.subfr_length);
				for (int i = 0; i < psDec.nb_subfr; i++)
				{
					sCNG.CNG_smth_Gain_Q16 += Inlines.silk_SMULWB(psDecCtrl.Gains_Q16[i] - sCNG.CNG_smth_Gain_Q16, 4634);
				}
			}
			if (psDec.lossCnt != 0)
			{
				int[] array2 = new int[length + 16];
				int num3 = Inlines.silk_SMULWW(psDec.sPLC.randScale_Q14, psDec.sPLC.prevGain_Q16[1]);
				if (num3 >= 2097152 || sCNG.CNG_smth_Gain_Q16 > 8388608)
				{
					num3 = Inlines.silk_SMULTT(num3, num3);
					num3 = Inlines.silk_SUB_LSHIFT32(Inlines.silk_SMULTT(sCNG.CNG_smth_Gain_Q16, sCNG.CNG_smth_Gain_Q16), num3, 5);
					num3 = Inlines.silk_LSHIFT32(Inlines.silk_SQRT_APPROX(num3), 16);
				}
				else
				{
					num3 = Inlines.silk_SMULWW(num3, num3);
					num3 = Inlines.silk_SUB_LSHIFT32(Inlines.silk_SMULWW(sCNG.CNG_smth_Gain_Q16, sCNG.CNG_smth_Gain_Q16), num3, 5);
					num3 = Inlines.silk_LSHIFT32(Inlines.silk_SQRT_APPROX(num3), 8);
				}
				silk_CNG_exc(array2, 16, sCNG.CNG_exc_buf_Q14, num3, length, ref sCNG.rand_seed);
				NLSF.silk_NLSF2A(array, sCNG.CNG_smth_NLSF_Q15, psDec.LPC_order);
				Array.Copy(sCNG.CNG_synth_state, array2, 16);
				for (int i = 0; i < length; i++)
				{
					int num4 = 16 + i;
					Inlines.OpusAssert(psDec.LPC_order == 10 || psDec.LPC_order == 16);
					int a = Inlines.silk_RSHIFT(psDec.LPC_order, 1);
					a = Inlines.silk_SMLAWB(a, array2[num4 - 1], array[0]);
					a = Inlines.silk_SMLAWB(a, array2[num4 - 2], array[1]);
					a = Inlines.silk_SMLAWB(a, array2[num4 - 3], array[2]);
					a = Inlines.silk_SMLAWB(a, array2[num4 - 4], array[3]);
					a = Inlines.silk_SMLAWB(a, array2[num4 - 5], array[4]);
					a = Inlines.silk_SMLAWB(a, array2[num4 - 6], array[5]);
					a = Inlines.silk_SMLAWB(a, array2[num4 - 7], array[6]);
					a = Inlines.silk_SMLAWB(a, array2[num4 - 8], array[7]);
					a = Inlines.silk_SMLAWB(a, array2[num4 - 9], array[8]);
					a = Inlines.silk_SMLAWB(a, array2[num4 - 10], array[9]);
					if (psDec.LPC_order == 16)
					{
						a = Inlines.silk_SMLAWB(a, array2[num4 - 11], array[10]);
						a = Inlines.silk_SMLAWB(a, array2[num4 - 12], array[11]);
						a = Inlines.silk_SMLAWB(a, array2[num4 - 13], array[12]);
						a = Inlines.silk_SMLAWB(a, array2[num4 - 14], array[13]);
						a = Inlines.silk_SMLAWB(a, array2[num4 - 15], array[14]);
						a = Inlines.silk_SMLAWB(a, array2[num4 - 16], array[15]);
					}
					array2[num4] = Inlines.silk_ADD_LSHIFT(array2[num4], a, 4);
					frame[frame_ptr + i] = Inlines.silk_ADD_SAT16(frame[frame_ptr + i], (short)Inlines.silk_RSHIFT_ROUND(array2[num4], 10));
				}
				Array.Copy(array2, length, sCNG.CNG_synth_state, 0, 16);
			}
			else
			{
				Arrays.MemSetInt(sCNG.CNG_synth_state, 0, psDec.LPC_order);
			}
		}
	}
	internal static class CodeSigns
	{
		private static int silk_enc_map(int a)
		{
			return Inlines.silk_RSHIFT(a, 15) + 1;
		}

		private static int silk_dec_map(int a)
		{
			return Inlines.silk_LSHIFT(a, 1) - 1;
		}

		internal static void silk_encode_signs(EntropyCoder psRangeEnc, sbyte[] pulses, int length, int signalType, int quantOffsetType, int[] sum_pulses)
		{
			byte[] array = new byte[2];
			byte[] silk_sign_iCDF = Tables.silk_sign_iCDF;
			array[1] = 0;
			int num = 0;
			int num2 = Inlines.silk_SMULBB(7, Inlines.silk_ADD_LSHIFT(quantOffsetType, signalType, 1));
			int num3 = num2;
			length = Inlines.silk_RSHIFT(length + 8, 4);
			for (num2 = 0; num2 < length; num2++)
			{
				int num4 = sum_pulses[num2];
				if (num4 > 0)
				{
					array[0] = silk_sign_iCDF[num3 + Inlines.silk_min(num4 & 0x1F, 6)];
					for (int i = num; i < num + 16; i++)
					{
						if (pulses[i] != 0)
						{
							psRangeEnc.enc_icdf(silk_enc_map(pulses[i]), array, 8u);
						}
					}
				}
				num += 16;
			}
		}

		internal static void silk_decode_signs(EntropyCoder psRangeDec, short[] pulses, int length, int signalType, int quantOffsetType, int[] sum_pulses)
		{
			byte[] array = new byte[2];
			byte[] silk_sign_iCDF = Tables.silk_sign_iCDF;
			array[1] = 0;
			int num = 0;
			int num2 = Inlines.silk_SMULBB(7, Inlines.silk_ADD_LSHIFT(quantOffsetType, signalType, 1));
			int num3 = num2;
			length = Inlines.silk_RSHIFT(length + 8, 4);
			for (num2 = 0; num2 < length; num2++)
			{
				int num4 = sum_pulses[num2];
				if (num4 > 0)
				{
					array[0] = silk_sign_iCDF[num3 + Inlines.silk_min(num4 & 0x1F, 6)];
					for (int i = 0; i < 16; i++)
					{
						if (pulses[num + i] > 0)
						{
							pulses[num + i] *= (short)silk_dec_map(psRangeDec.dec_icdf(array, 8u));
						}
					}
				}
				num += 16;
			}
		}
	}
	internal static class CorrelateMatrix
	{
		internal static void silk_corrVector(short[] x, int x_ptr, short[] t, int t_ptr, int L, int order, int[] Xt, int rshifts)
		{
			int num = x_ptr + order - 1;
			if (rshifts > 0)
			{
				for (int i = 0; i < order; i++)
				{
					int num2 = 0;
					for (int j = 0; j < L; j++)
					{
						num2 += Inlines.silk_RSHIFT32(Inlines.silk_SMULBB(x[num + j], t[t_ptr + j]), rshifts);
					}
					Xt[i] = num2;
					num--;
				}
			}
			else
			{
				Inlines.OpusAssert(rshifts == 0);
				for (int i = 0; i < order; i++)
				{
					Xt[i] = Inlines.silk_inner_prod(x, num, t, t_ptr, L);
					num--;
				}
			}
		}

		internal static void silk_corrMatrix(short[] x, int x_ptr, int L, int order, int head_room, int[] XX, int XX_ptr, BoxedValueInt rshifts)
		{
			SumSqrShift.silk_sum_sqr_shift(out var energy, out var shift, x, x_ptr, L + order - 1);
			int num = Inlines.silk_max(head_room - Inlines.silk_CLZ32(energy), 0);
			energy = Inlines.silk_RSHIFT32(energy, num);
			shift += num;
			for (int i = x_ptr; i < x_ptr + order - 1; i++)
			{
				energy -= Inlines.silk_RSHIFT32(Inlines.silk_SMULBB(x[i], x[i]), shift);
			}
			if (shift < rshifts.Val)
			{
				energy = Inlines.silk_RSHIFT32(energy, rshifts.Val - shift);
				shift = rshifts.Val;
			}
			Inlines.MatrixSet(XX, XX_ptr, 0, 0, order, energy);
			int num2 = x_ptr + order - 1;
			for (int j = 1; j < order; j++)
			{
				energy = Inlines.silk_SUB32(energy, Inlines.silk_RSHIFT32(Inlines.silk_SMULBB(x[num2 + L - j], x[num2 + L - j]), shift));
				energy = Inlines.silk_ADD32(energy, Inlines.silk_RSHIFT32(Inlines.silk_SMULBB(x[num2 - j], x[num2 - j]), shift));
				Inlines.MatrixSet(XX, XX_ptr, j, j, order, energy);
			}
			int num3 = x_ptr + order - 2;
			if (shift > 0)
			{
				for (int k = 1; k < order; k++)
				{
					energy = 0;
					for (int i = 0; i < L; i++)
					{
						energy += Inlines.silk_RSHIFT32(Inlines.silk_SMULBB(x[num2 + i], x[num3 + i]), shift);
					}
					Inlines.MatrixSet(XX, XX_ptr, k, 0, order, energy);
					Inlines.MatrixSet(XX, XX_ptr, 0, k, order, energy);
					for (int j = 1; j < order - k; j++)
					{
						energy = Inlines.silk_SUB32(energy, Inlines.silk_RSHIFT32(Inlines.silk_SMULBB(x[num2 + L - j], x[num3 + L - j]), shift));
						energy = Inlines.silk_ADD32(energy, Inlines.silk_RSHIFT32(Inlines.silk_SMULBB(x[num2 - j], x[num3 - j]), shift));
						Inlines.MatrixSet(XX, XX_ptr, k + j, j, order, energy);
						Inlines.MatrixSet(XX, XX_ptr, j, k + j, order, energy);
					}
					num3--;
				}
			}
			else
			{
				for (int k = 1; k < order; k++)
				{
					energy = Inlines.silk_inner_prod(x, num2, x, num3, L);
					Inlines.MatrixSet(XX, XX_ptr, k, 0, order, energy);
					Inlines.MatrixSet(XX, XX_ptr, 0, k, order, energy);
					for (int j = 1; j < order - k; j++)
					{
						energy = Inlines.silk_SUB32(energy, Inlines.silk_SMULBB(x[num2 + L - j], x[num3 + L - j]));
						energy = Inlines.silk_SMLABB(energy, x[num2 - j], x[num3 - j]);
						Inlines.MatrixSet(XX, XX_ptr, k + j, j, order, energy);
						Inlines.MatrixSet(XX, XX_ptr, j, k + j, order, energy);
					}
					num3--;
				}
			}
			rshifts.Val = shift;
		}
	}
	internal static class DecodeAPI
	{
		internal static int silk_InitDecoder(SilkDecoder decState)
		{
			decState.Reset();
			int result = SilkError.SILK_NO_ERROR;
			SilkChannelDecoder[] channel_state = decState.channel_state;
			for (int i = 0; i < 2; i++)
			{
				result = channel_state[i].silk_init_decoder();
			}
			decState.sStereo.Reset();
			decState.prev_decode_only_middle = 0;
			return result;
		}

		internal static int silk_Decode(SilkDecoder psDec, DecControlState decControl, int lostFlag, int newPacketFlag, EntropyCoder psRangeDec, short[] samplesOut, int samplesOut_ptr, out int nSamplesOut)
		{
			int num = 0;
			int num2 = SilkError.SILK_NO_ERROR;
			BoxedValueInt boxedValueInt = new BoxedValueInt();
			int[] array = new int[2];
			int[] array2 = new int[2];
			SilkChannelDecoder[] channel_state = psDec.channel_state;
			nSamplesOut = 0;
			Inlines.OpusAssert(decControl.nChannelsInternal == 1 || decControl.nChannelsInternal == 2);
			if (newPacketFlag != 0)
			{
				for (int i = 0; i < decControl.nChannelsInternal; i++)
				{
					channel_state[i].nFramesDecoded = 0;
				}
			}
			if (decControl.nChannelsInternal > psDec.nChannelsInternal)
			{
				num2 += channel_state[1].silk_init_decoder();
			}
			int num3 = ((decControl.nChannelsInternal == 1 && psDec.nChannelsInternal == 2 && decControl.internalSampleRate == 1000 * channel_state[0].fs_kHz) ? 1 : 0);
			if (channel_state[0].nFramesDecoded == 0)
			{
				for (int i = 0; i < decControl.nChannelsInternal; i++)
				{
					if (decControl.payloadSize_ms == 0)
					{
						channel_state[i].nFramesPerPacket = 1;
						channel_state[i].nb_subfr = 2;
					}
					else if (decControl.payloadSize_ms == 10)
					{
						channel_state[i].nFramesPerPacket = 1;
						channel_state[i].nb_subfr = 2;
					}
					else if (decControl.payloadSize_ms == 20)
					{
						channel_state[i].nFramesPerPacket = 1;
						channel_state[i].nb_subfr = 4;
					}
					else if (decControl.payloadSize_ms == 40)
					{
						channel_state[i].nFramesPerPacket = 2;
						channel_state[i].nb_subfr = 4;
					}
					else
					{
						if (decControl.payloadSize_ms != 60)
						{
							Inlines.OpusAssert(condition: false);
							return SilkError.SILK_DEC_INVALID_FRAME_SIZE;
						}
						channel_state[i].nFramesPerPacket = 3;
						channel_state[i].nb_subfr = 4;
					}
					int num4 = (decControl.internalSampleRate >> 10) + 1;
					if (num4 != 8 && num4 != 12 && num4 != 16)
					{
						Inlines.OpusAssert(condition: false);
						return SilkError.SILK_DEC_INVALID_SAMPLING_FREQUENCY;
					}
					num2 += channel_state[i].silk_decoder_set_fs(num4, decControl.API_sampleRate);
				}
			}
			if (decControl.nChannelsAPI == 2 && decControl.nChannelsInternal == 2 && (psDec.nChannelsAPI == 1 || psDec.nChannelsInternal == 1))
			{
				Arrays.MemSetShort(psDec.sStereo.pred_prev_Q13, 0, 2);
				Arrays.MemSetShort(psDec.sStereo.sSide, 0, 2);
				channel_state[1].resampler_state.Assign(channel_state[0].resampler_state);
			}
			psDec.nChannelsAPI = decControl.nChannelsAPI;
			psDec.nChannelsInternal = decControl.nChannelsInternal;
			if (decControl.API_sampleRate > 48000 || decControl.API_sampleRate < 8000)
			{
				return SilkError.SILK_DEC_INVALID_SAMPLING_FREQUENCY;
			}
			if (lostFlag != 1 && channel_state[0].nFramesDecoded == 0)
			{
				for (int i = 0; i < decControl.nChannelsInternal; i++)
				{
					for (int j = 0; j < channel_state[i].nFramesPerPacket; j++)
					{
						channel_state[i].VAD_flags[j] = psRangeDec.dec_bit_logp(1u);
					}
					channel_state[i].LBRR_flag = psRangeDec.dec_bit_logp(1u);
				}
				for (int i = 0; i < decControl.nChannelsInternal; i++)
				{
					Arrays.MemSetInt(channel_state[i].LBRR_flags, 0, 3);
					if (channel_state[i].LBRR_flag == 0)
					{
						continue;
					}
					if (channel_state[i].nFramesPerPacket == 1)
					{
						channel_state[i].LBRR_flags[0] = 1;
						continue;
					}
					int a = psRangeDec.dec_icdf(Tables.silk_LBRR_flags_iCDF_ptr[channel_state[i].nFramesPerPacket - 2], 8u) + 1;
					for (int j = 0; j < channel_state[i].nFramesPerPacket; j++)
					{
						channel_state[i].LBRR_flags[j] = Inlines.silk_RSHIFT(a, j) & 1;
					}
				}
				if (lostFlag == 0)
				{
					for (int j = 0; j < channel_state[0].nFramesPerPacket; j++)
					{
						for (int i = 0; i < decControl.nChannelsInternal; i++)
						{
							if (channel_state[i].LBRR_flags[j] == 0)
							{
								continue;
							}
							short[] pulses = new short[320];
							if (decControl.nChannelsInternal == 2 && i == 0)
							{
								Stereo.silk_stereo_decode_pred(psRangeDec, array2);
								if (channel_state[1].LBRR_flags[j] == 0)
								{
									BoxedValueInt boxedValueInt2 = new BoxedValueInt(num);
									Stereo.silk_stereo_decode_mid_only(psRangeDec, boxedValueInt2);
									num = boxedValueInt2.Val;
								}
							}
							DecodeIndices.silk_decode_indices(condCoding: (j > 0 && channel_state[i].LBRR_flags[j - 1] != 0) ? 2 : 0, psDec: channel_state[i], psRangeDec: psRangeDec, FrameIndex: j, decode_LBRR: 1);
							DecodePulses.silk_decode_pulses(psRangeDec, pulses, channel_state[i].indices.signalType, channel_state[i].indices.quantOffsetType, channel_state[i].frame_length);
						}
					}
				}
			}
			if (decControl.nChannelsInternal == 2)
			{
				if (lostFlag == 0 || (lostFlag == 2 && channel_state[0].LBRR_flags[channel_state[0].nFramesDecoded] == 1))
				{
					Stereo.silk_stereo_decode_pred(psRangeDec, array2);
					if ((lostFlag == 0 && channel_state[1].VAD_flags[channel_state[0].nFramesDecoded] == 0) || (lostFlag == 2 && channel_state[1].LBRR_flags[channel_state[0].nFramesDecoded] == 0))
					{
						BoxedValueInt boxedValueInt3 = new BoxedValueInt(num);
						Stereo.silk_stereo_decode_mid_only(psRangeDec, boxedValueInt3);
						num = boxedValueInt3.Val;
					}
					else
					{
						num = 0;
					}
				}
				else
				{
					for (int i = 0; i < 2; i++)
					{
						array2[i] = psDec.sStereo.pred_prev_Q13[i];
					}
				}
			}
			if (decControl.nChannelsInternal == 2 && num == 0 && psDec.prev_decode_only_middle == 1)
			{
				Arrays.MemSetShort(psDec.channel_state[1].outBuf, 0, 480);
				Arrays.MemSetInt(psDec.channel_state[1].sLPC_Q14_buf, 0, 16);
				psDec.channel_state[1].lagPrev = 100;
				psDec.channel_state[1].LastGainIndex = 10;
				psDec.channel_state[1].prevSignalType = 0;
				psDec.channel_state[1].first_frame_after_reset = 1;
			}
			int num5 = ((decControl.internalSampleRate * decControl.nChannelsInternal < decControl.API_sampleRate * decControl.nChannelsAPI) ? 1 : 0);
			short[] array3;
			if (num5 != 0)
			{
				array3 = samplesOut;
				array[0] = samplesOut_ptr;
				array[1] = samplesOut_ptr + channel_state[0].frame_length + 2;
			}
			else
			{
				short[] array4 = new short[decControl.nChannelsInternal * (channel_state[0].frame_length + 2)];
				array3 = array4;
				array[0] = 0;
				array[1] = channel_state[0].frame_length + 2;
			}
			int num6 = ((lostFlag != 0) ? ((psDec.prev_decode_only_middle == 0 || (decControl.nChannelsInternal == 2 && lostFlag == 2 && channel_state[1].LBRR_flags[channel_state[1].nFramesDecoded] == 1)) ? 1 : 0) : ((num == 0) ? 1 : 0));
			for (int i = 0; i < decControl.nChannelsInternal; i++)
			{
				if (i == 0 || num6 != 0)
				{
					int num7 = channel_state[0].nFramesDecoded - i;
					int condCoding2 = ((num7 > 0) ? ((lostFlag == 2) ? ((channel_state[i].LBRR_flags[num7 - 1] != 0) ? 2 : 0) : ((i > 0 && psDec.prev_decode_only_middle != 0) ? 1 : 2)) : 0);
					num2 += channel_state[i].silk_decode_frame(psRangeDec, array3, array[i] + 2, boxedValueInt, lostFlag, condCoding2);
				}
				else
				{
					Arrays.MemSetWithOffset(array3, (short)0, array[i] + 2, boxedValueInt.Val);
				}
				channel_state[i].nFramesDecoded++;
			}
			if (decControl.nChannelsAPI == 2 && decControl.nChannelsInternal == 2)
			{
				Stereo.silk_stereo_MS_to_LR(psDec.sStereo, array3, array[0], array3, array[1], array2, channel_state[0].fs_kHz, boxedValueInt.Val);
			}
			else
			{
				Array.Copy(psDec.sStereo.sMid, 0, array3, array[0], 2);
				Array.Copy(array3, array[0] + boxedValueInt.Val, psDec.sStereo.sMid, 0, 2);
			}
			nSamplesOut = Inlines.silk_DIV32(boxedValueInt.Val * decControl.API_sampleRate, Inlines.silk_SMULBB(channel_state[0].fs_kHz, 1000));
			short[] array6;
			int num8;
			if (decControl.nChannelsAPI == 2)
			{
				short[] array5 = new short[nSamplesOut];
				array6 = array5;
				num8 = 0;
			}
			else
			{
				array6 = samplesOut;
				num8 = samplesOut_ptr;
			}
			if (num5 != 0)
			{
				short[] array7 = new short[decControl.nChannelsInternal * (channel_state[0].frame_length + 2)];
				Array.Copy(samplesOut, samplesOut_ptr, array7, 0, decControl.nChannelsInternal * (channel_state[0].frame_length + 2));
				array3 = array7;
				array[0] = 0;
				array[1] = channel_state[0].frame_length + 2;
			}
			for (int i = 0; i < Inlines.silk_min(decControl.nChannelsAPI, decControl.nChannelsInternal); i++)
			{
				num2 += Resampler.silk_resampler(channel_state[i].resampler_state, array6, num8, array3, array[i] + 1, boxedValueInt.Val);
				if (decControl.nChannelsAPI == 2)
				{
					int num9 = samplesOut_ptr + i;
					for (int j = 0; j < nSamplesOut; j++)
					{
						samplesOut[num9 + 2 * j] = array6[num8 + j];
					}
				}
			}
			if (decControl.nChannelsAPI == 2 && decControl.nChannelsInternal == 1)
			{
				if (num3 != 0)
				{
					num2 += Resampler.silk_resampler(channel_state[1].resampler_state, array6, num8, array3, array[0] + 1, boxedValueInt.Val);
					for (int j = 0; j < nSamplesOut; j++)
					{
						samplesOut[samplesOut_ptr + 1 + 2 * j] = array6[num8 + j];
					}
				}
				else
				{
					for (int j = 0; j < nSamplesOut; j++)
					{
						samplesOut[samplesOut_ptr + 1 + 2 * j] = samplesOut[samplesOut_ptr + 2 * j];
					}
				}
			}
			if (channel_state[0].prevSignalType == 2)
			{
				int[] array8 = new int[3] { 6, 4, 3 };
				decControl.prevPitchLag = channel_state[0].lagPrev * array8[channel_state[0].fs_kHz - 8 >> 2];
			}
			else
			{
				decControl.prevPitchLag = 0;
			}
			if (lostFlag == 1)
			{
				for (int j = 0; j < psDec.nChannelsInternal; j++)
				{
					psDec.channel_state[j].LastGainIndex = 10;
				}
			}
			else
			{
				psDec.prev_decode_only_middle = num;
			}
			return num2;
		}
	}
	internal static class DecodeCore
	{
		internal static void silk_decode_core(SilkChannelDecoder psDec, SilkDecoderControl psDecCtrl, short[] xq, int xq_ptr, short[] pulses)
		{
			int num = 0;
			short[] lTPCoef_Q = psDecCtrl.LTPCoef_Q14;
			Inlines.OpusAssert(psDec.prev_gain_Q16 != 0);
			short[] array = new short[psDec.ltp_mem_length];
			int[] array2 = new int[psDec.ltp_mem_length + psDec.frame_length];
			int[] array3 = new int[psDec.subfr_length];
			int[] array4 = new int[psDec.subfr_length + 16];
			int num2 = Tables.silk_Quantization_Offsets_Q10[psDec.indices.signalType >> 1][psDec.indices.quantOffsetType];
			int num3 = ((psDec.indices.NLSFInterpCoef_Q2 < 4) ? 1 : 0);
			int seed = psDec.indices.Seed;
			for (int i = 0; i < psDec.frame_length; i++)
			{
				seed = Inlines.silk_RAND(seed);
				psDec.exc_Q14[i] = Inlines.silk_LSHIFT(pulses[i], 14);
				if (psDec.exc_Q14[i] > 0)
				{
					psDec.exc_Q14[i] -= 1280;
				}
				else if (psDec.exc_Q14[i] < 0)
				{
					psDec.exc_Q14[i] += 1280;
				}
				psDec.exc_Q14[i] += num2 << 4;
				if (seed < 0)
				{
					psDec.exc_Q14[i] = -psDec.exc_Q14[i];
				}
				seed = Inlines.silk_ADD32_ovflw(seed, pulses[i]);
			}
			Array.Copy(psDec.sLPC_Q14_buf, array4, 16);
			int num4 = 0;
			int num5 = xq_ptr;
			int num6 = psDec.ltp_mem_length;
			for (int j = 0; j < psDec.nb_subfr; j++)
			{
				int[] array5 = array3;
				int num7 = 0;
				short[] array6 = psDecCtrl.PredCoef_Q12[j >> 1];
				int num8 = j * 5;
				int num9 = psDec.indices.signalType;
				int b = Inlines.silk_RSHIFT(psDecCtrl.Gains_Q16[j], 6);
				int num10 = Inlines.silk_INVERSE32_varQ(psDecCtrl.Gains_Q16[j], 47);
				int num11;
				if (psDecCtrl.Gains_Q16[j] != psDec.prev_gain_Q16)
				{
					num11 = Inlines.silk_DIV32_varQ(psDec.prev_gain_Q16, psDecCtrl.Gains_Q16[j], 16);
					for (int i = 0; i < 16; i++)
					{
						array4[i] = Inlines.silk_SMULWW(num11, array4[i]);
					}
				}
				else
				{
					num11 = 65536;
				}
				Inlines.OpusAssert(num10 != 0);
				psDec.prev_gain_Q16 = psDecCtrl.Gains_Q16[j];
				if (psDec.lossCnt != 0 && psDec.prevSignalType == 2 && psDec.indices.signalType != 2 && j < 2)
				{
					Arrays.MemSetWithOffset(lTPCoef_Q, (short)0, num8, 5);
					lTPCoef_Q[num8 + 2] = 4096;
					num9 = 2;
					psDecCtrl.pitchL[j] = psDec.lagPrev;
				}
				if (num9 == 2)
				{
					num = psDecCtrl.pitchL[j];
					if (j == 0 || (j == 2 && num3 != 0))
					{
						int num12 = psDec.ltp_mem_length - num - psDec.LPC_order - 2;
						Inlines.OpusAssert(num12 > 0);
						if (j == 2)
						{
							Array.Copy(xq, xq_ptr, psDec.outBuf, psDec.ltp_mem_length, 2 * psDec.subfr_length);
						}
						Filters.silk_LPC_analysis_filter(array, num12, psDec.outBuf, num12 + j * psDec.subfr_length, array6, 0, psDec.ltp_mem_length - num12, psDec.LPC_order);
						if (j == 0)
						{
							num10 = Inlines.silk_LSHIFT(Inlines.silk_SMULWB(num10, psDecCtrl.LTP_scale_Q14), 2);
						}
						for (int i = 0; i < num + 2; i++)
						{
							array2[num6 - i - 1] = Inlines.silk_SMULWB(num10, array[psDec.ltp_mem_length - i - 1]);
						}
					}
					else if (num11 != 65536)
					{
						for (int i = 0; i < num + 2; i++)
						{
							array2[num6 - i - 1] = Inlines.silk_SMULWW(num11, array2[num6 - i - 1]);
						}
					}
				}
				if (num9 == 2)
				{
					int num13 = num6 - num + 2;
					for (int i = 0; i < psDec.subfr_length; i++)
					{
						int a = 2;
						a = Inlines.silk_SMLAWB(a, array2[num13], lTPCoef_Q[num8]);
						a = Inlines.silk_SMLAWB(a, array2[num13 - 1], lTPCoef_Q[num8 + 1]);
						a = Inlines.silk_SMLAWB(a, array2[num13 - 2], lTPCoef_Q[num8 + 2]);
						a = Inlines.silk_SMLAWB(a, array2[num13 - 3], lTPCoef_Q[num8 + 3]);
						a = Inlines.silk_SMLAWB(a, array2[num13 - 4], lTPCoef_Q[num8 + 4]);
						num13++;
						array5[num7 + i] = Inlines.silk_ADD_LSHIFT32(psDec.exc_Q14[num4 + i], a, 1);
						array2[num6] = Inlines.silk_LSHIFT(array5[num7 + i], 1);
						num6++;
					}
				}
				else
				{
					array5 = psDec.exc_Q14;
					num7 = num4;
				}
				for (int i = 0; i < psDec.subfr_length; i++)
				{
					Inlines.OpusAssert(psDec.LPC_order == 10 || psDec.LPC_order == 16);
					int a2 = Inlines.silk_RSHIFT(psDec.LPC_order, 1);
					a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 1], array6[0]);
					a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 2], array6[1]);
					a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 3], array6[2]);
					a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 4], array6[3]);
					a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 5], array6[4]);
					a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 6], array6[5]);
					a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 7], array6[6]);
					a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 8], array6[7]);
					a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 9], array6[8]);
					a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 10], array6[9]);
					if (psDec.LPC_order == 16)
					{
						a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 11], array6[10]);
						a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 12], array6[11]);
						a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 13], array6[12]);
						a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 14], array6[13]);
						a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 15], array6[14]);
						a2 = Inlines.silk_SMLAWB(a2, array4[16 + i - 16], array6[15]);
					}
					array4[16 + i] = Inlines.silk_ADD_LSHIFT32(array5[num7 + i], a2, 4);
					xq[num5 + i] = (short)Inlines.silk_SAT16(Inlines.silk_RSHIFT_ROUND(Inlines.silk_SMULWW(array4[16 + i], b), 8));
				}
				Array.Copy(array4, psDec.subfr_length, array4, 0, 16);
				num4 += psDec.subfr_length;
				num5 += psDec.subfr_length;
			}
			Array.Copy(array4, 0, psDec.sLPC_Q14_buf, 0, 16);
		}
	}
	internal static class DecodeIndices
	{
		internal static void silk_decode_indices(SilkChannelDecoder psDec, EntropyCoder psRangeDec, int FrameIndex, int decode_LBRR, int condCoding)
		{
			short[] array = new short[psDec.LPC_order];
			byte[] pred_Q = new byte[psDec.LPC_order];
			int num = ((decode_LBRR == 0 && psDec.VAD_flags[FrameIndex] == 0) ? psRangeDec.dec_icdf(Tables.silk_type_offset_no_VAD_iCDF, 8u) : (psRangeDec.dec_icdf(Tables.silk_type_offset_VAD_iCDF, 8u) + 2));
			psDec.indices.signalType = (sbyte)Inlines.silk_RSHIFT(num, 1);
			psDec.indices.quantOffsetType = (sbyte)(num & 1);
			if (condCoding == 2)
			{
				psDec.indices.GainsIndices[0] = (sbyte)psRangeDec.dec_icdf(Tables.silk_delta_gain_iCDF, 8u);
			}
			else
			{
				psDec.indices.GainsIndices[0] = (sbyte)Inlines.silk_LSHIFT(psRangeDec.dec_icdf(Tables.silk_gain_iCDF[psDec.indices.signalType], 8u), 3);
				psDec.indices.GainsIndices[0] += (sbyte)psRangeDec.dec_icdf(Tables.silk_uniform8_iCDF, 8u);
			}
			for (int i = 1; i < psDec.nb_subfr; i++)
			{
				psDec.indices.GainsIndices[i] = (sbyte)psRangeDec.dec_icdf(Tables.silk_delta_gain_iCDF, 8u);
			}
			psDec.indices.NLSFIndices[0] = (sbyte)psRangeDec.dec_icdf(psDec.psNLSF_CB.CB1_iCDF, (psDec.indices.signalType >> 1) * psDec.psNLSF_CB.nVectors, 8u);
			NLSF.silk_NLSF_unpack(array, pred_Q, psDec.psNLSF_CB, psDec.indices.NLSFIndices[0]);
			Inlines.OpusAssert(psDec.psNLSF_CB.order == psDec.LPC_order);
			for (int i = 0; i < psDec.psNLSF_CB.order; i++)
			{
				num = psRangeDec.dec_icdf(psDec.psNLSF_CB.ec_iCDF, array[i], 8u);
				switch (num)
				{
				case 0:
					num -= psRangeDec.dec_icdf(Tables.silk_NLSF_EXT_iCDF, 8u);
					break;
				case 8:
					num += psRangeDec.dec_icdf(Tables.silk_NLSF_EXT_iCDF, 8u);
					break;
				}
				psDec.indices.NLSFIndices[i + 1] = (sbyte)(num - 4);
			}
			if (psDec.nb_subfr == 4)
			{
				psDec.indices.NLSFInterpCoef_Q2 = (sbyte)psRangeDec.dec_icdf(Tables.silk_NLSF_interpolation_factor_iCDF, 8u);
			}
			else
			{
				psDec.indices.NLSFInterpCoef_Q2 = 4;
			}
			if (psDec.indices.signalType == 2)
			{
				int num2 = 1;
				if (condCoding == 2 && psDec.ec_prevSignalType == 2)
				{
					int num3 = (short)psRangeDec.dec_icdf(Tables.silk_pitch_delta_iCDF, 8u);
					if (num3 > 0)
					{
						num3 -= 9;
						psDec.indices.lagIndex = (short)(psDec.ec_prevLagIndex + num3);
						num2 = 0;
					}
				}
				if (num2 != 0)
				{
					psDec.indices.lagIndex = (short)(psRangeDec.dec_icdf(Tables.silk_pitch_lag_iCDF, 8u) * Inlines.silk_RSHIFT(psDec.fs_kHz, 1));
					psDec.indices.lagIndex += (short)psRangeDec.dec_icdf(psDec.pitch_lag_low_bits_iCDF, 8u);
				}
				psDec.ec_prevLagIndex = psDec.indices.lagIndex;
				psDec.indices.contourIndex = (sbyte)psRangeDec.dec_icdf(psDec.pitch_contour_iCDF, 8u);
				psDec.indices.PERIndex = (sbyte)psRangeDec.dec_icdf(Tables.silk_LTP_per_index_iCDF, 8u);
				for (int j = 0; j < psDec.nb_subfr; j++)
				{
					psDec.indices.LTPIndex[j] = (sbyte)psRangeDec.dec_icdf(Tables.silk_LTP_gain_iCDF_ptrs[psDec.indices.PERIndex], 8u);
				}
				if (condCoding == 0)
				{
					psDec.indices.LTP_scaleIndex = (sbyte)psRangeDec.dec_icdf(Tables.silk_LTPscale_iCDF, 8u);
				}
				else
				{
					psDec.indices.LTP_scaleIndex = 0;
				}
			}
			psDec.ec_prevSignalType = psDec.indices.signalType;
			psDec.indices.Seed = (sbyte)psRangeDec.dec_icdf(Tables.silk_uniform4_iCDF, 8u);
		}
	}
	internal class DecodeParameters
	{
		internal static void silk_decode_parameters(SilkChannelDecoder psDec, SilkDecoderControl psDecCtrl, int condCoding)
		{
			short[] array = new short[psDec.LPC_order];
			short[] array2 = new short[psDec.LPC_order];
			BoxedValueSbyte boxedValueSbyte = new BoxedValueSbyte(psDec.LastGainIndex);
			GainQuantization.silk_gains_dequant(psDecCtrl.Gains_Q16, psDec.indices.GainsIndices, boxedValueSbyte, (condCoding == 2) ? 1 : 0, psDec.nb_subfr);
			psDec.LastGainIndex = boxedValueSbyte.Val;
			NLSF.silk_NLSF_decode(array, psDec.indices.NLSFIndices, psDec.psNLSF_CB);
			NLSF.silk_NLSF2A(psDecCtrl.PredCoef_Q12[1], array, psDec.LPC_order);
			if (psDec.first_frame_after_reset == 1)
			{
				psDec.indices.NLSFInterpCoef_Q2 = 4;
			}
			if (psDec.indices.NLSFInterpCoef_Q2 < 4)
			{
				for (int i = 0; i < psDec.LPC_order; i++)
				{
					array2[i] = (short)(psDec.prevNLSF_Q15[i] + Inlines.silk_RSHIFT(Inlines.silk_MUL(psDec.indices.NLSFInterpCoef_Q2, array[i] - psDec.prevNLSF_Q15[i]), 2));
				}
				NLSF.silk_NLSF2A(psDecCtrl.PredCoef_Q12[0], array2, psDec.LPC_order);
			}
			else
			{
				Array.Copy(psDecCtrl.PredCoef_Q12[1], psDecCtrl.PredCoef_Q12[0], psDec.LPC_order);
			}
			Array.Copy(array, psDec.prevNLSF_Q15, psDec.LPC_order);
			if (psDec.lossCnt != 0)
			{
				BWExpander.silk_bwexpander(psDecCtrl.PredCoef_Q12[0], psDec.LPC_order, 63570);
				BWExpander.silk_bwexpander(psDecCtrl.PredCoef_Q12[1], psDec.LPC_order, 63570);
			}
			if (psDec.indices.signalType == 2)
			{
				DecodePitch.silk_decode_pitch(psDec.indices.lagIndex, psDec.indices.contourIndex, psDecCtrl.pitchL, psDec.fs_kHz, psDec.nb_subfr);
				sbyte[][] array3 = Tables.silk_LTP_vq_ptrs_Q7[psDec.indices.PERIndex];
				int num;
				for (int j = 0; j < psDec.nb_subfr; j++)
				{
					num = psDec.indices.LTPIndex[j];
					for (int i = 0; i < 5; i++)
					{
						psDecCtrl.LTPCoef_Q14[j * 5 + i] = (short)Inlines.silk_LSHIFT(array3[num][i], 7);
					}
				}
				num = psDec.indices.LTP_scaleIndex;
				psDecCtrl.LTP_scale_Q14 = Tables.silk_LTPScales_table_Q14[num];
			}
			else
			{
				Arrays.MemSetInt(psDecCtrl.pitchL, 0, psDec.nb_subfr);
				Arrays.MemSetShort(psDecCtrl.LTPCoef_Q14, 0, 5 * psDec.nb_subfr);
				psDec.indices.PERIndex = 0;
				psDecCtrl.LTP_scale_Q14 = 0;
			}
		}
	}
	internal static class DecodePitch
	{
		internal static void silk_decode_pitch(short lagIndex, sbyte contourIndex, int[] pitch_lags, int Fs_kHz, int nb_subfr)
		{
			sbyte[][] array;
			if (Fs_kHz == 8)
			{
				if (nb_subfr == 4)
				{
					array = Tables.silk_CB_lags_stage2;
				}
				else
				{
					Inlines.OpusAssert(nb_subfr == 2);
					array = Tables.silk_CB_lags_stage2_10_ms;
				}
			}
			else if (nb_subfr == 4)
			{
				array = Tables.silk_CB_lags_stage3;
			}
			else
			{
				Inlines.OpusAssert(nb_subfr == 2);
				array = Tables.silk_CB_lags_stage3_10_ms;
			}
			int num = Inlines.silk_SMULBB(2, Fs_kHz);
			int limit = Inlines.silk_SMULBB(18, Fs_kHz);
			int num2 = num + lagIndex;
			for (int i = 0; i < nb_subfr; i++)
			{
				pitch_lags[i] = num2 + array[i][contourIndex];
				pitch_lags[i] = Inlines.silk_LIMIT(pitch_lags[i], num, limit);
			}
		}
	}
	internal static class DecodePulses
	{
		internal static void silk_decode_pulses(EntropyCoder psRangeDec, short[] pulses, int signalType, int quantOffsetType, int frame_length)
		{
			int[] array = new int[20];
			int[] array2 = new int[20];
			int num = psRangeDec.dec_icdf(Tables.silk_rate_levels_iCDF[signalType >> 1], 8u);
			Inlines.OpusAssert(condition: true);
			int num2 = Inlines.silk_RSHIFT(frame_length, 4);
			if (num2 * 16 < frame_length)
			{
				Inlines.OpusAssert(frame_length == 120);
				num2++;
			}
			for (int i = 0; i < num2; i++)
			{
				array2[i] = 0;
				array[i] = psRangeDec.dec_icdf(Tables.silk_pulses_per_block_iCDF[num], 8u);
				while (array[i] == 17)
				{
					array2[i]++;
					array[i] = psRangeDec.dec_icdf(Tables.silk_pulses_per_block_iCDF[9], (array2[i] == 10) ? 1 : 0, 8u);
				}
			}
			for (int i = 0; i < num2; i++)
			{
				if (array[i] > 0)
				{
					ShellCoder.silk_shell_decoder(pulses, Inlines.silk_SMULBB(i, 16), psRangeDec, array[i]);
				}
				else
				{
					Arrays.MemSetWithOffset(pulses, (short)0, Inlines.silk_SMULBB(i, 16), 16);
				}
			}
			for (int i = 0; i < num2; i++)
			{
				if (array2[i] <= 0)
				{
					continue;
				}
				int num3 = array2[i];
				int num4 = Inlines.silk_SMULBB(i, 16);
				for (int j = 0; j < 16; j++)
				{
					int num5 = pulses[num4 + j];
					for (int k = 0; k < num3; k++)
					{
						num5 = Inlines.silk_LSHIFT(num5, 1);
						num5 += psRangeDec.dec_icdf(Tables.silk_lsb_iCDF, 8u);
					}
					pulses[num4 + j] = (short)num5;
				}
				array[i] |= num3 << 5;
			}
			CodeSigns.silk_decode_signs(psRangeDec, pulses, frame_length, signalType, quantOffsetType, array);
		}
	}
	internal static class EncodeAPI
	{
		internal static int silk_InitEncoder(SilkEncoder encState, EncControlState encStatus)
		{
			int num = SilkError.SILK_NO_ERROR;
			encState.Reset();
			for (int i = 0; i < 2; i++)
			{
				num += SilkEncoder.silk_init_encoder(encState.state_Fxx[i]);
				Inlines.OpusAssert(num == SilkError.SILK_NO_ERROR);
			}
			encState.nChannelsAPI = 1;
			encState.nChannelsInternal = 1;
			num += silk_QueryEncoder(encState, encStatus);
			Inlines.OpusAssert(num == SilkError.SILK_NO_ERROR);
			return num;
		}

		internal static int silk_QueryEncoder(SilkEncoder encState, EncControlState encStatus)
		{
			int sILK_NO_ERROR = SilkError.SILK_NO_ERROR;
			SilkChannelEncoder silkChannelEncoder = encState.state_Fxx[0];
			encStatus.Reset();
			encStatus.nChannelsAPI = encState.nChannelsAPI;
			encStatus.nChannelsInternal = encState.nChannelsInternal;
			encStatus.API_sampleRate = silkChannelEncoder.API_fs_Hz;
			encStatus.maxInternalSampleRate = silkChannelEncoder.maxInternal_fs_Hz;
			encStatus.minInternalSampleRate = silkChannelEncoder.minInternal_fs_Hz;
			encStatus.desiredInternalSampleRate = silkChannelEncoder.desiredInternal_fs_Hz;
			encStatus.payloadSize_ms = silkChannelEncoder.PacketSize_ms;
			encStatus.bitRate = silkChannelEncoder.TargetRate_bps;
			encStatus.packetLossPercentage = silkChannelEncoder.PacketLoss_perc;
			encStatus.complexity = silkChannelEncoder.Complexity;
			encStatus.useInBandFEC = silkChannelEncoder.useInBandFEC;
			encStatus.useDTX = silkChannelEncoder.useDTX;
			encStatus.useCBR = silkChannelEncoder.useCBR;
			encStatus.internalSampleRate = Inlines.silk_SMULBB(silkChannelEncoder.fs_kHz, 1000);
			encStatus.allowBandwidthSwitch = silkChannelEncoder.allow_bandwidth_switch;
			encStatus.inWBmodeWithoutVariableLP = ((silkChannelEncoder.fs_kHz == 16 && silkChannelEncoder.sLP.mode == 0) ? 1 : 0);
			return sILK_NO_ERROR;
		}

		internal static int silk_Encode(SilkEncoder psEnc, EncControlState encControl, short[] samplesIn, int nSamplesIn, EntropyCoder psRangeEnc, BoxedValueInt nBytesOut, int prefillFlag)
		{
			int sILK_NO_ERROR = SilkError.SILK_NO_ERROR;
			int payloadSize_ms = 0;
			int complexity = 0;
			int num = 0;
			int[] array = new int[2];
			nBytesOut.Val = 0;
			if (encControl.reducedDe

plugins/Lib/DiscJockey.dll

Decompiled 10 months ago
#define DEBUG
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net.Http;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Cryptography;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using Concentus.Enums;
using Concentus.Structs;
using Cysharp.Threading.Tasks;
using Cysharp.Threading.Tasks.CompilerServices;
using DiscJockey.Audio;
using DiscJockey.Audio.ContentProviders;
using DiscJockey.Audio.ContentProviders.Base;
using DiscJockey.Audio.Data;
using DiscJockey.Audio.Utils;
using DiscJockey.Data;
using DiscJockey.Input;
using DiscJockey.Managers;
using DiscJockey.Networking;
using DiscJockey.Networking.Audio;
using DiscJockey.Networking.Audio.Utils;
using DiscJockey.Patches;
using DiscJockey.Utils;
using GameNetcodeStuff;
using HarmonyLib;
using LethalCompanyInputUtils.Api;
using Microsoft.CodeAnalysis;
using NAudio.MediaFoundation;
using NAudio.Wave;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using TMPro;
using Unity.Collections;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;
using UnityEngine.LowLevel;
using UnityEngine.UI;
using YoutubeDLSharp;
using YoutubeDLSharp.Converters;
using YoutubeDLSharp.Helpers;
using YoutubeDLSharp.Metadata;
using YoutubeDLSharp.Options;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: AssemblyCompany("DiscJockey")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("DiscJockey")]
[assembly: AssemblyTitle("DiscJockey")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
internal class <Module>
{
	static <Module>()
	{
	}
}
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace YoutubeDLSharp
{
	public enum DownloadState
	{
		None,
		PreProcessing,
		Downloading,
		PostProcessing,
		Error,
		Success
	}
	public class DownloadProgress
	{
		public DownloadState State { get; }

		public float Progress { get; }

		public string TotalDownloadSize { get; }

		public string DownloadSpeed { get; }

		public string ETA { get; }

		public int VideoIndex { get; }

		public string Data { get; }

		public DownloadProgress(DownloadState status, float progress = 0f, string totalDownloadSize = null, string downloadSpeed = null, string eta = null, int index = 1, string data = null)
		{
			State = status;
			Progress = progress;
			TotalDownloadSize = totalDownloadSize;
			DownloadSpeed = downloadSpeed;
			ETA = eta;
			VideoIndex = index;
			Data = data;
		}
	}
	public class RunResult<T>
	{
		public bool Success { get; }

		public string[] ErrorOutput { get; }

		public T Data { get; }

		public RunResult(bool success, string[] error, T result)
		{
			Success = success;
			ErrorOutput = error;
			Data = result;
		}
	}
	public static class Utils
	{
		public struct FFBinaryDownloadMetadata
		{
			public string URL;

			public string ExpectedMD5Checksum;

			public FFBinaryDownloadMetadata(string url, string expectedMD5Checksum)
			{
				URL = url;
				ExpectedMD5Checksum = expectedMD5Checksum;
			}
		}

		internal class FFmpegApi
		{
			public enum BinaryType
			{
				[EnumMember(Value = "ffmpeg")]
				FFmpeg,
				[EnumMember(Value = "ffprobe")]
				FFprobe
			}

			public class Root
			{
				[JsonProperty("version")]
				public string Version { get; set; }

				[JsonProperty("permalink")]
				public string Permalink { get; set; }

				[JsonProperty("bin")]
				public Bin Bin { get; set; }
			}

			public class Bin
			{
				[JsonProperty("windows-64")]
				public OsBinVersion Windows64 { get; set; }

				[JsonProperty("linux-64")]
				public OsBinVersion Linux64 { get; set; }

				[JsonProperty("osx-64")]
				public OsBinVersion Osx64 { get; set; }
			}

			public class OsBinVersion
			{
				[JsonProperty("ffmpeg")]
				public string Ffmpeg { get; set; }

				[JsonProperty("ffprobe")]
				public string Ffprobe { get; set; }
			}
		}

		private static HttpClient _client;

		private static readonly Regex rgxTimestamp = new Regex("[0-9]+(?::[0-9]+)+", RegexOptions.Compiled);

		private static readonly Dictionary<char, string> accentChars = "ÂÃÄÀÁÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖŐØŒÙÚÛÜŰÝÞßàáâãäåæçèéêëìíîïðñòóôõöőøœùúûüűýþÿ".Zip(new string[68]
		{
			"A", "A", "A", "A", "A", "A", "AE", "C", "E", "E",
			"E", "E", "I", "I", "I", "I", "D", "N", "O", "O",
			"O", "O", "O", "O", "O", "OE", "U", "U", "U", "U",
			"U", "Y", "P", "ss", "a", "a", "a", "a", "a", "a",
			"ae", "c", "e", "e", "e", "e", "i", "i", "i", "i",
			"o", "n", "o", "o", "o", "o", "o", "o", "o", "oe",
			"u", "u", "u", "u", "u", "y", "p", "y"
		}, (char c, string s) => new
		{
			Key = c,
			Val = s
		}).ToDictionary(o => o.Key, o => o.Val);

		private static readonly Dictionary<OSVersion, FFBinaryDownloadMetadata> FfmpegDownloads = new Dictionary<OSVersion, FFBinaryDownloadMetadata>
		{
			{
				OSVersion.Windows,
				new FFBinaryDownloadMetadata("https://github.com/ffbinaries/ffbinaries-prebuilt/releases/download/v6.1/ffmpeg-6.1-win-64.zip", "04807e036638e2ad95f42dc8f7ec426d")
			},
			{
				OSVersion.OSX,
				new FFBinaryDownloadMetadata("https://github.com/ffbinaries/ffbinaries-prebuilt/releases/download/v6.1/ffmpeg-6.1-macos-64.zip", "3442106c85dea60302ae3a972494327d")
			},
			{
				OSVersion.Linux,
				new FFBinaryDownloadMetadata("https://github.com/ffbinaries/ffbinaries-prebuilt/releases/download/v6.1/ffmpeg-6.1-linux-64.zip", "bf25e58a1799882782a5106b104e2673")
			}
		};

		private static readonly Dictionary<OSVersion, FFBinaryDownloadMetadata> FfprobeDownloads = new Dictionary<OSVersion, FFBinaryDownloadMetadata>
		{
			{
				OSVersion.Windows,
				new FFBinaryDownloadMetadata("https://github.com/ffbinaries/ffbinaries-prebuilt/releases/download/v6.1/ffprobe-6.1-win-64.zip", "412447f53830826bf91406c88f72d88a")
			},
			{
				OSVersion.OSX,
				new FFBinaryDownloadMetadata("https://github.com/ffbinaries/ffbinaries-prebuilt/releases/download/v6.1/ffprobe-6.1-macos-64.zip", "ce0d21460e432a84398fccaf46b89327")
			},
			{
				OSVersion.Linux,
				new FFBinaryDownloadMetadata("https://github.com/ffbinaries/ffbinaries-prebuilt/releases/download/v6.1/ffprobe-6.1-linux-64.zip", "0dff2a6d2410a9c5d98684a087473c54")
			}
		};

		private static HttpClient Client => _client ?? (_client = new HttpClient(new HttpClientHandler
		{
			UseCookies = false
		}));

		public static string YtDlpBinaryName => GetYtDlpBinaryName();

		public static string FfmpegBinaryName => GetFfmpegBinaryName();

		public static string FfprobeBinaryName => GetFfprobeBinaryName();

		public static string Sanitize(string s, bool restricted = false)
		{
			rgxTimestamp.Replace(s, (Match m) => m.Groups[0].Value.Replace(':', '_'));
			string text = string.Join("", s.Select((char c) => sanitizeChar(c, restricted)));
			text = text.Replace("__", "_").Trim('_');
			if (restricted && text.StartsWith("-_"))
			{
				text = text.Substring(2);
			}
			if (text.StartsWith("-"))
			{
				text = "_" + text.Substring(1);
			}
			text = text.TrimStart('.');
			if (string.IsNullOrWhiteSpace(text))
			{
				text = "_";
			}
			return text;
		}

		private static string sanitizeChar(char c, bool restricted)
		{
			if (restricted && accentChars.ContainsKey(c))
			{
				return accentChars[c];
			}
			if (c == '?' || c < ' ' || c == '\u007f')
			{
				return "";
			}
			switch (c)
			{
			case '"':
				return restricted ? "" : "'";
			case ':':
				return restricted ? "_-" : " -";
			default:
				if ("\\/|*<>".Contains(c))
				{
					return "_";
				}
				if (restricted && "!&'()[]{}$;`^,# ".Contains(c))
				{
					return "_";
				}
				if (restricted && c > '\u007f')
				{
					return "_";
				}
				return c.ToString();
			}
		}

		public static string GetFullPath(string fileName)
		{
			if (File.Exists(fileName))
			{
				return Path.GetFullPath(fileName);
			}
			string environmentVariable = Environment.GetEnvironmentVariable("PATH");
			string[] array = environmentVariable.Split(Path.PathSeparator);
			foreach (string path in array)
			{
				string text = Path.Combine(path, fileName);
				if (File.Exists(text))
				{
					return text;
				}
			}
			return null;
		}

		public static async Task DownloadBinaries(bool skipExisting = true, string directoryPath = "")
		{
			if (skipExisting)
			{
				if (!File.Exists(Path.Combine(directoryPath, GetYtDlpBinaryName())))
				{
					await DownloadYtDlp(directoryPath);
				}
				if (!File.Exists(Path.Combine(directoryPath, GetFfmpegBinaryName())))
				{
					await DownloadFFmpeg(directoryPath);
				}
				if (!File.Exists(Path.Combine(directoryPath, GetFfprobeBinaryName())))
				{
					await DownloadFFprobe(directoryPath);
				}
			}
			else
			{
				await DownloadYtDlp(directoryPath);
				await DownloadFFmpeg(directoryPath);
				await DownloadFFprobe(directoryPath);
			}
		}

		private static string GetYtDlpDownloadUrl()
		{
			return OSHelper.GetOSVersion() switch
			{
				OSVersion.Windows => "https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe", 
				OSVersion.OSX => "https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_macos", 
				OSVersion.Linux => "https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp", 
				_ => throw new Exception("Your OS isn't supported"), 
			};
		}

		private static string GetYtDlpBinaryName()
		{
			string ytDlpDownloadUrl = GetYtDlpDownloadUrl();
			return Path.GetFileName(ytDlpDownloadUrl);
		}

		private static string GetFfmpegBinaryName()
		{
			switch (OSHelper.GetOSVersion())
			{
			case OSVersion.Windows:
				return "ffmpeg.exe";
			case OSVersion.OSX:
			case OSVersion.Linux:
				return "ffmpeg";
			default:
				throw new Exception("Your OS isn't supported");
			}
		}

		private static string GetFfprobeBinaryName()
		{
			switch (OSHelper.GetOSVersion())
			{
			case OSVersion.Windows:
				return "ffprobe.exe";
			case OSVersion.OSX:
			case OSVersion.Linux:
				return "ffprobe";
			default:
				throw new Exception("Your OS isn't supported");
			}
		}

		public static async Task DownloadYtDlp(string directoryPath = "")
		{
			string downloadUrl = GetYtDlpDownloadUrl();
			if (string.IsNullOrEmpty(directoryPath))
			{
				directoryPath = Directory.GetCurrentDirectory();
			}
			string downloadLocation = Path.Combine(directoryPath, Path.GetFileName(downloadUrl));
			File.WriteAllBytes(downloadLocation, await DownloadFileBytesAsync(downloadUrl));
		}

		public static async Task DownloadFFmpeg(string directoryPath = "")
		{
			await FFDownloader(directoryPath);
		}

		public static async Task DownloadFFprobe(string directoryPath = "")
		{
			await FFDownloader(directoryPath, FFmpegApi.BinaryType.FFprobe);
		}

		private static async Task FFDownloader(string directoryPath = "", FFmpegApi.BinaryType binary = FFmpegApi.BinaryType.FFmpeg)
		{
			if (string.IsNullOrEmpty(directoryPath))
			{
				directoryPath = Directory.GetCurrentDirectory();
			}
			OSVersion os = OSHelper.GetOSVersion();
			FFBinaryDownloadMetadata downloadMetadata = ((binary == FFmpegApi.BinaryType.FFmpeg) ? FfmpegDownloads[os] : FfprobeDownloads[os]);
			byte[] dataBytes = await DownloadFileBytesAsync(downloadMetadata.URL);
			using MD5 md5 = MD5.Create();
			byte[] checksumBytes = md5.ComputeHash(dataBytes);
			string actualChecksum = BitConverter.ToString(checksumBytes).Replace("-", string.Empty);
			if (string.Equals(actualChecksum, downloadMetadata.ExpectedMD5Checksum, StringComparison.OrdinalIgnoreCase))
			{
				using (MemoryStream stream = new MemoryStream(dataBytes))
				{
					using ZipArchive archive = new ZipArchive(stream, ZipArchiveMode.Read);
					if (archive.Entries.Count > 0)
					{
						archive.Entries[0].ExtractToFile(Path.Combine(directoryPath, archive.Entries[0].FullName), overwrite: true);
					}
				}
				return;
			}
			throw new Exception("Invalid file checksum at " + downloadMetadata.URL + " - expected " + downloadMetadata.ExpectedMD5Checksum + ", got " + actualChecksum);
		}

		private static async Task<byte[]> DownloadFileBytesAsync(string uri)
		{
			if (!Uri.TryCreate(uri, UriKind.Absolute, out Uri _))
			{
				throw new InvalidOperationException("URI is invalid.");
			}
			return await Client.GetByteArrayAsync(uri);
		}
	}
	public class YoutubeDL
	{
		private static readonly Regex rgxFile = new Regex("^outfile:\\s\\\"?(.*)\\\"?", RegexOptions.Compiled);

		private static readonly Regex rgxFilePostProc = new Regex("\\[download\\] Destination: [a-zA-Z]:\\\\\\S+\\.\\S{3,}", RegexOptions.Compiled);

		protected ProcessRunner runner;

		public string YoutubeDLPath { get; set; } = Utils.YtDlpBinaryName;


		public string FFmpegPath { get; set; } = Utils.FfmpegBinaryName;


		public string OutputFolder { get; set; } = Environment.CurrentDirectory;


		public string OutputFileTemplate { get; set; } = "%(title)s [%(id)s].%(ext)s";


		public bool RestrictFilenames { get; set; } = false;


		public bool OverwriteFiles { get; set; } = true;


		public bool IgnoreDownloadErrors { get; set; } = true;


		public string Version => FileVersionInfo.GetVersionInfo(Utils.GetFullPath(YoutubeDLPath)).FileVersion;

		public YoutubeDL(byte maxNumberOfProcesses = 4)
		{
			runner = new ProcessRunner(maxNumberOfProcesses);
		}

		public async Task SetMaxNumberOfProcesses(byte count)
		{
			await runner.SetTotalCount(count);
		}

		public async Task<RunResult<string[]>> RunWithOptions(string[] urls, OptionSet options, CancellationToken ct)
		{
			List<string> output = new List<string>();
			YoutubeDLProcess process = new YoutubeDLProcess(YoutubeDLPath);
			process.OutputReceived += delegate(object o, DataReceivedEventArgs e)
			{
				output.Add(e.Data);
			};
			var (code, errors) = await runner.RunThrottled(process, urls, options, ct);
			return new RunResult<string[]>(code == 0, errors, output.ToArray());
		}

		public async Task<RunResult<string>> RunWithOptions(string url, OptionSet options, CancellationToken ct = default(CancellationToken), IProgress<DownloadProgress> progress = null, IProgress<string> output = null, bool showArgs = true)
		{
			string outFile = string.Empty;
			YoutubeDLProcess process = new YoutubeDLProcess(YoutubeDLPath);
			if (showArgs)
			{
				output?.Report("Arguments: " + process.ConvertToArgs(new string[1] { url }, options) + "\n");
			}
			else
			{
				output?.Report("Starting Download: " + url);
			}
			process.OutputReceived += delegate(object o, DataReceivedEventArgs e)
			{
				Match match = rgxFilePostProc.Match(e.Data);
				if (match.Success)
				{
					outFile = match.Groups[0].ToString().Replace("[download] Destination:", "").Replace(" ", "");
					progress?.Report(new DownloadProgress(DownloadState.Success, 0f, null, null, null, 1, outFile));
				}
				output?.Report(e.Data);
			};
			var (code, errors) = await runner.RunThrottled(process, new string[1] { url }, options, ct, progress);
			return new RunResult<string>(code == 0, errors, outFile);
		}

		public async Task<string> RunUpdate()
		{
			string output = string.Empty;
			YoutubeDLProcess process = new YoutubeDLProcess(YoutubeDLPath);
			process.OutputReceived += delegate(object o, DataReceivedEventArgs e)
			{
				output = e.Data;
			};
			await process.RunAsync(null, new OptionSet
			{
				Update = true
			});
			return output;
		}

		public async Task<RunResult<VideoData>> RunVideoDataFetch(string url, CancellationToken ct = default(CancellationToken), bool flat = true, bool fetchComments = false, OptionSet overrideOptions = null)
		{
			OptionSet opts = GetDownloadOptions();
			opts.DumpSingleJson = true;
			opts.FlatPlaylist = flat;
			opts.WriteComments = fetchComments;
			if (overrideOptions != null)
			{
				opts = opts.OverrideOptions(overrideOptions);
			}
			VideoData videoData = null;
			YoutubeDLProcess process = new YoutubeDLProcess(YoutubeDLPath);
			process.OutputReceived += delegate(object o, DataReceivedEventArgs e)
			{
				videoData = JsonConvert.DeserializeObject<VideoData>(e.Data);
			};
			var (code, errors) = await runner.RunThrottled(process, new string[1] { url }, opts, ct);
			return new RunResult<VideoData>(code == 0, errors, videoData);
		}

		public async Task<RunResult<string>> RunVideoDownload(string url, string format = "bestvideo+bestaudio/best", DownloadMergeFormat mergeFormat = DownloadMergeFormat.Unspecified, VideoRecodeFormat recodeFormat = VideoRecodeFormat.None, CancellationToken ct = default(CancellationToken), IProgress<DownloadProgress> progress = null, IProgress<string> output = null, OptionSet overrideOptions = null)
		{
			OptionSet opts = GetDownloadOptions();
			opts.Format = format;
			opts.MergeOutputFormat = mergeFormat;
			opts.RecodeVideo = recodeFormat;
			if (overrideOptions != null)
			{
				opts = opts.OverrideOptions(overrideOptions);
			}
			string outputFile = string.Empty;
			YoutubeDLProcess process = new YoutubeDLProcess(YoutubeDLPath);
			output?.Report("Arguments: " + process.ConvertToArgs(new string[1] { url }, opts) + "\n");
			process.OutputReceived += delegate(object o, DataReceivedEventArgs e)
			{
				Match match = rgxFile.Match(e.Data);
				if (match.Success)
				{
					outputFile = match.Groups[1].ToString().Trim('"');
					progress?.Report(new DownloadProgress(DownloadState.Success, 0f, null, null, null, 1, outputFile));
				}
				output?.Report(e.Data);
			};
			var (code, errors) = await runner.RunThrottled(process, new string[1] { url }, opts, ct, progress);
			return new RunResult<string>(code == 0, errors, outputFile);
		}

		public async Task<RunResult<string[]>> RunVideoPlaylistDownload(string url, int? start = 1, int? end = null, int[] items = null, string format = "bestvideo+bestaudio/best", VideoRecodeFormat recodeFormat = VideoRecodeFormat.None, CancellationToken ct = default(CancellationToken), IProgress<DownloadProgress> progress = null, IProgress<string> output = null, OptionSet overrideOptions = null)
		{
			OptionSet opts = GetDownloadOptions();
			opts.NoPlaylist = false;
			opts.PlaylistStart = start;
			opts.PlaylistEnd = end;
			if (items != null)
			{
				opts.PlaylistItems = string.Join(",", items);
			}
			opts.Format = format;
			opts.RecodeVideo = recodeFormat;
			if (overrideOptions != null)
			{
				opts = opts.OverrideOptions(overrideOptions);
			}
			List<string> outputFiles = new List<string>();
			YoutubeDLProcess process = new YoutubeDLProcess(YoutubeDLPath);
			output?.Report("Arguments: " + process.ConvertToArgs(new string[1] { url }, opts) + "\n");
			process.OutputReceived += delegate(object o, DataReceivedEventArgs e)
			{
				Match match = rgxFile.Match(e.Data);
				if (match.Success)
				{
					string text = match.Groups[1].ToString().Trim('"');
					outputFiles.Add(text);
					progress?.Report(new DownloadProgress(DownloadState.Success, 0f, null, null, null, 1, text));
				}
				output?.Report(e.Data);
			};
			var (code, errors) = await runner.RunThrottled(process, new string[1] { url }, opts, ct, progress);
			return new RunResult<string[]>(code == 0, errors, outputFiles.ToArray());
		}

		public async Task<RunResult<string>> RunAudioDownload(string url, AudioConversionFormat format = AudioConversionFormat.Best, CancellationToken ct = default(CancellationToken), IProgress<DownloadProgress> progress = null, IProgress<string> output = null, OptionSet overrideOptions = null)
		{
			OptionSet opts = GetDownloadOptions();
			opts.Format = "bestaudio/best";
			opts.ExtractAudio = true;
			opts.AudioFormat = format;
			if (overrideOptions != null)
			{
				opts = opts.OverrideOptions(overrideOptions);
			}
			string outputFile = string.Empty;
			new List<string>();
			YoutubeDLProcess process = new YoutubeDLProcess(YoutubeDLPath);
			output?.Report("Arguments: " + process.ConvertToArgs(new string[1] { url }, opts) + "\n");
			process.OutputReceived += delegate(object o, DataReceivedEventArgs e)
			{
				Match match = rgxFile.Match(e.Data);
				if (match.Success)
				{
					outputFile = match.Groups[1].ToString().Trim('"');
					progress?.Report(new DownloadProgress(DownloadState.Success, 0f, null, null, null, 1, outputFile));
				}
				output?.Report(e.Data);
			};
			var (code, errors) = await runner.RunThrottled(process, new string[1] { url }, opts, ct, progress);
			return new RunResult<string>(code == 0, errors, outputFile);
		}

		public async Task<RunResult<string[]>> RunAudioPlaylistDownload(string url, int? start = 1, int? end = null, int[] items = null, AudioConversionFormat format = AudioConversionFormat.Best, CancellationToken ct = default(CancellationToken), IProgress<DownloadProgress> progress = null, IProgress<string> output = null, OptionSet overrideOptions = null)
		{
			List<string> outputFiles = new List<string>();
			OptionSet opts = GetDownloadOptions();
			opts.NoPlaylist = false;
			opts.PlaylistStart = start;
			opts.PlaylistEnd = end;
			if (items != null)
			{
				opts.PlaylistItems = string.Join(",", items);
			}
			opts.Format = "bestaudio/best";
			opts.ExtractAudio = true;
			opts.AudioFormat = format;
			if (overrideOptions != null)
			{
				opts = opts.OverrideOptions(overrideOptions);
			}
			YoutubeDLProcess process = new YoutubeDLProcess(YoutubeDLPath);
			output?.Report("Arguments: " + process.ConvertToArgs(new string[1] { url }, opts) + "\n");
			process.OutputReceived += delegate(object o, DataReceivedEventArgs e)
			{
				Match match = rgxFile.Match(e.Data);
				if (match.Success)
				{
					string text = match.Groups[1].ToString().Trim('"');
					outputFiles.Add(text);
					progress?.Report(new DownloadProgress(DownloadState.Success, 0f, null, null, null, 1, text));
				}
				output?.Report(e.Data);
			};
			var (code, errors) = await runner.RunThrottled(process, new string[1] { url }, opts, ct, progress);
			return new RunResult<string[]>(code == 0, errors, outputFiles.ToArray());
		}

		protected virtual OptionSet GetDownloadOptions()
		{
			return new OptionSet
			{
				IgnoreErrors = IgnoreDownloadErrors,
				IgnoreConfig = true,
				NoPlaylist = true,
				Downloader = "m3u8:native",
				DownloaderArgs = "ffmpeg:-nostats -loglevel 0",
				Output = Path.Combine(OutputFolder, OutputFileTemplate),
				RestrictFilenames = RestrictFilenames,
				ForceOverwrites = OverwriteFiles,
				NoOverwrites = !OverwriteFiles,
				NoPart = true,
				FfmpegLocation = Utils.GetFullPath(FFmpegPath),
				Exec = "echo outfile: {}"
			};
		}
	}
	public class YoutubeDLProcess
	{
		private static readonly Regex rgxPlaylist = new Regex("Downloading video (\\d+) of (\\d+)", RegexOptions.Compiled);

		private static readonly Regex rgxProgress = new Regex("\\[download\\]\\s+(?:(?<percent>[\\d\\.]+)%(?:\\s+of\\s+\\~?\\s*(?<total>[\\d\\.\\w]+))?\\s+at\\s+(?:(?<speed>[\\d\\.\\w]+\\/s)|[\\w\\s]+)\\s+ETA\\s(?<eta>[\\d\\:]+))?", RegexOptions.Compiled);

		private static readonly Regex rgxPost = new Regex("\\[(\\w+)\\]\\s+", RegexOptions.Compiled);

		public string PythonPath { get; set; }

		public string ExecutablePath { get; set; }

		public bool UseWindowsEncodingWorkaround { get; set; } = true;


		public event EventHandler<DataReceivedEventArgs> OutputReceived;

		public event EventHandler<DataReceivedEventArgs> ErrorReceived;

		public YoutubeDLProcess(string executablePath = "yt-dlp.exe")
		{
			ExecutablePath = executablePath;
		}

		internal string ConvertToArgs(string[] urls, OptionSet options)
		{
			return ((urls != null) ? string.Join(" ", urls.Select((string s) => "\"" + s + "\"")) : string.Empty) + options;
		}

		public async Task<int> RunAsync(string[] urls, OptionSet options)
		{
			return await RunAsync(urls, options, CancellationToken.None);
		}

		public async Task<int> RunAsync(string[] urls, OptionSet options, CancellationToken ct, IProgress<DownloadProgress> progress = null)
		{
			TaskCompletionSource<int> tcs = new TaskCompletionSource<int>();
			Process process = new Process();
			ProcessStartInfo startInfo = new ProcessStartInfo
			{
				CreateNoWindow = true,
				UseShellExecute = false,
				RedirectStandardOutput = true,
				RedirectStandardError = true,
				StandardOutputEncoding = Encoding.UTF8,
				StandardErrorEncoding = Encoding.UTF8
			};
			if (OSHelper.IsWindows && UseWindowsEncodingWorkaround)
			{
				startInfo.FileName = "cmd.exe";
				string runCommand = (string.IsNullOrEmpty(PythonPath) ? ("\"" + ExecutablePath + "\" " + ConvertToArgs(urls, options)) : (PythonPath + " \"" + ExecutablePath + "\" " + ConvertToArgs(urls, options)));
				startInfo.Arguments = "/C chcp 65001 >nul 2>&1 && " + runCommand;
			}
			else if (!string.IsNullOrEmpty(PythonPath))
			{
				startInfo.FileName = PythonPath;
				startInfo.Arguments = "\"" + ExecutablePath + "\" " + ConvertToArgs(urls, options);
			}
			else
			{
				startInfo.FileName = ExecutablePath;
				startInfo.Arguments = ConvertToArgs(urls, options);
			}
			process.EnableRaisingEvents = true;
			process.StartInfo = startInfo;
			TaskCompletionSource<bool> tcsOut = new TaskCompletionSource<bool>();
			bool isDownloading = false;
			process.OutputDataReceived += delegate(object o, DataReceivedEventArgs e)
			{
				if (e.Data == null)
				{
					tcsOut.SetResult(result: true);
				}
				else
				{
					Match match;
					if ((match = rgxProgress.Match(e.Data)).Success)
					{
						if (match.Groups.Count > 1 && match.Groups[1].Length > 0)
						{
							float progress2 = float.Parse(match.Groups[1].ToString(), CultureInfo.InvariantCulture) / 100f;
							Group group = match.Groups["total"];
							string totalDownloadSize = (group.Success ? group.Value : null);
							Group group2 = match.Groups["speed"];
							string downloadSpeed = (group2.Success ? group2.Value : null);
							Group group3 = match.Groups["eta"];
							string eta = (group3.Success ? group3.Value : null);
							progress?.Report(new DownloadProgress(DownloadState.Downloading, progress2, totalDownloadSize, downloadSpeed, eta));
						}
						else
						{
							progress?.Report(new DownloadProgress(DownloadState.Downloading));
						}
						isDownloading = true;
					}
					else if ((match = rgxPlaylist.Match(e.Data)).Success)
					{
						int index = int.Parse(match.Groups[1].Value);
						progress?.Report(new DownloadProgress(DownloadState.PreProcessing, 0f, null, null, null, index));
						isDownloading = false;
					}
					else if (isDownloading && (match = rgxPost.Match(e.Data)).Success)
					{
						progress?.Report(new DownloadProgress(DownloadState.PostProcessing, 1f));
						isDownloading = false;
					}
					Debug.WriteLine("[yt-dlp] " + e.Data);
					this.OutputReceived?.Invoke(this, e);
				}
			};
			TaskCompletionSource<bool> tcsError = new TaskCompletionSource<bool>();
			process.ErrorDataReceived += delegate(object o, DataReceivedEventArgs e)
			{
				if (e.Data == null)
				{
					tcsError.SetResult(result: true);
				}
				else
				{
					Debug.WriteLine("[yt-dlp ERROR] " + e.Data);
					progress?.Report(new DownloadProgress(DownloadState.Error, 0f, null, null, null, 1, e.Data));
					this.ErrorReceived?.Invoke(this, e);
				}
			};
			process.Exited += async delegate
			{
				await tcsOut.Task;
				await tcsError.Task;
				tcs.TrySetResult(process.ExitCode);
				process.Dispose();
			};
			ct.Register(delegate
			{
				if (!tcs.Task.IsCompleted)
				{
					tcs.TrySetCanceled();
				}
				try
				{
					if (!process.HasExited)
					{
						process.KillTree();
					}
				}
				catch
				{
				}
			});
			Debug.WriteLine("[yt-dlp] Arguments: " + process.StartInfo.Arguments);
			if (!(await Task.Run(() => process.Start())))
			{
				tcs.TrySetException(new InvalidOperationException("Failed to start yt-dlp process."));
			}
			process.BeginOutputReadLine();
			process.BeginErrorReadLine();
			progress?.Report(new DownloadProgress(DownloadState.PreProcessing));
			return await tcs.Task;
		}
	}
}
namespace YoutubeDLSharp.Options
{
	public enum DownloadMergeFormat
	{
		Unspecified,
		Mp4,
		Mkv,
		Ogg,
		Webm,
		Flv
	}
	public enum AudioConversionFormat
	{
		Best,
		Aac,
		Flac,
		Mp3,
		M4a,
		Opus,
		Vorbis,
		Wav
	}
	public enum VideoRecodeFormat
	{
		None,
		Mp4,
		Mkv,
		Ogg,
		Webm,
		Flv,
		Avi
	}
	public interface IOption
	{
		string DefaultOptionString { get; }

		string[] OptionStrings { get; }

		bool IsSet { get; }

		bool IsCustom { get; }

		void SetFromString(string s);

		IEnumerable<string> ToStringCollection();
	}
	public class MultiOption<T> : IOption
	{
		private MultiValue<T> value;

		public MultiValue<T> Value
		{
			get
			{
				return value;
			}
			set
			{
				IsSet = !object.Equals(value, default(T));
				this.value = value;
			}
		}

		public string DefaultOptionString => OptionStrings.Last();

		public string[] OptionStrings { get; }

		public bool IsSet { get; private set; }

		public bool IsCustom { get; }

		public MultiOption(params string[] optionStrings)
		{
			OptionStrings = optionStrings;
			IsSet = false;
		}

		public MultiOption(bool isCustom, params string[] optionStrings)
		{
			OptionStrings = optionStrings;
			IsSet = false;
			IsCustom = isCustom;
		}

		public void SetFromString(string s)
		{
			string[] array = s.Split(' ');
			string stringValue = s.Substring(array[0].Length).Trim().Trim('"');
			if (!OptionStrings.Contains(array[0]))
			{
				throw new ArgumentException("Given string does not match required format.");
			}
			T val = Utils.OptionValueFromString<T>(stringValue);
			if (!IsSet)
			{
				Value = val;
			}
			else
			{
				Value.Values.Add(val);
			}
		}

		public IEnumerable<string> ToStringCollection()
		{
			if (!IsSet)
			{
				return new string[1] { "" };
			}
			List<string> list = new List<string>();
			foreach (T value in Value.Values)
			{
				list.Add(DefaultOptionString + Utils.OptionValueToString(value));
			}
			return list;
		}

		public override string ToString()
		{
			return string.Join(" ", ToStringCollection());
		}
	}
	public class MultiValue<T>
	{
		public List<T> Values { get; }

		public MultiValue(params T[] values)
		{
			Values = values.ToList();
		}

		public static implicit operator MultiValue<T>(T value)
		{
			return new MultiValue<T>(value);
		}

		public static implicit operator MultiValue<T>(T[] values)
		{
			return new MultiValue<T>(values);
		}

		public static explicit operator T(MultiValue<T> value)
		{
			if (value.Values.Count == 1)
			{
				return value.Values[0];
			}
			throw new InvalidCastException($"Cannot cast sequence of values to {typeof(T)}.");
		}

		public static explicit operator T[](MultiValue<T> value)
		{
			return value.Values.ToArray();
		}
	}
	public class Option<T> : IOption
	{
		private T value;

		public T Value
		{
			get
			{
				return value;
			}
			set
			{
				IsSet = !object.Equals(value, default(T));
				this.value = value;
			}
		}

		public string DefaultOptionString => OptionStrings.Last();

		public string[] OptionStrings { get; }

		public bool IsSet { get; private set; }

		public bool IsCustom { get; }

		public Option(params string[] optionStrings)
		{
			OptionStrings = optionStrings;
			IsSet = false;
		}

		public Option(bool isCustom, params string[] optionStrings)
		{
			OptionStrings = optionStrings;
			IsSet = false;
			IsCustom = isCustom;
		}

		public void SetFromString(string s)
		{
			string[] array = s.Split(' ');
			string stringValue = s.Substring(array[0].Length).Trim().Trim('"');
			if (!OptionStrings.Contains(array[0]))
			{
				throw new ArgumentException("Given string does not match required format.");
			}
			Value = Utils.OptionValueFromString<T>(stringValue);
		}

		public IEnumerable<string> ToStringCollection()
		{
			return new string[1] { ToString() };
		}

		public override string ToString()
		{
			if (!IsSet)
			{
				return string.Empty;
			}
			string text = Utils.OptionValueToString(Value);
			return DefaultOptionString + text;
		}
	}
	internal class OptionComparer : IEqualityComparer<IOption>
	{
		public bool Equals(IOption x, IOption y)
		{
			if (x != null)
			{
				return y != null && x.ToString().Equals(y.ToString());
			}
			return y == null;
		}

		public int GetHashCode(IOption obj)
		{
			return obj.ToString().GetHashCode();
		}
	}
	public class OptionSet : ICloneable
	{
		private Option<string> username = new Option<string>("-u", "--username");

		private Option<string> password = new Option<string>("-p", "--password");

		private Option<string> twoFactor = new Option<string>("-2", "--twofactor");

		private Option<bool> netrc = new Option<bool>("-n", "--netrc");

		private Option<string> netrcLocation = new Option<string>("--netrc-location");

		private Option<string> videoPassword = new Option<string>("--video-password");

		private Option<string> apMso = new Option<string>("--ap-mso");

		private Option<string> apUsername = new Option<string>("--ap-username");

		private Option<string> apPassword = new Option<string>("--ap-password");

		private Option<bool> apListMso = new Option<bool>("--ap-list-mso");

		private Option<string> clientCertificate = new Option<string>("--client-certificate");

		private Option<string> clientCertificateKey = new Option<string>("--client-certificate-key");

		private Option<string> clientCertificatePassword = new Option<string>("--client-certificate-password");

		private static readonly OptionComparer Comparer = new OptionComparer();

		public static readonly OptionSet Default = new OptionSet();

		private Option<bool> getDescription = new Option<bool>("--get-description");

		private Option<bool> getDuration = new Option<bool>("--get-duration");

		private Option<bool> getFilename = new Option<bool>("--get-filename");

		private Option<bool> getFormat = new Option<bool>("--get-format");

		private Option<bool> getId = new Option<bool>("--get-id");

		private Option<bool> getThumbnail = new Option<bool>("--get-thumbnail");

		private Option<bool> getTitle = new Option<bool>("-e", "--get-title");

		private Option<bool> getUrl = new Option<bool>("-g", "--get-url");

		private Option<string> matchTitle = new Option<string>("--match-title");

		private Option<string> rejectTitle = new Option<string>("--reject-title");

		private Option<long?> minViews = new Option<long?>("--min-views");

		private Option<long?> maxViews = new Option<long?>("--max-views");

		private Option<string> userAgent = new Option<string>("--user-agent");

		private Option<string> referer = new Option<string>("--referer");

		private Option<int?> playlistStart = new Option<int?>("--playlist-start");

		private Option<int?> playlistEnd = new Option<int?>("--playlist-end");

		private Option<bool> playlistReverse = new Option<bool>("--playlist-reverse");

		private Option<bool> forceGenericExtractor = new Option<bool>("--force-generic-extractor");

		private Option<string> execBeforeDownload = new Option<string>("--exec-before-download");

		private Option<bool> noExecBeforeDownload = new Option<bool>("--no-exec-before-download");

		private Option<bool> allFormats = new Option<bool>("--all-formats");

		private Option<bool> allSubs = new Option<bool>("--all-subs");

		private Option<bool> printJson = new Option<bool>("--print-json");

		private Option<string> autonumberSize = new Option<string>("--autonumber-size");

		private Option<int?> autonumberStart = new Option<int?>("--autonumber-start");

		private Option<bool> id = new Option<bool>("--id");

		private Option<string> metadataFromTitle = new Option<string>("--metadata-from-title");

		private Option<bool> hlsPreferNative = new Option<bool>("--hls-prefer-native");

		private Option<bool> hlsPreferFfmpeg = new Option<bool>("--hls-prefer-ffmpeg");

		private Option<bool> listFormatsOld = new Option<bool>("--list-formats-old");

		private Option<bool> listFormatsAsTable = new Option<bool>("--list-formats-as-table");

		private Option<bool> youtubeSkipDashManifest = new Option<bool>("--youtube-skip-dash-manifest");

		private Option<bool> youtubeSkipHlsManifest = new Option<bool>("--youtube-skip-hls-manifest");

		private Option<int?> concurrentFragments = new Option<int?>("-N", "--concurrent-fragments");

		private Option<long?> limitRate = new Option<long?>("-r", "--limit-rate");

		private Option<long?> throttledRate = new Option<long?>("--throttled-rate");

		private Option<int?> retries = new Option<int?>("-R", "--retries");

		private Option<int?> fileAccessRetries = new Option<int?>("--file-access-retries");

		private Option<int?> fragmentRetries = new Option<int?>("--fragment-retries");

		private MultiOption<string> retrySleep = new MultiOption<string>("--retry-sleep");

		private Option<bool> skipUnavailableFragments = new Option<bool>("--skip-unavailable-fragments");

		private Option<bool> abortOnUnavailableFragment = new Option<bool>("--abort-on-unavailable-fragment");

		private Option<bool> keepFragments = new Option<bool>("--keep-fragments");

		private Option<bool> noKeepFragments = new Option<bool>("--no-keep-fragments");

		private Option<long?> bufferSize = new Option<long?>("--buffer-size");

		private Option<bool> resizeBuffer = new Option<bool>("--resize-buffer");

		private Option<bool> noResizeBuffer = new Option<bool>("--no-resize-buffer");

		private Option<long?> httpChunkSize = new Option<long?>("--http-chunk-size");

		private Option<bool> playlistRandom = new Option<bool>("--playlist-random");

		private Option<bool> lazyPlaylist = new Option<bool>("--lazy-playlist");

		private Option<bool> noLazyPlaylist = new Option<bool>("--no-lazy-playlist");

		private Option<bool> xattrSetFilesize = new Option<bool>("--xattr-set-filesize");

		private Option<bool> hlsUseMpegts = new Option<bool>("--hls-use-mpegts");

		private Option<bool> noHlsUseMpegts = new Option<bool>("--no-hls-use-mpegts");

		private MultiOption<string> downloadSections = new MultiOption<string>("--download-sections");

		private MultiOption<string> downloader = new MultiOption<string>("--downloader", "--external-downloader");

		private MultiOption<string> downloaderArgs = new MultiOption<string>("--downloader-args", "--external-downloader-args");

		private Option<int?> extractorRetries = new Option<int?>("--extractor-retries");

		private Option<bool> allowDynamicMpd = new Option<bool>("--allow-dynamic-mpd");

		private Option<bool> ignoreDynamicMpd = new Option<bool>("--ignore-dynamic-mpd");

		private Option<bool> hlsSplitDiscontinuity = new Option<bool>("--hls-split-discontinuity");

		private Option<bool> noHlsSplitDiscontinuity = new Option<bool>("--no-hls-split-discontinuity");

		private MultiOption<string> extractorArgs = new MultiOption<string>("--extractor-args");

		private Option<string> batchFile = new Option<string>("-a", "--batch-file");

		private Option<bool> noBatchFile = new Option<bool>("--no-batch-file");

		private Option<string> paths = new Option<string>("-P", "--paths");

		private Option<string> output = new Option<string>("-o", "--output");

		private Option<string> outputNaPlaceholder = new Option<string>("--output-na-placeholder");

		private Option<bool> restrictFilenames = new Option<bool>("--restrict-filenames");

		private Option<bool> noRestrictFilenames = new Option<bool>("--no-restrict-filenames");

		private Option<bool> windowsFilenames = new Option<bool>("--windows-filenames");

		private Option<bool> noWindowsFilenames = new Option<bool>("--no-windows-filenames");

		private Option<int?> trimFilenames = new Option<int?>("--trim-filenames");

		private Option<bool> noOverwrites = new Option<bool>("-w", "--no-overwrites");

		private Option<bool> forceOverwrites = new Option<bool>("--force-overwrites");

		private Option<bool> noForceOverwrites = new Option<bool>("--no-force-overwrites");

		private Option<bool> doContinue = new Option<bool>("-c", "--continue");

		private Option<bool> noContinue = new Option<bool>("--no-continue");

		private Option<bool> part = new Option<bool>("--part");

		private Option<bool> noPart = new Option<bool>("--no-part");

		private Option<bool> mtime = new Option<bool>("--mtime");

		private Option<bool> noMtime = new Option<bool>("--no-mtime");

		private Option<bool> writeDescription = new Option<bool>("--write-description");

		private Option<bool> noWriteDescription = new Option<bool>("--no-write-description");

		private Option<bool> writeInfoJson = new Option<bool>("--write-info-json");

		private Option<bool> noWriteInfoJson = new Option<bool>("--no-write-info-json");

		private Option<bool> writePlaylistMetafiles = new Option<bool>("--write-playlist-metafiles");

		private Option<bool> noWritePlaylistMetafiles = new Option<bool>("--no-write-playlist-metafiles");

		private Option<bool> cleanInfoJson = new Option<bool>("--clean-info-json");

		private Option<bool> noCleanInfoJson = new Option<bool>("--no-clean-info-json");

		private Option<bool> writeComments = new Option<bool>("--write-comments");

		private Option<bool> noWriteComments = new Option<bool>("--no-write-comments");

		private Option<string> loadInfoJson = new Option<string>("--load-info-json");

		private Option<string> cookies = new Option<string>("--cookies");

		private Option<bool> noCookies = new Option<bool>("--no-cookies");

		private Option<string> cookiesFromBrowser = new Option<string>("--cookies-from-browser");

		private Option<bool> noCookiesFromBrowser = new Option<bool>("--no-cookies-from-browser");

		private Option<string> cacheDir = new Option<string>("--cache-dir");

		private Option<bool> noCacheDir = new Option<bool>("--no-cache-dir");

		private Option<bool> removeCacheDir = new Option<bool>("--rm-cache-dir");

		private Option<bool> help = new Option<bool>("-h", "--help");

		private Option<bool> version = new Option<bool>("--version");

		private Option<bool> update = new Option<bool>("-U", "--update");

		private Option<bool> noUpdate = new Option<bool>("--no-update");

		private Option<bool> ignoreErrors = new Option<bool>("-i", "--ignore-errors");

		private Option<bool> noAbortOnError = new Option<bool>("--no-abort-on-error");

		private Option<bool> abortOnError = new Option<bool>("--abort-on-error");

		private Option<bool> dumpUserAgent = new Option<bool>("--dump-user-agent");

		private Option<bool> listExtractors = new Option<bool>("--list-extractors");

		private Option<bool> extractorDescriptions = new Option<bool>("--extractor-descriptions");

		private Option<string> useExtractors = new Option<string>("--use-extractors");

		private Option<string> defaultSearch = new Option<string>("--default-search");

		private Option<bool> ignoreConfig = new Option<bool>("--ignore-config");

		private Option<bool> noConfigLocations = new Option<bool>("--no-config-locations");

		private MultiOption<string> configLocations = new MultiOption<string>("--config-locations");

		private Option<bool> flatPlaylist = new Option<bool>("--flat-playlist");

		private Option<bool> noFlatPlaylist = new Option<bool>("--no-flat-playlist");

		private Option<bool> liveFromStart = new Option<bool>("--live-from-start");

		private Option<bool> noLiveFromStart = new Option<bool>("--no-live-from-start");

		private Option<string> waitForVideo = new Option<string>("--wait-for-video");

		private Option<bool> noWaitForVideo = new Option<bool>("--no-wait-for-video");

		private Option<bool> markWatched = new Option<bool>("--mark-watched");

		private Option<bool> noMarkWatched = new Option<bool>("--no-mark-watched");

		private Option<bool> noColors = new Option<bool>("--no-colors");

		private Option<string> compatOptions = new Option<string>("--compat-options");

		private Option<string> alias = new Option<string>("--alias");

		private Option<string> geoVerificationProxy = new Option<string>("--geo-verification-proxy");

		private Option<bool> geoBypass = new Option<bool>("--geo-bypass");

		private Option<bool> noGeoBypass = new Option<bool>("--no-geo-bypass");

		private Option<string> geoBypassCountry = new Option<string>("--geo-bypass-country");

		private Option<string> geoBypassIpBlock = new Option<string>("--geo-bypass-ip-block");

		private Option<bool> writeLink = new Option<bool>("--write-link");

		private Option<bool> writeUrlLink = new Option<bool>("--write-url-link");

		private Option<bool> writeWeblocLink = new Option<bool>("--write-webloc-link");

		private Option<bool> writeDesktopLink = new Option<bool>("--write-desktop-link");

		private Option<string> proxy = new Option<string>("--proxy");

		private Option<int?> socketTimeout = new Option<int?>("--socket-timeout");

		private Option<string> sourceAddress = new Option<string>("--source-address");

		private Option<bool> forceIPv4 = new Option<bool>("-4", "--force-ipv4");

		private Option<bool> forceIPv6 = new Option<bool>("-6", "--force-ipv6");

		private Option<bool> extractAudio = new Option<bool>("-x", "--extract-audio");

		private Option<AudioConversionFormat> audioFormat = new Option<AudioConversionFormat>("--audio-format");

		private Option<byte?> audioQuality = new Option<byte?>("--audio-quality");

		private Option<string> remuxVideo = new Option<string>("--remux-video");

		private Option<VideoRecodeFormat> recodeVideo = new Option<VideoRecodeFormat>("--recode-video");

		private MultiOption<string> postprocessorArgs = new MultiOption<string>("--postprocessor-args");

		private Option<bool> keepVideo = new Option<bool>("-k", "--keep-video");

		private Option<bool> noKeepVideo = new Option<bool>("--no-keep-video");

		private Option<bool> postOverwrites = new Option<bool>("--post-overwrites");

		private Option<bool> noPostOverwrites = new Option<bool>("--no-post-overwrites");

		private Option<bool> embedSubs = new Option<bool>("--embed-subs");

		private Option<bool> noEmbedSubs = new Option<bool>("--no-embed-subs");

		private Option<bool> embedThumbnail = new Option<bool>("--embed-thumbnail");

		private Option<bool> noEmbedThumbnail = new Option<bool>("--no-embed-thumbnail");

		private Option<bool> embedMetadata = new Option<bool>("--embed-metadata");

		private Option<bool> noEmbedMetadata = new Option<bool>("--no-embed-metadata");

		private Option<bool> embedChapters = new Option<bool>("--embed-chapters");

		private Option<bool> noEmbedChapters = new Option<bool>("--no-embed-chapters");

		private Option<bool> embedInfoJson = new Option<bool>("--embed-info-json");

		private Option<bool> noEmbedInfoJson = new Option<bool>("--no-embed-info-json");

		private Option<string> parseMetadata = new Option<string>("--parse-metadata");

		private MultiOption<string> replaceInMetadata = new MultiOption<string>("--replace-in-metadata");

		private Option<bool> xattrs = new Option<bool>("--xattrs");

		private Option<string> concatPlaylist = new Option<string>("--concat-playlist");

		private Option<string> fixup = new Option<string>("--fixup");

		private Option<string> ffmpegLocation = new Option<string>("--ffmpeg-location");

		private MultiOption<string> exec = new MultiOption<string>("--exec");

		private Option<bool> noExec = new Option<bool>("--no-exec");

		private Option<string> convertSubs = new Option<string>("--convert-subs");

		private Option<string> convertThumbnails = new Option<string>("--convert-thumbnails");

		private Option<bool> splitChapters = new Option<bool>("--split-chapters");

		private Option<bool> noSplitChapters = new Option<bool>("--no-split-chapters");

		private MultiOption<string> removeChapters = new MultiOption<string>("--remove-chapters");

		private Option<bool> noRemoveChapters = new Option<bool>("--no-remove-chapters");

		private Option<bool> forceKeyframesAtCuts = new Option<bool>("--force-keyframes-at-cuts");

		private Option<bool> noForceKeyframesAtCuts = new Option<bool>("--no-force-keyframes-at-cuts");

		private MultiOption<string> usePostprocessor = new MultiOption<string>("--use-postprocessor");

		private Option<string> sponsorblockMark = new Option<string>("--sponsorblock-mark");

		private Option<string> sponsorblockRemove = new Option<string>("--sponsorblock-remove");

		private Option<string> sponsorblockChapterTitle = new Option<string>("--sponsorblock-chapter-title");

		private Option<bool> noSponsorblock = new Option<bool>("--no-sponsorblock");

		private Option<string> sponsorblockApi = new Option<string>("--sponsorblock-api");

		private Option<bool> writeSubs = new Option<bool>("--write-subs");

		private Option<bool> noWriteSubs = new Option<bool>("--no-write-subs");

		private Option<bool> writeAutoSubs = new Option<bool>("--write-auto-subs");

		private Option<bool> noWriteAutoSubs = new Option<bool>("--no-write-auto-subs");

		private Option<bool> listSubs = new Option<bool>("--list-subs");

		private Option<string> subFormat = new Option<string>("--sub-format");

		private Option<string> subLangs = new Option<string>("--sub-langs");

		private Option<bool> writeThumbnail = new Option<bool>("--write-thumbnail");

		private Option<bool> noWriteThumbnail = new Option<bool>("--no-write-thumbnail");

		private Option<bool> writeAllThumbnails = new Option<bool>("--write-all-thumbnails");

		private Option<bool> listThumbnails = new Option<bool>("--list-thumbnails");

		private Option<bool> quiet = new Option<bool>("-q", "--quiet");

		private Option<bool> noWarnings = new Option<bool>("--no-warnings");

		private Option<bool> simulate = new Option<bool>("-s", "--simulate");

		private Option<bool> noSimulate = new Option<bool>("--no-simulate");

		private Option<bool> ignoreNoFormatsError = new Option<bool>("--ignore-no-formats-error");

		private Option<bool> noIgnoreNoFormatsError = new Option<bool>("--no-ignore-no-formats-error");

		private Option<bool> skipDownload = new Option<bool>("--skip-download");

		private MultiOption<string> print = new MultiOption<string>("-O", "--print");

		private MultiOption<string> printToFile = new MultiOption<string>("--print-to-file");

		private Option<bool> dumpJson = new Option<bool>("-j", "--dump-json");

		private Option<bool> dumpSingleJson = new Option<bool>("-J", "--dump-single-json");

		private Option<bool> forceWriteArchive = new Option<bool>("--force-write-archive");

		private Option<bool> newline = new Option<bool>("--newline");

		private Option<bool> noProgress = new Option<bool>("--no-progress");

		private Option<bool> progress = new Option<bool>("--progress");

		private Option<bool> consoleTitle = new Option<bool>("--console-title");

		private Option<string> progressTemplate = new Option<string>("--progress-template");

		private Option<bool> verbose = new Option<bool>("-v", "--verbose");

		private Option<bool> dumpPages = new Option<bool>("--dump-pages");

		private Option<bool> writePages = new Option<bool>("--write-pages");

		private Option<bool> printTraffic = new Option<bool>("--print-traffic");

		private Option<string> format = new Option<string>("-f", "--format");

		private Option<string> formatSort = new Option<string>("-S", "--format-sort");

		private Option<bool> formatSortForce = new Option<bool>("--format-sort-force");

		private Option<bool> noFormatSortForce = new Option<bool>("--no-format-sort-force");

		private Option<bool> videoMultistreams = new Option<bool>("--video-multistreams");

		private Option<bool> noVideoMultistreams = new Option<bool>("--no-video-multistreams");

		private Option<bool> audioMultistreams = new Option<bool>("--audio-multistreams");

		private Option<bool> noAudioMultistreams = new Option<bool>("--no-audio-multistreams");

		private Option<bool> preferFreeFormats = new Option<bool>("--prefer-free-formats");

		private Option<bool> noPreferFreeFormats = new Option<bool>("--no-prefer-free-formats");

		private Option<bool> checkFormats = new Option<bool>("--check-formats");

		private Option<bool> checkAllFormats = new Option<bool>("--check-all-formats");

		private Option<bool> noCheckFormats = new Option<bool>("--no-check-formats");

		private Option<bool> listFormats = new Option<bool>("-F", "--list-formats");

		private Option<DownloadMergeFormat> mergeOutputFormat = new Option<DownloadMergeFormat>("--merge-output-format");

		private Option<string> playlistItems = new Option<string>("-I", "--playlist-items");

		private Option<string> minFilesize = new Option<string>("--min-filesize");

		private Option<string> maxFilesize = new Option<string>("--max-filesize");

		private Option<DateTime> date = new Option<DateTime>("--date");

		private Option<DateTime> dateBefore = new Option<DateTime>("--datebefore");

		private Option<DateTime> dateAfter = new Option<DateTime>("--dateafter");

		private MultiOption<string> matchFilters = new MultiOption<string>("--match-filters");

		private Option<bool> noMatchFilter = new Option<bool>("--no-match-filter");

		private Option<bool> noPlaylist = new Option<bool>("--no-playlist");

		private Option<bool> yesPlaylist = new Option<bool>("--yes-playlist");

		private Option<byte?> ageLimit = new Option<byte?>("--age-limit");

		private Option<string> downloadArchive = new Option<string>("--download-archive");

		private Option<bool> noDownloadArchive = new Option<bool>("--no-download-archive");

		private Option<int?> maxDownloads = new Option<int?>("--max-downloads");

		private Option<bool> breakOnExisting = new Option<bool>("--break-on-existing");

		private Option<bool> breakOnReject = new Option<bool>("--break-on-reject");

		private Option<bool> breakPerInput = new Option<bool>("--break-per-input");

		private Option<bool> noBreakPerInput = new Option<bool>("--no-break-per-input");

		private Option<int?> skipPlaylistAfterErrors = new Option<int?>("--skip-playlist-after-errors");

		private Option<string> encoding = new Option<string>("--encoding");

		private Option<bool> legacyServerConnect = new Option<bool>("--legacy-server-connect");

		private Option<bool> noCheckCertificates = new Option<bool>("--no-check-certificates");

		private Option<bool> preferInsecure = new Option<bool>("--prefer-insecure");

		private MultiOption<string> addHeader = new MultiOption<string>("--add-header");

		private Option<bool> bidiWorkaround = new Option<bool>("--bidi-workaround");

		private Option<int?> sleepRequests = new Option<int?>("--sleep-requests");

		private Option<int?> sleepInterval = new Option<int?>("--sleep-interval");

		private Option<int?> maxSleepInterval = new Option<int?>("--max-sleep-interval");

		private Option<int?> sleepSubtitles = new Option<int?>("--sleep-subtitles");

		public string Username
		{
			get
			{
				return username.Value;
			}
			set
			{
				username.Value = value;
			}
		}

		public string Password
		{
			get
			{
				return password.Value;
			}
			set
			{
				password.Value = value;
			}
		}

		public string TwoFactor
		{
			get
			{
				return twoFactor.Value;
			}
			set
			{
				twoFactor.Value = value;
			}
		}

		public bool Netrc
		{
			get
			{
				return netrc.Value;
			}
			set
			{
				netrc.Value = value;
			}
		}

		public string NetrcLocation
		{
			get
			{
				return netrcLocation.Value;
			}
			set
			{
				netrcLocation.Value = value;
			}
		}

		public string VideoPassword
		{
			get
			{
				return videoPassword.Value;
			}
			set
			{
				videoPassword.Value = value;
			}
		}

		public string ApMso
		{
			get
			{
				return apMso.Value;
			}
			set
			{
				apMso.Value = value;
			}
		}

		public string ApUsername
		{
			get
			{
				return apUsername.Value;
			}
			set
			{
				apUsername.Value = value;
			}
		}

		public string ApPassword
		{
			get
			{
				return apPassword.Value;
			}
			set
			{
				apPassword.Value = value;
			}
		}

		public bool ApListMso
		{
			get
			{
				return apListMso.Value;
			}
			set
			{
				apListMso.Value = value;
			}
		}

		public string ClientCertificate
		{
			get
			{
				return clientCertificate.Value;
			}
			set
			{
				clientCertificate.Value = value;
			}
		}

		public string ClientCertificateKey
		{
			get
			{
				return clientCertificateKey.Value;
			}
			set
			{
				clientCertificateKey.Value = value;
			}
		}

		public string ClientCertificatePassword
		{
			get
			{
				return clientCertificatePassword.Value;
			}
			set
			{
				clientCertificatePassword.Value = value;
			}
		}

		public IOption[] CustomOptions { get; set; } = new IOption[0];


		[Obsolete("Deprecated in favor of: --print description.")]
		public bool GetDescription
		{
			get
			{
				return getDescription.Value;
			}
			set
			{
				getDescription.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --print duration_string.")]
		public bool GetDuration
		{
			get
			{
				return getDuration.Value;
			}
			set
			{
				getDuration.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --print filename.")]
		public bool GetFilename
		{
			get
			{
				return getFilename.Value;
			}
			set
			{
				getFilename.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --print format.")]
		public bool GetFormat
		{
			get
			{
				return getFormat.Value;
			}
			set
			{
				getFormat.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --print id.")]
		public bool GetId
		{
			get
			{
				return getId.Value;
			}
			set
			{
				getId.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --print thumbnail.")]
		public bool GetThumbnail
		{
			get
			{
				return getThumbnail.Value;
			}
			set
			{
				getThumbnail.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --print title.")]
		public bool GetTitle
		{
			get
			{
				return getTitle.Value;
			}
			set
			{
				getTitle.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --print urls.")]
		public bool GetUrl
		{
			get
			{
				return getUrl.Value;
			}
			set
			{
				getUrl.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --match-filter \"title ~= (?i)REGEX\".")]
		public string MatchTitle
		{
			get
			{
				return matchTitle.Value;
			}
			set
			{
				matchTitle.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --match-filter \"title !~= (?i)REGEX\".")]
		public string RejectTitle
		{
			get
			{
				return rejectTitle.Value;
			}
			set
			{
				rejectTitle.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --match-filter \"view_count >=? COUNT\".")]
		public long? MinViews
		{
			get
			{
				return minViews.Value;
			}
			set
			{
				minViews.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --match-filter \"view_count <=? COUNT\".")]
		public long? MaxViews
		{
			get
			{
				return maxViews.Value;
			}
			set
			{
				maxViews.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --add-header \"User-Agent:UA\".")]
		public string UserAgent
		{
			get
			{
				return userAgent.Value;
			}
			set
			{
				userAgent.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --add-header \"Referer:URL\".")]
		public string Referer
		{
			get
			{
				return referer.Value;
			}
			set
			{
				referer.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: -I NUMBER:.")]
		public int? PlaylistStart
		{
			get
			{
				return playlistStart.Value;
			}
			set
			{
				playlistStart.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: -I :NUMBER.")]
		public int? PlaylistEnd
		{
			get
			{
				return playlistEnd.Value;
			}
			set
			{
				playlistEnd.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: -I ::-1.")]
		public bool PlaylistReverse
		{
			get
			{
				return playlistReverse.Value;
			}
			set
			{
				playlistReverse.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --ies generic,default.")]
		public bool ForceGenericExtractor
		{
			get
			{
				return forceGenericExtractor.Value;
			}
			set
			{
				forceGenericExtractor.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --exec \"before_dl:CMD\".")]
		public string ExecBeforeDownload
		{
			get
			{
				return execBeforeDownload.Value;
			}
			set
			{
				execBeforeDownload.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --no-exec.")]
		public bool NoExecBeforeDownload
		{
			get
			{
				return noExecBeforeDownload.Value;
			}
			set
			{
				noExecBeforeDownload.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: -f all.")]
		public bool AllFormats
		{
			get
			{
				return allFormats.Value;
			}
			set
			{
				allFormats.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --sub-langs all --write-subs.")]
		public bool AllSubs
		{
			get
			{
				return allSubs.Value;
			}
			set
			{
				allSubs.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: -j --no-simulate.")]
		public bool PrintJson
		{
			get
			{
				return printJson.Value;
			}
			set
			{
				printJson.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: Use string formatting, e.g. %(autonumber)03d.")]
		public string AutonumberSize
		{
			get
			{
				return autonumberSize.Value;
			}
			set
			{
				autonumberSize.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: Use internal field formatting like %(autonumber+NUMBER)s.")]
		public int? AutonumberStart
		{
			get
			{
				return autonumberStart.Value;
			}
			set
			{
				autonumberStart.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: -o \"%(id)s.%(ext)s\".")]
		public bool Id
		{
			get
			{
				return id.Value;
			}
			set
			{
				id.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --parse-metadata \"%(title)s:FORMAT\".")]
		public string MetadataFromTitle
		{
			get
			{
				return metadataFromTitle.Value;
			}
			set
			{
				metadataFromTitle.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --downloader \"m3u8:native\".")]
		public bool HlsPreferNative
		{
			get
			{
				return hlsPreferNative.Value;
			}
			set
			{
				hlsPreferNative.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --downloader \"m3u8:ffmpeg\".")]
		public bool HlsPreferFfmpeg
		{
			get
			{
				return hlsPreferFfmpeg.Value;
			}
			set
			{
				hlsPreferFfmpeg.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --compat-options list-formats (Alias: --no-list-formats-as-table).")]
		public bool ListFormatsOld
		{
			get
			{
				return listFormatsOld.Value;
			}
			set
			{
				listFormatsOld.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --compat-options -list-formats [Default] (Alias: --no-list-formats-old).")]
		public bool ListFormatsAsTable
		{
			get
			{
				return listFormatsAsTable.Value;
			}
			set
			{
				listFormatsAsTable.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --extractor-args \"youtube:skip=dash\" (Alias: --no-youtube-include-dash-manifest).")]
		public bool YoutubeSkipDashManifest
		{
			get
			{
				return youtubeSkipDashManifest.Value;
			}
			set
			{
				youtubeSkipDashManifest.Value = value;
			}
		}

		[Obsolete("Deprecated in favor of: --extractor-args \"youtube:skip=hls\" (Alias: --no-youtube-include-hls-manifest).")]
		public bool YoutubeSkipHlsManifest
		{
			get
			{
				return youtubeSkipHlsManifest.Value;
			}
			set
			{
				youtubeSkipHlsManifest.Value = value;
			}
		}

		public int? ConcurrentFragments
		{
			get
			{
				return concurrentFragments.Value;
			}
			set
			{
				concurrentFragments.Value = value;
			}
		}

		public long? LimitRate
		{
			get
			{
				return limitRate.Value;
			}
			set
			{
				limitRate.Value = value;
			}
		}

		public long? ThrottledRate
		{
			get
			{
				return throttledRate.Value;
			}
			set
			{
				throttledRate.Value = value;
			}
		}

		public int? Retries
		{
			get
			{
				return retries.Value;
			}
			set
			{
				retries.Value = value;
			}
		}

		public int? FileAccessRetries
		{
			get
			{
				return fileAccessRetries.Value;
			}
			set
			{
				fileAccessRetries.Value = value;
			}
		}

		public int? FragmentRetries
		{
			get
			{
				return fragmentRetries.Value;
			}
			set
			{
				fragmentRetries.Value = value;
			}
		}

		public MultiValue<string> RetrySleep
		{
			get
			{
				return retrySleep.Value;
			}
			set
			{
				retrySleep.Value = value;
			}
		}

		public bool SkipUnavailableFragments
		{
			get
			{
				return skipUnavailableFragments.Value;
			}
			set
			{
				skipUnavailableFragments.Value = value;
			}
		}

		public bool AbortOnUnavailableFragment
		{
			get
			{
				return abortOnUnavailableFragment.Value;
			}
			set
			{
				abortOnUnavailableFragment.Value = value;
			}
		}

		public bool KeepFragments
		{
			get
			{
				return keepFragments.Value;
			}
			set
			{
				keepFragments.Value = value;
			}
		}

		public bool NoKeepFragments
		{
			get
			{
				return noKeepFragments.Value;
			}
			set
			{
				noKeepFragments.Value = value;
			}
		}

		public long? BufferSize
		{
			get
			{
				return bufferSize.Value;
			}
			set
			{
				bufferSize.Value = value;
			}
		}

		public bool ResizeBuffer
		{
			get
			{
				return resizeBuffer.Value;
			}
			set
			{
				resizeBuffer.Value = value;
			}
		}

		public bool NoResizeBuffer
		{
			get
			{
				return noResizeBuffer.Value;
			}
			set
			{
				noResizeBuffer.Value = value;
			}
		}

		public long? HttpChunkSize
		{
			get
			{
				return httpChunkSize.Value;
			}
			set
			{
				httpChunkSize.Value = value;
			}
		}

		public bool PlaylistRandom
		{
			get
			{
				return playlistRandom.Value;
			}
			set
			{
				playlistRandom.Value = value;
			}
		}

		public bool LazyPlaylist
		{
			get
			{
				return lazyPlaylist.Value;
			}
			set
			{
				lazyPlaylist.Value = value;
			}
		}

		public bool NoLazyPlaylist
		{
			get
			{
				return noLazyPlaylist.Value;
			}
			set
			{
				noLazyPlaylist.Value = value;
			}
		}

		public bool XattrSetFilesize
		{
			get
			{
				return xattrSetFilesize.Value;
			}
			set
			{
				xattrSetFilesize.Value = value;
			}
		}

		public bool HlsUseMpegts
		{
			get
			{
				return hlsUseMpegts.Value;
			}
			set
			{
				hlsUseMpegts.Value = value;
			}
		}

		public bool NoHlsUseMpegts
		{
			get
			{
				return noHlsUseMpegts.Value;
			}
			set
			{
				noHlsUseMpegts.Value = value;
			}
		}

		public MultiValue<string> DownloadSections
		{
			get
			{
				return downloadSections.Value;
			}
			set
			{
				downloadSections.Value = value;
			}
		}

		public MultiValue<string> Downloader
		{
			get
			{
				return downloader.Value;
			}
			set
			{
				downloader.Value = value;
			}
		}

		public MultiValue<string> DownloaderArgs
		{
			get
			{
				return downloaderArgs.Value;
			}
			set
			{
				downloaderArgs.Value = value;
			}
		}

		public int? ExtractorRetries
		{
			get
			{
				return extractorRetries.Value;
			}
			set
			{
				extractorRetries.Value = value;
			}
		}

		public bool AllowDynamicMpd
		{
			get
			{
				return allowDynamicMpd.Value;
			}
			set
			{
				allowDynamicMpd.Value = value;
			}
		}

		public bool IgnoreDynamicMpd
		{
			get
			{
				return ignoreDynamicMpd.Value;
			}
			set
			{
				ignoreDynamicMpd.Value = value;
			}
		}

		public bool HlsSplitDiscontinuity
		{
			get
			{
				return hlsSplitDiscontinuity.Value;
			}
			set
			{
				hlsSplitDiscontinuity.Value = value;
			}
		}

		public bool NoHlsSplitDiscontinuity
		{
			get
			{
				return noHlsSplitDiscontinuity.Value;
			}
			set
			{
				noHlsSplitDiscontinuity.Value = value;
			}
		}

		public MultiValue<string> ExtractorArgs
		{
			get
			{
				return extractorArgs.Value;
			}
			set
			{
				extractorArgs.Value = value;
			}
		}

		public string BatchFile
		{
			get
			{
				return batchFile.Value;
			}
			set
			{
				batchFile.Value = value;
			}
		}

		public bool NoBatchFile
		{
			get
			{
				return noBatchFile.Value;
			}
			set
			{
				noBatchFile.Value = value;
			}
		}

		public string Paths
		{
			get
			{
				return paths.Value;
			}
			set
			{
				paths.Value = value;
			}
		}

		public string Output
		{
			get
			{
				return output.Value;
			}
			set
			{
				output.Value = value;
			}
		}

		public string OutputNaPlaceholder
		{
			get
			{
				return outputNaPlaceholder.Value;
			}
			set
			{
				outputNaPlaceholder.Value = value;
			}
		}

		public bool RestrictFilenames
		{
			get
			{
				return restrictFilenames.Value;
			}
			set
			{
				restrictFilenames.Value = value;
			}
		}

		public bool NoRestrictFilenames
		{
			get
			{
				return noRestrictFilenames.Value;
			}
			set
			{
				noRestrictFilenames.Value = value;
			}
		}

		public bool WindowsFilenames
		{
			get
			{
				return windowsFilenames.Value;
			}
			set
			{
				windowsFilenames.Value = value;
			}
		}

		public bool NoWindowsFilenames
		{
			get
			{
				return noWindowsFilenames.Value;
			}
			set
			{
				noWindowsFilenames.Value = value;
			}
		}

		public int? TrimFilenames
		{
			get
			{
				return trimFilenames.Value;
			}
			set
			{
				trimFilenames.Value = value;
			}
		}

		public bool NoOverwrites
		{
			get
			{
				return noOverwrites.Value;
			}
			set
			{
				noOverwrites.Value = value;
			}
		}

		public bool ForceOverwrites
		{
			get
			{
				return forceOverwrites.Value;
			}
			set
			{
				forceOverwrites.Value = value;
			}
		}

		public bool NoForceOverwrites
		{
			get
			{
				return noForceOverwrites.Value;
			}
			set
			{
				noForceOverwrites.Value = value;
			}
		}

		public bool Continue
		{
			get
			{
				return doContinue.Value;
			}
			set
			{
				doContinue.Value = value;
			}
		}

		public bool NoContinue
		{
			get
			{
				return noContinue.Value;
			}
			set
			{
				noContinue.Value = value;
			}
		}

		public bool Part
		{
			get
			{
				return part.Value;
			}
			set
			{
				part.Value = value;
			}
		}

		public bool NoPart
		{
			get
			{
				return noPart.Value;
			}
			set
			{
				noPart.Value = value;
			}
		}

		public bool Mtime
		{
			get
			{
				return mtime.Value;
			}
			set
			{
				mtime.Value = value;
			}
		}

		public bool NoMtime
		{
			get
			{
				return noMtime.Value;
			}
			set
			{
				noMtime.Value = value;
			}
		}

		public bool WriteDescription
		{
			get
			{
				return writeDescription.Value;
			}
			set
			{
				writeDescription.Value = value;
			}
		}

		public bool NoWriteDescription
		{
			get
			{
				return noWriteDescription.Value;
			}
			set
			{
				noWriteDescription.Value = value;
			}
		}

		public bool WriteInfoJson
		{
			get
			{
				return writeInfoJson.Value;
			}
			set
			{
				writeInfoJson.Value = value;
			}
		}

		public bool NoWriteInfoJson
		{
			get
			{
				return noWriteInfoJson.Value;
			}
			set
			{
				noWriteInfoJson.Value = value;
			}
		}

		public bool WritePlaylistMetafiles
		{
			get
			{
				return writePlaylistMetafiles.Value;
			}
			set
			{
				writePlaylistMetafiles.Value = value;
			}
		}

		public bool NoWritePlaylistMetafiles
		{
			get
			{
				return noWritePlaylistMetafiles.Value;
			}
			set
			{
				noWritePlaylistMetafiles.Value = value;
			}
		}

		public bool CleanInfoJson
		{
			get
			{
				return cleanInfoJson.Value;
			}
			set
			{
				cleanInfoJson.Value = value;
			}
		}

		public bool NoCleanInfoJson
		{
			get
			{
				return noCleanInfoJson.Value;
			}
			set
			{
				noCleanInfoJson.Value = value;
			}
		}

		public bool WriteComments
		{
			get
			{
				return writeComments.Value;
			}
			set
			{
				writeComments.Value = value;
			}
		}

		public bool NoWriteComments
		{
			get
			{
				return noWriteComments.Value;
			}
			set
			{
				noWriteComments.Value = value;
			}
		}

		public string LoadInfoJson
		{
			get
			{
				return loadInfoJson.Value;
			}
			set
			{
				loadInfoJson.Value = value;
			}
		}

		public string Cookies
		{
			get
			{
				return cookies.Value;
			}
			set
			{
				cookies.Value = value;
			}
		}

		public bool NoCookies
		{
			get
			{
				return noCookies.Value;
			}
			set
			{
				noCookies.Value = value;
			}
		}

		public string CookiesFromBrowser
		{
			get
			{
				return cookiesFromBrowser.Value;
			}
			set
			{
				cookiesFromBrowser.Value = value;
			}
		}

		public bool NoCookiesFromBrowser
		{
			get
			{
				return noCookiesFromBrowser.Value;
			}
			set
			{
				noCookiesFromBrowser.Value = value;
			}
		}

		public string CacheDir
		{
			get
			{
				return cacheDir.Value;
			}
			set
			{
				cacheDir.Value = value;
			}
		}

		public bool NoCacheDir
		{
			get
			{
				return noCacheDir.Value;
			}
			set
			{
				noCacheDir.Value = value;
			}
		}

		public bool RemoveCacheDir
		{
			get
			{
				return removeCacheDir.Value;
			}
			set
			{
				removeCacheDir.Value = value;
			}
		}

		public bool Help
		{
			get
			{
				return help.Value;
			}
			set
			{
				help.Value = value;
			}
		}

		public bool Version
		{
			get
			{
				return version.Value;
			}
			set
			{
				version.Value = value;
			}
		}

		public bool Update
		{
			get
			{
				return update.Value;
			}
			set
			{
				update.Value = value;
			}
		}

		public bool NoUpdate
		{
			get
			{
				return noUpdate.Value;
			}
			set
			{
				noUpdate.Value = value;
			}
		}

		public bool IgnoreErrors
		{
			get
			{
				return ignoreErrors.Value;
			}
			set
			{
				ignoreErrors.Value = value;
			}
		}

		public bool NoAbortOnError
		{
			get
			{
				return noAbortOnError.Value;
			}
			set
			{
				noAbortOnError.Value = value;
			}
		}

		public bool AbortOnError
		{
			get
			{
				return abortOnError.Value;
			}
			set
			{
				abortOnError.Value = value;
			}
		}

		public bool DumpUserAgent
		{
			get
			{
				return dumpUserAgent.Value;
			}
			set
			{
				dumpUserAgent.Value = value;
			}
		}

		public bool ListExtractors
		{
			get
			{
				return listExtractors.Value;
			}
			set
			{
				listExtractors.Value = value;
			}
		}

		public bool ExtractorDescriptions
		{
			get
			{
				return extractorDescriptions.Value;
			}
			set
			{
				extractorDescriptions.Value = value;
			}
		}

		public string UseExtractors
		{
			get
			{
				return useExtractors.Value;
			}
			set
			{
				useExtractors.Value = value;
			}
		}

		public string DefaultSearch
		{
			get
			{
				return defaultSearch.Value;
			}
			set
			{
				defaultSearch.Value = value;
			}
		}

		public bool IgnoreConfig
		{
			get
			{
				return ignoreConfig.Value;
			}
			set
			{
				ignoreConfig.Value = value;
			}
		}

		public bool NoConfigLocations
		{
			get
			{
				return noConfigLocations.Value;
			}
			set
			{
				noConfigLocations.Value = value;
			}
		}

		public MultiValue<string> ConfigLocations
		{
			get
			{
				return configLocations.Value;
			}
			set
			{
				configLocations.Value = value;
			}
		}

		public bool FlatPlaylist
		{
			get
			{
				return flatPlaylist.Value;
			}
			set
			{
				flatPlaylist.Value = value;
			}
		}

		public bool NoFlatPlaylist
		{
			get
			{
				return noFlatPlaylist.Value;
			}
			set
			{
				noFlatPlaylist.Value = value;
			}
		}

		public bool LiveFromStart
		{
			get
			{
				return liveFromStart.Value;
			}
			set
			{
				liveFromStart.Value = value;
			}
		}

		public bool NoLiveFromStart
		{
			get
			{
				return noLiveFromStart.Value;
			}
			set
			{
				noLiveFromStart.Value = value;
			}
		}

		public string WaitForVideo
		{
			get
			{
				return waitForVideo.Value;
			}
			set
			{
				waitForVideo.Value = value;
			}
		}

		public bool NoWaitForVideo
		{
			get
			{
				return noWaitForVideo.Value;
			}
			set
			{
				noWaitForVideo.Value = value;
			}
		}

		public bool MarkWatched
		{
			get
			{
				return markWatched.Value;
			}
			set
			{
				markWatched.Value = value;
			}
		}

		public bool NoMarkWatched
		{
			get
			{
				return noMarkWatched.Value;
			}
			set
			{
				noMarkWatched.Value = value;
			}
		}

		public bool NoColors
		{
			get
			{
				return noColors.Value;
			}
			set
			{
				noColors.Value = value;
			}
		}

		public string CompatOptions
		{
			get
			{
				return compatOptions.Value;
			}
			set
			{
				compatOptions.Value = value;
			}
		}

		public string Alias
		{
			get
			{
				return alias.Value;
			}
			set
			{
				alias.Value = value;
			}
		}

		public string GeoVerificationProxy
		{
			get
			{
				return geoVerificationProxy.Value;
			}
			set
			{
				geoVerificationProxy.Value = value;
			}
		}

		public bool GeoBypass
		{
			get
			{
				return geoBypass.Value;
			}
			set
			{
				geoBypass.Value = value;
			}
		}

		public bool NoGeoBypass
		{
			get
			{
				return noGeoBypass.Value;
			}
			set
			{
				noGeoBypass.Value = value;
			}
		}

		public string GeoBypassCountry
		{
			get
			{
				return geoBypassCountry.Value;
			}
			set
			{
				geoBypassCountry.Value = value;
			}
		}

		public string GeoBypassIpBlock
		{
			get
			{
				return geoBypassIpBlock.Value;
			}
			set
			{
				geoBypassIpBlock.Value = value;
			}
		}

		public bool WriteLink
		{
			get
			{
				return writeLink.Value;
			}
			set
			{
				writeLink.Value = value;
			}
		}

		public bool WriteUrlLink
		{
			get
			{
				return writeUrlLink.Value;
			}
			set
			{
				writeUrlLink.Value = value;
			}
		}

		public bool WriteWeblocLink
		{
			get
			{
				return writeWeblocLink.Value;
			}
			set
			{
				writeWeblocLink.Value = value;
			}
		}

		public bool WriteDesktopLink
		{
			get
			{
				return writeDesktopLink.Value;
			}
			set
			{
				writeDesktopLink.Value = value;
			}
		}

		public string Proxy
		{
			get
			{
				return proxy.Value;
			}
			set
			{
				proxy.Value = value;
			}
		}

		public int? SocketTimeout
		{
			get
			{
				return socketTimeout.Value;
			}
			set
			{
				socketTimeout.Value = value;
			}
		}

		public string SourceAddress
		{
			get
			{
				return sourceAddress.Value;
			}
			set
			{
				sourceAddress.Value = value;
			}
		}

		public bool ForceIPv4
		{
			get
			{
				return forceIPv4.Value;
			}
			set
			{
				forceIPv4.Value = value;
			}
		}

		public bool ForceIPv6
		{
			get
			{
				return forceIPv6.Value;
			}
			set
			{
				forceIPv6.Value = value;
			}
		}

		public bool ExtractAudio
		{
			get
			{
				return extractAudio.Value;
			}
			set
			{
				extractAudio.Value = value;
			}
		}

		public AudioConversionFormat AudioFormat
		{
			get
			{
				return audioFormat.Value;
			}
			set
			{
				audioFormat.Value = value;
			}
		}

		public byte? AudioQuality
		{
			get
			{
				return audioQuality.Value;
			}
			set
			{
				audioQuality.Value = value;
			}
		}

		public string RemuxVideo
		{
			get
			{
				return remuxVideo.Value;
			}
			set
			{
				remuxVideo.Value = value;
			}
		}

		public VideoRecodeFormat RecodeVideo
		{
			get
			{
				return recodeVideo.Value;
			}
			set
			{
				recodeVideo.Value = value;
			}
		}

		public MultiValue<string> PostprocessorArgs
		{
			get
			{
				return postprocessorArgs.Value;
			}
			set
			{
				postprocessorArgs.Value = value;
			}
		}

		public bool KeepVideo
		{
			get
			{
				return keepVideo.Value;
			}
			set
			{
				keepVideo.Value = value;
			}
		}

		public bool NoKeepVideo
		{
			get
			{
				return noKeepVideo.Value;
			}
			set
			{
				noKeepVideo.Value = value;
			}
		}

		public bool PostOverwrites
		{
			get
			{
				return postOverwrites.Value;
			}
			set
			{
				postOverwrites.Value = value;
			}
		}

		public bool NoPostOverwrites
		{
			get
			{
				return noPostOverwrites.Value;
			}
			set
			{
				noPostOverwrites.Value = value;
			}
		}

		public bool EmbedSubs
		{
			get
			{
				return embedSubs.Value;
			}
			set
			{
				embedSubs.Value = value;
			}
		}

		public bool NoEmbedSubs
		{
			get
			{
				return noEmbedSubs.Value;
			}
			set
			{
				noEmbedSubs.Value = value;
			}
		}

		public bool EmbedThumbnail
		{
			get
			{
				return embedThumbnail.Value;
			}
			set
			{
				embedThumbnail.Value = value;
			}
		}

		public bool NoEmbedThumbnail
		{
			get
			{
				return noEmbedThumbnail.Value;
			}
			set
			{
				noEmbedThumbnail.Value = value;
			}
		}

		public bool EmbedMetadata
		{
			get
			{
				return embedMetadata.Value;
			}
			set
			{
				embedMetadata.Value = value;
			}
		}

		public bool NoEmbedMetadata
		{
			get
			{
				return noEmbedMetadata.Value;
			}
			set
			{
				noEmbedMetadata.Value = value;
			}
		}

		public bool EmbedChapters
		{
			get
			{
				return embedChapters.Value;
			}
			set
			{
				embedChapters.Value = value;
			}
		}

		public bool NoEmbedChapters
		{
			get
			{
				return noEmbedChapters.Value;
			}
			set
			{
				noEmbedChapters.Value = value;
			}
		}

		public bool EmbedInfoJson
		{
			get
			{
				return embedInfoJson.Value;
			}
			set
			{
				embedInfoJson.Value = value;
			}
		}

		public bool NoEmbedInfoJson
		{
			get
			{
				return noEmbedInfoJson.Value;
			}
			set
			{
				noEmbedInfoJson.Value = value;
			}
		}

		public string ParseMetadata
		{
			get
			{
				return parseMetadata.Value;
			}
			set
			{
				parseMetadata.Value = value;
			}
		}

		public MultiValue<string> ReplaceInMetadata
		{
			get
			{
				return replaceInMetadata.Value;
			}
			set
			{
				replaceInMetadata.Value = value;
			}
		}

		public bool Xattrs
		{
			get
			{
				return xattrs.Value;
			}
			set
			{
				xattrs.Value = value;
			}
		}

		public string ConcatPlaylist
		{
			get
			{
				return concatPlaylist.Value;
			}
			set
			{
				concatPlaylist.Value = value;
			}
		}

		public string Fixup
		{
			get
			{
				return fixup.Value;
			}
			set
			{
				fixup.Value = value;
			}
		}

		public string FfmpegLocation
		{
			get
			{
				return ffmpegLocation.Value;
			}
			set
			{
				ffmpegLocation.Value = value;
			}
		}

		public MultiValue<string> Exec
		{
			get
			{
				return exec.Value;
			}
			set
			{
				exec.Value = value;
			}
		}

		public bool NoExec
		{
			get
			{
				return noExec.Value;
			}
			set
			{
				noExec.Value = value;
			}
		}

		public string ConvertSubs
		{
			get
			{
				return convertSubs.Value;
			}
			set
			{
				convertSubs.Value = value;
			}
		}

		public string ConvertThumbnails
		{
			get
			{
				return convertThumbnails.Value;
			}
			set
			{
				convertThumbnails.Value = value;
			}
		}

		public bool SplitChapters
		{
			get
			{
				return splitChapters.Value;
			}
			set
			{
				splitChapters.Value = value;
			}
		}

		public bool NoSplitChapters
		{
			get
			{
				return noSplitChapters.Value;
			}
			set
			{
				noSplitChapters.Value = value;
			}
		}

		public MultiValue<string> RemoveChapters
		{
			get
			{
				return removeChapters.Value;
			}
			set
			{
				removeChapters.Value = value;
			}
		}

		public bool NoRemoveChapters
		{
			get
			{
				return noRemoveChapters.Value;
			}
			set
			{
				noRemoveChapters.Value = value;
			}
		}

		public bool ForceKeyframesAtCuts
		{
			get
			{
				return forceKeyframesAtCuts.Value;
			}
			set
			{
				forceKeyframesAtCuts.Value = value;
			}
		}

		public bool NoForceKeyframesAtCuts
		{
			get
			{
				return noForceKeyframesAtCuts.Value;
			}
			set
			{
				noForceKeyframesAtCuts.Value = value;
			}
		}

		public MultiValue<string> UsePostprocessor
		{
			get
			{
				return usePostprocessor.Value;
			}
			set
			{
				usePostprocessor.Value = value;
			}
		}

		public string SponsorblockMark
		{
			get
			{
				return sponsorblockMark.Value;
			}
			set
			{
				sponsorblockMark.Value = value;
			}
		}

		public string SponsorblockRemove
		{
			get
			{
				return sponsorblockRemove.Value;
			}
			set
			{
				sponsorblockRemove.Value = value;
			}
		}

		public string SponsorblockChapterTitle
		{
			get
			{
				return sponsorblockChapterTitle.Value;
			}
			set
			{
				sponsorblockChapterTitle.Value = value;
			}
		}

		public bool NoSponsorblock
		{
			get
			{
				return noSponsorblock.Value;
			}
			set
			{
				noSponsorblock.Value = value;
			}
		}

		public string SponsorblockApi
		{
			get
			{
				return sponsorblockApi.Value;
			}
			set
			{
				sponsorblockApi.Value = value;
			}
		}

		public bool WriteSubs
		{
			get
			{
				return writeSubs.Value;
			}
			set
			{
				writeSubs.Value = value;
			}
		}

		public bool NoWriteSubs
		{
			get
			{
				return noWriteSubs.Value;
			}
			set
			{
				noWriteSubs.Value = value;
			}
		}

		public bool WriteAutoSubs
		{
			get
			{
				return writeAutoSubs.Value;
			}
			set
			{
				writeAutoSubs.Value = value;
			}
		}

		public bool NoWriteAutoSubs
		{
			get
			{
				return noWriteAutoSubs.Value;
			}
			set
			{
				noWriteAutoSubs.Value = value;
			}
		}

		public bool ListSubs
		{
			get
			{
				return listSubs.Value;
			}
			set
			{
				listSubs.Value = value;
			}
		}

		public string SubFormat
		{
			get
			{
				return subFormat.Value;
			}
			set
			{
				subFormat.Value = value;
			}
		}

		public string SubLangs
		{
			get
			{
				return subLangs.Value;
			}
			set
			{
				subLangs.Value = value;
			}
		}

		public bool WriteThumbnail
		{
			get
			{
				return writeThumbnail.Value;
			}
			set
			{
				writeThumbnail.Value = value;
			}
		}

		public bool NoWriteThumbnail
		{
			get
			{
				return noWriteThumbnail.Value;
			}
			set
			{
				noWriteThumbnail.Value = value;
			}
		}

		public bool WriteAllThumbnails
		{
			get
			{
				return writeAllThumbnails.Value;
			}
			set
			{
				writeAllThumbnails.Value = value;
			}
		}

		public bool ListThumbnails
		{
			get
			{
				return listThumbnails.Value;
			}
			set
			{
				listThumbnails.Value = value;
			}
		}

		public bool Quiet
		{
			get
			{
				return quiet.Value;
			}
			set
			{
				quiet.Value = value;
			}
		}

		public bool NoWarnings
		{
			get
			{
				return noWarnings.Value;
			}
			set
			{
				noWarnings.Value = value;
			}
		}

		public bool Simulate
		{
			get
			{
				return simulate.Value;
			}
			set
			{
				simulate.Value = value;
			}
		}

		public bool NoSimulate
		{
			get
			{
				return noSimulate.Value;
			}
			set
			{
				noSimulate.Value = value;
			}
		}

		public bool IgnoreNoFormatsError
		{
			get
			{
				return ignoreNoFormatsError.Value;
			}
			set
			{
				ignoreNoFormatsError.Value = value;
			}
		}

		public bool NoIgnoreNoFormatsError
		{
			get
			{
				return noIgnoreNoFormatsError.Value;
			}
			set
			{
				noIgnoreNoFormatsError.Value = value;
			}
		}

		public bool SkipDownload
		{
			get
			{
				return skipDownload.Value;
			}
			set
			{
				skipDownload.Value = value;
			}
		}

		public MultiValue<string> Print
		{
			get
			{
				return print.Value;
			}
			set
			{
				print.Value = value;
			}
		}

		public MultiValue<string> PrintToFile
		{
			get
			{
				return printToFile.Value;
			}
			set
			{
				printToFile.Value = value;
			}
		}

		public bool DumpJson
		{
			get
			{
				return dumpJson.Value;
			}
			set
			{
				dumpJson.Value = value;
			}
		}

		public bool DumpSingleJson
		{
			get
			{
				return dumpSingleJson.Value;
			}
			set
			{
				dumpSingleJson.Value = value;
			}
		}

		public bool ForceWriteArchive
		{
			get
			{
				return forceWriteArchive.Value;
			}
			set
			{
				forceWriteArchive.Value = value;
			}
		}

		public bool Newline
		{
			get
			{
				return newline.Value;
			}
			set
			{
				newline.Value = value;
			}
		}

		public bool NoProgress
		{
			get
			{
				return noProgress.Value;
			}
			set
			{
				noProgress.Value = value;
			}
		}

		public bool Progress
		{
			get
			{
				return progress.Value;
			}
			set
			{
				progress.Value = value;
			}
		}

		public bool ConsoleTitle
		{
			get
			{
				return consoleTitle.Value;
			}
			set
			{
				consoleTitle.Value = value;
			}
		}

		public string ProgressTemplate
		{
			get
			{
				return progressTemplate.Value;
			}
			set
			{
				progressTemplate.Value = value;
			}
		}

		public bool Verbose
		{
			get
			{
				return verbose.Value;
			}
			set
			{
				verbose.Value = value;
			}
		}

		public bool DumpPages
		{
			get
			{
				return dumpPages.Value;
			}
			set
			{
				dumpPages.Value = value;
			}
		}

		public bool WritePages
		{
			get
			{
				return writePages.Value;
			}
			set
			{
				writePages.Value = value;
			}
		}

		public bool PrintTraffic
		{
			get
			{
				return printTraffic.Value;
			}
			set
			{
				printTraffic.Value = value;
			}
		}

		public string Format
		{
			get
			{
				return format.Value;
			}
			set
			{
				format.Value = value;
			}
		}

		public string FormatSort
		{
			get
			{
				return formatSort.Value;
			}
			set
			{
				formatSort.Value = value;
			}
		}

		public bool FormatSortForce
		{
			get
			{
				return formatSortForce.Value;
			}
			set
			{
				formatSortForce.Value = value;
			}
		}

		public bool NoFormatSortForce
		{
			get
			{
				return noFormatSortForce.Value;
			}
			set
			{
				noFormatSortForce.Value = value;
			}
		}

		public bool VideoMultistreams
		{
			get
			{
				return videoMultistreams.Value;
			}
			set
			{
				videoMultistreams.Value = value;
			}
		}

		public bool NoVideoMultistreams
		{
			get
			{
				return noVideoMultistreams.Value;
			}
			set
			{
				noVideoMultistreams.Value = value;
			}
		}

		public bool AudioMultistreams
		{
			get
			{
				return audioMultistreams.Value;
			}
			set
			{
				audioMultistreams.Value = value;
			}
		}

		public bool NoAudioMultistreams
		{
			get
			{
				return noAudioMultistreams.Value;
			}
			set
			{
				noAudioMultistreams.Value = value;
			}
		}

		public bool PreferFreeFormats
		{
			get
			{
				return preferFreeFormats.Value;
			}
			set
			{
				preferFreeFormats.Value = value;
			}
		}

		public bool NoPreferFreeFormats
		{
			get
			{
				return noPreferFreeFormats.Value;
			}
			set
			{
				noPreferFreeFormats.Value = value;
			}
		}

		public bool CheckFormats
		{
			get
			{
				return checkFormats.Value;
			}
			set
			{
				checkFormats.Value = value;
			}
		}

		public bool CheckAllFormats
		{
			get
			{
				return checkAllFormats.Value;
			}
			set
			{
				checkAllFormats.Value = value;
			}
		}

		public bool NoCheckFormats
		{
			get
			{
				return noCheckFormats.Value;
			}
			set
			{
				noCheckFormats.Value = value;
			}
		}

		public bool ListFormats
		{
			get
			{
				return listFormats.Value;
			}
			set
			{
				listFormats.Value = value;
			}
		}

		public DownloadMergeFormat MergeOutputFormat
		{
			get
			{
				return mergeOutputFormat.Value;
			}
			set
			{
				mergeOutputFormat.Value = value;
			}
		}

		public string PlaylistItems
		{
			get
			{
				return playlistItems.Value;
			}
			set
			{
				playlistItems.Value = value;
			}
		}

		public string MinFilesize
		{
			get
			{
				return minFilesize.Value;
			}
			set
			{
				minFilesize.Value = value;
			}
		}

		public string MaxFilesize
		{
			get
			{
				return maxFilesize.Value;
			}
			set
			{
				maxFilesize.Value = value;
			}
		}

		public DateTime Date
		{
			get
			{
				return date.Value;
			}
			set
			{
				date.Value = value;
			}
		}

		public DateTime DateBefore
		{
			get
			{
				return dateBefore.Value;
			}
			set
			{
				dateBefore.Value = value;
			}
		}

		public DateTime DateAfter
		{
			get
			{
				return dateAfter.Value;
			}
			set
			{
				dateAfter.Value = value;
			}
		}

		public MultiValue<string> MatchFilters
		{
			get
			{
				return matchFilters.Value;
			}
			set
			{
				matchFilters.Value = value;
			}
		}

		public bool NoMatchFilter
		{
			get
			{
				return noMatchFilter.Value;
			}
			set
			{
				noMatchFilter.Value = value;
			}
		}

		public bool NoPlaylist
		{
			get
			{
				return noPlaylist.Value;
			}
			set
			{
				noPlaylist.Value = value;
			}
		}

		public bool YesPlaylist
		{
			get
			{
				return yesPlaylist.Value;
			}
			set
			{
				yesPlaylist.Value = value;
			}
		}

		public byte? AgeLimit
		{
			get
			{
				return ageLimit.Value;
			}
			set
			{
				ageLimit.Value = value;
			}
		}

		public string DownloadArchive
		{
			get
			{
				return downloadArchive.Value;
			}
			set
			{
				downloadArchive.Value = value;
			}
		}

		public bool NoDownloadArchive
		{
			get
			{
				return noDownloadArchive.Value;
			}
			set
			{
				noDownloadArchive.Value = value;
			}
		}

		public int? MaxDownloads
		{
			get
			{
				return maxDownloads.Value;
			}
			set
			{
				maxDownloads.Value = value;
			}
		}

		public bool BreakOnExisting
		{
			get
			{
				return breakOnExisting.Value;
			}
			set
			{
				breakOnExisting.Value = value;
			}
		}

		public bool BreakOnReject
		{
			get
			{
				return breakOnReject.Value;
			}
			set
			{
				breakOnReject.Value = value;
			}
		}

		public bool BreakPerInput
		{
			get
			{
				return breakPerInput.Value;
			}
			set
			{
				breakPerInput.Value = value;
			}
		}

		public bool NoBreakPerInput
		{
			get
			{
				return noBreakPerInput.Value;
			}
			set
			{
				noBreakPerInput.Value = value;
			}
		}

		public int? SkipPlaylistAfterErrors
		{
			get
			{
				return skipPlaylistAfterErrors.Value;
			}
			set
			{
				skipPlaylistAfterErrors.Value = value;
			}
		}

		public string Encoding
		{
			get
			{
				return encoding.Value;
			}
			set
			{
				encoding.Value = value;
			}
		}

		public bool LegacyServerConnect
		{
			get
			{
				return legacyServerConnect.Value;
			}
			set
			{
				legacyServerConnect.Value = value;
			}
		}

		public bool NoCheckCertificates
		{
			get
			{
				return noCheckCertificates.Value;
			}
			set
			{
				noCheckCertificates.Value = value;
			}
		}

		public bool PreferInsecure
		{
			get
			{
				return preferInsecure.Value;
			}
			set
			{
				preferInsecure.Value = value;
			}
		}

		public MultiValue<string> AddHeader
		{
			get
			{
				return addHeader.Value;
			}
			set
			{
				addHeader.Value = value;
			}
		}

		public bool BidiWorkaround
		{
			get
			{
				return bidiWorkaround.Value;
			}
			set
			{
				bidiWorkaround.Value = value;
			}
		}

		public int? SleepRequests
		{
			get
			{
				return sleepRequests.Value;
			}
			set
			{
				sleepRequests.Value = value;
			}
		}

		public int? SleepInterval
		{
			get
			{
				return sleepInterval.Value;
			}
			set
			{
				sleepInterval.Value = value;
			}
		}

		public int? MaxSleepInterval
		{
			get
			{
				return maxSleepInterval.Value;
			}
			set
			{
				maxSleepInterval.Value = value;
			}
		}

		public int? SleepSubtitles
		{
			get
			{
				return sleepSubtitles.Value;
			}
			set
			{
				sleepSubtitles.Value = value;
			}
		}

		public object Clone()
		{
			return FromString(GetOptionFlags());
		}

		public void WriteConfigFile(string path)
		{
			File.WriteAllLines(path, GetOptionFlags());
		}

		public override string ToString()
		{
			return " " + string.Join(" ", GetOptionFlags());
		}

		public IEnumerable<string> GetOptionFlags()
		{
			return from value in GetKnownOptions().Concat(CustomOptions).SelectMany((IOption opt) => opt.ToStringCollection())
				where !string.IsNullOrWhiteSpace(value)
				select value;
		}

		internal IEnumerable<IOption> GetKnownOptions()
		{
			return (from p in GetType().GetRuntimeFields()
				where p.FieldType.IsGenericType && p.FieldType.GetInterfaces().Contains(typeof(IOption))
				select p.GetValue(this)).Cast<IOption>();
		}

		public OptionSet OverrideOptions(OptionSet overrideOptions)
		{
			OptionSet optionSet = (OptionSet)Clone();
			optionSet.CustomOptions = optionSet.CustomOptions.Concat(overrideOptions.CustomOptions).Distinct(Comparer).ToArray();
			IEnumerable<FieldInfo> enumerable = from p in overrideOptions.GetType().GetRuntimeFields()
				where p.FieldType.IsGenericType && p.FieldType.GetInterfaces().Contains(typeof(IOption))
				select p;
			foreach (FieldInfo item in enumerable)
			{
				IOption option = (IOption)item.GetValue(overrideOptions);
				if (option.IsSet)
				{
					optionSet.GetType().GetField(item.Name, BindingFlags.Instance | BindingFlags.NonPublic).SetValue(optionSet, option);
				}
			}
			return optionSet;
		}

		public static OptionSet FromString(IEnumerable<string> lines)
		{
			OptionSet optionSet = new OptionSet();
			IOption[] customOptions = (from option in GetOptions(lines, optionSet.GetKnownOptions())
				where option.IsCustom
				select option).ToArray();
			optionSet.CustomOptions = customOptions;
			return optionSet;
		}

		private static IEnumerable<IOption> GetOptions(IEnumerable<string> lines, IEnumerable<IOption> options)
		{
			IEnumerable<IOption> knownOptions = options.ToList();
			foreach (string rawLine in lines)
			{
				string line = rawLine.Trim();
				if (!line.StartsWith("#") && !string.IsNullOrWhiteSpace(line))
				{
					string[] segments = line.Split(' ');
					string flag = segments[0];
					IOption knownOption = knownOptions.FirstOrDefault((IOption o) => o.OptionStrings.Contains(flag));
					IOption option3;
					if (segments.Length <= 1)
					{
						IOption option2 = new Option<bool>(true, flag);
						option3 = option2;
					}
					else
					{
						IOption option2 = new Option<string>(true, flag);
						option3 = option2;
					}
					IOption customOption = option3;
					IOption option = knownOption ?? customOption;
					option.SetFromString(line);
					yield return option;
				}
			}
		}

		public static OptionSet LoadConfigFile(string path)
		{
			return FromString(File.ReadAllLines(path));
		}

		public void AddCustomOption<T>(string optionString, T value)
		{
			Option<T> option = new Option<T>(true, optionString);
			option.Value = value;
			CustomOptions = CustomOptions.Concat(new Option<T>[1] { option }).ToArray();
		}

		public void SetCustomOption<T>(string optionString, T value)
		{
			foreach (IOption item in CustomOptions.Where((IOption o) => o.OptionStrings.Contains(optionString)))
			{
				if (item is Option<T> option)
				{
					option.Value = value;
					continue;
				}
				throw new ArgumentException($"Value passed to option '{optionString}' has invalid type '{value.GetType()}'.");
			}
		}

		public void DeleteCustomOption(string optionString)
		{
			CustomOptions = CustomOptions.Where((IOption o) => !o.OptionStrings.Contains(optionString)).ToArray();
		}
	}
	internal static class Utils
	{
		internal static T OptionValueFromString<T>(string stringValue)
		{
			if (typeof(T) == typeof(bool))
			{
				return (T)(object)true;
			}
			if (typeof(T) == typeof(Enum))
			{
				string value = CultureInfo.InvariantCulture.TextInfo.ToTitleCase(stringValue);
				return (T)Enum.Parse(typeof(T), value);
			}
			if (typeof(T) == typeof(DateTime))
			{
				return (T)(object)DateTime.ParseExact(stringValue, "yyyyMMdd", null);
			}
			TypeConverter converter = TypeDescriptor.GetConverter(typeof(T));
			return (T)converter.ConvertFrom(stringValue);
		}

		internal static string OptionValueToString<T>(T value)
		{
			if (value is bool)
			{
				return string.Empty;
			}
			if (value is Enum)
			{
				return " \"" + value.ToString().ToLower() + "\"";
			}
			if (value is DateTime)
			{
				object obj = value;
				DateTime dateTime = (DateTime)((obj is DateTime) ? obj : null);
				if (true)
				{
					return " " + dateTime.ToString("yyyyMMdd");
				}
			}
			if (value is string)
			{
				return $" \"{value}\"";
			}
			T val = value;
			return " " + val;
		}
	}
}
namespace YoutubeDLSharp.Metadata
{
	public class ChapterData
	{
		[JsonProperty("start_time")]
		public float? StartTime { get; set; }

		[JsonProperty("end_time")]
		public float? EndTime { get; set; }

		[JsonProperty("title")]
		public string Title { get; set; }
	}
	public class CommentData
	{
		[JsonProperty("id")]
		public string ID { get; set; }

		[JsonProperty("author")]
		public string Author { get; set; }

		[JsonProperty("author_id")]
		public string AuthorID { get; set; }

		[JsonProperty("author_thumbnail")]
		public string AuthorThumbnail { get; set; }

		[JsonProperty("html")]
		public string Html { get; set; }

		[JsonProperty("text")]
		public string Text { get; set; }

		[JsonProperty("timestamp")]
		[JsonConverter(typeof(UnixTimestampConverter))]
		public DateTime Timestamp { get; set; }

		[JsonProperty("parent")]
		public string Parent { get; set; }

		[JsonProperty("like_count")]
		public int? LikeCount { get; set; }

		[JsonProperty("dislike_count")]
		public int? DislikeCount { get; set; }

		[JsonProperty("is_favorited")]
		public bool? IsFavorited { get; set; }

		[JsonProperty("author_is_uploader")]
		public bool? AuthorIsUploader { get; set; }
	}
	public class FormatData
	{
		[JsonProperty("url")]
		public string Url { get; set; }

		[JsonProperty("manifest_url")]
		public string ManifestUrl { get; set; }

		[JsonProperty("ext")]
		public string Extension { get; set; }

		[JsonProperty("format")]
		public string Format { get; set; }

		[JsonProperty("format_id")]
		public string FormatId { get; set; }

		[JsonProperty("format_note")]
		public string FormatNote { get; set; }

		[JsonProperty("width")]
		public int? Width { get; set; }

		[JsonProperty("height")]
		public int? Height { get; set; }

		[JsonProperty("resolution")]
		public string Resolution { get; set; }

		[JsonProperty("dynamic_range")]
		public string DynamicRange { get; set; }

		[JsonProperty("tbr")]
		public double? Bitrate { get; set; }

		[JsonProperty("abr")]
		public double? AudioBitrate { get; set; }

		[JsonProperty("acodec")]
		public string AudioC

plugins/Lib/NAudio.Core.dll

Decompiled 10 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Threading;
using NAudio.Dmo;
using NAudio.Dsp;
using NAudio.FileFormats.Wav;
using NAudio.Utils;
using NAudio.Wave;
using NAudio.Wave.SampleProviders;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("Mark Heath")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("© Mark Heath 2023")]
[assembly: AssemblyFileVersion("2.2.1.0")]
[assembly: AssemblyInformationalVersion("2.2.1")]
[assembly: AssemblyProduct("NAudio.Core")]
[assembly: AssemblyTitle("NAudio.Core")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/naudio/NAudio")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.2.1.0")]
[module: UnverifiableCode]
namespace NAudio
{
	public enum Manufacturers
	{
		Microsoft = 1,
		Creative = 2,
		Mediavision = 3,
		Fujitsu = 4,
		Artisoft = 20,
		TurtleBeach = 21,
		Ibm = 22,
		Vocaltec = 23,
		Roland = 24,
		DspSolutions = 25,
		Nec = 26,
		Ati = 27,
		Wanglabs = 28,
		Tandy = 29,
		Voyetra = 30,
		Antex = 31,
		IclPS = 32,
		Intel = 33,
		Gravis = 34,
		Val = 35,
		Interactive = 36,
		Yamaha = 37,
		Everex = 38,
		Echo = 39,
		Sierra = 40,
		Cat = 41,
		Apps = 42,
		DspGroup = 43,
		Melabs = 44,
		ComputerFriends = 45,
		Ess = 46,
		Audiofile = 47,
		Motorola = 48,
		Canopus = 49,
		Epson = 50,
		Truevision = 51,
		Aztech = 52,
		Videologic = 53,
		Scalacs = 54,
		Korg = 55,
		Apt = 56,
		Ics = 57,
		Iteratedsys = 58,
		Metheus = 59,
		Logitech = 60,
		Winnov = 61,
		Ncr = 62,
		Exan = 63,
		Ast = 64,
		Willowpond = 65,
		Sonicfoundry = 66,
		Vitec = 67,
		Moscom = 68,
		Siliconsoft = 69,
		Supermac = 73,
		Audiopt = 74,
		Speechcomp = 76,
		Ahead = 77,
		Dolby = 78,
		Oki = 79,
		Auravision = 80,
		Olivetti = 81,
		Iomagic = 82,
		Matsushita = 83,
		Controlres = 84,
		Xebec = 85,
		Newmedia = 86,
		Nms = 87,
		Lyrrus = 88,
		Compusic = 89,
		Opti = 90,
		Adlacc = 91,
		Compaq = 92,
		Dialogic = 93,
		Insoft = 94,
		Mptus = 95,
		Weitek = 96,
		LernoutAndHauspie = 97,
		Qciar = 98,
		Apple = 99,
		Digital = 100,
		Motu = 101,
		Workbit = 102,
		Ositech = 103,
		Miro = 104,
		Cirruslogic = 105,
		Isolution = 106,
		Horizons = 107,
		Concepts = 108,
		Vtg = 109,
		Radius = 110,
		Rockwell = 111,
		Xyz = 112,
		Opcode = 113,
		Voxware = 114,
		NorthernTelecom = 115,
		Apicom = 116,
		Grande = 117,
		Addx = 118,
		Wildcat = 119,
		Rhetorex = 120,
		Brooktree = 121,
		Ensoniq = 125,
		Fast = 126,
		Nvidia = 127,
		Oksori = 128,
		Diacoustics = 129,
		Gulbransen = 130,
		KayElemetrics = 131,
		Crystal = 132,
		SplashStudios = 133,
		Quarterdeck = 134,
		Tdk = 135,
		DigitalAudioLabs = 136,
		Seersys = 137,
		Picturetel = 138,
		AttMicroelectronics = 139,
		Osprey = 140,
		Mediatrix = 141,
		Soundesigns = 142,
		Aldigital = 143,
		SpectrumSignalProcessing = 144,
		Ecs = 145,
		Amd = 146,
		Coredynamics = 147,
		Canam = 148,
		Softsound = 149,
		Norris = 150,
		Ddd = 151,
		Euphonics = 152,
		Precept = 153,
		CrystalNet = 154,
		Chromatic = 155,
		Voiceinfo = 156,
		Viennasys = 157,
		Connectix = 158,
		Gadgetlabs = 159,
		Frontier = 160,
		Viona = 161,
		Casio = 162,
		Diamondmm = 163,
		S3 = 164,
		FraunhoferIis = 172
	}
	public class MmException : Exception
	{
		public MmResult Result { get; }

		public string Function { get; }

		public MmException(MmResult result, string function)
			: base(ErrorMessage(result, function))
		{
			Result = result;
			Function = function;
		}

		private static string ErrorMessage(MmResult result, string function)
		{
			return $"{result} calling {function}";
		}

		public static void Try(MmResult result, string function)
		{
			if (result != 0)
			{
				throw new MmException(result, function);
			}
		}
	}
	public enum MmResult
	{
		NoError = 0,
		UnspecifiedError = 1,
		BadDeviceId = 2,
		NotEnabled = 3,
		AlreadyAllocated = 4,
		InvalidHandle = 5,
		NoDriver = 6,
		MemoryAllocationError = 7,
		NotSupported = 8,
		BadErrorNumber = 9,
		InvalidFlag = 10,
		InvalidParameter = 11,
		HandleBusy = 12,
		InvalidAlias = 13,
		BadRegistryDatabase = 14,
		RegistryKeyNotFound = 15,
		RegistryReadError = 16,
		RegistryWriteError = 17,
		RegistryDeleteError = 18,
		RegistryValueNotFound = 19,
		NoDriverCallback = 20,
		MoreData = 21,
		WaveBadFormat = 32,
		WaveStillPlaying = 33,
		WaveHeaderUnprepared = 34,
		WaveSync = 35,
		AcmNotPossible = 512,
		AcmBusy = 513,
		AcmHeaderUnprepared = 514,
		AcmCancelled = 515,
		MixerInvalidLine = 1024,
		MixerInvalidControl = 1025,
		MixerInvalidValue = 1026
	}
}
namespace NAudio.CoreAudioApi
{
	public enum CaptureState
	{
		Stopped,
		Starting,
		Capturing,
		Stopping
	}
}
namespace NAudio.Dmo
{
	public class AudioMediaSubtypes
	{
		public static readonly Guid MEDIASUBTYPE_PCM = new Guid("00000001-0000-0010-8000-00AA00389B71");

		public static readonly Guid MEDIASUBTYPE_PCMAudioObsolete = new Guid("e436eb8a-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_MPEG1Packet = new Guid("e436eb80-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_MPEG1Payload = new Guid("e436eb81-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_MPEG2_AUDIO = new Guid("e06d802b-db46-11cf-b4d1-00805f6cbbea");

		public static readonly Guid MEDIASUBTYPE_DVD_LPCM_AUDIO = new Guid("e06d8032-db46-11cf-b4d1-00805f6cbbea");

		public static readonly Guid MEDIASUBTYPE_DRM_Audio = new Guid("00000009-0000-0010-8000-00aa00389b71");

		public static readonly Guid MEDIASUBTYPE_IEEE_FLOAT = new Guid("00000003-0000-0010-8000-00aa00389b71");

		public static readonly Guid MEDIASUBTYPE_DOLBY_AC3 = new Guid("e06d802c-db46-11cf-b4d1-00805f6cbbea");

		public static readonly Guid MEDIASUBTYPE_DOLBY_AC3_SPDIF = new Guid("00000092-0000-0010-8000-00aa00389b71");

		public static readonly Guid MEDIASUBTYPE_RAW_SPORT = new Guid("00000240-0000-0010-8000-00aa00389b71");

		public static readonly Guid MEDIASUBTYPE_SPDIF_TAG_241h = new Guid("00000241-0000-0010-8000-00aa00389b71");

		public static readonly Guid MEDIASUBTYPE_I420 = new Guid("30323449-0000-0010-8000-00AA00389B71");

		public static readonly Guid MEDIASUBTYPE_IYUV = new Guid("56555949-0000-0010-8000-00AA00389B71");

		public static readonly Guid MEDIASUBTYPE_RGB1 = new Guid("e436eb78-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_RGB24 = new Guid("e436eb7d-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_RGB32 = new Guid("e436eb7e-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_RGB4 = new Guid("e436eb79-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_RGB555 = new Guid("e436eb7c-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_RGB565 = new Guid("e436eb7b-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_RGB8 = new Guid("e436eb7a-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_UYVY = new Guid("59565955-0000-0010-8000-00AA00389B71");

		public static readonly Guid MEDIASUBTYPE_VIDEOIMAGE = new Guid("1d4a45f2-e5f6-4b44-8388-f0ae5c0e0c37");

		public static readonly Guid MEDIASUBTYPE_YUY2 = new Guid("32595559-0000-0010-8000-00AA00389B71");

		public static readonly Guid MEDIASUBTYPE_YV12 = new Guid("31313259-0000-0010-8000-00AA00389B71");

		public static readonly Guid MEDIASUBTYPE_YVU9 = new Guid("39555659-0000-0010-8000-00AA00389B71");

		public static readonly Guid MEDIASUBTYPE_YVYU = new Guid("55595659-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMFORMAT_MPEG2Video = new Guid("e06d80e3-db46-11cf-b4d1-00805f6cbbea");

		public static readonly Guid WMFORMAT_Script = new Guid("5C8510F2-DEBE-4ca7-BBA5-F07A104F8DFF");

		public static readonly Guid WMFORMAT_VideoInfo = new Guid("05589f80-c356-11ce-bf01-00aa0055595a");

		public static readonly Guid WMFORMAT_WaveFormatEx = new Guid("05589f81-c356-11ce-bf01-00aa0055595a");

		public static readonly Guid WMFORMAT_WebStream = new Guid("da1e6b13-8359-4050-b398-388e965bf00c");

		public static readonly Guid WMMEDIASUBTYPE_ACELPnet = new Guid("00000130-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_Base = new Guid("00000000-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_DRM = new Guid("00000009-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_MP3 = new Guid("00000055-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_MP43 = new Guid("3334504D-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_MP4S = new Guid("5334504D-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_M4S2 = new Guid("3253344D-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_P422 = new Guid("32323450-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_MPEG2_VIDEO = new Guid("e06d8026-db46-11cf-b4d1-00805f6cbbea");

		public static readonly Guid WMMEDIASUBTYPE_MSS1 = new Guid("3153534D-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_MSS2 = new Guid("3253534D-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_PCM = new Guid("00000001-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WebStream = new Guid("776257d4-c627-41cb-8f81-7ac7ff1c40cc");

		public static readonly Guid WMMEDIASUBTYPE_WMAudio_Lossless = new Guid("00000163-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMAudioV2 = new Guid("00000161-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMAudioV7 = new Guid("00000161-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMAudioV8 = new Guid("00000161-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMAudioV9 = new Guid("00000162-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMSP1 = new Guid("0000000A-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMV1 = new Guid("31564D57-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMV2 = new Guid("32564D57-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMV3 = new Guid("33564D57-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMVA = new Guid("41564D57-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WMVP = new Guid("50564D57-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIASUBTYPE_WVP2 = new Guid("32505657-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIATYPE_Audio = new Guid("73647561-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIATYPE_FileTransfer = new Guid("D9E47579-930E-4427-ADFC-AD80F290E470");

		public static readonly Guid WMMEDIATYPE_Image = new Guid("34A50FD8-8AA5-4386-81FE-A0EFE0488E31");

		public static readonly Guid WMMEDIATYPE_Script = new Guid("73636d64-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMMEDIATYPE_Text = new Guid("9BBA1EA7-5AB2-4829-BA57-0940209BCF3E");

		public static readonly Guid WMMEDIATYPE_Video = new Guid("73646976-0000-0010-8000-00AA00389B71");

		public static readonly Guid WMSCRIPTTYPE_TwoStrings = new Guid("82f38a70-c29f-11d1-97ad-00a0c95ea850");

		public static readonly Guid MEDIASUBTYPE_WAVE = new Guid("e436eb8b-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_AU = new Guid("e436eb8c-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid MEDIASUBTYPE_AIFF = new Guid("e436eb8d-524f-11ce-9f53-0020af0ba770");

		public static readonly Guid[] AudioSubTypes = new Guid[13]
		{
			MEDIASUBTYPE_PCM, MEDIASUBTYPE_PCMAudioObsolete, MEDIASUBTYPE_MPEG1Packet, MEDIASUBTYPE_MPEG1Payload, MEDIASUBTYPE_MPEG2_AUDIO, MEDIASUBTYPE_DVD_LPCM_AUDIO, MEDIASUBTYPE_DRM_Audio, MEDIASUBTYPE_IEEE_FLOAT, MEDIASUBTYPE_DOLBY_AC3, MEDIASUBTYPE_DOLBY_AC3_SPDIF,
			MEDIASUBTYPE_RAW_SPORT, MEDIASUBTYPE_SPDIF_TAG_241h, WMMEDIASUBTYPE_MP3
		};

		public static readonly string[] AudioSubTypeNames = new string[13]
		{
			"PCM", "PCM Obsolete", "MPEG1Packet", "MPEG1Payload", "MPEG2_AUDIO", "DVD_LPCM_AUDIO", "DRM_Audio", "IEEE_FLOAT", "DOLBY_AC3", "DOLBY_AC3_SPDIF",
			"RAW_SPORT", "SPDIF_TAG_241h", "MP3"
		};

		public static string GetAudioSubtypeName(Guid subType)
		{
			for (int i = 0; i < AudioSubTypes.Length; i++)
			{
				if (subType == AudioSubTypes[i])
				{
					return AudioSubTypeNames[i];
				}
			}
			return subType.ToString();
		}
	}
}
namespace NAudio.Utils
{
	public static class BufferHelpers
	{
		public static byte[] Ensure(byte[] buffer, int bytesRequired)
		{
			if (buffer == null || buffer.Length < bytesRequired)
			{
				buffer = new byte[bytesRequired];
			}
			return buffer;
		}

		public static float[] Ensure(float[] buffer, int samplesRequired)
		{
			if (buffer == null || buffer.Length < samplesRequired)
			{
				buffer = new float[samplesRequired];
			}
			return buffer;
		}
	}
	public static class ByteArrayExtensions
	{
		public static bool IsEntirelyNull(byte[] buffer)
		{
			for (int i = 0; i < buffer.Length; i++)
			{
				if (buffer[i] != 0)
				{
					return false;
				}
			}
			return true;
		}

		public static string DescribeAsHex(byte[] buffer, string separator, int bytesPerLine)
		{
			StringBuilder stringBuilder = new StringBuilder();
			int num = 0;
			foreach (byte b in buffer)
			{
				stringBuilder.AppendFormat("{0:X2}{1}", b, separator);
				if (++num % bytesPerLine == 0)
				{
					stringBuilder.Append("\r\n");
				}
			}
			stringBuilder.Append("\r\n");
			return stringBuilder.ToString();
		}

		public static string DecodeAsString(byte[] buffer, int offset, int length, Encoding encoding)
		{
			for (int i = 0; i < length; i++)
			{
				if (buffer[offset + i] == 0)
				{
					length = i;
				}
			}
			return encoding.GetString(buffer, offset, length);
		}

		public static byte[] Concat(params byte[][] byteArrays)
		{
			int num = 0;
			byte[][] array = byteArrays;
			foreach (byte[] array2 in array)
			{
				num += array2.Length;
			}
			if (num <= 0)
			{
				return new byte[0];
			}
			byte[] array3 = new byte[num];
			int num2 = 0;
			array = byteArrays;
			foreach (byte[] array4 in array)
			{
				Array.Copy(array4, 0, array3, num2, array4.Length);
				num2 += array4.Length;
			}
			return array3;
		}
	}
	public class ByteEncoding : Encoding
	{
		public static readonly ByteEncoding Instance = new ByteEncoding();

		private ByteEncoding()
		{
		}

		public override int GetByteCount(char[] chars, int index, int count)
		{
			return count;
		}

		public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
		{
			for (int i = 0; i < charCount; i++)
			{
				bytes[byteIndex + i] = (byte)chars[charIndex + i];
			}
			return charCount;
		}

		public override int GetCharCount(byte[] bytes, int index, int count)
		{
			for (int i = 0; i < count; i++)
			{
				if (bytes[index + i] == 0)
				{
					return i;
				}
			}
			return count;
		}

		public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex)
		{
			for (int i = 0; i < byteCount; i++)
			{
				byte b = bytes[byteIndex + i];
				if (b == 0)
				{
					return i;
				}
				chars[charIndex + i] = (char)b;
			}
			return byteCount;
		}

		public override int GetMaxCharCount(int byteCount)
		{
			return byteCount;
		}

		public override int GetMaxByteCount(int charCount)
		{
			return charCount;
		}
	}
	public class ChunkIdentifier
	{
		public static int ChunkIdentifierToInt32(string s)
		{
			if (s.Length != 4)
			{
				throw new ArgumentException("Must be a four character string");
			}
			byte[] bytes = Encoding.UTF8.GetBytes(s);
			if (bytes.Length != 4)
			{
				throw new ArgumentException("Must encode to exactly four bytes");
			}
			return BitConverter.ToInt32(bytes, 0);
		}
	}
	public class CircularBuffer
	{
		private readonly byte[] buffer;

		private readonly object lockObject;

		private int writePosition;

		private int readPosition;

		private int byteCount;

		public int MaxLength => buffer.Length;

		public int Count
		{
			get
			{
				lock (lockObject)
				{
					return byteCount;
				}
			}
		}

		public CircularBuffer(int size)
		{
			buffer = new byte[size];
			lockObject = new object();
		}

		public int Write(byte[] data, int offset, int count)
		{
			lock (lockObject)
			{
				int num = 0;
				if (count > buffer.Length - byteCount)
				{
					count = buffer.Length - byteCount;
				}
				int num2 = Math.Min(buffer.Length - writePosition, count);
				Array.Copy(data, offset, buffer, writePosition, num2);
				writePosition += num2;
				writePosition %= buffer.Length;
				num += num2;
				if (num < count)
				{
					Array.Copy(data, offset + num, buffer, writePosition, count - num);
					writePosition += count - num;
					num = count;
				}
				byteCount += num;
				return num;
			}
		}

		public int Read(byte[] data, int offset, int count)
		{
			lock (lockObject)
			{
				if (count > byteCount)
				{
					count = byteCount;
				}
				int num = 0;
				int num2 = Math.Min(buffer.Length - readPosition, count);
				Array.Copy(buffer, readPosition, data, offset, num2);
				num += num2;
				readPosition += num2;
				readPosition %= buffer.Length;
				if (num < count)
				{
					Array.Copy(buffer, readPosition, data, offset + num, count - num);
					readPosition += count - num;
					num = count;
				}
				byteCount -= num;
				return num;
			}
		}

		public void Reset()
		{
			lock (lockObject)
			{
				ResetInner();
			}
		}

		private void ResetInner()
		{
			byteCount = 0;
			readPosition = 0;
			writePosition = 0;
		}

		public void Advance(int count)
		{
			lock (lockObject)
			{
				if (count >= byteCount)
				{
					ResetInner();
					return;
				}
				byteCount -= count;
				readPosition += count;
				readPosition %= MaxLength;
			}
		}
	}
	public class Decibels
	{
		private const double LOG_2_DB = 8.685889638065037;

		private const double DB_2_LOG = 0.11512925464970228;

		public static double LinearToDecibels(double lin)
		{
			return Math.Log(lin) * 8.685889638065037;
		}

		public static double DecibelsToLinear(double dB)
		{
			return Math.Exp(dB * 0.11512925464970228);
		}
	}
	[AttributeUsage(AttributeTargets.Field)]
	public class FieldDescriptionAttribute : Attribute
	{
		public string Description { get; }

		public FieldDescriptionAttribute(string description)
		{
			Description = description;
		}

		public override string ToString()
		{
			return Description;
		}
	}
	public static class FieldDescriptionHelper
	{
		public static string Describe(Type t, Guid guid)
		{
			FieldInfo[] fields = t.GetFields(BindingFlags.Static | BindingFlags.Public);
			foreach (FieldInfo fieldInfo in fields)
			{
				if (!fieldInfo.IsPublic || !fieldInfo.IsStatic || !(fieldInfo.FieldType == typeof(Guid)) || !((Guid)fieldInfo.GetValue(null) == guid))
				{
					continue;
				}
				object[] customAttributes = fieldInfo.GetCustomAttributes(inherit: false);
				for (int j = 0; j < customAttributes.Length; j++)
				{
					if (customAttributes[j] is FieldDescriptionAttribute fieldDescriptionAttribute)
					{
						return fieldDescriptionAttribute.Description;
					}
				}
				return fieldInfo.Name;
			}
			return guid.ToString();
		}
	}
	public static class HResult
	{
		public const int S_OK = 0;

		public const int S_FALSE = 1;

		public const int E_INVALIDARG = -2147483645;

		private const int FACILITY_AAF = 18;

		private const int FACILITY_ACS = 20;

		private const int FACILITY_BACKGROUNDCOPY = 32;

		private const int FACILITY_CERT = 11;

		private const int FACILITY_COMPLUS = 17;

		private const int FACILITY_CONFIGURATION = 33;

		private const int FACILITY_CONTROL = 10;

		private const int FACILITY_DISPATCH = 2;

		private const int FACILITY_DPLAY = 21;

		private const int FACILITY_HTTP = 25;

		private const int FACILITY_INTERNET = 12;

		private const int FACILITY_ITF = 4;

		private const int FACILITY_MEDIASERVER = 13;

		private const int FACILITY_MSMQ = 14;

		private const int FACILITY_NULL = 0;

		private const int FACILITY_RPC = 1;

		private const int FACILITY_SCARD = 16;

		private const int FACILITY_SECURITY = 9;

		private const int FACILITY_SETUPAPI = 15;

		private const int FACILITY_SSPI = 9;

		private const int FACILITY_STORAGE = 3;

		private const int FACILITY_SXS = 23;

		private const int FACILITY_UMI = 22;

		private const int FACILITY_URT = 19;

		private const int FACILITY_WIN32 = 7;

		private const int FACILITY_WINDOWS = 8;

		private const int FACILITY_WINDOWS_CE = 24;

		public static int MAKE_HRESULT(int sev, int fac, int code)
		{
			return (sev << 31) | (fac << 16) | code;
		}

		public static int GetHResult(this COMException exception)
		{
			return exception.ErrorCode;
		}
	}
	public static class IEEE
	{
		private static double UnsignedToFloat(ulong u)
		{
			return (double)(long)(u - int.MaxValue - 1) + 2147483648.0;
		}

		private static double ldexp(double x, int exp)
		{
			return x * Math.Pow(2.0, exp);
		}

		private static double frexp(double x, out int exp)
		{
			exp = (int)Math.Floor(Math.Log(x) / Math.Log(2.0)) + 1;
			return 1.0 - (Math.Pow(2.0, exp) - x) / Math.Pow(2.0, exp);
		}

		private static ulong FloatToUnsigned(double f)
		{
			return (ulong)((long)(f - 2147483648.0) + int.MaxValue + 1);
		}

		public static byte[] ConvertToIeeeExtended(double num)
		{
			int num2;
			if (num < 0.0)
			{
				num2 = 32768;
				num *= -1.0;
			}
			else
			{
				num2 = 0;
			}
			ulong num4;
			ulong num5;
			int num3;
			if (num == 0.0)
			{
				num3 = 0;
				num4 = 0uL;
				num5 = 0uL;
			}
			else
			{
				double num6 = frexp(num, out num3);
				if (num3 > 16384 || !(num6 < 1.0))
				{
					num3 = num2 | 0x7FFF;
					num4 = 0uL;
					num5 = 0uL;
				}
				else
				{
					num3 += 16382;
					if (num3 < 0)
					{
						num6 = ldexp(num6, num3);
						num3 = 0;
					}
					num3 |= num2;
					num6 = ldexp(num6, 32);
					double num7 = Math.Floor(num6);
					num4 = FloatToUnsigned(num7);
					num6 = ldexp(num6 - num7, 32);
					num7 = Math.Floor(num6);
					num5 = FloatToUnsigned(num7);
				}
			}
			return new byte[10]
			{
				(byte)(num3 >> 8),
				(byte)num3,
				(byte)(num4 >> 24),
				(byte)(num4 >> 16),
				(byte)(num4 >> 8),
				(byte)num4,
				(byte)(num5 >> 24),
				(byte)(num5 >> 16),
				(byte)(num5 >> 8),
				(byte)num5
			};
		}

		public static double ConvertFromIeeeExtended(byte[] bytes)
		{
			if (bytes.Length != 10)
			{
				throw new Exception("Incorrect length for IEEE extended.");
			}
			int num = ((bytes[0] & 0x7F) << 8) | bytes[1];
			uint num2 = (uint)((bytes[2] << 24) | (bytes[3] << 16) | (bytes[4] << 8) | bytes[5]);
			uint num3 = (uint)((bytes[6] << 24) | (bytes[7] << 16) | (bytes[8] << 8) | bytes[9]);
			double num4;
			if (num == 0 && num2 == 0 && num3 == 0)
			{
				num4 = 0.0;
			}
			else if (num == 32767)
			{
				num4 = double.NaN;
			}
			else
			{
				num -= 16383;
				num4 = ldexp(UnsignedToFloat(num2), num -= 31);
				num4 += ldexp(UnsignedToFloat(num3), num -= 32);
			}
			if ((bytes[0] & 0x80) == 128)
			{
				return 0.0 - num4;
			}
			return num4;
		}
	}
	public class IgnoreDisposeStream : Stream
	{
		public Stream SourceStream { get; private set; }

		public bool IgnoreDispose { get; set; }

		public override bool CanRead => SourceStream.CanRead;

		public override bool CanSeek => SourceStream.CanSeek;

		public override bool CanWrite => SourceStream.CanWrite;

		public override long Length => SourceStream.Length;

		public override long Position
		{
			get
			{
				return SourceStream.Position;
			}
			set
			{
				SourceStream.Position = value;
			}
		}

		public IgnoreDisposeStream(Stream sourceStream)
		{
			SourceStream = sourceStream;
			IgnoreDispose = true;
		}

		public override void Flush()
		{
			SourceStream.Flush();
		}

		public override int Read(byte[] buffer, int offset, int count)
		{
			return SourceStream.Read(buffer, offset, count);
		}

		public override long Seek(long offset, SeekOrigin origin)
		{
			return SourceStream.Seek(offset, origin);
		}

		public override void SetLength(long value)
		{
			SourceStream.SetLength(value);
		}

		public override void Write(byte[] buffer, int offset, int count)
		{
			SourceStream.Write(buffer, offset, count);
		}

		protected override void Dispose(bool disposing)
		{
			if (!IgnoreDispose)
			{
				SourceStream.Dispose();
				SourceStream = null;
			}
		}
	}
	public static class NativeMethods
	{
		[DllImport("kernel32.dll")]
		public static extern IntPtr LoadLibrary(string dllToLoad);

		[DllImport("kernel32.dll")]
		public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);

		[DllImport("kernel32.dll")]
		public static extern bool FreeLibrary(IntPtr hModule);
	}
	public static class WavePositionExtensions
	{
		public static TimeSpan GetPositionTimeSpan(this IWavePosition @this)
		{
			return TimeSpan.FromMilliseconds((double)(@this.GetPosition() / (@this.OutputWaveFormat.Channels * @this.OutputWaveFormat.BitsPerSample / 8)) * 1000.0 / (double)@this.OutputWaveFormat.SampleRate);
		}
	}
}
namespace NAudio.FileFormats.Wav
{
	public class WaveFileChunkReader
	{
		private WaveFormat waveFormat;

		private long dataChunkPosition;

		private long dataChunkLength;

		private List<RiffChunk> riffChunks;

		private readonly bool strictMode;

		private bool isRf64;

		private readonly bool storeAllChunks;

		private long riffSize;

		public WaveFormat WaveFormat => waveFormat;

		public long DataChunkPosition => dataChunkPosition;

		public long DataChunkLength => dataChunkLength;

		public List<RiffChunk> RiffChunks => riffChunks;

		public WaveFileChunkReader()
		{
			storeAllChunks = true;
			strictMode = false;
		}

		public void ReadWaveHeader(Stream stream)
		{
			dataChunkPosition = -1L;
			waveFormat = null;
			riffChunks = new List<RiffChunk>();
			dataChunkLength = 0L;
			BinaryReader binaryReader = new BinaryReader(stream);
			ReadRiffHeader(binaryReader);
			riffSize = binaryReader.ReadUInt32();
			if (binaryReader.ReadInt32() != ChunkIdentifier.ChunkIdentifierToInt32("WAVE"))
			{
				throw new FormatException("Not a WAVE file - no WAVE header");
			}
			if (isRf64)
			{
				ReadDs64Chunk(binaryReader);
			}
			int num = ChunkIdentifier.ChunkIdentifierToInt32("data");
			int num2 = ChunkIdentifier.ChunkIdentifierToInt32("fmt ");
			long num3 = Math.Min(riffSize + 8, stream.Length);
			while (stream.Position <= num3 - 8)
			{
				int num4 = binaryReader.ReadInt32();
				uint num5 = binaryReader.ReadUInt32();
				if (num4 == num)
				{
					dataChunkPosition = stream.Position;
					if (!isRf64)
					{
						dataChunkLength = num5;
					}
					stream.Position += num5;
				}
				else if (num4 == num2)
				{
					if (num5 > int.MaxValue)
					{
						throw new InvalidDataException($"Format chunk length must be between 0 and {int.MaxValue}.");
					}
					waveFormat = WaveFormat.FromFormatChunk(binaryReader, (int)num5);
				}
				else
				{
					if (num5 > stream.Length - stream.Position)
					{
						if (!strictMode)
						{
						}
						break;
					}
					if (storeAllChunks)
					{
						if (num5 > int.MaxValue)
						{
							throw new InvalidDataException($"RiffChunk chunk length must be between 0 and {int.MaxValue}.");
						}
						riffChunks.Add(GetRiffChunk(stream, num4, (int)num5));
					}
					stream.Position += num5;
				}
				if (num5 % 2 != 0 && binaryReader.PeekChar() == 0)
				{
					stream.Position++;
				}
			}
			if (waveFormat == null)
			{
				throw new FormatException("Invalid WAV file - No fmt chunk found");
			}
			if (dataChunkPosition == -1)
			{
				throw new FormatException("Invalid WAV file - No data chunk found");
			}
		}

		private void ReadDs64Chunk(BinaryReader reader)
		{
			int num = ChunkIdentifier.ChunkIdentifierToInt32("ds64");
			if (reader.ReadInt32() != num)
			{
				throw new FormatException("Invalid RF64 WAV file - No ds64 chunk found");
			}
			int num2 = reader.ReadInt32();
			riffSize = reader.ReadInt64();
			dataChunkLength = reader.ReadInt64();
			reader.ReadInt64();
			reader.ReadBytes(num2 - 24);
		}

		private static RiffChunk GetRiffChunk(Stream stream, int chunkIdentifier, int chunkLength)
		{
			return new RiffChunk(chunkIdentifier, chunkLength, stream.Position);
		}

		private void ReadRiffHeader(BinaryReader br)
		{
			int num = br.ReadInt32();
			if (num == ChunkIdentifier.ChunkIdentifierToInt32("RF64"))
			{
				isRf64 = true;
			}
			else if (num != ChunkIdentifier.ChunkIdentifierToInt32("RIFF"))
			{
				throw new FormatException("Not a WAVE file - no RIFF header");
			}
		}
	}
}
namespace NAudio.SoundFont
{
	public class Generator
	{
		public GeneratorEnum GeneratorType { get; set; }

		public ushort UInt16Amount { get; set; }

		public short Int16Amount
		{
			get
			{
				return (short)UInt16Amount;
			}
			set
			{
				UInt16Amount = (ushort)value;
			}
		}

		public byte LowByteAmount
		{
			get
			{
				return (byte)(UInt16Amount & 0xFFu);
			}
			set
			{
				UInt16Amount &= 65280;
				UInt16Amount += value;
			}
		}

		public byte HighByteAmount
		{
			get
			{
				return (byte)((UInt16Amount & 0xFF00) >> 8);
			}
			set
			{
				UInt16Amount &= 255;
				UInt16Amount += (ushort)(value << 8);
			}
		}

		public Instrument Instrument { get; set; }

		public SampleHeader SampleHeader { get; set; }

		public override string ToString()
		{
			if (GeneratorType == GeneratorEnum.Instrument)
			{
				return "Generator Instrument " + Instrument.Name;
			}
			if (GeneratorType == GeneratorEnum.SampleID)
			{
				return $"Generator SampleID {SampleHeader}";
			}
			return $"Generator {GeneratorType} {UInt16Amount}";
		}
	}
	internal class GeneratorBuilder : StructureBuilder<Generator>
	{
		public override int Length => 4;

		public Generator[] Generators => data.ToArray();

		public override Generator Read(BinaryReader br)
		{
			Generator generator = new Generator();
			generator.GeneratorType = (GeneratorEnum)br.ReadUInt16();
			generator.UInt16Amount = br.ReadUInt16();
			data.Add(generator);
			return generator;
		}

		public override void Write(BinaryWriter bw, Generator o)
		{
		}

		public void Load(Instrument[] instruments)
		{
			Generator[] generators = Generators;
			foreach (Generator generator in generators)
			{
				if (generator.GeneratorType == GeneratorEnum.Instrument)
				{
					generator.Instrument = instruments[generator.UInt16Amount];
				}
			}
		}

		public void Load(SampleHeader[] sampleHeaders)
		{
			Generator[] generators = Generators;
			foreach (Generator generator in generators)
			{
				if (generator.GeneratorType == GeneratorEnum.SampleID)
				{
					generator.SampleHeader = sampleHeaders[generator.UInt16Amount];
				}
			}
		}
	}
	public enum GeneratorEnum
	{
		StartAddressOffset,
		EndAddressOffset,
		StartLoopAddressOffset,
		EndLoopAddressOffset,
		StartAddressCoarseOffset,
		ModulationLFOToPitch,
		VibratoLFOToPitch,
		ModulationEnvelopeToPitch,
		InitialFilterCutoffFrequency,
		InitialFilterQ,
		ModulationLFOToFilterCutoffFrequency,
		ModulationEnvelopeToFilterCutoffFrequency,
		EndAddressCoarseOffset,
		ModulationLFOToVolume,
		Unused1,
		ChorusEffectsSend,
		ReverbEffectsSend,
		Pan,
		Unused2,
		Unused3,
		Unused4,
		DelayModulationLFO,
		FrequencyModulationLFO,
		DelayVibratoLFO,
		FrequencyVibratoLFO,
		DelayModulationEnvelope,
		AttackModulationEnvelope,
		HoldModulationEnvelope,
		DecayModulationEnvelope,
		SustainModulationEnvelope,
		ReleaseModulationEnvelope,
		KeyNumberToModulationEnvelopeHold,
		KeyNumberToModulationEnvelopeDecay,
		DelayVolumeEnvelope,
		AttackVolumeEnvelope,
		HoldVolumeEnvelope,
		DecayVolumeEnvelope,
		SustainVolumeEnvelope,
		ReleaseVolumeEnvelope,
		KeyNumberToVolumeEnvelopeHold,
		KeyNumberToVolumeEnvelopeDecay,
		Instrument,
		Reserved1,
		KeyRange,
		VelocityRange,
		StartLoopAddressCoarseOffset,
		KeyNumber,
		Velocity,
		InitialAttenuation,
		Reserved2,
		EndLoopAddressCoarseOffset,
		CoarseTune,
		FineTune,
		SampleID,
		SampleModes,
		Reserved3,
		ScaleTuning,
		ExclusiveClass,
		OverridingRootKey,
		Unused5,
		UnusedEnd
	}
	public class InfoChunk
	{
		public SFVersion SoundFontVersion { get; }

		public string WaveTableSoundEngine { get; set; }

		public string BankName { get; set; }

		public string DataROM { get; set; }

		public string CreationDate { get; set; }

		public string Author { get; set; }

		public string TargetProduct { get; set; }

		public string Copyright { get; set; }

		public string Comments { get; set; }

		public string Tools { get; set; }

		public SFVersion ROMVersion { get; set; }

		internal InfoChunk(RiffChunk chunk)
		{
			bool flag = false;
			bool flag2 = false;
			if (chunk.ReadChunkID() != "INFO")
			{
				throw new InvalidDataException("Not an INFO chunk");
			}
			RiffChunk nextSubChunk;
			while ((nextSubChunk = chunk.GetNextSubChunk()) != null)
			{
				switch (nextSubChunk.ChunkID)
				{
				case "ifil":
					flag = true;
					SoundFontVersion = nextSubChunk.GetDataAsStructure(new SFVersionBuilder());
					break;
				case "isng":
					WaveTableSoundEngine = nextSubChunk.GetDataAsString();
					break;
				case "INAM":
					flag2 = true;
					BankName = nextSubChunk.GetDataAsString();
					break;
				case "irom":
					DataROM = nextSubChunk.GetDataAsString();
					break;
				case "iver":
					ROMVersion = nextSubChunk.GetDataAsStructure(new SFVersionBuilder());
					break;
				case "ICRD":
					CreationDate = nextSubChunk.GetDataAsString();
					break;
				case "IENG":
					Author = nextSubChunk.GetDataAsString();
					break;
				case "IPRD":
					TargetProduct = nextSubChunk.GetDataAsString();
					break;
				case "ICOP":
					Copyright = nextSubChunk.GetDataAsString();
					break;
				case "ICMT":
					Comments = nextSubChunk.GetDataAsString();
					break;
				case "ISFT":
					Tools = nextSubChunk.GetDataAsString();
					break;
				default:
					throw new InvalidDataException("Unknown chunk type " + nextSubChunk.ChunkID);
				}
			}
			if (!flag)
			{
				throw new InvalidDataException("Missing SoundFont version information");
			}
			if (!flag2)
			{
				throw new InvalidDataException("Missing SoundFont name information");
			}
		}

		public override string ToString()
		{
			return string.Format("Bank Name: {0}\r\nAuthor: {1}\r\nCopyright: {2}\r\nCreation Date: {3}\r\nTools: {4}\r\nComments: {5}\r\nSound Engine: {6}\r\nSoundFont Version: {7}\r\nTarget Product: {8}\r\nData ROM: {9}\r\nROM Version: {10}", BankName, Author, Copyright, CreationDate, Tools, "TODO-fix comments", WaveTableSoundEngine, SoundFontVersion, TargetProduct, DataROM, ROMVersion);
		}
	}
	public class Instrument
	{
		internal ushort startInstrumentZoneIndex;

		internal ushort endInstrumentZoneIndex;

		public string Name { get; set; }

		public Zone[] Zones { get; set; }

		public override string ToString()
		{
			return Name;
		}
	}
	internal class InstrumentBuilder : StructureBuilder<Instrument>
	{
		private Instrument lastInstrument;

		public override int Length => 22;

		public Instrument[] Instruments => data.ToArray();

		public override Instrument Read(BinaryReader br)
		{
			Instrument instrument = new Instrument();
			string text = Encoding.UTF8.GetString(br.ReadBytes(20), 0, 20);
			if (text.IndexOf('\0') >= 0)
			{
				text = text.Substring(0, text.IndexOf('\0'));
			}
			instrument.Name = text;
			instrument.startInstrumentZoneIndex = br.ReadUInt16();
			if (lastInstrument != null)
			{
				lastInstrument.endInstrumentZoneIndex = (ushort)(instrument.startInstrumentZoneIndex - 1);
			}
			data.Add(instrument);
			lastInstrument = instrument;
			return instrument;
		}

		public override void Write(BinaryWriter bw, Instrument instrument)
		{
		}

		public void LoadZones(Zone[] zones)
		{
			for (int i = 0; i < data.Count - 1; i++)
			{
				Instrument instrument = data[i];
				instrument.Zones = new Zone[instrument.endInstrumentZoneIndex - instrument.startInstrumentZoneIndex + 1];
				Array.Copy(zones, instrument.startInstrumentZoneIndex, instrument.Zones, 0, instrument.Zones.Length);
			}
			data.RemoveAt(data.Count - 1);
		}
	}
	public enum TransformEnum
	{
		Linear
	}
	public class Modulator
	{
		public ModulatorType SourceModulationData { get; set; }

		public GeneratorEnum DestinationGenerator { get; set; }

		public short Amount { get; set; }

		public ModulatorType SourceModulationAmount { get; set; }

		public TransformEnum SourceTransform { get; set; }

		public override string ToString()
		{
			return $"Modulator {SourceModulationData} {DestinationGenerator} {Amount} {SourceModulationAmount} {SourceTransform}";
		}
	}
	internal class ModulatorBuilder : StructureBuilder<Modulator>
	{
		public override int Length => 10;

		public Modulator[] Modulators => data.ToArray();

		public override Modulator Read(BinaryReader br)
		{
			Modulator modulator = new Modulator();
			modulator.SourceModulationData = new ModulatorType(br.ReadUInt16());
			modulator.DestinationGenerator = (GeneratorEnum)br.ReadUInt16();
			modulator.Amount = br.ReadInt16();
			modulator.SourceModulationAmount = new ModulatorType(br.ReadUInt16());
			modulator.SourceTransform = (TransformEnum)br.ReadUInt16();
			data.Add(modulator);
			return modulator;
		}

		public override void Write(BinaryWriter bw, Modulator o)
		{
		}
	}
	public enum ControllerSourceEnum
	{
		NoController = 0,
		NoteOnVelocity = 2,
		NoteOnKeyNumber = 3,
		PolyPressure = 10,
		ChannelPressure = 13,
		PitchWheel = 14,
		PitchWheelSensitivity = 16
	}
	public enum SourceTypeEnum
	{
		Linear,
		Concave,
		Convex,
		Switch
	}
	public class ModulatorType
	{
		private bool polarity;

		private bool direction;

		private bool midiContinuousController;

		private ControllerSourceEnum controllerSource;

		private SourceTypeEnum sourceType;

		private ushort midiContinuousControllerNumber;

		internal ModulatorType(ushort raw)
		{
			polarity = (raw & 0x200) == 512;
			direction = (raw & 0x100) == 256;
			midiContinuousController = (raw & 0x80) == 128;
			sourceType = (SourceTypeEnum)((raw & 0xFC00) >> 10);
			controllerSource = (ControllerSourceEnum)(raw & 0x7F);
			midiContinuousControllerNumber = (ushort)(raw & 0x7Fu);
		}

		public override string ToString()
		{
			if (midiContinuousController)
			{
				return $"{sourceType} CC{midiContinuousControllerNumber}";
			}
			return $"{sourceType} {controllerSource}";
		}
	}
	public class Preset
	{
		internal ushort startPresetZoneIndex;

		internal ushort endPresetZoneIndex;

		internal uint library;

		internal uint genre;

		internal uint morphology;

		public string Name { get; set; }

		public ushort PatchNumber { get; set; }

		public ushort Bank { get; set; }

		public Zone[] Zones { get; set; }

		public override string ToString()
		{
			return $"{Bank}-{PatchNumber} {Name}";
		}
	}
	internal class PresetBuilder : StructureBuilder<Preset>
	{
		private Preset lastPreset;

		public override int Length => 38;

		public Preset[] Presets => data.ToArray();

		public override Preset Read(BinaryReader br)
		{
			Preset preset = new Preset();
			string text = Encoding.UTF8.GetString(br.ReadBytes(20), 0, 20);
			if (text.IndexOf('\0') >= 0)
			{
				text = text.Substring(0, text.IndexOf('\0'));
			}
			preset.Name = text;
			preset.PatchNumber = br.ReadUInt16();
			preset.Bank = br.ReadUInt16();
			preset.startPresetZoneIndex = br.ReadUInt16();
			preset.library = br.ReadUInt32();
			preset.genre = br.ReadUInt32();
			preset.morphology = br.ReadUInt32();
			if (lastPreset != null)
			{
				lastPreset.endPresetZoneIndex = (ushort)(preset.startPresetZoneIndex - 1);
			}
			data.Add(preset);
			lastPreset = preset;
			return preset;
		}

		public override void Write(BinaryWriter bw, Preset preset)
		{
		}

		public void LoadZones(Zone[] presetZones)
		{
			for (int i = 0; i < data.Count - 1; i++)
			{
				Preset preset = data[i];
				preset.Zones = new Zone[preset.endPresetZoneIndex - preset.startPresetZoneIndex + 1];
				Array.Copy(presetZones, preset.startPresetZoneIndex, preset.Zones, 0, preset.Zones.Length);
			}
			data.RemoveAt(data.Count - 1);
		}
	}
	public class PresetsChunk
	{
		private PresetBuilder presetHeaders = new PresetBuilder();

		private ZoneBuilder presetZones = new ZoneBuilder();

		private ModulatorBuilder presetZoneModulators = new ModulatorBuilder();

		private GeneratorBuilder presetZoneGenerators = new GeneratorBuilder();

		private InstrumentBuilder instruments = new InstrumentBuilder();

		private ZoneBuilder instrumentZones = new ZoneBuilder();

		private ModulatorBuilder instrumentZoneModulators = new ModulatorBuilder();

		private GeneratorBuilder instrumentZoneGenerators = new GeneratorBuilder();

		private SampleHeaderBuilder sampleHeaders = new SampleHeaderBuilder();

		public Preset[] Presets => presetHeaders.Presets;

		public Instrument[] Instruments => instruments.Instruments;

		public SampleHeader[] SampleHeaders => sampleHeaders.SampleHeaders;

		internal PresetsChunk(RiffChunk chunk)
		{
			string text = chunk.ReadChunkID();
			if (text != "pdta")
			{
				throw new InvalidDataException($"Not a presets data chunk ({text})");
			}
			RiffChunk nextSubChunk;
			while ((nextSubChunk = chunk.GetNextSubChunk()) != null)
			{
				switch (nextSubChunk.ChunkID)
				{
				case "phdr":
				case "PHDR":
					nextSubChunk.GetDataAsStructureArray(presetHeaders);
					break;
				case "pbag":
				case "PBAG":
					nextSubChunk.GetDataAsStructureArray(presetZones);
					break;
				case "pmod":
				case "PMOD":
					nextSubChunk.GetDataAsStructureArray(presetZoneModulators);
					break;
				case "pgen":
				case "PGEN":
					nextSubChunk.GetDataAsStructureArray(presetZoneGenerators);
					break;
				case "inst":
				case "INST":
					nextSubChunk.GetDataAsStructureArray(instruments);
					break;
				case "ibag":
				case "IBAG":
					nextSubChunk.GetDataAsStructureArray(instrumentZones);
					break;
				case "imod":
				case "IMOD":
					nextSubChunk.GetDataAsStructureArray(instrumentZoneModulators);
					break;
				case "igen":
				case "IGEN":
					nextSubChunk.GetDataAsStructureArray(instrumentZoneGenerators);
					break;
				case "shdr":
				case "SHDR":
					nextSubChunk.GetDataAsStructureArray(sampleHeaders);
					break;
				default:
					throw new InvalidDataException($"Unknown chunk type {nextSubChunk.ChunkID}");
				}
			}
			instrumentZoneGenerators.Load(sampleHeaders.SampleHeaders);
			instrumentZones.Load(instrumentZoneModulators.Modulators, instrumentZoneGenerators.Generators);
			instruments.LoadZones(instrumentZones.Zones);
			presetZoneGenerators.Load(instruments.Instruments);
			presetZones.Load(presetZoneModulators.Modulators, presetZoneGenerators.Generators);
			presetHeaders.LoadZones(presetZones.Zones);
			sampleHeaders.RemoveEOS();
		}

		public override string ToString()
		{
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.Append("Preset Headers:\r\n");
			Preset[] presets = presetHeaders.Presets;
			foreach (Preset arg in presets)
			{
				stringBuilder.AppendFormat("{0}\r\n", arg);
			}
			stringBuilder.Append("Instruments:\r\n");
			Instrument[] array = instruments.Instruments;
			foreach (Instrument arg2 in array)
			{
				stringBuilder.AppendFormat("{0}\r\n", arg2);
			}
			return stringBuilder.ToString();
		}
	}
	internal class RiffChunk
	{
		private string chunkID;

		private BinaryReader riffFile;

		public string ChunkID
		{
			get
			{
				return chunkID;
			}
			set
			{
				if (value == null)
				{
					throw new ArgumentNullException("ChunkID may not be null");
				}
				if (value.Length != 4)
				{
					throw new ArgumentException("ChunkID must be four characters");
				}
				chunkID = value;
			}
		}

		public uint ChunkSize { get; private set; }

		public long DataOffset { get; private set; }

		public static RiffChunk GetTopLevelChunk(BinaryReader file)
		{
			RiffChunk riffChunk = new RiffChunk(file);
			riffChunk.ReadChunk();
			return riffChunk;
		}

		private RiffChunk(BinaryReader file)
		{
			riffFile = file;
			chunkID = "????";
			ChunkSize = 0u;
			DataOffset = 0L;
		}

		public string ReadChunkID()
		{
			byte[] array = riffFile.ReadBytes(4);
			if (array.Length != 4)
			{
				throw new InvalidDataException("Couldn't read Chunk ID");
			}
			return ByteEncoding.Instance.GetString(array, 0, array.Length);
		}

		private void ReadChunk()
		{
			chunkID = ReadChunkID();
			ChunkSize = riffFile.ReadUInt32();
			DataOffset = riffFile.BaseStream.Position;
		}

		public RiffChunk GetNextSubChunk()
		{
			if (riffFile.BaseStream.Position + 8 < DataOffset + ChunkSize)
			{
				RiffChunk riffChunk = new RiffChunk(riffFile);
				riffChunk.ReadChunk();
				return riffChunk;
			}
			return null;
		}

		public byte[] GetData()
		{
			riffFile.BaseStream.Position = DataOffset;
			byte[] array = riffFile.ReadBytes((int)ChunkSize);
			if (array.Length != ChunkSize)
			{
				throw new InvalidDataException($"Couldn't read chunk's data Chunk: {this}, read {array.Length} bytes");
			}
			return array;
		}

		public string GetDataAsString()
		{
			byte[] data = GetData();
			if (data == null)
			{
				return null;
			}
			return ByteEncoding.Instance.GetString(data, 0, data.Length);
		}

		public T GetDataAsStructure<T>(StructureBuilder<T> s)
		{
			riffFile.BaseStream.Position = DataOffset;
			if (s.Length != ChunkSize)
			{
				throw new InvalidDataException($"Chunk size is: {ChunkSize} so can't read structure of: {s.Length}");
			}
			return s.Read(riffFile);
		}

		public T[] GetDataAsStructureArray<T>(StructureBuilder<T> s)
		{
			riffFile.BaseStream.Position = DataOffset;
			if (ChunkSize % s.Length != 0L)
			{
				throw new InvalidDataException($"Chunk size is: {ChunkSize} not a multiple of structure size: {s.Length}");
			}
			int num = (int)(ChunkSize / s.Length);
			T[] array = new T[num];
			for (int i = 0; i < num; i++)
			{
				array[i] = s.Read(riffFile);
			}
			return array;
		}

		public override string ToString()
		{
			return $"RiffChunk ID: {ChunkID} Size: {ChunkSize} Data Offset: {DataOffset}";
		}
	}
	internal class SampleDataChunk
	{
		public byte[] SampleData { get; private set; }

		public SampleDataChunk(RiffChunk chunk)
		{
			string text = chunk.ReadChunkID();
			if (text != "sdta")
			{
				throw new InvalidDataException("Not a sample data chunk (" + text + ")");
			}
			SampleData = chunk.GetData();
		}
	}
	public class SampleHeader
	{
		public string SampleName;

		public uint Start;

		public uint End;

		public uint StartLoop;

		public uint EndLoop;

		public uint SampleRate;

		public byte OriginalPitch;

		public sbyte PitchCorrection;

		public ushort SampleLink;

		public SFSampleLink SFSampleLink;

		public override string ToString()
		{
			return SampleName;
		}
	}
	internal class SampleHeaderBuilder : StructureBuilder<SampleHeader>
	{
		public override int Length => 46;

		public SampleHeader[] SampleHeaders => data.ToArray();

		public override SampleHeader Read(BinaryReader br)
		{
			SampleHeader sampleHeader = new SampleHeader();
			byte[] array = br.ReadBytes(20);
			sampleHeader.SampleName = ByteEncoding.Instance.GetString(array, 0, array.Length);
			sampleHeader.Start = br.ReadUInt32();
			sampleHeader.End = br.ReadUInt32();
			sampleHeader.StartLoop = br.ReadUInt32();
			sampleHeader.EndLoop = br.ReadUInt32();
			sampleHeader.SampleRate = br.ReadUInt32();
			sampleHeader.OriginalPitch = br.ReadByte();
			sampleHeader.PitchCorrection = br.ReadSByte();
			sampleHeader.SampleLink = br.ReadUInt16();
			sampleHeader.SFSampleLink = (SFSampleLink)br.ReadUInt16();
			data.Add(sampleHeader);
			return sampleHeader;
		}

		public override void Write(BinaryWriter bw, SampleHeader sampleHeader)
		{
		}

		internal void RemoveEOS()
		{
			data.RemoveAt(data.Count - 1);
		}
	}
	public enum SampleMode
	{
		NoLoop,
		LoopContinuously,
		ReservedNoLoop,
		LoopAndContinue
	}
	public enum SFSampleLink : ushort
	{
		MonoSample = 1,
		RightSample = 2,
		LeftSample = 4,
		LinkedSample = 8,
		RomMonoSample = 32769,
		RomRightSample = 32770,
		RomLeftSample = 32772,
		RomLinkedSample = 32776
	}
	public class SFVersion
	{
		public short Major { get; set; }

		public short Minor { get; set; }
	}
	internal class SFVersionBuilder : StructureBuilder<SFVersion>
	{
		public override int Length => 4;

		public override SFVersion Read(BinaryReader br)
		{
			SFVersion sFVersion = new SFVersion();
			sFVersion.Major = br.ReadInt16();
			sFVersion.Minor = br.ReadInt16();
			data.Add(sFVersion);
			return sFVersion;
		}

		public override void Write(BinaryWriter bw, SFVersion v)
		{
			bw.Write(v.Major);
			bw.Write(v.Minor);
		}
	}
	public class SoundFont
	{
		private InfoChunk info;

		private PresetsChunk presetsChunk;

		private SampleDataChunk sampleData;

		public InfoChunk FileInfo => info;

		public Preset[] Presets => presetsChunk.Presets;

		public Instrument[] Instruments => presetsChunk.Instruments;

		public SampleHeader[] SampleHeaders => presetsChunk.SampleHeaders;

		public byte[] SampleData => sampleData.SampleData;

		public SoundFont(string fileName)
			: this(new FileStream(fileName, FileMode.Open, FileAccess.Read))
		{
		}

		public SoundFont(Stream sfFile)
		{
			using (sfFile)
			{
				RiffChunk topLevelChunk = RiffChunk.GetTopLevelChunk(new BinaryReader(sfFile));
				if (topLevelChunk.ChunkID == "RIFF")
				{
					string text = topLevelChunk.ReadChunkID();
					if (text != "sfbk")
					{
						throw new InvalidDataException($"Not a SoundFont ({text})");
					}
					RiffChunk nextSubChunk = topLevelChunk.GetNextSubChunk();
					if (nextSubChunk.ChunkID == "LIST")
					{
						info = new InfoChunk(nextSubChunk);
						RiffChunk nextSubChunk2 = topLevelChunk.GetNextSubChunk();
						sampleData = new SampleDataChunk(nextSubChunk2);
						nextSubChunk2 = topLevelChunk.GetNextSubChunk();
						presetsChunk = new PresetsChunk(nextSubChunk2);
						return;
					}
					throw new InvalidDataException($"Not info list found ({nextSubChunk.ChunkID})");
				}
				throw new InvalidDataException("Not a RIFF file");
			}
		}

		public override string ToString()
		{
			return $"Info Chunk:\r\n{info}\r\nPresets Chunk:\r\n{presetsChunk}";
		}
	}
	internal abstract class StructureBuilder<T>
	{
		protected List<T> data;

		public abstract int Length { get; }

		public T[] Data => data.ToArray();

		public StructureBuilder()
		{
			Reset();
		}

		public abstract T Read(BinaryReader br);

		public abstract void Write(BinaryWriter bw, T o);

		public void Reset()
		{
			data = new List<T>();
		}
	}
	public class Zone
	{
		internal ushort generatorIndex;

		internal ushort modulatorIndex;

		internal ushort generatorCount;

		internal ushort modulatorCount;

		public Modulator[] Modulators { get; set; }

		public Generator[] Generators { get; set; }

		public override string ToString()
		{
			return $"Zone {generatorCount} Gens:{generatorIndex} {modulatorCount} Mods:{modulatorIndex}";
		}
	}
	internal class ZoneBuilder : StructureBuilder<Zone>
	{
		private Zone lastZone;

		public Zone[] Zones => data.ToArray();

		public override int Length => 4;

		public override Zone Read(BinaryReader br)
		{
			Zone zone = new Zone();
			zone.generatorIndex = br.ReadUInt16();
			zone.modulatorIndex = br.ReadUInt16();
			if (lastZone != null)
			{
				lastZone.generatorCount = (ushort)(zone.generatorIndex - lastZone.generatorIndex);
				lastZone.modulatorCount = (ushort)(zone.modulatorIndex - lastZone.modulatorIndex);
			}
			data.Add(zone);
			lastZone = zone;
			return zone;
		}

		public override void Write(BinaryWriter bw, Zone zone)
		{
		}

		public void Load(Modulator[] modulators, Generator[] generators)
		{
			for (int i = 0; i < data.Count - 1; i++)
			{
				Zone zone = data[i];
				zone.Generators = new Generator[zone.generatorCount];
				Array.Copy(generators, zone.generatorIndex, zone.Generators, 0, zone.generatorCount);
				zone.Modulators = new Modulator[zone.modulatorCount];
				Array.Copy(modulators, zone.modulatorIndex, zone.Modulators, 0, zone.modulatorCount);
			}
			data.RemoveAt(data.Count - 1);
		}
	}
}
namespace NAudio.Wave
{
	public enum ChannelMode
	{
		Stereo,
		JointStereo,
		DualChannel,
		Mono
	}
	public class Id3v2Tag
	{
		private long tagStartPosition;

		private long tagEndPosition;

		private byte[] rawData;

		public byte[] RawData => rawData;

		public static Id3v2Tag ReadTag(Stream input)
		{
			try
			{
				return new Id3v2Tag(input);
			}
			catch (FormatException)
			{
				return null;
			}
		}

		public static Id3v2Tag Create(IEnumerable<KeyValuePair<string, string>> tags)
		{
			return ReadTag(CreateId3v2TagStream(tags));
		}

		private static byte[] FrameSizeToBytes(int n)
		{
			byte[] bytes = BitConverter.GetBytes(n);
			Array.Reverse((Array)bytes);
			return bytes;
		}

		private static byte[] CreateId3v2Frame(string key, string value)
		{
			if (string.IsNullOrEmpty(key))
			{
				throw new ArgumentNullException("key");
			}
			if (string.IsNullOrEmpty(value))
			{
				throw new ArgumentNullException("value");
			}
			if (key.Length != 4)
			{
				throw new ArgumentOutOfRangeException("key", "key " + key + " must be 4 characters long");
			}
			byte[] array = new byte[2] { 255, 254 };
			byte[] array2 = new byte[3];
			byte[] array3 = new byte[2];
			byte[] array4 = ((!(key == "COMM")) ? ByteArrayExtensions.Concat(new byte[1] { 1 }, array, Encoding.Unicode.GetBytes(value)) : ByteArrayExtensions.Concat(new byte[1] { 1 }, array2, array3, array, Encoding.Unicode.GetBytes(value)));
			return ByteArrayExtensions.Concat(Encoding.UTF8.GetBytes(key), FrameSizeToBytes(array4.Length), new byte[2], array4);
		}

		private static byte[] GetId3TagHeaderSize(int size)
		{
			byte[] array = new byte[4];
			for (int num = array.Length - 1; num >= 0; num--)
			{
				array[num] = (byte)(size % 128);
				size /= 128;
			}
			return array;
		}

		private static byte[] CreateId3v2TagHeader(IEnumerable<byte[]> frames)
		{
			int num = 0;
			foreach (byte[] frame in frames)
			{
				num += frame.Length;
			}
			return ByteArrayExtensions.Concat(Encoding.UTF8.GetBytes("ID3"), new byte[2] { 3, 0 }, new byte[1], GetId3TagHeaderSize(num));
		}

		private static Stream CreateId3v2TagStream(IEnumerable<KeyValuePair<string, string>> tags)
		{
			List<byte[]> list = new List<byte[]>();
			foreach (KeyValuePair<string, string> tag in tags)
			{
				list.Add(CreateId3v2Frame(tag.Key, tag.Value));
			}
			byte[] array = CreateId3v2TagHeader(list);
			MemoryStream memoryStream = new MemoryStream();
			memoryStream.Write(array, 0, array.Length);
			foreach (byte[] item in list)
			{
				memoryStream.Write(item, 0, item.Length);
			}
			memoryStream.Position = 0L;
			return memoryStream;
		}

		private Id3v2Tag(Stream input)
		{
			tagStartPosition = input.Position;
			BinaryReader binaryReader = new BinaryReader(input);
			byte[] array = binaryReader.ReadBytes(10);
			if (array.Length >= 3 && array[0] == 73 && array[1] == 68 && array[2] == 51)
			{
				if ((array[5] & 0x40) == 64)
				{
					byte[] array2 = binaryReader.ReadBytes(4);
					_ = array2[0] * 2097152 + array2[1] * 16384 + array2[2] * 128;
					_ = array2[3];
				}
				int num = array[6] * 2097152;
				num += array[7] * 16384;
				num += array[8] * 128;
				num += array[9];
				binaryReader.ReadBytes(num);
				if ((array[5] & 0x10) == 16)
				{
					binaryReader.ReadBytes(10);
				}
				tagEndPosition = input.Position;
				input.Position = tagStartPosition;
				rawData = binaryReader.ReadBytes((int)(tagEndPosition - tagStartPosition));
				return;
			}
			input.Position = tagStartPosition;
			throw new FormatException("Not an ID3v2 tag");
		}
	}
	public interface IMp3FrameDecompressor : IDisposable
	{
		WaveFormat OutputFormat { get; }

		int DecompressFrame(Mp3Frame frame, byte[] dest, int destOffset);

		void Reset();
	}
	public class Mp3Frame
	{
		private static readonly int[,,] bitRates = new int[2, 3, 15]
		{
			{
				{
					0, 32, 64, 96, 128, 160, 192, 224, 256, 288,
					320, 352, 384, 416, 448
				},
				{
					0, 32, 48, 56, 64, 80, 96, 112, 128, 160,
					192, 224, 256, 320, 384
				},
				{
					0, 32, 40, 48, 56, 64, 80, 96, 112, 128,
					160, 192, 224, 256, 320
				}
			},
			{
				{
					0, 32, 48, 56, 64, 80, 96, 112, 128, 144,
					160, 176, 192, 224, 256
				},
				{
					0, 8, 16, 24, 32, 40, 48, 56, 64, 80,
					96, 112, 128, 144, 160
				},
				{
					0, 8, 16, 24, 32, 40, 48, 56, 64, 80,
					96, 112, 128, 144, 160
				}
			}
		};

		private static readonly int[,] samplesPerFrame = new int[2, 3]
		{
			{ 384, 1152, 1152 },
			{ 384, 1152, 576 }
		};

		private static readonly int[] sampleRatesVersion1 = new int[3] { 44100, 48000, 32000 };

		private static readonly int[] sampleRatesVersion2 = new int[3] { 22050, 24000, 16000 };

		private static readonly int[] sampleRatesVersion25 = new int[3] { 11025, 12000, 8000 };

		private const int MaxFrameLength = 16384;

		public int SampleRate { get; private set; }

		public int FrameLength { get; private set; }

		public int BitRate { get; private set; }

		public byte[] RawData { get; private set; }

		public MpegVersion MpegVersion { get; private set; }

		public MpegLayer MpegLayer { get; private set; }

		public ChannelMode ChannelMode { get; private set; }

		public int SampleCount { get; private set; }

		public int ChannelExtension { get; private set; }

		public int BitRateIndex { get; private set; }

		public bool Copyright { get; private set; }

		public bool CrcPresent { get; private set; }

		public long FileOffset { get; private set; }

		public static Mp3Frame LoadFromStream(Stream input)
		{
			return LoadFromStream(input, readData: true);
		}

		public static Mp3Frame LoadFromStream(Stream input, bool readData)
		{
			Mp3Frame mp3Frame = new Mp3Frame();
			mp3Frame.FileOffset = input.Position;
			byte[] array = new byte[4];
			if (input.Read(array, 0, array.Length) < array.Length)
			{
				return null;
			}
			while (!IsValidHeader(array, mp3Frame))
			{
				array[0] = array[1];
				array[1] = array[2];
				array[2] = array[3];
				if (input.Read(array, 3, 1) < 1)
				{
					return null;
				}
				mp3Frame.FileOffset++;
			}
			int num = mp3Frame.FrameLength - 4;
			if (readData)
			{
				mp3Frame.RawData = new byte[mp3Frame.FrameLength];
				Array.Copy(array, mp3Frame.RawData, 4);
				if (input.Read(mp3Frame.RawData, 4, num) < num)
				{
					throw new EndOfStreamException("Unexpected end of stream before frame complete");
				}
			}
			else
			{
				input.Position += num;
			}
			return mp3Frame;
		}

		private Mp3Frame()
		{
		}

		private static bool IsValidHeader(byte[] headerBytes, Mp3Frame frame)
		{
			if (headerBytes[0] == byte.MaxValue && (headerBytes[1] & 0xE0) == 224)
			{
				frame.MpegVersion = (MpegVersion)((headerBytes[1] & 0x18) >> 3);
				if (frame.MpegVersion == MpegVersion.Reserved)
				{
					return false;
				}
				frame.MpegLayer = (MpegLayer)((headerBytes[1] & 6) >> 1);
				if (frame.MpegLayer == MpegLayer.Reserved)
				{
					return false;
				}
				int num = ((frame.MpegLayer != MpegLayer.Layer1) ? ((frame.MpegLayer == MpegLayer.Layer2) ? 1 : 2) : 0);
				frame.CrcPresent = (headerBytes[1] & 1) == 0;
				frame.BitRateIndex = (headerBytes[2] & 0xF0) >> 4;
				if (frame.BitRateIndex == 15)
				{
					return false;
				}
				int num2 = ((frame.MpegVersion != MpegVersion.Version1) ? 1 : 0);
				frame.BitRate = bitRates[num2, num, frame.BitRateIndex] * 1000;
				if (frame.BitRate == 0)
				{
					return false;
				}
				int num3 = (headerBytes[2] & 0xC) >> 2;
				if (num3 == 3)
				{
					return false;
				}
				if (frame.MpegVersion == MpegVersion.Version1)
				{
					frame.SampleRate = sampleRatesVersion1[num3];
				}
				else if (frame.MpegVersion == MpegVersion.Version2)
				{
					frame.SampleRate = sampleRatesVersion2[num3];
				}
				else
				{
					frame.SampleRate = sampleRatesVersion25[num3];
				}
				bool flag = (headerBytes[2] & 2) == 2;
				_ = headerBytes[2];
				frame.ChannelMode = (ChannelMode)((headerBytes[3] & 0xC0) >> 6);
				frame.ChannelExtension = (headerBytes[3] & 0x30) >> 4;
				if (frame.ChannelExtension != 0 && frame.ChannelMode != ChannelMode.JointStereo)
				{
					return false;
				}
				frame.Copyright = (headerBytes[3] & 8) == 8;
				_ = headerBytes[3];
				_ = headerBytes[3];
				int num4 = (flag ? 1 : 0);
				frame.SampleCount = samplesPerFrame[num2, num];
				int num5 = frame.SampleCount / 8;
				if (frame.MpegLayer == MpegLayer.Layer1)
				{
					frame.FrameLength = (num5 * frame.BitRate / frame.SampleRate + num4) * 4;
				}
				else
				{
					frame.FrameLength = num5 * frame.BitRate / frame.SampleRate + num4;
				}
				if (frame.FrameLength > 16384)
				{
					return false;
				}
				return true;
			}
			return false;
		}
	}
	public enum MpegLayer
	{
		Reserved,
		Layer3,
		Layer2,
		Layer1
	}
	public enum MpegVersion
	{
		Version25,
		Reserved,
		Version2,
		Version1
	}
	public class XingHeader
	{
		[Flags]
		private enum XingHeaderOptions
		{
			Frames = 1,
			Bytes = 2,
			Toc = 4,
			VbrScale = 8
		}

		private static int[] sr_table = new int[4] { 44100, 48000, 32000, 99999 };

		private int vbrScale = -1;

		private int startOffset;

		private int endOffset;

		private int tocOffset = -1;

		private int framesOffset = -1;

		private int bytesOffset = -1;

		private Mp3Frame frame;

		public int Frames
		{
			get
			{
				if (framesOffset == -1)
				{
					return -1;
				}
				return ReadBigEndian(frame.RawData, framesOffset);
			}
			set
			{
				if (framesOffset == -1)
				{
					throw new InvalidOperationException("Frames flag is not set");
				}
				WriteBigEndian(frame.RawData, framesOffset, value);
			}
		}

		public int Bytes
		{
			get
			{
				if (bytesOffset == -1)
				{
					return -1;
				}
				return ReadBigEndian(frame.RawData, bytesOffset);
			}
			set
			{
				if (framesOffset == -1)
				{
					throw new InvalidOperationException("Bytes flag is not set");
				}
				WriteBigEndian(frame.RawData, bytesOffset, value);
			}
		}

		public int VbrScale => vbrScale;

		public Mp3Frame Mp3Frame => frame;

		private static int ReadBigEndian(byte[] buffer, int offset)
		{
			return (((((buffer[offset] << 8) | buffer[offset + 1]) << 8) | buffer[offset + 2]) << 8) | buffer[offset + 3];
		}

		private void WriteBigEndian(byte[] buffer, int offset, int value)
		{
			byte[] bytes = BitConverter.GetBytes(value);
			for (int i = 0; i < 4; i++)
			{
				buffer[offset + 3 - i] = bytes[i];
			}
		}

		public static XingHeader LoadXingHeader(Mp3Frame frame)
		{
			XingHeader xingHeader = new XingHeader();
			xingHeader.frame = frame;
			int num = 0;
			if (frame.MpegVersion == MpegVersion.Version1)
			{
				num = ((frame.ChannelMode == ChannelMode.Mono) ? 21 : 36);
			}
			else
			{
				if (frame.MpegVersion != MpegVersion.Version2)
				{
					return null;
				}
				num = ((frame.ChannelMode == ChannelMode.Mono) ? 13 : 21);
			}
			if (frame.RawData[num] == 88 && frame.RawData[num + 1] == 105 && frame.RawData[num + 2] == 110 && frame.RawData[num + 3] == 103)
			{
				xingHeader.startOffset = num;
				num += 4;
			}
			else
			{
				if (frame.RawData[num] != 73 || frame.RawData[num + 1] != 110 || frame.RawData[num + 2] != 102 || frame.RawData[num + 3] != 111)
				{
					return null;
				}
				xingHeader.startOffset = num;
				num += 4;
			}
			int num2 = ReadBigEndian(frame.RawData, num);
			num += 4;
			if (((uint)num2 & (true ? 1u : 0u)) != 0)
			{
				xingHeader.framesOffset = num;
				num += 4;
			}
			if (((uint)num2 & 2u) != 0)
			{
				xingHeader.bytesOffset = num;
				num += 4;
			}
			if (((uint)num2 & 4u) != 0)
			{
				xingHeader.tocOffset = num;
				num += 100;
			}
			if (((uint)num2 & 8u) != 0)
			{
				xingHeader.vbrScale = ReadBigEndian(frame.RawData, num);
				num += 4;
			}
			xingHeader.endOffset = num;
			return xingHeader;
		}

		private XingHeader()
		{
		}
	}
	public static class WaveExtensionMethods
	{
		public static ISampleProvider ToSampleProvider(this IWaveProvider waveProvider)
		{
			return SampleProviderConverters.ConvertWaveProviderIntoSampleProvider(waveProvider);
		}

		public static void Init(this IWavePlayer wavePlayer, ISampleProvider sampleProvider, bool convertTo16Bit = false)
		{
			IWaveProvider waveProvider2;
			if (!convertTo16Bit)
			{
				IWaveProvider waveProvider = new SampleToWaveProvider(sampleProvider);
				waveProvider2 = waveProvider;
			}
			else
			{
				IWaveProvider waveProvider = new SampleToWaveProvider16(sampleProvider);
				waveProvider2 = waveProvider;
			}
			IWaveProvider waveProvider3 = waveProvider2;
			wavePlayer.Init(waveProvider3);
		}

		public static WaveFormat AsStandardWaveFormat(this WaveFormat waveFormat)
		{
			if (!(waveFormat is WaveFormatExtensible waveFormatExtensible))
			{
				return waveFormat;
			}
			return waveFormatExtensible.ToStandardWaveFormat();
		}

		public static IWaveProvider ToWaveProvider(this ISampleProvider sampleProvider)
		{
			return new SampleToWaveProvider(sampleProvider);
		}

		public static IWaveProvider ToWaveProvider16(this ISampleProvider sampleProvider)
		{
			return new SampleToWaveProvider16(sampleProvider);
		}

		public static ISampleProvider FollowedBy(this ISampleProvider sampleProvider, ISampleProvider next)
		{
			return new ConcatenatingSampleProvider(new ISampleProvider[2] { sampleProvider, next });
		}

		public static ISampleProvider FollowedBy(this ISampleProvider sampleProvider, TimeSpan silenceDuration, ISampleProvider next)
		{
			OffsetSampleProvider offsetSampleProvider = new OffsetSampleProvider(sampleProvider)
			{
				LeadOut = silenceDuration
			};
			return new ConcatenatingSampleProvider(new ISampleProvider[2] { offsetSampleProvider, next });
		}

		public static ISampleProvider Skip(this ISampleProvider sampleProvider, TimeSpan skipDuration)
		{
			return new OffsetSampleProvider(sampleProvider)
			{
				SkipOver = skipDuration
			};
		}

		public static ISampleProvider Take(this ISampleProvider sampleProvider, TimeSpan takeDuration)
		{
			return new OffsetSampleProvider(sampleProvider)
			{
				Take = takeDuration
			};
		}

		public static ISampleProvider ToMono(this ISampleProvider sourceProvider, float leftVol = 0.5f, float rightVol = 0.5f)
		{
			if (sourceProvider.WaveFormat.Channels == 1)
			{
				return sourceProvider;
			}
			return new StereoToMonoSampleProvider(sourceProvider)
			{
				LeftVolume = leftVol,
				RightVolume = rightVol
			};
		}

		public static ISampleProvider ToStereo(this ISampleProvider sourceProvider, float leftVol = 1f, float rightVol = 1f)
		{
			if (sourceProvider.WaveFormat.Channels == 2)
			{
				return sourceProvider;
			}
			return new MonoToStereoSampleProvider(sourceProvider)
			{
				LeftVolume = leftVol,
				RightVolume = rightVol
			};
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class AdpcmWaveFormat : WaveFormat
	{
		private short samplesPerBlock;

		private short numCoeff;

		[MarshalAs(UnmanagedType.ByValArray, SizeConst = 14)]
		private short[] coefficients;

		public int SamplesPerBlock => samplesPerBlock;

		public int NumCoefficients => numCoeff;

		public short[] Coefficients => coefficients;

		private AdpcmWaveFormat()
			: this(8000, 1)
		{
		}

		public AdpcmWaveFormat(int sampleRate, int channels)
			: base(sampleRate, 0, channels)
		{
			waveFormatTag = WaveFormatEncoding.Adpcm;
			extraSize = 32;
			switch (base.sampleRate)
			{
			case 8000:
			case 11025:
				blockAlign = 256;
				break;
			case 22050:
				blockAlign = 512;
				break;
			default:
				blockAlign = 1024;
				break;
			}
			bitsPerSample = 4;
			samplesPerBlock = (short)((blockAlign - 7 * channels) * 8 / (bitsPerSample * channels) + 2);
			averageBytesPerSecond = base.SampleRate * blockAlign / samplesPerBlock;
			numCoeff = 7;
			coefficients = new short[14]
			{
				256, 0, 512, -256, 0, 0, 192, 64, 240, 0,
				460, -208, 392, -232
			};
		}

		public override void Serialize(BinaryWriter writer)
		{
			base.Serialize(writer);
			writer.Write(samplesPerBlock);
			writer.Write(numCoeff);
			short[] array = coefficients;
			foreach (short value in array)
			{
				writer.Write(value);
			}
		}

		public override string ToString()
		{
			return $"Microsoft ADPCM {base.SampleRate} Hz {channels} channels {bitsPerSample} bits per sample {samplesPerBlock} samples per block";
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class Gsm610WaveFormat : WaveFormat
	{
		private readonly short samplesPerBlock;

		public short SamplesPerBlock => samplesPerBlock;

		public Gsm610WaveFormat()
		{
			waveFormatTag = WaveFormatEncoding.Gsm610;
			channels = 1;
			averageBytesPerSecond = 1625;
			bitsPerSample = 0;
			blockAlign = 65;
			sampleRate = 8000;
			extraSize = 2;
			samplesPerBlock = 320;
		}

		public override void Serialize(BinaryWriter writer)
		{
			base.Serialize(writer);
			writer.Write(samplesPerBlock);
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class ImaAdpcmWaveFormat : WaveFormat
	{
		private short samplesPerBlock;

		private ImaAdpcmWaveFormat()
		{
		}

		public ImaAdpcmWaveFormat(int sampleRate, int channels, int bitsPerSample)
		{
			waveFormatTag = WaveFormatEncoding.DviAdpcm;
			base.sampleRate = sampleRate;
			base.channels = (short)channels;
			base.bitsPerSample = (short)bitsPerSample;
			extraSize = 2;
			blockAlign = 0;
			averageBytesPerSecond = 0;
			samplesPerBlock = 0;
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class Mp3WaveFormat : WaveFormat
	{
		public Mp3WaveFormatId id;

		public Mp3WaveFormatFlags flags;

		public ushort blockSize;

		public ushort framesPerBlock;

		public ushort codecDelay;

		private const short Mp3WaveFormatExtraBytes = 12;

		public Mp3WaveFormat(int sampleRate, int channels, int blockSize, int bitRate)
		{
			waveFormatTag = WaveFormatEncoding.MpegLayer3;
			base.channels = (short)channels;
			averageBytesPerSecond = bitRate / 8;
			bitsPerSample = 0;
			blockAlign = 1;
			base.sampleRate = sampleRate;
			extraSize = 12;
			id = Mp3WaveFormatId.Mpeg;
			flags = Mp3WaveFormatFlags.PaddingIso;
			this.blockSize = (ushort)blockSize;
			framesPerBlock = 1;
			codecDelay = 0;
		}
	}
	[Flags]
	public enum Mp3WaveFormatFlags
	{
		PaddingIso = 0,
		PaddingOn = 1,
		PaddingOff = 2
	}
	public enum Mp3WaveFormatId : ushort
	{
		Unknown,
		Mpeg,
		ConstantFrameSize
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	internal class OggWaveFormat : WaveFormat
	{
		public uint dwVorbisACMVersion;

		public uint dwLibVorbisVersion;
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class TrueSpeechWaveFormat : WaveFormat
	{
		[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
		private short[] unknown;

		public TrueSpeechWaveFormat()
		{
			waveFormatTag = WaveFormatEncoding.DspGroupTrueSpeech;
			channels = 1;
			averageBytesPerSecond = 1067;
			bitsPerSample = 1;
			blockAlign = 32;
			sampleRate = 8000;
			extraSize = 32;
			unknown = new short[16];
			unknown[0] = 1;
			unknown[1] = 240;
		}

		public override void Serialize(BinaryWriter writer)
		{
			base.Serialize(writer);
			short[] array = unknown;
			foreach (short value in array)
			{
				writer.Write(value);
			}
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class WaveFormat
	{
		protected WaveFormatEncoding waveFormatTag;

		protected short channels;

		protected int sampleRate;

		protected int averageBytesPerSecond;

		protected short blockAlign;

		protected short bitsPerSample;

		protected short extraSize;

		public WaveFormatEncoding Encoding => waveFormatTag;

		public int Channels => channels;

		public int SampleRate => sampleRate;

		public int AverageBytesPerSecond => averageBytesPerSecond;

		public virtual int BlockAlign => blockAlign;

		public int BitsPerSample => bitsPerSample;

		public int ExtraSize => extraSize;

		public WaveFormat()
			: this(44100, 16, 2)
		{
		}

		public WaveFormat(int sampleRate, int channels)
			: this(sampleRate, 16, channels)
		{
		}

		public int ConvertLatencyToByteSize(int milliseconds)
		{
			int num = (int)((double)AverageBytesPerSecond / 1000.0 * (double)milliseconds);
			if (num % BlockAlign != 0)
			{
				num = num + BlockAlign - num % BlockAlign;
			}
			return num;
		}

		public static WaveFormat CreateCustomFormat(WaveFormatEncoding tag, int sampleRate, int channels, int averageBytesPerSecond, int blockAlign, int bitsPerSample)
		{
			return new WaveFormat
			{
				waveFormatTag = tag,
				channels = (short)channels,
				sampleRate = sampleRate,
				averageBytesPerSecond = averageBytesPerSecond,
				blockAlign = (short)blockAlign,
				bitsPerSample = (short)bitsPerSample,
				extraSize = 0
			};
		}

		public static WaveFormat CreateALawFormat(int sampleRate, int channels)
		{
			return CreateCustomFormat(WaveFormatEncoding.ALaw, sampleRate, channels, sampleRate * channels, channels, 8);
		}

		public static WaveFormat CreateMuLawFormat(int sampleRate, int channels)
		{
			return CreateCustomFormat(WaveFormatEncoding.MuLaw, sampleRate, channels, sampleRate * channels, channels, 8);
		}

		public WaveFormat(int rate, int bits, int channels)
		{
			if (channels < 1)
			{
				throw new ArgumentOutOfRangeException("channels", "Channels must be 1 or greater");
			}
			waveFormatTag = WaveFormatEncoding.Pcm;
			this.channels = (short)channels;
			sampleRate = rate;
			bitsPerSample = (short)bits;
			extraSize = 0;
			blockAlign = (short)(channels * (bits / 8));
			averageBytesPerSecond = sampleRate * blockAlign;
		}

		public static WaveFormat CreateIeeeFloatWaveFormat(int sampleRate, int channels)
		{
			WaveFormat waveFormat = new WaveFormat();
			waveFormat.waveFormatTag = WaveFormatEncoding.IeeeFloat;
			waveFormat.channels = (short)channels;
			waveFormat.bitsPerSample = 32;
			waveFormat.sampleRate = sampleRate;
			waveFormat.blockAlign = (short)(4 * channels);
			waveFormat.averageBytesPerSecond = sampleRate * waveFormat.blockAlign;
			waveFormat.extraSize = 0;
			return waveFormat;
		}

		public static WaveFormat MarshalFromPtr(IntPtr pointer)
		{
			WaveFormat waveFormat = Marshal.PtrToStructure<WaveFormat>(pointer);
			switch (waveFormat.Encoding)
			{
			case WaveFormatEncoding.Pcm:
				waveFormat.extraSize = 0;
				break;
			case WaveFormatEncoding.Extensible:
				waveFormat = Marshal.PtrToStructure<WaveFormatExtensible>(pointer);
				break;
			case WaveFormatEncoding.Adpcm:
				waveFormat = Marshal.PtrToStructure<AdpcmWaveFormat>(pointer);
				break;
			case WaveFormatEncoding.Gsm610:
				waveFormat = Marshal.PtrToStructure<Gsm610WaveFormat>(pointer);
				break;
			default:
				if (waveFormat.ExtraSize > 0)
				{
					waveFormat = Marshal.PtrToStructure<WaveFormatExtraData>(pointer);
				}
				break;
			}
			return waveFormat;
		}

		public static IntPtr MarshalToPtr(WaveFormat format)
		{
			IntPtr intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(format));
			Marshal.StructureToPtr(format, intPtr, fDeleteOld: false);
			return intPtr;
		}

		public static WaveFormat FromFormatChunk(BinaryReader br, int formatChunkLength)
		{
			WaveFormatExtraData waveFormatExtraData = new WaveFormatExtraData();
			waveFormatExtraData.ReadWaveFormat(br, formatChunkLength);
			waveFormatExtraData.ReadExtraData(br);
			return waveFormatExtraData;
		}

		private void ReadWaveFormat(BinaryReader br, int formatChunkLength)
		{
			if (formatChunkLength < 16)
			{
				throw new InvalidDataException("Invalid WaveFormat Structure");
			}
			waveFormatTag = (WaveFormatEncoding)br.ReadUInt16();
			channels = br.ReadInt16();
			sampleRate = br.ReadInt32();
			averageBytesPerSecond = br.ReadInt32();
			blockAlign = br.ReadInt16();
			bitsPerSample = br.ReadInt16();
			if (formatChunkLength > 16)
			{
				extraSize = br.ReadInt16();
				if (extraSize != formatChunkLength - 18)
				{
					extraSize = (short)(formatChunkLength - 18);
				}
			}
		}

		public WaveFormat(BinaryReader br)
		{
			int formatChunkLength = br.ReadInt32();
			ReadWaveFormat(br, formatChunkLength);
		}

		public override string ToString()
		{
			switch (waveFormatTag)
			{
			case WaveFormatEncoding.Pcm:
			case WaveFormatEncoding.Extensible:
				return $"{bitsPerSample} bit PCM: {sampleRate}Hz {channels} channels";
			case WaveFormatEncoding.IeeeFloat:
				return $"{bitsPerSample} bit IEEFloat: {sampleRate}Hz {channels} channels";
			default:
				return waveFormatTag.ToString();
			}
		}

		public override bool Equals(object obj)
		{
			if (obj is WaveFormat waveFormat)
			{
				if (waveFormatTag == waveFormat.waveFormatTag && channels == waveFormat.channels && sampleRate == waveFormat.sampleRate && averageBytesPerSecond == waveFormat.averageBytesPerSecond && blockAlign == waveFormat.blockAlign)
				{
					return bitsPerSample == waveFormat.bitsPerSample;
				}
				return false;
			}
			return false;
		}

		public override int GetHashCode()
		{
			return (int)waveFormatTag ^ (int)channels ^ sampleRate ^ averageBytesPerSecond ^ blockAlign ^ bitsPerSample;
		}

		public virtual void Serialize(BinaryWriter writer)
		{
			writer.Write(18 + extraSize);
			writer.Write((short)Encoding);
			writer.Write((short)Channels);
			writer.Write(SampleRate);
			writer.Write(AverageBytesPerSecond);
			writer.Write((short)BlockAlign);
			writer.Write((short)BitsPerSample);
			writer.Write(extraSize);
		}
	}
	public sealed class WaveFormatCustomMarshaler : ICustomMarshaler
	{
		private static WaveFormatCustomMarshaler marshaler;

		public static ICustomMarshaler GetInstance(string cookie)
		{
			if (marshaler == null)
			{
				marshaler = new WaveFormatCustomMarshaler();
			}
			return marshaler;
		}

		public void CleanUpManagedData(object ManagedObj)
		{
		}

		public void CleanUpNativeData(IntPtr pNativeData)
		{
			Marshal.FreeHGlobal(pNativeData);
		}

		public int GetNativeDataSize()
		{
			throw new NotImplementedException();
		}

		public IntPtr MarshalManagedToNative(object ManagedObj)
		{
			return WaveFormat.MarshalToPtr((WaveFormat)ManagedObj);
		}

		public object MarshalNativeToManaged(IntPtr pNativeData)
		{
			return WaveFormat.MarshalFromPtr(pNativeData);
		}
	}
	public enum WaveFormatEncoding : ushort
	{
		Unknown = 0,
		Pcm = 1,
		Adpcm = 2,
		IeeeFloat = 3,
		Vselp = 4,
		IbmCvsd = 5,
		ALaw = 6,
		MuLaw = 7,
		Dts = 8,
		Drm = 9,
		WmaVoice9 = 10,
		OkiAdpcm = 16,
		DviAdpcm = 17,
		ImaAdpcm = 17,
		MediaspaceAdpcm = 18,
		SierraAdpcm = 19,
		G723Adpcm = 20,
		DigiStd = 21,
		DigiFix = 22,
		DialogicOkiAdpcm = 23,
		MediaVisionAdpcm = 24,
		CUCodec = 25,
		YamahaAdpcm = 32,
		SonarC = 33,
		DspGroupTrueSpeech = 34,
		EchoSpeechCorporation1 = 35,
		AudioFileAf36 = 36,
		Aptx = 37,
		AudioFileAf10 = 38,
		Prosody1612 = 39,
		Lrc = 40,
		DolbyAc2 = 48,
		Gsm610 = 49,
		MsnAudio = 50,
		AntexAdpcme = 51,
		ControlResVqlpc = 52,
		DigiReal = 53,
		DigiAdpcm = 54,
		ControlResCr10 = 55,
		WAVE_FORMAT_NMS_VBXADPCM = 56,
		WAVE_FORMAT_CS_IMAADPCM = 57,
		WAVE_FORMAT_ECHOSC3 = 58,
		WAVE_FORMAT_ROCKWELL_ADPCM = 59,
		WAVE_FORMAT_ROCKWELL_DIGITALK = 60,
		WAVE_FORMAT_XEBEC = 61,
		WAVE_FORMAT_G721_ADPCM = 64,
		WAVE_FORMAT_G728_CELP = 65,
		WAVE_FORMAT_MSG723 = 66,
		Mpeg = 80,
		WAVE_FORMAT_RT24 = 82,
		WAVE_FORMAT_PAC = 83,
		MpegLayer3 = 85,
		WAVE_FORMAT_LUCENT_G723 = 89,
		WAVE_FORMAT_CIRRUS = 96,
		WAVE_FORMAT_ESPCM = 97,
		WAVE_FORMAT_VOXWARE = 98,
		WAVE_FORMAT_CANOPUS_ATRAC = 99,
		WAVE_FORMAT_G726_ADPCM = 100,
		WAVE_FORMAT_G722_ADPCM = 101,
		WAVE_FORMAT_DSAT_DISPLAY = 103,
		WAVE_FORMAT_VOXWARE_BYTE_ALIGNED = 105,
		WAVE_FORMAT_VOXWARE_AC8 = 112,
		WAVE_FORMAT_VOXWARE_AC10 = 113,
		WAVE_FORMAT_VOXWARE_AC16 = 114,
		WAVE_FORMAT_VOXWARE_AC20 = 115,
		WAVE_FORMAT_VOXWARE_RT24 = 116,
		WAVE_FORMAT_VOXWARE_RT29 = 117,
		WAVE_FORMAT_VOXWARE_RT29HW = 118,
		WAVE_FORMAT_VOXWARE_VR12 = 119,
		WAVE_FORMAT_VOXWARE_VR18 = 120,
		WAVE_FORMAT_VOXWARE_TQ40 = 121,
		WAVE_FORMAT_SOFTSOUND = 128,
		WAVE_FORMAT_VOXWARE_TQ60 = 129,
		WAVE_FORMAT_MSRT24 = 130,
		WAVE_FORMAT_G729A = 131,
		WAVE_FORMAT_MVI_MVI2 = 132,
		WAVE_FORMAT_DF_G726 = 133,
		WAVE_FORMAT_DF_GSM610 = 134,
		WAVE_FORMAT_ISIAUDIO = 136,
		WAVE_FORMAT_ONLIVE = 137,
		WAVE_FORMAT_SBC24 = 145,
		WAVE_FORMAT_DOLBY_AC3_SPDIF = 146,
		WAVE_FORMAT_MEDIASONIC_G723 = 147,
		WAVE_FORMAT_PROSODY_8KBPS = 148,
		WAVE_FORMAT_ZYXEL_ADPCM = 151,
		WAVE_FORMAT_PHILIPS_LPCBB = 152,
		WAVE_FORMAT_PACKED = 153,
		WAVE_FORMAT_MALDEN_PHONYTALK = 160,
		Gsm = 161,
		G729 = 162,
		G723 = 163,
		Acelp = 164,
		RawAac = 255,
		WAVE_FORMAT_RHETOREX_ADPCM = 256,
		WAVE_FORMAT_IRAT = 257,
		WAVE_FORMAT_VIVO_G723 = 273,
		WAVE_FORMAT_VIVO_SIREN = 274,
		WAVE_FORMAT_DIGITAL_G723 = 291,
		WAVE_FORMAT_SANYO_LD_ADPCM = 293,
		WAVE_FORMAT_SIPROLAB_ACEPLNET = 304,
		WAVE_FORMAT_SIPROLAB_ACELP4800 = 305,
		WAVE_FORMAT_SIPROLAB_ACELP8V3 = 306,
		WAVE_FORMAT_SIPROLAB_G729 = 307,
		WAVE_FORMAT_SIPROLAB_G729A = 308,
		WAVE_FORMAT_SIPROLAB_KELVIN = 309,
		WAVE_FORMAT_G726ADPCM = 320,
		WAVE_FORMAT_QUALCOMM_PUREVOICE = 336,
		WAVE_FORMAT_QUALCOMM_HALFRATE = 337,
		WAVE_FORMAT_TUBGSM = 341,
		WAVE_FORMAT_MSAUDIO1 = 352,
		WindowsMediaAudio = 353,
		WindowsMediaAudioProfessional = 354,
		WindowsMediaAudioLosseless = 355,
		WindowsMediaAudioSpdif = 356,
		WAVE_FORMAT_UNISYS_NAP_ADPCM = 368,
		WAVE_FORMAT_UNISYS_NAP_ULAW = 369,
		WAVE_FORMAT_UNISYS_NAP_ALAW = 370,
		WAVE_FORMAT_UNISYS_NAP_16K = 371,
		WAVE_FORMAT_CREATIVE_ADPCM = 512,
		WAVE_FORMAT_CREATIVE_FASTSPEECH8 = 514,
		WAVE_FORMAT_CREATIVE_FASTSPEECH10 = 515,
		WAVE_FORMAT_UHER_ADPCM = 528,
		WAVE_FORMAT_QUARTERDECK = 544,
		WAVE_FORMAT_ILINK_VC = 560,
		WAVE_FORMAT_RAW_SPORT = 576,
		WAVE_FORMAT_ESST_AC3 = 577,
		WAVE_FORMAT_IPI_HSX = 592,
		WAVE_FORMAT_IPI_RPELP = 593,
		WAVE_FORMAT_CS2 = 608,
		WAVE_FORMAT_SONY_SCX = 624,
		WAVE_FORMAT_FM_TOWNS_SND = 768,
		WAVE_FORMAT_BTV_DIGITAL = 1024,
		WAVE_FORMAT_QDESIGN_MUSIC = 1104,
		WAVE_FORMAT_VME_VMPCM = 1664,
		WAVE_FORMAT_TPC = 1665,
		WAVE_FORMAT_OLIGSM = 4096,
		WAVE_FORMAT_OLIADPCM = 4097,
		WAVE_FORMAT_OLICELP = 4098,
		WAVE_FORMAT_OLISBC = 4099,
		WAVE_FORMAT_OLIOPR = 4100,
		WAVE_FORMAT_LH_CODEC = 4352,
		WAVE_FORMAT_NORRIS = 5120,
		WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS = 5376,
		MPEG_ADTS_AAC = 5632,
		MPEG_RAW_AAC = 5633,
		MPEG_LOAS = 5634,
		NOKIA_MPEG_ADTS_AAC = 5640,
		NOKIA_MPEG_RAW_AAC = 5641,
		VODAFONE_MPEG_ADTS_AAC = 5642,
		VODAFONE_MPEG_RAW_AAC = 5643,
		MPEG_HEAAC = 5648,
		WAVE_FORMAT_DVM = 8192,
		Vorbis1 = 26447,
		Vorbis2 = 26448,
		Vorbis3 = 26449,
		Vorbis1P = 26479,
		Vorbis2P = 26480,
		Vorbis3P = 26481,
		Extensible = 65534,
		WAVE_FORMAT_DEVELOPMENT = ushort.MaxValue
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class WaveFormatExtensible : WaveFormat
	{
		private short wValidBitsPerSample;

		private int dwChannelMask;

		private Guid subFormat;

		public Guid SubFormat => subFormat;

		private WaveFormatExtensible()
		{
		}

		public WaveFormatExtensible(int rate, int bits, int channels)
			: base(rate, bits, channels)
		{
			waveFormatTag = WaveFormatEncoding.Extensible;
			extraSize = 22;
			wValidBitsPerSample = (short)bits;
			for (int i = 0; i < channels; i++)
			{
				dwChannelMask |= 1 << i;
			}
			if (bits == 32)
			{
				subFormat = AudioMediaSubtypes.MEDIASUBTYPE_IEEE_FLOAT;
			}
			else
			{
				subFormat = AudioMediaSubtypes.MEDIASUBTYPE_PCM;
			}
		}

		public WaveFormat ToStandardWaveFormat()
		{
			if (subFormat == AudioMediaSubtypes.MEDIASUBTYPE_IEEE_FLOAT && bitsPerSample == 32)
			{
				return WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, channels);
			}
			if (subFormat == AudioMediaSubtypes.MEDIASUBTYPE_PCM)
			{
				return new WaveFormat(sampleRate, bitsPerSample, channels);
			}
			return this;
		}

		public override void Serialize(BinaryWriter writer)
		{
			base.Serialize(writer);
			writer.Write(wValidBitsPerSample);
			writer.Write(dwChannelMask);
			byte[] array = subFormat.ToByteArray();
			writer.Write(array, 0, array.Length);
		}

		public override string ToString()
		{
			return "WAVE_FORMAT_EXTENSIBLE " + AudioMediaSubtypes.GetAudioSubtypeName(subFormat) + " " + $"{base.SampleRate}Hz {base.Channels} channels {base.BitsPerSample} bit";
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	public class WaveFormatExtraData : WaveFormat
	{
		[MarshalAs(UnmanagedType.ByValArray, SizeConst = 100)]
		private byte[] extraData = new byte[100];

		public byte[] ExtraData => extraData;

		internal WaveFormatExtraData()
		{
		}

		public WaveFormatExtraData(BinaryReader reader)
			: base(reader)
		{
			ReadExtraData(reader);
		}

		internal void ReadExtraData(BinaryReader reader)
		{
			if (extraSize > 0)
			{
				reader.Read(extraData, 0, extraSize);
			}
		}

		public override void Serialize(BinaryWriter writer)
		{
			base.Serialize(writer);
			if (extraSize > 0)
			{
				writer.Write(extraData, 0, extraSize);
			}
		}
	}
	public interface IWaveIn : IDisposable
	{
		WaveFormat WaveFormat { get; set; }

		event EventHandler<WaveInEventArgs> DataAvailable;

		event EventHandler<StoppedEventArgs> RecordingStopped;

		void StartRecording();

		void StopRecording();
	}
	public class WaveInEventArgs : EventArgs
	{
		private byte[] buffer;

		private int bytes;

		public byte[] Buffer => buffer;

		public int BytesRecorded => bytes;

		public WaveInEventArgs(byte[] buffer, int bytes)
		{
			this.buffer = buffer;
			this.bytes = bytes;
		}
	}
	public class AiffFileWriter : Stream
	{
		private Stream outStream;

		private BinaryWriter writer;

		private long dataSizePos;

		private long commSampleCountPos;

		private long dataChunkSize = 8L;

		private WaveFormat format;

		private string filename;

		private byte[] value24 = new byte[3];

		public string Filename => filename;

		public override long Length => dataChunkSize;

		public WaveFormat WaveFormat => format;

		public override bool CanRead => false;

		public override bool CanWrite => true;

		public override bool CanSeek => false;

		public override long Position
		{
			get
			{
				return dataChunkSize;
			}
			set
			{
				throw new InvalidOperationException("Repositioning an AiffFileWriter is not supported");
			}
		}

		public static void CreateAiffFile(string filename, WaveStream sourceProvider)
		{
			using AiffFileWriter aiffFileWriter = new AiffFileWriter(filename, sourceProvider.WaveFormat);
			byte[] array = new byte[16384];
			while (sourceProvider.Position < sourceProvider.Length)
			{
				int count = Math.Min((int)(sourceProvider.Length - sourceProvider.Position), array.Length);
				int num = sourceProvider.Read(array, 0, count);
				if (num == 0)
				{
					break;
				}
				aiffFileWriter.Write(array, 0, num);
			}
		}

		public AiffFileWriter(Stream outStream, WaveFormat format)
		{
			this.outStream = outStream;
			this.format = format;
			writer = new BinaryWriter(outStream, Encoding.UTF8);
			writer.Write(Encoding.UTF8.GetBytes("FORM"));
			writer.Write(0);
			writer.Write(Encoding.UTF8.GetBytes("AIFF"));
			CreateCommChunk();
			WriteSsndChunkHeader();
		}

		public AiffFileWriter(string filename, WaveFormat format)
			: this(new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.Read), format)
		{
			this.filename = filename;
		}

		private void WriteSsndChunkHeader()
		{
			writer.Write(Encoding.UTF8.GetBytes("SSND"));
			dataSizePos = outStream.Position;
			writer.Write(0);
			writer.Write(0);
			writer.Write(SwapEndian(format.BlockAlign));
		}

		private byte[] SwapEndian(short n)
		{
			return new byte[2]
			{
				(byte)(n >> 8),
				(byte)((uint)n & 0xFFu)
			};
		}

		private byte[] SwapEndian(int n)
		{
			return new byte[4]
			{
				(byte)((uint)(n >> 24) & 0xFFu),
				(byte)((uint)(n >> 16) & 0xFFu),
				(byte)((uint)(n >> 8) & 0xFFu),
				(byte)((uint)n & 0xFFu)
			};
		}

		private void CreateCommChunk()
		{
			writer.Write(Encoding.UTF8.GetBytes("COMM"));
			writer.Write(SwapEndian(18));
			writer.Write(SwapEndian((short)format.Channels));
			commSampleCountPos = outStream.Position;
			writer.Write(0);
			writer.Write(SwapEndian((short)format.BitsPerSample));
			writer.Write(IEEE.ConvertToIeeeExtended(format.SampleRate));
		}

		public override int Read(byte[] buffer, int offset, int count)
		{
			throw new InvalidOperationException("Cannot read from an AiffFileWriter");
		}

		public override long Seek(long offset, SeekOrigin origin)
		{
			throw new InvalidOperationException("Cannot seek within an AiffFileWriter");
		}

		public override void SetLength(long value)
		{
			throw new InvalidOperationException("Cannot set length of an AiffFileWriter");
		}

		public override void Write(byte[] data, int offset, int count)
		{
			byte[] array = new byte[data.Length];
			int num = format.BitsPerSample / 8;
			for (int i = 0; i < data.Length; i++)
			{
				int num2 = (int)Math.Floor((double)i / (double)num) * num + (num - i % num - 1);
				array[i] = data[num2];
			}
			outStream.Write(array, offset, count);
			dataChunkSize += count;
		}

		public void WriteSample(float sample)
		{
			if (WaveFormat.BitsPerSample == 16)
			{
				writer.Write(SwapEndian((short)(32767f * sample)));
				dataChunkSize += 2L;
			}
			else if (WaveFormat.BitsPerSample == 24)
			{
				byte[] bytes = BitConverter.GetBytes((int)(2.1474836E+09f * sample));
				value24[2] = bytes[1];
				value24[1] = bytes[2];
				value24[0] = bytes[3];
				writer.Write(value24);
				dataChunkSize += 3L;
			}
			else
			{
				if (WaveFormat.BitsPerSample != 32 || WaveFormat.Encoding != WaveFormatEncoding.Extensible)
				{
					throw new InvalidOperationException("Only 16, 24 or 32 bit PCM or IEEE float audio data supported");
				}
				writer.Write(SwapEndian(65535 * (int)sample));
				dataChunkSize += 4L;
			}
		}

		public void WriteSamples(float[] samples, int offset, int count)
		{
			for (int i = 0; i < count; i++)
			{
				WriteSample(samples[offset + i]);
			}
		}

		public void WriteSamples(short[] samples, int offset, int count)
		{
			if (WaveFormat.BitsPerSample == 16)
			{
				for (int i = 0; i < count; i++)
				{
					writer.Write(SwapEndian(samples[i + offset]));
				}
				dataChunkSize += count * 2;
			}
			else if (WaveFormat.BitsPerSample == 24)
			{
				for (int j = 0; j < count; j++)
				{
					byte[] bytes = BitConverter.GetBytes(65535 * samples[j + offset]);
					value24[2] = bytes[1];
					value24[1] = bytes[2];
					value24[0] = bytes[3];
					writer.Write(value24);
				}
				dataChunkSize += count * 3;
			}
			else
			{
				if (WaveFormat.BitsPerSample != 32 || WaveFormat.Encoding != WaveFormatEncoding.Extensible)
				{
					throw new InvalidOperationException("Only 16, 24 or 32 bit PCM audio data supported");
				}
				for (int k = 0; k < count; k++)
				{
					writer.Write(SwapEndian(65535 * samples[k + offset]));
				}
				dataChunkSize += count * 4;
			}
		}

		public override void Flush()
		{
			writer.Flush();
		}

		protected override void Dispose(bool disposing)
		{
			if (disposing && outStream != null)
			{
				try
				{
					UpdateHeader(writer);
				}
				finally
				{
					outStream.Dispose();
					outStream = null;
				}
			}
		}

		protected virtual void UpdateHeader(BinaryWriter writer)
		{
			Flush();
			writer.Seek(4, SeekOrigin.Begin);
			writer.Write(SwapEndian((int)(outStream.Length - 8)));
			UpdateCommChunk(writer);
			UpdateSsndChunk(writer);
		}

		private void UpdateCommChunk(BinaryWriter writer)
		{
			writer.Seek((int)commSampleCountPos, SeekOrigin.Begin);
			writer.Write(SwapEndian((int)(dataChunkSize * 8 / format.BitsPerSample / format.Channels)));
		}

		private void UpdateSsndChunk(BinaryWriter writer)
		{
			writer.Seek((int)dataSizePos, SeekOrigin.Begin);
			writer.Write(SwapEndian((int)dataChunkSize));
		}

		~AiffFileWriter()
		{
			Dispose(disposing: false);
		}
	}
	public class BextChunkInfo
	{
		public string Description { get; set; }

		public string Originator { get; set; }

		public string OriginatorReference { get; set; }

		public DateTime OriginationDateTime { get; set; }

		public string OriginationDate => OriginationDateTime.ToString("yyyy-MM-dd");

		public string OriginationTime => OriginationDateTime.ToString("HH:mm:ss");

		public long TimeReference { get; set; }

		public ushort Version => 1;

		public string UniqueMaterialIdentifier { get; set; }

		public byte[] Reserved { get; }

		public string CodingHistory { get; set; }

		public BextChunkInfo()
		{
			Reserved = new byte[190];
		}
	}
	public class BwfWriter : IDisposable
	{
		private readonly WaveFormat format;

		private readonly BinaryWriter writer;

		private readonly long dataChunkSizePosition;

		private long dataLength;

		private bool isDisposed;

		public BwfWriter(string filename, WaveFormat format, BextChunkInfo bextChunkInfo)
		{
			this.format = format;
			writer = new BinaryWriter(File.OpenWrite(filename));
			writer.Write(Encoding.UTF8.GetBytes("RIFF"));
			writer.Write(0);
			writer.Write(Encoding.UTF8.GetBytes("WAVE"));
			writer.Write(Encoding.UTF8.GetBytes("JUNK"));
			writer.Write(28);
			writer.Write(0L);
			writer.Write(0L);
			writer.Write(0L);
			writer.Write(0);
			writer.Write(Encoding.UTF8.GetBytes("bext"));
			byte[] bytes = Encoding.ASCII.GetBytes(bextChunkInfo.CodingHistory ?? "");
			int num = 602 + bytes.Length;
			if (num % 2 != 0)
			{
				num++;
			}
			writer.Write(num);
			_ = writer.BaseStream.Position;
			writer.Write(GetAsBytes(bextChunkInfo.Description, 256));
			writer.Write(GetAsBytes(bextChunkInfo.Originator, 32));
			writer.Write(GetAsBytes(bextChunkInfo.OriginatorReference, 32));
			writer.Write(GetAsBytes(bextChunkInfo.OriginationDate, 10));
			writer.Write(GetAsBytes(bextChunkInfo.OriginationTime, 8));
			writer.Write(bextChunkInfo.TimeReference);
			writer.Write(bextChunkInfo.Version);
			writer.Write(GetAsBytes(bextChunkInfo.UniqueMaterialIdentifier, 64));
			writer.Write(bextChunkInfo.Reserved);
			writer.Write(bytes);
			if (bytes.Length % 2 != 0)
			{
				writer.Write((byte)0);
			}
			writer.Write(Encoding.UTF8.GetBytes("fmt "));
			format.Serialize(writer);
			writer.Write(Encoding.UTF8.GetBytes("data"));
			dataChunkSizePosition = writer.BaseStream.Position;
			writer.Write(-1);
		}

		public void Write(byte[] buffer, int offset, int count)
		{
			if (isDisposed)
			{
				throw new ObjectDisposedException("This BWF Writer already disposed");
			}
			writer.Write(buffer, offset, count);
			dataLength += count;
		}

		public void Flush()
		{
			if (isDisposed)
			{
				throw new ObjectDisposedException("This BWF Writer already disposed");
			}
			writer.Flush();
			FixUpChunkSizes(restorePosition: true);
		}

		private void FixUpChunkSizes(bool restorePosition)
		{
			long position = writer.BaseStream.Position;
			bool num = dataLength > int.MaxValue;
			long num2 = writer.BaseStream.Length - 8;
			if (num)
			{
				int num3 = format.BitsPerSample / 8 * format.Channels;
				writer.BaseStream.Position = 0L;
				writer.Write(Encoding.UTF8.GetBytes("RF64"));
				writer.Write(-1);
				writer.BaseStream.Position += 4L;
				writer.Write(Encoding.UTF8.GetBytes("ds64"));
				writer.BaseStream.Position += 4L;
				writer.Write(num2);
				writer.Write(dataLength);
				writer.Write(dataLength / num3);
			}
			else
			{
				writer.BaseStream.Position = 4L;
				writer.Write((uint)num2);
				writer.BaseStream.Position = dataChunkSizePosition;
				writer.Write((uint)dataLength);
			}
			if (restorePosition)
			{
				writer.BaseStream.Position = position;
			}
		}

		public void Dispose()
		{
			if (!isDisposed)
			{
				FixUpChunkSizes(restorePosition: false);
				writer.Dispose();
				isDisposed = true;
			}
		}

		private static byte[] GetAsBytes(string message, int byteSize)
		{
			byte[] array = new byte[byteSize];
			byte[] bytes = Encoding.ASCII.GetBytes(message ?? "");
			Array.Copy(bytes, array, Math.Min(bytes.Length, byteSize));
			return array;
		}
	}
	public class CueWaveFileWriter : WaveFileWriter
	{
		private CueList cues;

		public CueWaveFileWriter(string fileName, WaveFormat waveFormat)
			: base(fileName, waveFormat)
		{
		}

		public void AddCue(int position, string label)
		{
			if (cues == null)
			{
				cues = new CueList();
			}
			cues.Add(new Cue(position, label));
		}

		private void WriteCues(BinaryWriter w)
		{
			if (cues != null)
			{
				int count = cues.GetRiffChunks().Length;
				w.Seek(0, SeekOrigin.End);
				if (w.BaseStream.Length % 2 == 1)
				{
					w.Write((byte)0);
				}
				w.Write(cues.GetRiffChunks(), 0, count);
				w.Seek(4, SeekOrigin.Begin);
				w.Write((int)(w.BaseStream.Length - 8));
			}
		}

		protected override void UpdateHeader(BinaryWriter writer)
		{
			base.UpdateHeader(writer);
			WriteCues(writer);
		}
	}
	public class DirectSoundOut : IWavePlayer, IDisposable
	{
		[StructLayout(LayoutKind.Sequential, Pack = 2)]
		internal class BufferDescription
		{
			public int dwSize;

			[MarshalAs(UnmanagedType.U4)]
			public DirectSoundBufferCaps dwFlags;

			public uint dwBufferBytes;

			public int dwReserved;

			public IntPtr lpwfxFormat;

			public Guid guidAlgo;
		}

		[StructLayout(LayoutKind.Sequential, Pack = 2)]
		internal class BufferCaps
		{
			public int dwSize;

			public int dwFlags;

			public int dwBufferBytes;

			public int dwUnlockTransferRate;

			public int dwPlayCpuOverhead;
		}

		internal enum DirectSoundCooperativeLevel : uint
		{
			DSSCL_NORMAL = 1u,
			DSSCL_PRIORITY,
			DSSCL_EXCLUSIVE,
			DSSCL_WRITEPRIMARY
		}

		[Flags]
		internal enum DirectSoundPlayFlags : uint
		{
			DSBPLAY_LOOPING = 1u,
			DSBPLAY_LOCHARDWARE = 2u,
			DSBPLAY_LOCSOFTWARE = 4u,
			DSBPLAY_TERMINATEBY_TIME = 8u,
			DSBPLAY_TERMINATEBY_DISTANCE = 0x10u,
			DSBPLAY_TERMINATEBY_PRIORITY = 0x20u
		}

		internal enum DirectSoundBufferLockFlag : uint
		{
			None,
			FromWriteCursor,
			EntireBuffer
		}

		[Flags]
		internal enum DirectSoundBufferStatus : uint
		{
			DSBSTATUS_PLAYING = 1u,
			DSBSTATUS_BUFFERLOST = 2u,
			DSBSTATUS_LOOPING = 4u,
			DSBSTATUS_LOCHARDWARE = 8u,
			DSBSTATUS_LOCSOFTWARE = 0x10u,
			DSBSTATUS_TERMINATED = 0x20u
		}

		[Flags]
		internal enum DirectSoundBufferCaps : uint
		{
			DSBCAPS_PRIMARYBUFFER = 1u,
			DSBCAPS_STATIC = 2u,
			DSBCAPS_LOCHARDWARE = 4u,
			DSBCAPS_LOCSOFTWARE = 8u,
			DSBCAPS_CTRL3D = 0x10u,
			DSBCAPS_CTRLFREQUENCY = 0x20u,
			DSBCAPS_CTRLPAN = 0x40u,
			DSBCAPS_CTRLVOLUME = 0x80u,
			DSBCAPS_CTRLPOSITIONNOTIFY = 0x100u,
			DSBCAPS_CTRLFX = 0x200u,
			DSBCAPS_STICKYFOCUS = 0x4000u,
			DSBCAPS_GLOBALFOCUS = 0x8000u,
			DSBCAPS_GETCURRENTPOSITION2 = 0x10000u,
			DSBCAPS_MUTE3DATMAXDISTANCE = 0x20000u,
			DSBCAPS_LOCDEFER = 0x40000u
		}

		internal struct DirectSoundBufferPositionNotify
		{
			public uint dwOffset;

			public IntPtr hEventNotify;
		}

		[ComImport]
		[Guid("279AFA83-4981-11CE-A521-0020AF0BE560")]
		[SuppressUnmanagedCodeSecurity]
		[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
		internal interface IDirectSound
		{
			void CreateSoundBuffer([In] BufferDescription desc, [MarshalAs(UnmanagedType.Interface)] out object dsDSoundBuffer, IntPtr pUnkOuter);

			void GetCaps(IntPtr caps);

			void DuplicateSoundBuffer([In][MarshalAs(UnmanagedType.Interface)] IDirectSoundBuffer bufferOriginal, [In][MarshalAs(UnmanagedType.Interface)] IDirectSoundBuffer bufferDuplicate);

			void SetCooperativeLevel(IntPtr HWND, [In][MarshalAs(UnmanagedType.U4)] DirectSoundCooperativeLevel dwLevel);

			void Compact();

			void GetSpeakerConfig(IntPtr pdwSpeakerConfig);

			void SetSpeakerConfig(uint pdwSpeakerConfig);

			void Initialize([In][MarshalAs(UnmanagedType.LPStruct)] Guid guid);
		}

		[ComImport]
		[Guid("279AFA85-4981-11CE-A521-0020AF0BE560")]
		[SuppressUnmanagedCodeSecurity]
		[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
		internal interface IDirectSoundBuffer
		{
			void GetCaps([MarshalAs(UnmanagedType.LPStruct)] BufferCaps pBufferCaps);

			void GetCurrentPosition(out uint currentPlayCursor, out uint currentWriteCursor);

			void GetFormat();

			[return: MarshalAs(UnmanagedType.I4)]
			int GetVolume();

			void GetPan(out uint pan);

			[return: MarshalAs(UnmanagedType.I4)]
			int GetFrequency();

			[return: MarshalAs(UnmanagedType.U4)]
			DirectSoundBufferStatus GetStatus();

			void Initialize([In][MarshalAs(UnmanagedType.Interface)] IDirectSound directSound, [In] BufferDescription desc);

			void Lock(int dwOffset, uint dwBytes, out IntPtr audioPtr1, out int audioBytes1, out IntPtr audioPtr2, out int audioBytes2, [MarshalAs(UnmanagedType.U4)] DirectSoundBufferLockFlag dwFlags);

			void Play(uint dwReserved1, uint dwPriority, [In][MarshalAs(UnmanagedType.U4)] DirectSoundPlayFlags dwFlags);

			void SetCurrentPosition(uint dwNewPosition);

			void SetFormat([In] WaveFormat pcfxFormat);

			void SetVolume(int volume);

			void SetPan(uint pan);

			void SetFrequency(uint frequency);

			void Stop();

			void Unlock(IntPtr pvAudioPtr1, int dwAudioBytes1, IntPtr pvAudioPtr2, int dwAudioBytes2);

			void Restore();
		}

		[ComImport]
		[Guid("b0210783-89cd-11d0-af08-00a0c925cd16")]
		[SuppressUnmanagedCodeSecurity]
		[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
		internal interface IDirectSoundNotify
		{
			void SetNotificationPositions(uint dwPositionNotifies, [In][MarshalAs(UnmanagedType.LPArray)] DirectSoundBufferPositionNotify[] pcPositionNotifies);
		}

		private delegate bool DSEnumCallback(IntPtr lpGuid, IntPtr lpcstrDescription, IntPtr lpcstrModule, IntPtr lpContext);

		private PlaybackState playbackState;

		private WaveFormat waveFormat;

		private int samplesTotalSize;

		private int samplesFrameSize;

		private int nextSamplesWriteIndex;

		private int desiredLatency;

		private Guid device;

		private byte[] samples;

		private IWaveProvider waveStream;

		private IDirectSound directSound;

		private IDirectSoundBuffer primarySoundBuffer;

		private IDirectSoundBuffer sec

plugins/Lib/NAudio.dll

Decompiled 10 months ago
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using NAudio.Wave.SampleProviders;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyCompany("Mark Heath & Contributors")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("© Mark Heath 2023")]
[assembly: AssemblyDescription("NAudio, an audio library for .NET")]
[assembly: AssemblyFileVersion("2.2.1.0")]
[assembly: AssemblyInformationalVersion("2.2.1")]
[assembly: AssemblyProduct("NAudio")]
[assembly: AssemblyTitle("NAudio")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/naudio/NAudio")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.2.1.0")]
[module: UnverifiableCode]
namespace NAudio.Wave;

public class AudioFileReader : WaveStream, ISampleProvider
{
	private WaveStream readerStream;

	private readonly SampleChannel sampleChannel;

	private readonly int destBytesPerSample;

	private readonly int sourceBytesPerSample;

	private readonly long length;

	private readonly object lockObject;

	public string FileName { get; }

	public override WaveFormat WaveFormat => sampleChannel.WaveFormat;

	public override long Length => length;

	public override long Position
	{
		get
		{
			return SourceToDest(((Stream)(object)readerStream).Position);
		}
		set
		{
			lock (lockObject)
			{
				((Stream)(object)readerStream).Position = DestToSource(value);
			}
		}
	}

	public float Volume
	{
		get
		{
			return sampleChannel.Volume;
		}
		set
		{
			sampleChannel.Volume = value;
		}
	}

	public AudioFileReader(string fileName)
	{
		//IL_0050: Unknown result type (might be due to invalid IL or missing references)
		//IL_005a: Expected O, but got Unknown
		lockObject = new object();
		FileName = fileName;
		CreateReaderStream(fileName);
		sourceBytesPerSample = readerStream.WaveFormat.BitsPerSample / 8 * readerStream.WaveFormat.Channels;
		sampleChannel = new SampleChannel((IWaveProvider)(object)readerStream, false);
		destBytesPerSample = 4 * sampleChannel.WaveFormat.Channels;
		length = SourceToDest(((Stream)(object)readerStream).Length);
	}

	private void CreateReaderStream(string fileName)
	{
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Expected O, but got Unknown
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Invalid comparison between Unknown and I4
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Invalid comparison between Unknown and I4
		//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cb: Expected O, but got Unknown
		//IL_0098: Unknown result type (might be due to invalid IL or missing references)
		//IL_00a2: Expected O, but got Unknown
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Expected O, but got Unknown
		//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
		//IL_00d8: Expected O, but got Unknown
		if (fileName.EndsWith(".wav", StringComparison.OrdinalIgnoreCase))
		{
			readerStream = (WaveStream)new WaveFileReader(fileName);
			if ((int)readerStream.WaveFormat.Encoding != 1 && (int)readerStream.WaveFormat.Encoding != 3)
			{
				readerStream = WaveFormatConversionStream.CreatePcmStream(readerStream);
				readerStream = (WaveStream)new BlockAlignReductionStream(readerStream);
			}
		}
		else if (fileName.EndsWith(".mp3", StringComparison.OrdinalIgnoreCase))
		{
			if (Environment.OSVersion.Version.Major < 6)
			{
				readerStream = (WaveStream)(object)new Mp3FileReader(fileName);
			}
			else
			{
				readerStream = (WaveStream)new MediaFoundationReader(fileName);
			}
		}
		else if (fileName.EndsWith(".aiff", StringComparison.OrdinalIgnoreCase) || fileName.EndsWith(".aif", StringComparison.OrdinalIgnoreCase))
		{
			readerStream = (WaveStream)new AiffFileReader(fileName);
		}
		else
		{
			readerStream = (WaveStream)new MediaFoundationReader(fileName);
		}
	}

	public override int Read(byte[] buffer, int offset, int count)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		WaveBuffer val = new WaveBuffer(buffer);
		int count2 = count / 4;
		return Read(val.FloatBuffer, offset / 4, count2) * 4;
	}

	public int Read(float[] buffer, int offset, int count)
	{
		lock (lockObject)
		{
			return sampleChannel.Read(buffer, offset, count);
		}
	}

	private long SourceToDest(long sourceBytes)
	{
		return destBytesPerSample * (sourceBytes / sourceBytesPerSample);
	}

	private long DestToSource(long destBytes)
	{
		return sourceBytesPerSample * (destBytes / destBytesPerSample);
	}

	protected override void Dispose(bool disposing)
	{
		if (disposing && readerStream != null)
		{
			((Stream)(object)readerStream).Dispose();
			readerStream = null;
		}
		((Stream)this).Dispose(disposing);
	}
}
public class Mp3FileReader : Mp3FileReaderBase
{
	public Mp3FileReader(string mp3FileName)
		: base((Stream)File.OpenRead(mp3FileName), new FrameDecompressorBuilder(CreateAcmFrameDecompressor), true)
	{
	}//IL_000e: Unknown result type (might be due to invalid IL or missing references)
	//IL_0019: Expected O, but got Unknown


	public Mp3FileReader(Stream inputStream)
		: base(inputStream, new FrameDecompressorBuilder(CreateAcmFrameDecompressor), false)
	{
	}//IL_0009: Unknown result type (might be due to invalid IL or missing references)
	//IL_0014: Expected O, but got Unknown


	public static IMp3FrameDecompressor CreateAcmFrameDecompressor(WaveFormat mp3Format)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		return (IMp3FrameDecompressor)new AcmMp3FrameDecompressor(mp3Format);
	}
}

plugins/Lib/NAudio.Wasapi.dll

Decompiled 10 months ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using NAudio.CoreAudioApi;
using NAudio.CoreAudioApi.Interfaces;
using NAudio.Dmo;
using NAudio.Dmo.Effect;
using NAudio.MediaFoundation;
using NAudio.Utils;
using NAudio.Wasapi.CoreAudioApi;
using NAudio.Wasapi.CoreAudioApi.Interfaces;
using NAudio.Wave;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("Mark Heath")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("© Mark Heath 2023")]
[assembly: AssemblyFileVersion("2.2.1.0")]
[assembly: AssemblyInformationalVersion("2.2.1")]
[assembly: AssemblyProduct("NAudio.Wasapi")]
[assembly: AssemblyTitle("NAudio.Wasapi")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/naudio/NAudio")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.2.1.0")]
[module: UnverifiableCode]
namespace NAudio.MediaFoundation
{
	public static class AudioSubtypes
	{
		[FieldDescription("AAC")]
		public static readonly Guid MFAudioFormat_AAC = new Guid("00001610-0000-0010-8000-00aa00389b71");

		[FieldDescription("ADTS")]
		public static readonly Guid MFAudioFormat_ADTS = new Guid("00001600-0000-0010-8000-00aa00389b71");

		[FieldDescription("Dolby AC3 SPDIF")]
		public static readonly Guid MFAudioFormat_Dolby_AC3_SPDIF = new Guid("00000092-0000-0010-8000-00aa00389b71");

		[FieldDescription("DRM")]
		public static readonly Guid MFAudioFormat_DRM = new Guid("00000009-0000-0010-8000-00aa00389b71");

		[FieldDescription("DTS")]
		public static readonly Guid MFAudioFormat_DTS = new Guid("00000008-0000-0010-8000-00aa00389b71");

		[FieldDescription("IEEE floating-point")]
		public static readonly Guid MFAudioFormat_Float = new Guid("00000003-0000-0010-8000-00aa00389b71");

		[FieldDescription("MP3")]
		public static readonly Guid MFAudioFormat_MP3 = new Guid("00000055-0000-0010-8000-00aa00389b71");

		[FieldDescription("MPEG")]
		public static readonly Guid MFAudioFormat_MPEG = new Guid("00000050-0000-0010-8000-00aa00389b71");

		[FieldDescription("WMA 9 Voice codec")]
		public static readonly Guid MFAudioFormat_MSP1 = new Guid("0000000a-0000-0010-8000-00aa00389b71");

		[FieldDescription("PCM")]
		public static readonly Guid MFAudioFormat_PCM = new Guid("00000001-0000-0010-8000-00aa00389b71");

		[FieldDescription("WMA SPDIF")]
		public static readonly Guid MFAudioFormat_WMASPDIF = new Guid("00000164-0000-0010-8000-00aa00389b71");

		[FieldDescription("WMAudio Lossless")]
		public static readonly Guid MFAudioFormat_WMAudio_Lossless = new Guid("00000163-0000-0010-8000-00aa00389b71");

		[FieldDescription("Windows Media Audio")]
		public static readonly Guid MFAudioFormat_WMAudioV8 = new Guid("00000161-0000-0010-8000-00aa00389b71");

		[FieldDescription("Windows Media Audio Professional")]
		public static readonly Guid MFAudioFormat_WMAudioV9 = new Guid("00000162-0000-0010-8000-00aa00389b71");

		[FieldDescription("Dolby AC3")]
		public static readonly Guid MFAudioFormat_Dolby_AC3 = new Guid("e06d802c-db46-11cf-b4d1-00805f6cbbea");

		public static readonly Guid MFAudioFormat_FLAC = new Guid("0000f1ac-0000-0010-8000-00aa00389b71");

		public static readonly Guid MFAudioFormat_ALAC = new Guid("63616c61-0000-0010-8000-00aa00389b71");

		[FieldDescription("MPEG-4 and AAC Audio Types")]
		public static readonly Guid MEDIASUBTYPE_RAW_AAC1 = new Guid("000000ff-0000-0010-8000-00aa00389b71");

		[FieldDescription("Dolby Audio Types")]
		public static readonly Guid MEDIASUBTYPE_DVM = new Guid("00002000-0000-0010-8000-00aa00389b71");

		[FieldDescription("Dolby Audio Types")]
		public static readonly Guid MEDIASUBTYPE_DOLBY_DDPLUS = new Guid("a7fb87af-2d02-42fb-a4d4-05cd93843bdd");

		[FieldDescription("μ-law")]
		public static readonly Guid KSDATAFORMAT_SUBTYPE_MULAW = new Guid("00000007-0000-0010-8000-00aa00389b71");

		[FieldDescription("ADPCM")]
		public static readonly Guid KSDATAFORMAT_SUBTYPE_ADPCM = new Guid("00000002-0000-0010-8000-00aa00389b71");

		[FieldDescription("Dolby Digital Plus for HDMI")]
		public static readonly Guid KSDATAFORMAT_SUBTYPE_IEC61937_DOLBY_DIGITAL_PLUS = new Guid("0000000a-0cea-0010-8000-00aa00389b71");

		[FieldDescription("MSAudio1")]
		public static readonly Guid MEDIASUBTYPE_MSAUDIO1 = new Guid("00000160-0000-0010-8000-00aa00389b71");

		[FieldDescription("IMA ADPCM")]
		public static readonly Guid ImaAdpcm = new Guid("00000011-0000-0010-8000-00aa00389b71");

		[FieldDescription("WMSP2")]
		public static readonly Guid WMMEDIASUBTYPE_WMSP2 = new Guid("0000000b-0000-0010-8000-00aa00389b71");
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("7FEE9E9A-4A89-47a6-899C-B6A53A70FB67")]
	public interface IMFActivate : IMFAttributes
	{
		new void GetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][Out] IntPtr pValue);

		new void GetItemType([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pType);

		new void CompareItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void Compare([MarshalAs(UnmanagedType.Interface)] IMFAttributes pTheirs, int matchType, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void GetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int punValue);

		new void GetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out long punValue);

		new void GetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out double pfValue);

		new void GetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out Guid pguidValue);

		new void GetStringLength([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcchLength);

		new void GetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszValue, int cchBufSize, out int pcchLength);

		new void GetAllocatedString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [MarshalAs(UnmanagedType.LPWStr)] out string ppwszValue, out int pcchLength);

		new void GetBlobSize([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcbBlobSize);

		new void GetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPArray)] byte[] pBuf, int cbBufSize, out int pcbBlobSize);

		new void GetAllocatedBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out IntPtr ip, out int pcbSize);

		new void GetUnknown([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv);

		new void SetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value);

		new void DeleteItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey);

		new void DeleteAllItems();

		new void SetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, int unValue);

		new void SetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, long unValue);

		new void SetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, double fValue);

		new void SetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid guidValue);

		new void SetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPWStr)] string wszValue);

		new void SetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] pBuf, int cbBufSize);

		new void SetUnknown([MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.IUnknown)] object pUnknown);

		new void LockStore();

		new void UnlockStore();

		new void GetCount(out int pcItems);

		new void GetItemByIndex(int unIndex, out Guid pGuidKey, [In][Out] IntPtr pValue);

		new void CopyAllItems([In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pDest);

		void ActivateObject([In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.Interface)] out object ppv);

		void ShutdownObject();

		void DetachObject();
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("2CD2D921-C447-44A7-A13C-4ADABFC247E3")]
	public interface IMFAttributes
	{
		void GetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][Out] IntPtr pValue);

		void GetItemType([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pType);

		void CompareItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		void Compare([MarshalAs(UnmanagedType.Interface)] IMFAttributes pTheirs, int matchType, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		void GetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int punValue);

		void GetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out long punValue);

		void GetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out double pfValue);

		void GetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out Guid pguidValue);

		void GetStringLength([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcchLength);

		void GetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszValue, int cchBufSize, out int pcchLength);

		void GetAllocatedString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [MarshalAs(UnmanagedType.LPWStr)] out string ppwszValue, out int pcchLength);

		void GetBlobSize([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcbBlobSize);

		void GetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPArray)] byte[] pBuf, int cbBufSize, out int pcbBlobSize);

		void GetAllocatedBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out IntPtr ip, out int pcbSize);

		void GetUnknown([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv);

		void SetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr Value);

		void DeleteItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey);

		void DeleteAllItems();

		void SetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, int unValue);

		void SetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, long unValue);

		void SetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, double fValue);

		void SetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid guidValue);

		void SetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPWStr)] string wszValue);

		void SetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] pBuf, int cbBufSize);

		void SetUnknown([MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.IUnknown)] object pUnknown);

		void LockStore();

		void UnlockStore();

		void GetCount(out int pcItems);

		void GetItemByIndex(int unIndex, out Guid pGuidKey, [In][Out] IntPtr pValue);

		void CopyAllItems([In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pDest);
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("ad4c1b00-4bf7-422f-9175-756693d9130d")]
	public interface IMFByteStream
	{
		void GetCapabilities(ref int pdwCapabiities);

		void GetLength(ref long pqwLength);

		void SetLength(long qwLength);

		void GetCurrentPosition(ref long pqwPosition);

		void SetCurrentPosition(long qwPosition);

		void IsEndOfStream([MarshalAs(UnmanagedType.Bool)] ref bool pfEndOfStream);

		void Read(IntPtr pb, int cb, ref int pcbRead);

		void BeginRead(IntPtr pb, int cb, IntPtr pCallback, IntPtr punkState);

		void EndRead(IntPtr pResult, ref int pcbRead);

		void Write(IntPtr pb, int cb, ref int pcbWritten);

		void BeginWrite(IntPtr pb, int cb, IntPtr pCallback, IntPtr punkState);

		void EndWrite(IntPtr pResult, ref int pcbWritten);

		void Seek(int SeekOrigin, long llSeekOffset, int dwSeekFlags, ref long pqwCurrentPosition);

		void Flush();

		void Close();
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("5BC8A76B-869A-46A3-9B03-FA218A66AEBE")]
	public interface IMFCollection
	{
		void GetElementCount(out int pcElements);

		void GetElement([In] int dwElementIndex, [MarshalAs(UnmanagedType.IUnknown)] out object ppUnkElement);

		void AddElement([In][MarshalAs(UnmanagedType.IUnknown)] object pUnkElement);

		void RemoveElement([In] int dwElementIndex, [MarshalAs(UnmanagedType.IUnknown)] out object ppUnkElement);

		void InsertElementAt([In] int dwIndex, [In][MarshalAs(UnmanagedType.IUnknown)] object pUnknown);

		void RemoveAllElements();
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("045FA593-8799-42b8-BC8D-8968C6453507")]
	public interface IMFMediaBuffer
	{
		void Lock(out IntPtr ppbBuffer, out int pcbMaxLength, out int pcbCurrentLength);

		void Unlock();

		void GetCurrentLength(out int pcbCurrentLength);

		void SetCurrentLength(int cbCurrentLength);

		void GetMaxLength(out int pcbMaxLength);
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("DF598932-F10C-4E39-BBA2-C308F101DAA3")]
	public interface IMFMediaEvent : IMFAttributes
	{
		new void GetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][Out] IntPtr pValue);

		new void GetItemType([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pType);

		new void CompareItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void Compare([MarshalAs(UnmanagedType.Interface)] IMFAttributes pTheirs, int matchType, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void GetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int punValue);

		new void GetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out long punValue);

		new void GetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out double pfValue);

		new void GetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out Guid pguidValue);

		new void GetStringLength([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcchLength);

		new void GetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszValue, int cchBufSize, out int pcchLength);

		new void GetAllocatedString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [MarshalAs(UnmanagedType.LPWStr)] out string ppwszValue, out int pcchLength);

		new void GetBlobSize([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcbBlobSize);

		new void GetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPArray)] byte[] pBuf, int cbBufSize, out int pcbBlobSize);

		new void GetAllocatedBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out IntPtr ip, out int pcbSize);

		new void GetUnknown([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv);

		new void SetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value);

		new void DeleteItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey);

		new void DeleteAllItems();

		new void SetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, int unValue);

		new void SetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, long unValue);

		new void SetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, double fValue);

		new void SetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid guidValue);

		new void SetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPWStr)] string wszValue);

		new void SetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] pBuf, int cbBufSize);

		new void SetUnknown([MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.IUnknown)] object pUnknown);

		new void LockStore();

		new void UnlockStore();

		new void GetCount(out int pcItems);

		new void GetItemByIndex(int unIndex, out Guid pGuidKey, [In][Out] IntPtr pValue);

		new void CopyAllItems([In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pDest);

		void GetType(out MediaEventType pmet);

		void GetExtendedType(out Guid pguidExtendedType);

		void GetStatus([MarshalAs(UnmanagedType.Error)] out int phrStatus);

		void GetValue([Out] IntPtr pvValue);
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("44AE0FA8-EA31-4109-8D2E-4CAE4997C555")]
	public interface IMFMediaType : IMFAttributes
	{
		new void GetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][Out] IntPtr pValue);

		new void GetItemType([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pType);

		new void CompareItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void Compare([MarshalAs(UnmanagedType.Interface)] IMFAttributes pTheirs, int matchType, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void GetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int punValue);

		new void GetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out long punValue);

		new void GetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out double pfValue);

		new void GetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out Guid pguidValue);

		new void GetStringLength([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcchLength);

		new void GetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszValue, int cchBufSize, out int pcchLength);

		new void GetAllocatedString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [MarshalAs(UnmanagedType.LPWStr)] out string ppwszValue, out int pcchLength);

		new void GetBlobSize([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcbBlobSize);

		new void GetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPArray)] byte[] pBuf, int cbBufSize, out int pcbBlobSize);

		new void GetAllocatedBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out IntPtr ip, out int pcbSize);

		new void GetUnknown([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv);

		new void SetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value);

		new void DeleteItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey);

		new void DeleteAllItems();

		new void SetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, int unValue);

		new void SetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, long unValue);

		new void SetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, double fValue);

		new void SetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid guidValue);

		new void SetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPWStr)] string wszValue);

		new void SetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] pBuf, int cbBufSize);

		new void SetUnknown([MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.IUnknown)] object pUnknown);

		new void LockStore();

		new void UnlockStore();

		new void GetCount(out int pcItems);

		new void GetItemByIndex(int unIndex, out Guid pGuidKey, [In][Out] IntPtr pValue);

		new void CopyAllItems([In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pDest);

		void GetMajorType(out Guid pguidMajorType);

		void IsCompressedFormat([MarshalAs(UnmanagedType.Bool)] out bool pfCompressed);

		[PreserveSig]
		int IsEqual([In][MarshalAs(UnmanagedType.Interface)] IMFMediaType pIMediaType, ref int pdwFlags);

		void GetRepresentation([In] Guid guidRepresentation, ref IntPtr ppvRepresentation);

		void FreeRepresentation([In] Guid guidRepresentation, [In] IntPtr pvRepresentation);
	}
	[ComImport]
	[Guid("E7FE2E12-661C-40DA-92F9-4F002AB67627")]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	public interface IMFReadWriteClassFactory
	{
		void CreateInstanceFromURL([In][MarshalAs(UnmanagedType.LPStruct)] Guid clsid, [In][MarshalAs(UnmanagedType.LPWStr)] string pwszURL, [In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pAttributes, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.Interface)] out object ppvObject);

		void CreateInstanceFromObject([In][MarshalAs(UnmanagedType.LPStruct)] Guid clsid, [In][MarshalAs(UnmanagedType.IUnknown)] object punkObject, [In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pAttributes, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.Interface)] out object ppvObject);
	}
	[ComImport]
	[Guid("48e2ed0f-98c2-4a37-bed5-166312ddd83f")]
	public class MFReadWriteClassFactory
	{
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("c40a00f2-b93a-4d80-ae8c-5a1c634f58e4")]
	public interface IMFSample : IMFAttributes
	{
		new void GetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][Out] IntPtr pValue);

		new void GetItemType([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pType);

		new void CompareItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void Compare([MarshalAs(UnmanagedType.Interface)] IMFAttributes pTheirs, int matchType, [MarshalAs(UnmanagedType.Bool)] out bool pbResult);

		new void GetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int punValue);

		new void GetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out long punValue);

		new void GetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out double pfValue);

		new void GetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out Guid pguidValue);

		new void GetStringLength([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcchLength);

		new void GetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwszValue, int cchBufSize, out int pcchLength);

		new void GetAllocatedString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [MarshalAs(UnmanagedType.LPWStr)] out string ppwszValue, out int pcchLength);

		new void GetBlobSize([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out int pcbBlobSize);

		new void GetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [Out][MarshalAs(UnmanagedType.LPArray)] byte[] pBuf, int cbBufSize, out int pcbBlobSize);

		new void GetAllocatedBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, out IntPtr ip, out int pcbSize);

		new void GetUnknown([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, [MarshalAs(UnmanagedType.IUnknown)] out object ppv);

		new void SetItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, IntPtr value);

		new void DeleteItem([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey);

		new void DeleteAllItems();

		new void SetUINT32([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, int unValue);

		new void SetUINT64([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, long unValue);

		new void SetDouble([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, double fValue);

		new void SetGUID([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPStruct)] Guid guidValue);

		new void SetString([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPWStr)] string wszValue);

		new void SetBlob([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] pBuf, int cbBufSize);

		new void SetUnknown([MarshalAs(UnmanagedType.LPStruct)] Guid guidKey, [In][MarshalAs(UnmanagedType.IUnknown)] object pUnknown);

		new void LockStore();

		new void UnlockStore();

		new void GetCount(out int pcItems);

		new void GetItemByIndex(int unIndex, out Guid pGuidKey, [In][Out] IntPtr pValue);

		new void CopyAllItems([In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pDest);

		void GetSampleFlags(out int pdwSampleFlags);

		void SetSampleFlags(int dwSampleFlags);

		void GetSampleTime(out long phnsSampletime);

		void SetSampleTime(long hnsSampleTime);

		void GetSampleDuration(out long phnsSampleDuration);

		void SetSampleDuration(long hnsSampleDuration);

		void GetBufferCount(out int pdwBufferCount);

		void GetBufferByIndex(int dwIndex, out IMFMediaBuffer ppBuffer);

		void ConvertToContiguousBuffer(out IMFMediaBuffer ppBuffer);

		void AddBuffer(IMFMediaBuffer pBuffer);

		void RemoveBufferByIndex(int dwIndex);

		void RemoveAllBuffers();

		void GetTotalLength(out int pcbTotalLength);

		void CopyToBuffer(IMFMediaBuffer pBuffer);
	}
	[ComImport]
	[Guid("3137f1cd-fe5e-4805-a5d8-fb477448cb3d")]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	public interface IMFSinkWriter
	{
		void AddStream([In][MarshalAs(UnmanagedType.Interface)] IMFMediaType pTargetMediaType, out int pdwStreamIndex);

		void SetInputMediaType([In] int dwStreamIndex, [In][MarshalAs(UnmanagedType.Interface)] IMFMediaType pInputMediaType, [In][MarshalAs(UnmanagedType.Interface)] IMFAttributes pEncodingParameters);

		void BeginWriting();

		void WriteSample([In] int dwStreamIndex, [In][MarshalAs(UnmanagedType.Interface)] IMFSample pSample);

		void SendStreamTick([In] int dwStreamIndex, [In] long llTimestamp);

		void PlaceMarker([In] int dwStreamIndex, [In] IntPtr pvContext);

		void NotifyEndOfSegment([In] int dwStreamIndex);

		void Flush([In] int dwStreamIndex);

		void DoFinalize();

		void GetServiceForStream([In] int dwStreamIndex, [In] ref Guid guidService, [In] ref Guid riid, out IntPtr ppvObject);

		void GetStatistics([In] int dwStreamIndex, [In][Out] MF_SINK_WRITER_STATISTICS pStats);
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("70ae66f2-c809-4e4f-8915-bdcb406b7993")]
	public interface IMFSourceReader
	{
		void GetStreamSelection([In] int dwStreamIndex, [MarshalAs(UnmanagedType.Bool)] out bool pSelected);

		void SetStreamSelection([In] int dwStreamIndex, [In][MarshalAs(UnmanagedType.Bool)] bool pSelected);

		void GetNativeMediaType([In] int dwStreamIndex, [In] int dwMediaTypeIndex, out IMFMediaType ppMediaType);

		void GetCurrentMediaType([In] int dwStreamIndex, out IMFMediaType ppMediaType);

		void SetCurrentMediaType([In] int dwStreamIndex, IntPtr pdwReserved, [In] IMFMediaType pMediaType);

		void SetCurrentPosition([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidTimeFormat, [In] IntPtr varPosition);

		void ReadSample([In] int dwStreamIndex, [In] int dwControlFlags, out int pdwActualStreamIndex, out MF_SOURCE_READER_FLAG pdwStreamFlags, out ulong pllTimestamp, out IMFSample ppSample);

		void Flush([In] int dwStreamIndex);

		void GetServiceForStream([In] int dwStreamIndex, [In][MarshalAs(UnmanagedType.LPStruct)] Guid guidService, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, out IntPtr ppvObject);

		[PreserveSig]
		int GetPresentationAttribute([In] int dwStreamIndex, [In][MarshalAs(UnmanagedType.LPStruct)] Guid guidAttribute, [Out] IntPtr pvarAttribute);
	}
	[Flags]
	public enum MF_SOURCE_READER_FLAG
	{
		None = 0,
		MF_SOURCE_READERF_ERROR = 1,
		MF_SOURCE_READERF_ENDOFSTREAM = 2,
		MF_SOURCE_READERF_NEWSTREAM = 4,
		MF_SOURCE_READERF_NATIVEMEDIATYPECHANGED = 0x10,
		MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED = 0x20,
		MF_SOURCE_READERF_STREAMTICK = 0x100,
		MF_SOURCE_READERF_ALLEFFECTSREMOVED = 0x200
	}
	[ComImport]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("bf94c121-5b05-4e6f-8000-ba598961414d")]
	public interface IMFTransform
	{
		void GetStreamLimits(out int pdwInputMinimum, out int pdwInputMaximum, out int pdwOutputMinimum, out int pdwOutputMaximum);

		void GetStreamCount(out int pcInputStreams, out int pcOutputStreams);

		void GetStreamIds([In] int dwInputIdArraySize, [In][Out] IntPtr pdwInputIDs, [In] int dwOutputIdArraySize, [In][Out] IntPtr pdwOutputIDs);

		void GetInputStreamInfo([In] int dwInputStreamId, out MFT_INPUT_STREAM_INFO pStreamInfo);

		void GetOutputStreamInfo([In] int dwOutputStreamId, out MFT_OUTPUT_STREAM_INFO pStreamInfo);

		void GetAttributes(out IMFAttributes pAttributes);

		void GetInputStreamAttributes([In] int dwInputStreamId, out IMFAttributes pAttributes);

		void GetOutputStreamAttributes([In] int dwOutputStreamId, out IMFAttributes pAttributes);

		void DeleteInputStream([In] int dwOutputStreamId);

		void AddInputStreams([In] int cStreams, [In] IntPtr adwStreamIDs);

		void GetInputAvailableType([In] int dwInputStreamId, [In] int dwTypeIndex, out IMFMediaType ppType);

		void GetOutputAvailableType([In] int dwOutputStreamId, [In] int dwTypeIndex, out IMFMediaType ppType);

		void SetInputType([In] int dwInputStreamId, [In] IMFMediaType pType, [In] _MFT_SET_TYPE_FLAGS dwFlags);

		void SetOutputType([In] int dwOutputStreamId, [In] IMFMediaType pType, [In] _MFT_SET_TYPE_FLAGS dwFlags);

		void GetInputCurrentType([In] int dwInputStreamId, out IMFMediaType ppType);

		void GetOutputCurrentType([In] int dwOutputStreamId, out IMFMediaType ppType);

		void GetInputStatus([In] int dwInputStreamId, out _MFT_INPUT_STATUS_FLAGS pdwFlags);

		void GetOutputStatus([In] int dwInputStreamId, out _MFT_OUTPUT_STATUS_FLAGS pdwFlags);

		void SetOutputBounds([In] long hnsLowerBound, [In] long hnsUpperBound);

		void ProcessEvent([In] int dwInputStreamId, [In] IMFMediaEvent pEvent);

		void ProcessMessage([In] MFT_MESSAGE_TYPE eMessage, [In] IntPtr ulParam);

		void ProcessInput([In] int dwInputStreamId, [In] IMFSample pSample, int dwFlags);

		[PreserveSig]
		int ProcessOutput([In] _MFT_PROCESS_OUTPUT_FLAGS dwFlags, [In] int cOutputBufferCount, [In][Out][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] MFT_OUTPUT_DATA_BUFFER[] pOutputSamples, out _MFT_PROCESS_OUTPUT_STATUS pdwStatus);
	}
	public enum MediaEventType
	{
		MEUnknown = 0,
		MEError = 1,
		MEExtendedType = 2,
		MENonFatalError = 3,
		MESessionUnknown = 100,
		MESessionTopologySet = 101,
		MESessionTopologiesCleared = 102,
		MESessionStarted = 103,
		MESessionPaused = 104,
		MESessionStopped = 105,
		MESessionClosed = 106,
		MESessionEnded = 107,
		MESessionRateChanged = 108,
		MESessionScrubSampleComplete = 109,
		MESessionCapabilitiesChanged = 110,
		MESessionTopologyStatus = 111,
		MESessionNotifyPresentationTime = 112,
		MENewPresentation = 113,
		MELicenseAcquisitionStart = 114,
		MELicenseAcquisitionCompleted = 115,
		MEIndividualizationStart = 116,
		MEIndividualizationCompleted = 117,
		MEEnablerProgress = 118,
		MEEnablerCompleted = 119,
		MEPolicyError = 120,
		MEPolicyReport = 121,
		MEBufferingStarted = 122,
		MEBufferingStopped = 123,
		MEConnectStart = 124,
		MEConnectEnd = 125,
		MEReconnectStart = 126,
		MEReconnectEnd = 127,
		MERendererEvent = 128,
		MESessionStreamSinkFormatChanged = 129,
		MESourceUnknown = 200,
		MESourceStarted = 201,
		MEStreamStarted = 202,
		MESourceSeeked = 203,
		MEStreamSeeked = 204,
		MENewStream = 205,
		MEUpdatedStream = 206,
		MESourceStopped = 207,
		MEStreamStopped = 208,
		MESourcePaused = 209,
		MEStreamPaused = 210,
		MEEndOfPresentation = 211,
		MEEndOfStream = 212,
		MEMediaSample = 213,
		MEStreamTick = 214,
		MEStreamThinMode = 215,
		MEStreamFormatChanged = 216,
		MESourceRateChanged = 217,
		MEEndOfPresentationSegment = 218,
		MESourceCharacteristicsChanged = 219,
		MESourceRateChangeRequested = 220,
		MESourceMetadataChanged = 221,
		MESequencerSourceTopologyUpdated = 222,
		MESinkUnknown = 300,
		MEStreamSinkStarted = 301,
		MEStreamSinkStopped = 302,
		MEStreamSinkPaused = 303,
		MEStreamSinkRateChanged = 304,
		MEStreamSinkRequestSample = 305,
		MEStreamSinkMarker = 306,
		MEStreamSinkPrerolled = 307,
		MEStreamSinkScrubSampleComplete = 308,
		MEStreamSinkFormatChanged = 309,
		MEStreamSinkDeviceChanged = 310,
		MEQualityNotify = 311,
		MESinkInvalidated = 312,
		MEAudioSessionNameChanged = 313,
		MEAudioSessionVolumeChanged = 314,
		MEAudioSessionDeviceRemoved = 315,
		MEAudioSessionServerShutdown = 316,
		MEAudioSessionGroupingParamChanged = 317,
		MEAudioSessionIconChanged = 318,
		MEAudioSessionFormatChanged = 319,
		MEAudioSessionDisconnected = 320,
		MEAudioSessionExclusiveModeOverride = 321,
		METrustUnknown = 400,
		MEPolicyChanged = 401,
		MEContentProtectionMessage = 402,
		MEPolicySet = 403,
		MEWMDRMLicenseBackupCompleted = 500,
		MEWMDRMLicenseBackupProgress = 501,
		MEWMDRMLicenseRestoreCompleted = 502,
		MEWMDRMLicenseRestoreProgress = 503,
		MEWMDRMLicenseAcquisitionCompleted = 506,
		MEWMDRMIndividualizationCompleted = 508,
		MEWMDRMIndividualizationProgress = 513,
		MEWMDRMProximityCompleted = 514,
		MEWMDRMLicenseStoreCleaned = 515,
		MEWMDRMRevocationDownloadCompleted = 516,
		METransformUnknown = 600,
		METransformNeedInput = 601,
		METransformHaveOutput = 602,
		METransformDrainComplete = 603,
		METransformMarker = 604
	}
	public static class MediaFoundationAttributes
	{
		public static readonly Guid MF_TRANSFORM_ASYNC = new Guid("f81a699a-649a-497d-8c73-29f8fed6ad7a");

		public static readonly Guid MF_TRANSFORM_ASYNC_UNLOCK = new Guid("e5666d6b-3422-4eb6-a421-da7db1f8e207");

		[FieldDescription("Transform Flags")]
		public static readonly Guid MF_TRANSFORM_FLAGS_Attribute = new Guid("9359bb7e-6275-46c4-a025-1c01e45f1a86");

		[FieldDescription("Transform Category")]
		public static readonly Guid MF_TRANSFORM_CATEGORY_Attribute = new Guid("ceabba49-506d-4757-a6ff-66c184987e4e");

		[FieldDescription("Class identifier")]
		public static readonly Guid MFT_TRANSFORM_CLSID_Attribute = new Guid("6821c42b-65a4-4e82-99bc-9a88205ecd0c");

		[FieldDescription("Container type")]
		public static readonly Guid MF_TRANSCODE_CONTAINERTYPE = new Guid(353366591, 19132, 18315, 172, 79, 225, 145, 111, 186, 28, 202);

		[FieldDescription("Input Types")]
		public static readonly Guid MFT_INPUT_TYPES_Attributes = new Guid("4276c9b1-759d-4bf3-9cd0-0d723d138f96");

		[FieldDescription("Output Types")]
		public static readonly Guid MFT_OUTPUT_TYPES_Attributes = new Guid("8eae8cf3-a44f-4306-ba5c-bf5dda242818");

		public static readonly Guid MFT_ENUM_HARDWARE_URL_Attribute = new Guid("2fb866ac-b078-4942-ab6c-003d05cda674");

		[FieldDescription("Name")]
		public static readonly Guid MFT_FRIENDLY_NAME_Attribute = new Guid("314ffbae-5b41-4c95-9c19-4e7d586face3");

		public static readonly Guid MFT_CONNECTED_STREAM_ATTRIBUTE = new Guid("71eeb820-a59f-4de2-bcec-38db1dd611a4");

		public static readonly Guid MFT_CONNECTED_TO_HW_STREAM = new Guid("34e6e728-06d6-4491-a553-4795650db912");

		[FieldDescription("Preferred Output Format")]
		public static readonly Guid MFT_PREFERRED_OUTPUTTYPE_Attribute = new Guid("7e700499-396a-49ee-b1b4-f628021e8c9d");

		public static readonly Guid MFT_PROCESS_LOCAL_Attribute = new Guid("543186e4-4649-4e65-b588-4aa352aff379");

		public static readonly Guid MFT_PREFERRED_ENCODER_PROFILE = new Guid("53004909-1ef5-46d7-a18e-5a75f8b5905f");

		public static readonly Guid MFT_HW_TIMESTAMP_WITH_QPC_Attribute = new Guid("8d030fb8-cc43-4258-a22e-9210bef89be4");

		public static readonly Guid MFT_FIELDOFUSE_UNLOCK_Attribute = new Guid("8ec2e9fd-9148-410d-831e-702439461a8e");

		public static readonly Guid MFT_CODEC_MERIT_Attribute = new Guid("88a7cb15-7b07-4a34-9128-e64c6703c4d3");

		public static readonly Guid MFT_ENUM_TRANSCODE_ONLY_ATTRIBUTE = new Guid("111ea8cd-b62a-4bdb-89f6-67ffcdc2458b");

		[FieldDescription("PMP Host Context")]
		public static readonly Guid MF_PD_PMPHOST_CONTEXT = new Guid("6c990d31-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("App Context")]
		public static readonly Guid MF_PD_APP_CONTEXT = new Guid("6c990d32-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Duration")]
		public static readonly Guid MF_PD_DURATION = new Guid("6c990d33-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Total File Size")]
		public static readonly Guid MF_PD_TOTAL_FILE_SIZE = new Guid("6c990d34-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Audio encoding bitrate")]
		public static readonly Guid MF_PD_AUDIO_ENCODING_BITRATE = new Guid("6c990d35-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Video Encoding Bitrate")]
		public static readonly Guid MF_PD_VIDEO_ENCODING_BITRATE = new Guid("6c990d36-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("MIME Type")]
		public static readonly Guid MF_PD_MIME_TYPE = new Guid("6c990d37-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Last Modified Time")]
		public static readonly Guid MF_PD_LAST_MODIFIED_TIME = new Guid("6c990d38-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Element ID")]
		public static readonly Guid MF_PD_PLAYBACK_ELEMENT_ID = new Guid("6c990d39-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Preferred Language")]
		public static readonly Guid MF_PD_PREFERRED_LANGUAGE = new Guid("6c990d3a-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Playback boundary time")]
		public static readonly Guid MF_PD_PLAYBACK_BOUNDARY_TIME = new Guid("6c990d3b-bb8e-477a-8598-0d5d96fcd88a");

		[FieldDescription("Audio is variable bitrate")]
		public static readonly Guid MF_PD_AUDIO_ISVARIABLEBITRATE = new Guid("33026ee0-e387-4582-ae0a-34a2ad3baa18");

		[FieldDescription("Major Media Type")]
		public static readonly Guid MF_MT_MAJOR_TYPE = new Guid("48eba18e-f8c9-4687-bf11-0a74c9f96a8f");

		[FieldDescription("Media Subtype")]
		public static readonly Guid MF_MT_SUBTYPE = new Guid("f7e34c9a-42e8-4714-b74b-cb29d72c35e5");

		[FieldDescription("Audio block alignment")]
		public static readonly Guid MF_MT_AUDIO_BLOCK_ALIGNMENT = new Guid("322de230-9eeb-43bd-ab7a-ff412251541d");

		[FieldDescription("Audio average bytes per second")]
		public static readonly Guid MF_MT_AUDIO_AVG_BYTES_PER_SECOND = new Guid("1aab75c8-cfef-451c-ab95-ac034b8e1731");

		[FieldDescription("Audio number of channels")]
		public static readonly Guid MF_MT_AUDIO_NUM_CHANNELS = new Guid("37e48bf5-645e-4c5b-89de-ada9e29b696a");

		[FieldDescription("Audio samples per second")]
		public static readonly Guid MF_MT_AUDIO_SAMPLES_PER_SECOND = new Guid("5faeeae7-0290-4c31-9e8a-c534f68d9dba");

		[FieldDescription("Audio bits per sample")]
		public static readonly Guid MF_MT_AUDIO_BITS_PER_SAMPLE = new Guid("f2deb57f-40fa-4764-aa33-ed4f2d1ff669");

		[FieldDescription("Enable Hardware Transforms")]
		public static readonly Guid MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS = new Guid("a634a91c-822b-41b9-a494-4de4643612b0");

		[FieldDescription("Disable Sink Writer Throttling")]
		public static readonly Guid MF_SINK_WRITER_DISABLE_THROTTLING = new Guid("08b845d8-2b74-4afe-9d53-be16d2d5ae4f");

		[FieldDescription("User data")]
		public static readonly Guid MF_MT_USER_DATA = new Guid("b6bc765f-4c3b-40a4-bd51-2535b66fe09d");

		[FieldDescription("All samples independent")]
		public static readonly Guid MF_MT_ALL_SAMPLES_INDEPENDENT = new Guid("c9173739-5e56-461c-b713-46fb995cb95f");

		[FieldDescription("Fixed size samples")]
		public static readonly Guid MF_MT_FIXED_SIZE_SAMPLES = new Guid("b8ebefaf-b718-4e04-b0a9-116775e3321b");

		[FieldDescription("DirectShow Format Guid")]
		public static readonly Guid MF_MT_AM_FORMAT_TYPE = new Guid("73d1072d-1870-4174-a063-29ff4ff6c11e");

		[FieldDescription("Preferred legacy format structure")]
		public static readonly Guid MF_MT_AUDIO_PREFER_WAVEFORMATEX = new Guid("a901aaba-e037-458a-bdf6-545be2074042");

		[FieldDescription("Is Compressed")]
		public static readonly Guid MF_MT_COMPRESSED = new Guid("3afd0cee-18f2-4ba5-a110-8bea502e1f92");

		[FieldDescription("Average bitrate")]
		public static readonly Guid MF_MT_AVG_BITRATE = new Guid("20332624-fb0d-4d9e-bd0d-cbf6786c102e");

		[FieldDescription("AAC payload type")]
		public static readonly Guid MF_MT_AAC_PAYLOAD_TYPE = new Guid("bfbabe79-7434-4d1c-94f0-72a3b9e17188");

		[FieldDescription("AAC Audio Profile Level Indication")]
		public static readonly Guid MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION = new Guid("7632f0e6-9538-4d61-acda-ea29c8c14456");
	}
	public static class MediaFoundationErrors
	{
		public const int MF_E_PLATFORM_NOT_INITIALIZED = -1072875856;

		public const int MF_E_BUFFERTOOSMALL = -1072875855;

		public const int MF_E_INVALIDREQUEST = -1072875854;

		public const int MF_E_INVALIDSTREAMNUMBER = -1072875853;

		public const int MF_E_INVALIDMEDIATYPE = -1072875852;

		public const int MF_E_NOTACCEPTING = -1072875851;

		public const int MF_E_NOT_INITIALIZED = -1072875850;

		public const int MF_E_UNSUPPORTED_REPRESENTATION = -1072875849;

		public const int MF_E_NO_MORE_TYPES = -1072875847;

		public const int MF_E_UNSUPPORTED_SERVICE = -1072875846;

		public const int MF_E_UNEXPECTED = -1072875845;

		public const int MF_E_INVALIDNAME = -1072875844;

		public const int MF_E_INVALIDTYPE = -1072875843;

		public const int MF_E_INVALID_FILE_FORMAT = -1072875842;

		public const int MF_E_INVALIDINDEX = -1072875841;

		public const int MF_E_INVALID_TIMESTAMP = -1072875840;

		public const int MF_E_UNSUPPORTED_SCHEME = -1072875837;

		public const int MF_E_UNSUPPORTED_BYTESTREAM_TYPE = -1072875836;

		public const int MF_E_UNSUPPORTED_TIME_FORMAT = -1072875835;

		public const int MF_E_NO_SAMPLE_TIMESTAMP = -1072875832;

		public const int MF_E_NO_SAMPLE_DURATION = -1072875831;

		public const int MF_E_INVALID_STREAM_DATA = -1072875829;

		public const int MF_E_RT_UNAVAILABLE = -1072875825;

		public const int MF_E_UNSUPPORTED_RATE = -1072875824;

		public const int MF_E_THINNING_UNSUPPORTED = -1072875823;

		public const int MF_E_REVERSE_UNSUPPORTED = -1072875822;

		public const int MF_E_UNSUPPORTED_RATE_TRANSITION = -1072875821;

		public const int MF_E_RATE_CHANGE_PREEMPTED = -1072875820;

		public const int MF_E_NOT_FOUND = -1072875819;

		public const int MF_E_NOT_AVAILABLE = -1072875818;

		public const int MF_E_NO_CLOCK = -1072875817;

		public const int MF_S_MULTIPLE_BEGIN = 866008;

		public const int MF_E_MULTIPLE_BEGIN = -1072875815;

		public const int MF_E_MULTIPLE_SUBSCRIBERS = -1072875814;

		public const int MF_E_TIMER_ORPHANED = -1072875813;

		public const int MF_E_STATE_TRANSITION_PENDING = -1072875812;

		public const int MF_E_UNSUPPORTED_STATE_TRANSITION = -1072875811;

		public const int MF_E_UNRECOVERABLE_ERROR_OCCURRED = -1072875810;

		public const int MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS = -1072875809;

		public const int MF_E_SAMPLE_NOT_WRITABLE = -1072875808;

		public const int MF_E_INVALID_KEY = -1072875806;

		public const int MF_E_BAD_STARTUP_VERSION = -1072875805;

		public const int MF_E_UNSUPPORTED_CAPTION = -1072875804;

		public const int MF_E_INVALID_POSITION = -1072875803;

		public const int MF_E_ATTRIBUTENOTFOUND = -1072875802;

		public const int MF_E_PROPERTY_TYPE_NOT_ALLOWED = -1072875801;

		public const int MF_E_PROPERTY_TYPE_NOT_SUPPORTED = -1072875800;

		public const int MF_E_PROPERTY_EMPTY = -1072875799;

		public const int MF_E_PROPERTY_NOT_EMPTY = -1072875798;

		public const int MF_E_PROPERTY_VECTOR_NOT_ALLOWED = -1072875797;

		public const int MF_E_PROPERTY_VECTOR_REQUIRED = -1072875796;

		public const int MF_E_OPERATION_CANCELLED = -1072875795;

		public const int MF_E_BYTESTREAM_NOT_SEEKABLE = -1072875794;

		public const int MF_E_DISABLED_IN_SAFEMODE = -1072875793;

		public const int MF_E_CANNOT_PARSE_BYTESTREAM = -1072875792;

		public const int MF_E_SOURCERESOLVER_MUTUALLY_EXCLUSIVE_FLAGS = -1072875791;

		public const int MF_E_MEDIAPROC_WRONGSTATE = -1072875790;

		public const int MF_E_RT_THROUGHPUT_NOT_AVAILABLE = -1072875789;

		public const int MF_E_RT_TOO_MANY_CLASSES = -1072875788;

		public const int MF_E_RT_WOULDBLOCK = -1072875787;

		public const int MF_E_NO_BITPUMP = -1072875786;

		public const int MF_E_RT_OUTOFMEMORY = -1072875785;

		public const int MF_E_RT_WORKQUEUE_CLASS_NOT_SPECIFIED = -1072875784;

		public const int MF_E_INSUFFICIENT_BUFFER = -1072860816;

		public const int MF_E_CANNOT_CREATE_SINK = -1072875782;

		public const int MF_E_BYTESTREAM_UNKNOWN_LENGTH = -1072875781;

		public const int MF_E_SESSION_PAUSEWHILESTOPPED = -1072875780;

		public const int MF_S_ACTIVATE_REPLACED = 866045;

		public const int MF_E_FORMAT_CHANGE_NOT_SUPPORTED = -1072875778;

		public const int MF_E_INVALID_WORKQUEUE = -1072875777;

		public const int MF_E_DRM_UNSUPPORTED = -1072875776;

		public const int MF_E_UNAUTHORIZED = -1072875775;

		public const int MF_E_OUT_OF_RANGE = -1072875774;

		public const int MF_E_INVALID_CODEC_MERIT = -1072875773;

		public const int MF_E_HW_MFT_FAILED_START_STREAMING = -1072875772;

		public const int MF_S_ASF_PARSEINPROGRESS = 1074608792;

		public const int MF_E_ASF_PARSINGINCOMPLETE = -1072874856;

		public const int MF_E_ASF_MISSINGDATA = -1072874855;

		public const int MF_E_ASF_INVALIDDATA = -1072874854;

		public const int MF_E_ASF_OPAQUEPACKET = -1072874853;

		public const int MF_E_ASF_NOINDEX = -1072874852;

		public const int MF_E_ASF_OUTOFRANGE = -1072874851;

		public const int MF_E_ASF_INDEXNOTLOADED = -1072874850;

		public const int MF_E_ASF_TOO_MANY_PAYLOADS = -1072874849;

		public const int MF_E_ASF_UNSUPPORTED_STREAM_TYPE = -1072874848;

		public const int MF_E_ASF_DROPPED_PACKET = -1072874847;

		public const int MF_E_NO_EVENTS_AVAILABLE = -1072873856;

		public const int MF_E_INVALID_STATE_TRANSITION = -1072873854;

		public const int MF_E_END_OF_STREAM = -1072873852;

		public const int MF_E_SHUTDOWN = -1072873851;

		public const int MF_E_MP3_NOTFOUND = -1072873850;

		public const int MF_E_MP3_OUTOFDATA = -1072873849;

		public const int MF_E_MP3_NOTMP3 = -1072873848;

		public const int MF_E_MP3_NOTSUPPORTED = -1072873847;

		public const int MF_E_NO_DURATION = -1072873846;

		public const int MF_E_INVALID_FORMAT = -1072873844;

		public const int MF_E_PROPERTY_NOT_FOUND = -1072873843;

		public const int MF_E_PROPERTY_READ_ONLY = -1072873842;

		public const int MF_E_PROPERTY_NOT_ALLOWED = -1072873841;

		public const int MF_E_MEDIA_SOURCE_NOT_STARTED = -1072873839;

		public const int MF_E_UNSUPPORTED_FORMAT = -1072873832;

		public const int MF_E_MP3_BAD_CRC = -1072873831;

		public const int MF_E_NOT_PROTECTED = -1072873830;

		public const int MF_E_MEDIA_SOURCE_WRONGSTATE = -1072873829;

		public const int MF_E_MEDIA_SOURCE_NO_STREAMS_SELECTED = -1072873828;

		public const int MF_E_CANNOT_FIND_KEYFRAME_SAMPLE = -1072873827;

		public const int MF_E_NETWORK_RESOURCE_FAILURE = -1072872856;

		public const int MF_E_NET_WRITE = -1072872855;

		public const int MF_E_NET_READ = -1072872854;

		public const int MF_E_NET_REQUIRE_NETWORK = -1072872853;

		public const int MF_E_NET_REQUIRE_ASYNC = -1072872852;

		public const int MF_E_NET_BWLEVEL_NOT_SUPPORTED = -1072872851;

		public const int MF_E_NET_STREAMGROUPS_NOT_SUPPORTED = -1072872850;

		public const int MF_E_NET_MANUALSS_NOT_SUPPORTED = -1072872849;

		public const int MF_E_NET_INVALID_PRESENTATION_DESCRIPTOR = -1072872848;

		public const int MF_E_NET_CACHESTREAM_NOT_FOUND = -1072872847;

		public const int MF_I_MANUAL_PROXY = 1074610802;

		public const int MF_E_NET_REQUIRE_INPUT = -1072872844;

		public const int MF_E_NET_REDIRECT = -1072872843;

		public const int MF_E_NET_REDIRECT_TO_PROXY = -1072872842;

		public const int MF_E_NET_TOO_MANY_REDIRECTS = -1072872841;

		public const int MF_E_NET_TIMEOUT = -1072872840;

		public const int MF_E_NET_CLIENT_CLOSE = -1072872839;

		public const int MF_E_NET_BAD_CONTROL_DATA = -1072872838;

		public const int MF_E_NET_INCOMPATIBLE_SERVER = -1072872837;

		public const int MF_E_NET_UNSAFE_URL = -1072872836;

		public const int MF_E_NET_CACHE_NO_DATA = -1072872835;

		public const int MF_E_NET_EOL = -1072872834;

		public const int MF_E_NET_BAD_REQUEST = -1072872833;

		public const int MF_E_NET_INTERNAL_SERVER_ERROR = -1072872832;

		public const int MF_E_NET_SESSION_NOT_FOUND = -1072872831;

		public const int MF_E_NET_NOCONNECTION = -1072872830;

		public const int MF_E_NET_CONNECTION_FAILURE = -1072872829;

		public const int MF_E_NET_INCOMPATIBLE_PUSHSERVER = -1072872828;

		public const int MF_E_NET_SERVER_ACCESSDENIED = -1072872827;

		public const int MF_E_NET_PROXY_ACCESSDENIED = -1072872826;

		public const int MF_E_NET_CANNOTCONNECT = -1072872825;

		public const int MF_E_NET_INVALID_PUSH_TEMPLATE = -1072872824;

		public const int MF_E_NET_INVALID_PUSH_PUBLISHING_POINT = -1072872823;

		public const int MF_E_NET_BUSY = -1072872822;

		public const int MF_E_NET_RESOURCE_GONE = -1072872821;

		public const int MF_E_NET_ERROR_FROM_PROXY = -1072872820;

		public const int MF_E_NET_PROXY_TIMEOUT = -1072872819;

		public const int MF_E_NET_SERVER_UNAVAILABLE = -1072872818;

		public const int MF_E_NET_TOO_MUCH_DATA = -1072872817;

		public const int MF_E_NET_SESSION_INVALID = -1072872816;

		public const int MF_E_OFFLINE_MODE = -1072872815;

		public const int MF_E_NET_UDP_BLOCKED = -1072872814;

		public const int MF_E_NET_UNSUPPORTED_CONFIGURATION = -1072872813;

		public const int MF_E_NET_PROTOCOL_DISABLED = -1072872812;

		public const int MF_E_ALREADY_INITIALIZED = -1072871856;

		public const int MF_E_BANDWIDTH_OVERRUN = -1072871855;

		public const int MF_E_LATE_SAMPLE = -1072871854;

		public const int MF_E_FLUSH_NEEDED = -1072871853;

		public const int MF_E_INVALID_PROFILE = -1072871852;

		public const int MF_E_INDEX_NOT_COMMITTED = -1072871851;

		public const int MF_E_NO_INDEX = -1072871850;

		public const int MF_E_CANNOT_INDEX_IN_PLACE = -1072871849;

		public const int MF_E_MISSING_ASF_LEAKYBUCKET = -1072871848;

		public const int MF_E_INVALID_ASF_STREAMID = -1072871847;

		public const int MF_E_STREAMSINK_REMOVED = -1072870856;

		public const int MF_E_STREAMSINKS_OUT_OF_SYNC = -1072870854;

		public const int MF_E_STREAMSINKS_FIXED = -1072870853;

		public const int MF_E_STREAMSINK_EXISTS = -1072870852;

		public const int MF_E_SAMPLEALLOCATOR_CANCELED = -1072870851;

		public const int MF_E_SAMPLEALLOCATOR_EMPTY = -1072870850;

		public const int MF_E_SINK_ALREADYSTOPPED = -1072870849;

		public const int MF_E_ASF_FILESINK_BITRATE_UNKNOWN = -1072870848;

		public const int MF_E_SINK_NO_STREAMS = -1072870847;

		public const int MF_S_SINK_NOT_FINALIZED = 870978;

		public const int MF_E_METADATA_TOO_LONG = -1072870845;

		public const int MF_E_SINK_NO_SAMPLES_PROCESSED = -1072870844;

		public const int MF_E_VIDEO_REN_NO_PROCAMP_HW = -1072869856;

		public const int MF_E_VIDEO_REN_NO_DEINTERLACE_HW = -1072869855;

		public const int MF_E_VIDEO_REN_COPYPROT_FAILED = -1072869854;

		public const int MF_E_VIDEO_REN_SURFACE_NOT_SHARED = -1072869853;

		public const int MF_E_VIDEO_DEVICE_LOCKED = -1072869852;

		public const int MF_E_NEW_VIDEO_DEVICE = -1072869851;

		public const int MF_E_NO_VIDEO_SAMPLE_AVAILABLE = -1072869850;

		public const int MF_E_NO_AUDIO_PLAYBACK_DEVICE = -1072869756;

		public const int MF_E_AUDIO_PLAYBACK_DEVICE_IN_USE = -1072869755;

		public const int MF_E_AUDIO_PLAYBACK_DEVICE_INVALIDATED = -1072869754;

		public const int MF_E_AUDIO_SERVICE_NOT_RUNNING = -1072869753;

		public const int MF_E_TOPO_INVALID_OPTIONAL_NODE = -1072868850;

		public const int MF_E_TOPO_CANNOT_FIND_DECRYPTOR = -1072868847;

		public const int MF_E_TOPO_CODEC_NOT_FOUND = -1072868846;

		public const int MF_E_TOPO_CANNOT_CONNECT = -1072868845;

		public const int MF_E_TOPO_UNSUPPORTED = -1072868844;

		public const int MF_E_TOPO_INVALID_TIME_ATTRIBUTES = -1072868843;

		public const int MF_E_TOPO_LOOPS_IN_TOPOLOGY = -1072868842;

		public const int MF_E_TOPO_MISSING_PRESENTATION_DESCRIPTOR = -1072868841;

		public const int MF_E_TOPO_MISSING_STREAM_DESCRIPTOR = -1072868840;

		public const int MF_E_TOPO_STREAM_DESCRIPTOR_NOT_SELECTED = -1072868839;

		public const int MF_E_TOPO_MISSING_SOURCE = -1072868838;

		public const int MF_E_TOPO_SINK_ACTIVATES_UNSUPPORTED = -1072868837;

		public const int MF_E_SEQUENCER_UNKNOWN_SEGMENT_ID = -1072864852;

		public const int MF_S_SEQUENCER_CONTEXT_CANCELED = 876973;

		public const int MF_E_NO_SOURCE_IN_CACHE = -1072864850;

		public const int MF_S_SEQUENCER_SEGMENT_AT_END_OF_STREAM = 876975;

		public const int MF_E_TRANSFORM_TYPE_NOT_SET = -1072861856;

		public const int MF_E_TRANSFORM_STREAM_CHANGE = -1072861855;

		public const int MF_E_TRANSFORM_INPUT_REMAINING = -1072861854;

		public const int MF_E_TRANSFORM_PROFILE_MISSING = -1072861853;

		public const int MF_E_TRANSFORM_PROFILE_INVALID_OR_CORRUPT = -1072861852;

		public const int MF_E_TRANSFORM_PROFILE_TRUNCATED = -1072861851;

		public const int MF_E_TRANSFORM_PROPERTY_PID_NOT_RECOGNIZED = -1072861850;

		public const int MF_E_TRANSFORM_PROPERTY_VARIANT_TYPE_WRONG = -1072861849;

		public const int MF_E_TRANSFORM_PROPERTY_NOT_WRITEABLE = -1072861848;

		public const int MF_E_TRANSFORM_PROPERTY_ARRAY_VALUE_WRONG_NUM_DIM = -1072861847;

		public const int MF_E_TRANSFORM_PROPERTY_VALUE_SIZE_WRONG = -1072861846;

		public const int MF_E_TRANSFORM_PROPERTY_VALUE_OUT_OF_RANGE = -1072861845;

		public const int MF_E_TRANSFORM_PROPERTY_VALUE_INCOMPATIBLE = -1072861844;

		public const int MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_OUTPUT_MEDIATYPE = -1072861843;

		public const int MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_INPUT_MEDIATYPE = -1072861842;

		public const int MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_MEDIATYPE_COMBINATION = -1072861841;

		public const int MF_E_TRANSFORM_CONFLICTS_WITH_OTHER_CURRENTLY_ENABLED_FEATURES = -1072861840;

		public const int MF_E_TRANSFORM_NEED_MORE_INPUT = -1072861838;

		public const int MF_E_TRANSFORM_NOT_POSSIBLE_FOR_CURRENT_SPKR_CONFIG = -1072861837;

		public const int MF_E_TRANSFORM_CANNOT_CHANGE_MEDIATYPE_WHILE_PROCESSING = -1072861836;

		public const int MF_S_TRANSFORM_DO_NOT_PROPAGATE_EVENT = 879989;

		public const int MF_E_UNSUPPORTED_D3D_TYPE = -1072861834;

		public const int MF_E_TRANSFORM_ASYNC_LOCKED = -1072861833;

		public const int MF_E_TRANSFORM_CANNOT_INITIALIZE_ACM_DRIVER = -1072861832;

		public const int MF_E_LICENSE_INCORRECT_RIGHTS = -1072860856;

		public const int MF_E_LICENSE_OUTOFDATE = -1072860855;

		public const int MF_E_LICENSE_REQUIRED = -1072860854;

		public const int MF_E_DRM_HARDWARE_INCONSISTENT = -1072860853;

		public const int MF_E_NO_CONTENT_PROTECTION_MANAGER = -1072860852;

		public const int MF_E_LICENSE_RESTORE_NO_RIGHTS = -1072860851;

		public const int MF_E_BACKUP_RESTRICTED_LICENSE = -1072860850;

		public const int MF_E_LICENSE_RESTORE_NEEDS_INDIVIDUALIZATION = -1072860849;

		public const int MF_S_PROTECTION_NOT_REQUIRED = 880976;

		public const int MF_E_COMPONENT_REVOKED = -1072860847;

		public const int MF_E_TRUST_DISABLED = -1072860846;

		public const int MF_E_WMDRMOTA_NO_ACTION = -1072860845;

		public const int MF_E_WMDRMOTA_ACTION_ALREADY_SET = -1072860844;

		public const int MF_E_WMDRMOTA_DRM_HEADER_NOT_AVAILABLE = -1072860843;

		public const int MF_E_WMDRMOTA_DRM_ENCRYPTION_SCHEME_NOT_SUPPORTED = -1072860842;

		public const int MF_E_WMDRMOTA_ACTION_MISMATCH = -1072860841;

		public const int MF_E_WMDRMOTA_INVALID_POLICY = -1072860840;

		public const int MF_E_POLICY_UNSUPPORTED = -1072860839;

		public const int MF_E_OPL_NOT_SUPPORTED = -1072860838;

		public const int MF_E_TOPOLOGY_VERIFICATION_FAILED = -1072860837;

		public const int MF_E_SIGNATURE_VERIFICATION_FAILED = -1072860836;

		public const int MF_E_DEBUGGING_NOT_ALLOWED = -1072860835;

		public const int MF_E_CODE_EXPIRED = -1072860834;

		public const int MF_E_GRL_VERSION_TOO_LOW = -1072860833;

		public const int MF_E_GRL_RENEWAL_NOT_FOUND = -1072860832;

		public const int MF_E_GRL_EXTENSIBLE_ENTRY_NOT_FOUND = -1072860831;

		public const int MF_E_KERNEL_UNTRUSTED = -1072860830;

		public const int MF_E_PEAUTH_UNTRUSTED = -1072860829;

		public const int MF_E_NON_PE_PROCESS = -1072860827;

		public const int MF_E_REBOOT_REQUIRED = -1072860825;

		public const int MF_S_WAIT_FOR_POLICY_SET = 881000;

		public const int MF_S_VIDEO_DISABLED_WITH_UNKNOWN_SOFTWARE_OUTPUT = 881001;

		public const int MF_E_GRL_INVALID_FORMAT = -1072860822;

		public const int MF_E_GRL_UNRECOGNIZED_FORMAT = -1072860821;

		public const int MF_E_ALL_PROCESS_RESTART_REQUIRED = -1072860820;

		public const int MF_E_PROCESS_RESTART_REQUIRED = -1072860819;

		public const int MF_E_USERMODE_UNTRUSTED = -1072860818;

		public const int MF_E_PEAUTH_SESSION_NOT_STARTED = -1072860817;

		public const int MF_E_PEAUTH_PUBLICKEY_REVOKED = -1072860815;

		public const int MF_E_GRL_ABSENT = -1072860814;

		public const int MF_S_PE_TRUSTED = 881011;

		public const int MF_E_PE_UNTRUSTED = -1072860812;

		public const int MF_E_PEAUTH_NOT_STARTED = -1072860811;

		public const int MF_E_INCOMPATIBLE_SAMPLE_PROTECTION = -1072860810;

		public const int MF_E_PE_SESSIONS_MAXED = -1072860809;

		public const int MF_E_HIGH_SECURITY_LEVEL_CONTENT_NOT_ALLOWED = -1072860808;

		public const int MF_E_TEST_SIGNED_COMPONENTS_NOT_ALLOWED = -1072860807;

		public const int MF_E_ITA_UNSUPPORTED_ACTION = -1072860806;

		public const int MF_E_ITA_ERROR_PARSING_SAP_PARAMETERS = -1072860805;

		public const int MF_E_POLICY_MGR_ACTION_OUTOFBOUNDS = -1072860804;

		public const int MF_E_BAD_OPL_STRUCTURE_FORMAT = -1072860803;

		public const int MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_PROTECTION_GUID = -1072860802;

		public const int MF_E_NO_PMP_HOST = -1072860801;

		public const int MF_E_ITA_OPL_DATA_NOT_INITIALIZED = -1072860800;

		public const int MF_E_ITA_UNRECOGNIZED_ANALOG_VIDEO_OUTPUT = -1072860799;

		public const int MF_E_ITA_UNRECOGNIZED_DIGITAL_VIDEO_OUTPUT = -1072860798;

		public const int MF_E_CLOCK_INVALID_CONTINUITY_KEY = -1072849856;

		public const int MF_E_CLOCK_NO_TIME_SOURCE = -1072849855;

		public const int MF_E_CLOCK_STATE_ALREADY_SET = -1072849854;

		public const int MF_E_CLOCK_NOT_SIMPLE = -1072849853;

		public const int MF_S_CLOCK_STOPPED = 891972;

		public const int MF_E_NO_MORE_DROP_MODES = -1072848856;

		public const int MF_E_NO_MORE_QUALITY_LEVELS = -1072848855;

		public const int MF_E_DROPTIME_NOT_SUPPORTED = -1072848854;

		public const int MF_E_QUALITYKNOB_WAIT_LONGER = -1072848853;

		public const int MF_E_QM_INVALIDSTATE = -1072848852;

		public const int MF_E_TRANSCODE_NO_CONTAINERTYPE = -1072847856;

		public const int MF_E_TRANSCODE_PROFILE_NO_MATCHING_STREAMS = -1072847855;

		public const int MF_E_TRANSCODE_NO_MATCHING_ENCODER = -1072847854;

		public const int MF_E_ALLOCATOR_NOT_INITIALIZED = -1072846856;

		public const int MF_E_ALLOCATOR_NOT_COMMITED = -1072846855;

		public const int MF_E_ALLOCATOR_ALREADY_COMMITED = -1072846854;

		public const int MF_E_STREAM_ERROR = -1072846853;

		public const int MF_E_INVALID_STREAM_STATE = -1072846852;

		public const int MF_E_HW_STREAM_NOT_CONNECTED = -1072846851;
	}
	public static class MediaFoundationApi
	{
		private static bool initialized;

		public static void Startup()
		{
			if (!initialized)
			{
				int num = 2;
				OperatingSystem oSVersion = Environment.OSVersion;
				if (oSVersion.Version.Major == 6 && oSVersion.Version.Minor == 0)
				{
					num = 1;
				}
				MediaFoundationInterop.MFStartup((num << 16) | 0x70);
				initialized = true;
			}
		}

		public static IEnumerable<IMFActivate> EnumerateTransforms(Guid category)
		{
			MediaFoundationInterop.MFTEnumEx(category, _MFT_ENUM_FLAG.MFT_ENUM_FLAG_ALL, null, null, out var interfacesPointer, out var pcMFTActivate);
			IMFActivate[] array = new IMFActivate[pcMFTActivate];
			for (int i = 0; i < pcMFTActivate; i++)
			{
				IntPtr pUnk = Marshal.ReadIntPtr(new IntPtr(interfacesPointer.ToInt64() + i * Marshal.SizeOf(interfacesPointer)));
				array[i] = (IMFActivate)Marshal.GetObjectForIUnknown(pUnk);
			}
			IMFActivate[] array2 = array;
			for (int j = 0; j < array2.Length; j++)
			{
				yield return array2[j];
			}
			Marshal.FreeCoTaskMem(interfacesPointer);
		}

		public static void Shutdown()
		{
			if (initialized)
			{
				MediaFoundationInterop.MFShutdown();
				initialized = false;
			}
		}

		public static IMFMediaType CreateMediaType()
		{
			MediaFoundationInterop.MFCreateMediaType(out var ppMFType);
			return ppMFType;
		}

		public static IMFMediaType CreateMediaTypeFromWaveFormat(WaveFormat waveFormat)
		{
			IMFMediaType iMFMediaType = CreateMediaType();
			try
			{
				MediaFoundationInterop.MFInitMediaTypeFromWaveFormatEx(iMFMediaType, waveFormat, Marshal.SizeOf<WaveFormat>(waveFormat));
				return iMFMediaType;
			}
			catch (Exception)
			{
				Marshal.ReleaseComObject(iMFMediaType);
				throw;
			}
		}

		public static IMFMediaBuffer CreateMemoryBuffer(int bufferSize)
		{
			MediaFoundationInterop.MFCreateMemoryBuffer(bufferSize, out var ppBuffer);
			return ppBuffer;
		}

		public static IMFSample CreateSample()
		{
			MediaFoundationInterop.MFCreateSample(out var ppIMFSample);
			return ppIMFSample;
		}

		public static IMFAttributes CreateAttributes(int initialSize)
		{
			MediaFoundationInterop.MFCreateAttributes(out var ppMFAttributes, initialSize);
			return ppMFAttributes;
		}

		public static IMFByteStream CreateByteStream(object stream)
		{
			if (stream is IStream)
			{
				MediaFoundationInterop.MFCreateMFByteStreamOnStream(stream as IStream, out var ppByteStream);
				return ppByteStream;
			}
			throw new ArgumentException("Stream must be IStream in desktop apps");
		}

		public static IMFSourceReader CreateSourceReaderFromByteStream(IMFByteStream byteStream)
		{
			MediaFoundationInterop.MFCreateSourceReaderFromByteStream(byteStream, null, out var ppSourceReader);
			return ppSourceReader;
		}
	}
	public static class MediaFoundationInterop
	{
		public const int MF_SOURCE_READER_ALL_STREAMS = -2;

		public const int MF_SOURCE_READER_FIRST_AUDIO_STREAM = -3;

		public const int MF_SOURCE_READER_FIRST_VIDEO_STREAM = -4;

		public const int MF_SOURCE_READER_MEDIASOURCE = -1;

		public const int MF_SDK_VERSION = 2;

		public const int MF_API_VERSION = 112;

		public const int MF_VERSION = 131184;

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFStartup(int version, int dwFlags = 0);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFShutdown();

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		internal static extern void MFCreateMediaType(out IMFMediaType ppMFType);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		internal static extern void MFInitMediaTypeFromWaveFormatEx([In] IMFMediaType pMFType, [In] WaveFormat pWaveFormat, [In] int cbBufSize);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		internal static extern void MFCreateWaveFormatExFromMFMediaType(IMFMediaType pMFType, ref IntPtr ppWF, ref int pcbSize, int flags = 0);

		[DllImport("mfreadwrite.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFCreateSourceReaderFromURL([In][MarshalAs(UnmanagedType.LPWStr)] string pwszURL, [In] IMFAttributes pAttributes, [MarshalAs(UnmanagedType.Interface)] out IMFSourceReader ppSourceReader);

		[DllImport("mfreadwrite.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFCreateSourceReaderFromByteStream([In] IMFByteStream pByteStream, [In] IMFAttributes pAttributes, [MarshalAs(UnmanagedType.Interface)] out IMFSourceReader ppSourceReader);

		[DllImport("mfreadwrite.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFCreateSinkWriterFromURL([In][MarshalAs(UnmanagedType.LPWStr)] string pwszOutputURL, [In] IMFByteStream pByteStream, [In] IMFAttributes pAttributes, out IMFSinkWriter ppSinkWriter);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFCreateMFByteStreamOnStreamEx([MarshalAs(UnmanagedType.IUnknown)] object punkStream, out IMFByteStream ppByteStream);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFCreateMFByteStreamOnStream([In] IStream punkStream, out IMFByteStream ppByteStream);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFTEnumEx([In] Guid guidCategory, [In] _MFT_ENUM_FLAG flags, [In] MFT_REGISTER_TYPE_INFO pInputType, [In] MFT_REGISTER_TYPE_INFO pOutputType, out IntPtr pppMFTActivate, out int pcMFTActivate);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		internal static extern void MFCreateSample(out IMFSample ppIMFSample);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		internal static extern void MFCreateMemoryBuffer(int cbMaxLength, out IMFMediaBuffer ppBuffer);

		[DllImport("mfplat.dll", ExactSpelling = true, PreserveSig = false)]
		internal static extern void MFCreateAttributes([MarshalAs(UnmanagedType.Interface)] out IMFAttributes ppMFAttributes, [In] int cInitialSize);

		[DllImport("mf.dll", ExactSpelling = true, PreserveSig = false)]
		public static extern void MFTranscodeGetAudioOutputAvailableTypes([In][MarshalAs(UnmanagedType.LPStruct)] Guid guidSubType, [In] _MFT_ENUM_FLAG dwMFTFlags, [In] IMFAttributes pCodecConfig, [MarshalAs(UnmanagedType.Interface)] out IMFCollection ppAvailableTypes);
	}
	public abstract class MediaFoundationTransform : IWaveProvider, IDisposable
	{
		protected readonly IWaveProvider sourceProvider;

		protected readonly WaveFormat outputWaveFormat;

		private readonly byte[] sourceBuffer;

		private byte[] outputBuffer;

		private int outputBufferOffset;

		private int outputBufferCount;

		private IMFTransform transform;

		private bool disposed;

		private long inputPosition;

		private long outputPosition;

		private bool initializedForStreaming;

		public WaveFormat WaveFormat => outputWaveFormat;

		public MediaFoundationTransform(IWaveProvider sourceProvider, WaveFormat outputFormat)
		{
			outputWaveFormat = outputFormat;
			this.sourceProvider = sourceProvider;
			sourceBuffer = new byte[sourceProvider.WaveFormat.AverageBytesPerSecond];
			outputBuffer = new byte[outputWaveFormat.AverageBytesPerSecond + outputWaveFormat.BlockAlign];
		}

		private void InitializeTransformForStreaming()
		{
			transform.ProcessMessage(MFT_MESSAGE_TYPE.MFT_MESSAGE_COMMAND_FLUSH, IntPtr.Zero);
			transform.ProcessMessage(MFT_MESSAGE_TYPE.MFT_MESSAGE_NOTIFY_BEGIN_STREAMING, IntPtr.Zero);
			transform.ProcessMessage(MFT_MESSAGE_TYPE.MFT_MESSAGE_NOTIFY_START_OF_STREAM, IntPtr.Zero);
			initializedForStreaming = true;
		}

		protected abstract IMFTransform CreateTransform();

		protected virtual void Dispose(bool disposing)
		{
			if (transform != null)
			{
				Marshal.ReleaseComObject(transform);
			}
		}

		public void Dispose()
		{
			if (!disposed)
			{
				disposed = true;
				Dispose(disposing: true);
				GC.SuppressFinalize(this);
			}
		}

		~MediaFoundationTransform()
		{
			Dispose(disposing: false);
		}

		public int Read(byte[] buffer, int offset, int count)
		{
			if (transform == null)
			{
				transform = CreateTransform();
				InitializeTransformForStreaming();
			}
			int i = 0;
			if (outputBufferCount > 0)
			{
				i += ReadFromOutputBuffer(buffer, offset, count - i);
			}
			for (; i < count; i += ReadFromOutputBuffer(buffer, offset + i, count - i))
			{
				IMFSample iMFSample = ReadFromSource();
				if (iMFSample == null)
				{
					EndStreamAndDrain();
					i += ReadFromOutputBuffer(buffer, offset + i, count - i);
					ClearOutputBuffer();
					break;
				}
				if (!initializedForStreaming)
				{
					InitializeTransformForStreaming();
				}
				transform.ProcessInput(0, iMFSample, 0);
				Marshal.ReleaseComObject(iMFSample);
				ReadFromTransform();
			}
			return i;
		}

		private void EndStreamAndDrain()
		{
			transform.ProcessMessage(MFT_MESSAGE_TYPE.MFT_MESSAGE_NOTIFY_END_OF_STREAM, IntPtr.Zero);
			transform.ProcessMessage(MFT_MESSAGE_TYPE.MFT_MESSAGE_COMMAND_DRAIN, IntPtr.Zero);
			int num;
			do
			{
				num = ReadFromTransform();
			}
			while (num > 0);
			inputPosition = 0L;
			outputPosition = 0L;
			transform.ProcessMessage(MFT_MESSAGE_TYPE.MFT_MESSAGE_NOTIFY_END_STREAMING, IntPtr.Zero);
			initializedForStreaming = false;
		}

		private void ClearOutputBuffer()
		{
			outputBufferCount = 0;
			outputBufferOffset = 0;
		}

		private int ReadFromTransform()
		{
			MFT_OUTPUT_DATA_BUFFER[] array = new MFT_OUTPUT_DATA_BUFFER[1];
			IMFSample iMFSample = MediaFoundationApi.CreateSample();
			IMFMediaBuffer iMFMediaBuffer = MediaFoundationApi.CreateMemoryBuffer(outputBuffer.Length);
			iMFSample.AddBuffer(iMFMediaBuffer);
			iMFSample.SetSampleTime(outputPosition);
			array[0].pSample = iMFSample;
			_MFT_PROCESS_OUTPUT_STATUS pdwStatus;
			int num = transform.ProcessOutput(_MFT_PROCESS_OUTPUT_FLAGS.None, 1, array, out pdwStatus);
			switch (num)
			{
			case -1072861838:
				Marshal.ReleaseComObject(iMFMediaBuffer);
				Marshal.ReleaseComObject(iMFSample);
				return 0;
			default:
				Marshal.ThrowExceptionForHR(num);
				break;
			case 0:
				break;
			}
			array[0].pSample.ConvertToContiguousBuffer(out var ppBuffer);
			ppBuffer.Lock(out var ppbBuffer, out var _, out var pcbCurrentLength);
			outputBuffer = BufferHelpers.Ensure(outputBuffer, pcbCurrentLength);
			Marshal.Copy(ppbBuffer, outputBuffer, 0, pcbCurrentLength);
			outputBufferOffset = 0;
			outputBufferCount = pcbCurrentLength;
			ppBuffer.Unlock();
			outputPosition += BytesToNsPosition(outputBufferCount, WaveFormat);
			Marshal.ReleaseComObject(iMFMediaBuffer);
			iMFSample.RemoveAllBuffers();
			Marshal.ReleaseComObject(iMFSample);
			Marshal.ReleaseComObject(ppBuffer);
			return pcbCurrentLength;
		}

		private static long BytesToNsPosition(int bytes, WaveFormat waveFormat)
		{
			return 10000000L * (long)bytes / waveFormat.AverageBytesPerSecond;
		}

		private IMFSample ReadFromSource()
		{
			int num = sourceProvider.Read(sourceBuffer, 0, sourceBuffer.Length);
			if (num == 0)
			{
				return null;
			}
			IMFMediaBuffer iMFMediaBuffer = MediaFoundationApi.CreateMemoryBuffer(num);
			iMFMediaBuffer.Lock(out var ppbBuffer, out var _, out var _);
			Marshal.Copy(sourceBuffer, 0, ppbBuffer, num);
			iMFMediaBuffer.Unlock();
			iMFMediaBuffer.SetCurrentLength(num);
			IMFSample iMFSample = MediaFoundationApi.CreateSample();
			iMFSample.AddBuffer(iMFMediaBuffer);
			iMFSample.SetSampleTime(inputPosition);
			long num2 = BytesToNsPosition(num, sourceProvider.WaveFormat);
			iMFSample.SetSampleDuration(num2);
			inputPosition += num2;
			Marshal.ReleaseComObject(iMFMediaBuffer);
			return iMFSample;
		}

		private int ReadFromOutputBuffer(byte[] buffer, int offset, int needed)
		{
			int num = Math.Min(needed, outputBufferCount);
			Array.Copy(outputBuffer, outputBufferOffset, buffer, offset, num);
			outputBufferOffset += num;
			outputBufferCount -= num;
			if (outputBufferCount == 0)
			{
				outputBufferOffset = 0;
			}
			return num;
		}

		public void Reposition()
		{
			if (initializedForStreaming)
			{
				EndStreamAndDrain();
				ClearOutputBuffer();
				InitializeTransformForStreaming();
			}
		}
	}
	public static class MediaFoundationTransformCategories
	{
		[FieldDescription("Video Decoder")]
		public static readonly Guid VideoDecoder = new Guid("{d6c02d4b-6833-45b4-971a-05a4b04bab91}");

		[FieldDescription("Video Encoder")]
		public static readonly Guid VideoEncoder = new Guid("{f79eac7d-e545-4387-bdee-d647d7bde42a}");

		[FieldDescription("Video Effect")]
		public static readonly Guid VideoEffect = new Guid("{12e17c21-532c-4a6e-8a1c-40825a736397}");

		[FieldDescription("Multiplexer")]
		public static readonly Guid Multiplexer = new Guid("{059c561e-05ae-4b61-b69d-55b61ee54a7b}");

		[FieldDescription("Demultiplexer")]
		public static readonly Guid Demultiplexer = new Guid("{a8700a7a-939b-44c5-99d7-76226b23b3f1}");

		[FieldDescription("Audio Decoder")]
		public static readonly Guid AudioDecoder = new Guid("{9ea73fb4-ef7a-4559-8d5d-719d8f0426c7}");

		[FieldDescription("Audio Encoder")]
		public static readonly Guid AudioEncoder = new Guid("{91c64bd0-f91e-4d8c-9276-db248279d975}");

		[FieldDescription("Audio Effect")]
		public static readonly Guid AudioEffect = new Guid("{11064c48-3648-4ed0-932e-05ce8ac811b7}");

		[FieldDescription("Video Processor")]
		public static readonly Guid VideoProcessor = new Guid("{302EA3FC-AA5F-47f9-9F7A-C2188BB16302}");

		[FieldDescription("Other")]
		public static readonly Guid Other = new Guid("{90175d57-b7ea-4901-aeb3-933a8747756f}");
	}
	public class MediaType
	{
		private readonly IMFMediaType mediaType;

		public int SampleRate
		{
			get
			{
				return GetUInt32(MediaFoundationAttributes.MF_MT_AUDIO_SAMPLES_PER_SECOND);
			}
			set
			{
				mediaType.SetUINT32(MediaFoundationAttributes.MF_MT_AUDIO_SAMPLES_PER_SECOND, value);
			}
		}

		public int ChannelCount
		{
			get
			{
				return GetUInt32(MediaFoundationAttributes.MF_MT_AUDIO_NUM_CHANNELS);
			}
			set
			{
				mediaType.SetUINT32(MediaFoundationAttributes.MF_MT_AUDIO_NUM_CHANNELS, value);
			}
		}

		public int BitsPerSample
		{
			get
			{
				return GetUInt32(MediaFoundationAttributes.MF_MT_AUDIO_BITS_PER_SAMPLE);
			}
			set
			{
				mediaType.SetUINT32(MediaFoundationAttributes.MF_MT_AUDIO_BITS_PER_SAMPLE, value);
			}
		}

		public int AverageBytesPerSecond => GetUInt32(MediaFoundationAttributes.MF_MT_AUDIO_AVG_BYTES_PER_SECOND);

		public Guid SubType
		{
			get
			{
				return GetGuid(MediaFoundationAttributes.MF_MT_SUBTYPE);
			}
			set
			{
				mediaType.SetGUID(MediaFoundationAttributes.MF_MT_SUBTYPE, value);
			}
		}

		public Guid MajorType
		{
			get
			{
				return GetGuid(MediaFoundationAttributes.MF_MT_MAJOR_TYPE);
			}
			set
			{
				mediaType.SetGUID(MediaFoundationAttributes.MF_MT_MAJOR_TYPE, value);
			}
		}

		public IMFMediaType MediaFoundationObject => mediaType;

		public MediaType(IMFMediaType mediaType)
		{
			this.mediaType = mediaType;
		}

		public MediaType()
		{
			mediaType = MediaFoundationApi.CreateMediaType();
		}

		public MediaType(WaveFormat waveFormat)
		{
			mediaType = MediaFoundationApi.CreateMediaTypeFromWaveFormat(waveFormat);
		}

		private int GetUInt32(Guid key)
		{
			mediaType.GetUINT32(key, out var punValue);
			return punValue;
		}

		private Guid GetGuid(Guid key)
		{
			mediaType.GetGUID(key, out var pguidValue);
			return pguidValue;
		}

		public int TryGetUInt32(Guid key, int defaultValue = -1)
		{
			int punValue = defaultValue;
			try
			{
				mediaType.GetUINT32(key, out punValue);
			}
			catch (COMException ex)
			{
				if (HResult.GetHResult(ex) != -1072875802)
				{
					if (HResult.GetHResult(ex) == -1072875843)
					{
						throw new ArgumentException("Not a UINT32 parameter");
					}
					throw;
				}
			}
			return punValue;
		}

		public void SetUInt32(Guid key, int value)
		{
			mediaType.SetUINT32(key, value);
		}
	}
	public static class MediaTypes
	{
		public static readonly Guid MFMediaType_Default = new Guid("81A412E6-8103-4B06-857F-1862781024AC");

		[FieldDescription("Audio")]
		public static readonly Guid MFMediaType_Audio = new Guid("73647561-0000-0010-8000-00aa00389b71");

		[FieldDescription("Video")]
		public static readonly Guid MFMediaType_Video = new Guid("73646976-0000-0010-8000-00aa00389b71");

		[FieldDescription("Protected Media")]
		public static readonly Guid MFMediaType_Protected = new Guid("7b4b6fe6-9d04-4494-be14-7e0bd076c8e4");

		[FieldDescription("SAMI captions")]
		public static readonly Guid MFMediaType_SAMI = new Guid("e69669a0-3dcd-40cb-9e2e-3708387c0616");

		[FieldDescription("Script stream")]
		public static readonly Guid MFMediaType_Script = new Guid("72178c22-e45b-11d5-bc2a-00b0d0f3f4ab");

		[FieldDescription("Still image stream")]
		public static readonly Guid MFMediaType_Image = new Guid("72178c23-e45b-11d5-bc2a-00b0d0f3f4ab");

		[FieldDescription("HTML stream")]
		public static readonly Guid MFMediaType_HTML = new Guid("72178c24-e45b-11d5-bc2a-00b0d0f3f4ab");

		[FieldDescription("Binary stream")]
		public static readonly Guid MFMediaType_Binary = new Guid("72178c25-e45b-11d5-bc2a-00b0d0f3f4ab");

		[FieldDescription("File transfer")]
		public static readonly Guid MFMediaType_FileTransfer = new Guid("72178c26-e45b-11d5-bc2a-00b0d0f3f4ab");
	}
	public struct MFT_INPUT_STREAM_INFO
	{
		public long hnsMaxLatency;

		public _MFT_INPUT_STREAM_INFO_FLAGS dwFlags;

		public int cbSize;

		public int cbMaxLookahead;

		public int cbAlignment;
	}
	public enum MFT_MESSAGE_TYPE
	{
		MFT_MESSAGE_COMMAND_FLUSH = 0,
		MFT_MESSAGE_COMMAND_DRAIN = 1,
		MFT_MESSAGE_SET_D3D_MANAGER = 2,
		MFT_MESSAGE_DROP_SAMPLES = 3,
		MFT_MESSAGE_COMMAND_TICK = 4,
		MFT_MESSAGE_NOTIFY_BEGIN_STREAMING = 268435456,
		MFT_MESSAGE_NOTIFY_END_STREAMING = 268435457,
		MFT_MESSAGE_NOTIFY_END_OF_STREAM = 268435458,
		MFT_MESSAGE_NOTIFY_START_OF_STREAM = 268435459,
		MFT_MESSAGE_COMMAND_MARKER = 536870912
	}
	public struct MFT_OUTPUT_DATA_BUFFER
	{
		public int dwStreamID;

		public IMFSample pSample;

		public _MFT_OUTPUT_DATA_BUFFER_FLAGS dwStatus;

		public IMFCollection pEvents;
	}
	public struct MFT_OUTPUT_STREAM_INFO
	{
		public _MFT_OUTPUT_STREAM_INFO_FLAGS dwFlags;

		public int cbSize;

		public int cbAlignment;
	}
	[StructLayout(LayoutKind.Sequential)]
	public class MFT_REGISTER_TYPE_INFO
	{
		public Guid guidMajorType;

		public Guid guidSubtype;
	}
	[StructLayout(LayoutKind.Sequential)]
	public class MF_SINK_WRITER_STATISTICS
	{
		public int cb;

		public long llLastTimestampReceived;

		public long llLastTimestampEncoded;

		public long llLastTimestampProcessed;

		public long llLastStreamTickReceived;

		public long llLastSinkSampleRequest;

		public long qwNumSamplesReceived;

		public long qwNumSamplesEncoded;

		public long qwNumSamplesProcessed;

		public long qwNumStreamTicksReceived;

		public int dwByteCountQueued;

		public long qwByteCountProcessed;

		public int dwNumOutstandingSinkSampleRequests;

		public int dwAverageSampleRateReceived;

		public int dwAverageSampleRateEncoded;

		public int dwAverageSampleRateProcessed;
	}
	public static class TranscodeContainerTypes
	{
		public static readonly Guid MFTranscodeContainerType_ASF = new Guid(1125085038u, 46783, 20417, 160, 189, 158, 228, 110, 238, 42, 251);

		public static readonly Guid MFTranscodeContainerType_MPEG4 = new Guid(3698118749u, 47568, 16623, 189, 53, 250, 98, 44, 26, 178, 138);

		public static readonly Guid MFTranscodeContainerType_MP3 = new Guid(3828922642u, 33777, 19942, 158, 58, 159, 251, 198, 221, 36, 209);

		public static readonly Guid MFTranscodeContainerType_3GP = new Guid(885326183, 17522, 20276, 158, 160, 196, 159, 186, 207, 3, 125);

		public static readonly Guid MFTranscodeContainerType_AC3 = new Guid(1837994435u, 35985, 20177, 135, 66, 140, 52, 125, 91, 68, 208);

		public static readonly Guid MFTranscodeContainerType_ADTS = new Guid(321901181, 3842, 17374, 163, 1, 56, 251, 187, 179, 131, 78);

		public static readonly Guid MFTranscodeContainerType_MPEG2 = new Guid(3217218553u, 31668, 20367, 175, 222, 225, 18, 196, 75, 168, 130);

		public static readonly Guid MFTranscodeContainerType_FMPEG4 = new Guid(2611508977u, 16799, 19319, 161, 224, 53, 149, 157, 157, 64, 4);

		public static readonly Guid MFTranscodeContainerType_WAVE = new Guid(1690518844, 3878, 18241, 190, 99, 135, 189, 248, 187, 147, 91);

		public static readonly Guid MFTranscodeContainerType_AVI = new Guid(2128603311, 16431, 19830, 163, 60, 97, 159, 209, 87, 208, 241);

		public static readonly Guid MFTranscodeContainerType_AMR = new Guid(39672531, 25114, 18267, 150, 77, 102, 177, 200, 36, 240, 121);
	}
	[Flags]
	public enum _MFT_ENUM_FLAG
	{
		None = 0,
		MFT_ENUM_FLAG_SYNCMFT = 1,
		MFT_ENUM_FLAG_ASYNCMFT = 2,
		MFT_ENUM_FLAG_HARDWARE = 4,
		MFT_ENUM_FLAG_FIELDOFUSE = 8,
		MFT_ENUM_FLAG_LOCALMFT = 0x10,
		MFT_ENUM_FLAG_TRANSCODE_ONLY = 0x20,
		MFT_ENUM_FLAG_SORTANDFILTER = 0x40,
		MFT_ENUM_FLAG_ALL = 0x3F
	}
	[Flags]
	public enum _MFT_INPUT_STATUS_FLAGS
	{
		None = 0,
		MFT_INPUT_STATUS_ACCEPT_DATA = 1
	}
	[Flags]
	public enum _MFT_INPUT_STREAM_INFO_FLAGS
	{
		None = 0,
		MFT_INPUT_STREAM_WHOLE_SAMPLES = 1,
		MFT_INPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER = 2,
		MFT_INPUT_STREAM_FIXED_SAMPLE_SIZE = 4,
		MFT_INPUT_STREAM_HOLDS_BUFFERS = 8,
		MFT_INPUT_STREAM_DOES_NOT_ADDREF = 0x100,
		MFT_INPUT_STREAM_REMOVABLE = 0x200,
		MFT_INPUT_STREAM_OPTIONAL = 0x400,
		MFT_INPUT_STREAM_PROCESSES_IN_PLACE = 0x800
	}
	[Flags]
	public enum _MFT_OUTPUT_DATA_BUFFER_FLAGS
	{
		None = 0,
		MFT_OUTPUT_DATA_BUFFER_INCOMPLETE = 0x1000000,
		MFT_OUTPUT_DATA_BUFFER_FORMAT_CHANGE = 0x100,
		MFT_OUTPUT_DATA_BUFFER_STREAM_END = 0x200,
		MFT_OUTPUT_DATA_BUFFER_NO_SAMPLE = 0x300
	}
	[Flags]
	public enum _MFT_OUTPUT_STATUS_FLAGS
	{
		None = 0,
		MFT_OUTPUT_STATUS_SAMPLE_READY = 1
	}
	[Flags]
	public enum _MFT_OUTPUT_STREAM_INFO_FLAGS
	{
		None = 0,
		MFT_OUTPUT_STREAM_WHOLE_SAMPLES = 1,
		MFT_OUTPUT_STREAM_SINGLE_SAMPLE_PER_BUFFER = 2,
		MFT_OUTPUT_STREAM_FIXED_SAMPLE_SIZE = 4,
		MFT_OUTPUT_STREAM_DISCARDABLE = 8,
		MFT_OUTPUT_STREAM_OPTIONAL = 0x10,
		MFT_OUTPUT_STREAM_PROVIDES_SAMPLES = 0x100,
		MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES = 0x200,
		MFT_OUTPUT_STREAM_LAZY_READ = 0x400,
		MFT_OUTPUT_STREAM_REMOVABLE = 0x800
	}
	[Flags]
	public enum _MFT_PROCESS_OUTPUT_FLAGS
	{
		None = 0,
		MFT_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER = 1,
		MFT_PROCESS_OUTPUT_REGENERATE_LAST_OUTPUT = 2
	}
	[Flags]
	public enum _MFT_PROCESS_OUTPUT_STATUS
	{
		None = 0,
		MFT_PROCESS_OUTPUT_STATUS_NEW_STREAMS = 0x100
	}
	[Flags]
	public enum _MFT_SET_TYPE_FLAGS
	{
		None = 0,
		MFT_SET_TYPE_TEST_ONLY = 1
	}
}
namespace NAudio.Dmo
{
	public class DmoDescriptor
	{
		public string Name { get; private set; }

		public Guid Clsid { get; private set; }

		public DmoDescriptor(string name, Guid clsid)
		{
			Name = name;
			Clsid = clsid;
		}
	}
	public class DmoEnumerator
	{
		public static IEnumerable<DmoDescriptor> GetAudioEffectNames()
		{
			return GetDmos(DmoGuids.DMOCATEGORY_AUDIO_EFFECT);
		}

		public static IEnumerable<DmoDescriptor> GetAudioEncoderNames()
		{
			return GetDmos(DmoGuids.DMOCATEGORY_AUDIO_ENCODER);
		}

		public static IEnumerable<DmoDescriptor> GetAudioDecoderNames()
		{
			return GetDmos(DmoGuids.DMOCATEGORY_AUDIO_DECODER);
		}

		private static IEnumerable<DmoDescriptor> GetDmos(Guid category)
		{
			Marshal.ThrowExceptionForHR(DmoInterop.DMOEnum(ref category, DmoEnumFlags.None, 0, null, 0, null, out var enumDmo));
			int itemsFetched;
			do
			{
				enumDmo.Next(1, out var clsid, out var name, out itemsFetched);
				if (itemsFetched == 1)
				{
					string name2 = Marshal.PtrToStringUni(name);
					Marshal.FreeCoTaskMem(name);
					yield return new DmoDescriptor(name2, clsid);
				}
			}
			while (itemsFetched > 0);
		}
	}
	[Flags]
	internal enum DmoEnumFlags
	{
		None = 0,
		DMO_ENUMF_INCLUDE_KEYED = 1
	}
	internal static class DmoGuids
	{
		public static readonly Guid DMOCATEGORY_AUDIO_DECODER = new Guid("57f2db8b-e6bb-4513-9d43-dcd2a6593125");

		public static readonly Guid DMOCATEGORY_AUDIO_ENCODER = new Guid("33D9A761-90C8-11d0-BD43-00A0C911CE86");

		public static readonly Guid DMOCATEGORY_VIDEO_DECODER = new Guid("4a69b442-28be-4991-969c-b500adf5d8a8");

		public static readonly Guid DMOCATEGORY_VIDEO_ENCODER = new Guid("33D9A760-90C8-11d0-BD43-00A0C911CE86");

		public static readonly Guid DMOCATEGORY_AUDIO_EFFECT = new Guid("f3602b3f-0592-48df-a4cd-674721e7ebeb");

		public static readonly Guid DMOCATEGORY_VIDEO_EFFECT = new Guid("d990ee14-776c-4723-be46-3da2f56f10b9");

		public static readonly Guid DMOCATEGORY_AUDIO_CAPTURE_EFFECT = new Guid("f665aaba-3e09-4920-aa5f-219811148f09");
	}
	internal static class DmoMediaTypeGuids
	{
		public static readonly Guid FORMAT_None = new Guid("0F6417D6-C318-11D0-A43F-00A0C9223196");

		public static readonly Guid FORMAT_VideoInfo = new Guid("05589f80-c356-11ce-bf01-00aa0055595a");

		public static readonly Guid FORMAT_VideoInfo2 = new Guid("F72A76A0-EB0A-11d0-ACE4-0000C0CC16BA");

		public static readonly Guid FORMAT_WaveFormatEx = new Guid("05589f81-c356-11ce-bf01-00aa0055595a");

		public static readonly Guid FORMAT_MPEGVideo = new Guid("05589f82-c356-11ce-bf01-00aa0055595a");

		public static readonly Guid FORMAT_MPEGStreams = new Guid("05589f83-c356-11ce-bf01-00aa0055595a");

		public static readonly Guid FORMAT_DvInfo = new Guid("05589f84-c356-11ce-bf01-00aa0055595a");

		public static readonly Guid FORMAT_525WSS = new Guid("C7ECF04D-4582-4869-9ABB-BFB523B62EDF");
	}
	internal enum DmoHResults
	{
		DMO_E_INVALIDSTREAMINDEX = -2147220991,
		DMO_E_INVALIDTYPE,
		DMO_E_TYPE_NOT_SET,
		DMO_E_NOTACCEPTING,
		DMO_E_TYPE_NOT_ACCEPTED,
		DMO_E_NO_MORE_ITEMS
	}
	[Flags]
	public enum DmoInPlaceProcessFlags
	{
		Normal = 0,
		Zero = 1
	}
	public enum DmoInPlaceProcessReturn
	{
		Normal,
		HasEffectTail
	}
	[Flags]
	public enum DmoInputDataBufferFlags
	{
		None = 0,
		SyncPoint = 1,
		Time = 2,
		TimeLength = 4
	}
	[Flags]
	internal enum DmoInputStatusFlags
	{
		None = 0,
		DMO_INPUT_STATUSF_ACCEPT_DATA = 1
	}
	internal static class DmoInterop
	{
		[DllImport("msdmo.dll")]
		public static extern int DMOEnum([In] ref Guid guidCategory, DmoEnumFlags flags, int inTypes, [In] DmoPartialMediaType[] inTypesArray, int outTypes, [In] DmoPartialMediaType[] outTypesArray, out IEnumDmo enumDmo);

		[DllImport("msdmo.dll")]
		public static extern int MoFreeMediaType([In] ref DmoMediaType mediaType);

		[DllImport("msdmo.dll")]
		public static extern int MoInitMediaType([In][Out] ref DmoMediaType mediaType, int formatBlockBytes);

		[DllImport("msdmo.dll")]
		public static extern int DMOGetName([In] ref Guid clsidDMO, [Out] StringBuilder name);
	}
	public struct DmoMediaType
	{
		private Guid majortype;

		private Guid subtype;

		private bool bFixedSizeSamples;

		private bool bTemporalCompression;

		private int lSampleSize;

		private Guid formattype;

		private IntPtr pUnk;

		private int cbFormat;

		private IntPtr pbFormat;

		public Guid MajorType => majortype;

		public string MajorTypeName => MediaTypes.GetMediaTypeName(majortype);

		public Guid SubType => subtype;

		public string SubTypeName
		{
			get
			{
				if (majortype == MediaTypes.MEDIATYPE_Audio)
				{
					return AudioMediaSubtypes.GetAudioSubtypeName(subtype);
				}
				return subtype.ToString();
			}
		}

		public bool FixedSizeSamples => bFixedSizeSamples;

		public int SampleSize => lSampleSize;

		public Guid FormatType => formattype;

		public string FormatTypeName
		{
			get
			{
				if (formattype == DmoMediaTypeGuids.FORMAT_None)
				{
					return "None";
				}
				if (formattype == Guid.Empty)
				{
					return "Null";
				}
				if (formattype == DmoMediaTypeGuids.FORMAT_WaveFormatEx)
				{
					return "WaveFormatEx";
				}
				return FormatType.ToString();
			}
		}

		public WaveFormat GetWaveFormat()
		{
			if (formattype == DmoMediaTypeGuids.FORMAT_WaveFormatEx)
			{
				return WaveFormat.MarshalFromPtr(pbFormat);
			}
			throw new InvalidOperationException("Not a WaveFormat type");
		}

		public void SetWaveFormat(WaveFormat waveFormat)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Invalid comparison between Unknown and I4
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Invalid comparison between Unknown and I4
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Invalid comparison between Unknown and I4
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			majortype = MediaTypes.MEDIATYPE_Audio;
			WaveFormatExtensible val = (WaveFormatExtensible)(object)((waveFormat is WaveFormatExtensible) ? waveFormat : null);
			if (val != null)
			{
				subtype = val.SubFormat;
			}
			else
			{
				WaveFormatEncoding encoding = waveFormat.Encoding;
				if ((int)encoding != 1)
				{
					if ((int)encoding != 3)
					{
						if ((int)encoding != 85)
						{
							throw new ArgumentException($"Not a supported encoding {waveFormat.Encoding}");
						}
						subtype = AudioMediaSubtypes.WMMEDIASUBTYPE_MP3;
					}
					else
					{
						subtype = AudioMediaSubtypes.MEDIASUBTYPE_IEEE_FLOAT;
					}
				}
				else
				{
					subtype = AudioMediaSubtypes.MEDIASUBTYPE_PCM;
				}
			}
			bFixedSizeSamples = SubType == AudioMediaSubtypes.MEDIASUBTYPE_PCM || SubType == AudioMediaSubtypes.MEDIASUBTYPE_IEEE_FLOAT;
			formattype = DmoMediaTypeGuids.FORMAT_WaveFormatEx;
			if (cbFormat < Marshal.SizeOf<WaveFormat>(waveFormat))
			{
				throw new InvalidOperationException("Not enough memory assigned for a WaveFormat structure");
			}
			Marshal.StructureToPtr<WaveFormat>(waveFormat, pbFormat, fDeleteOld: false);
		}
	}
	[StructLayout(LayoutKind.Sequential, Pack = 8)]
	public struct DmoOutputDataBuffer : IDisposable
	{
		[MarshalAs(UnmanagedType.Interface)]
		private IMediaBuffer pBuffer;

		private DmoOutputDataBufferFlags dwStatus;

		private long rtTimestamp;

		private long referenceTimeDuration;

		public IMediaBuffer MediaBuffer
		{
			get
			{
				return pBuffer;
			}
			internal set
			{
				pBuffer = value;
			}
		}

		public int Length => ((MediaBuffer)pBuffer).Length;

		public DmoOutputDataBufferFlags StatusFlags
		{
			get
			{
				return dwStatus;
			}
			internal set
			{
				dwStatus = value;
			}
		}

		public long Timestamp
		{
			get
			{
				return rtTimestamp;
			}
			internal set
			{
				rtTimestamp = value;
			}
		}

		public long Duration
		{
			get
			{
				return referenceTimeDuration;
			}
			internal set
			{
				referenceTimeDuration = value;
			}
		}

		public bool MoreDataAvailable => (StatusFlags & DmoOutputDataBufferFlags.Incomplete) == DmoOutputDataBufferFlags.Incomplete;

		public DmoOutputDataBuffer(int maxBufferSize)
		{
			pBuffer = new MediaBuffer(maxBufferSize);
			dwStatus = DmoOutputDataBufferFlags.None;
			rtTimestamp = 0L;
			referenceTimeDuration = 0L;
		}

		public void Dispose()
		{
			if (pBuffer != null)
			{
				((MediaBuffer)pBuffer).Dispose();
				pBuffer = null;
				GC.SuppressFinalize(this);
			}
		}

		public void RetrieveData(byte[] data, int offset)
		{
			((MediaBuffer)pBuffer).RetrieveData(data, offset);
		}
	}
	[Flags]
	public enum DmoOutputDataBufferFlags
	{
		None = 0,
		SyncPoint = 1,
		Time = 2,
		TimeLength = 4,
		Incomplete = 0x1000000
	}
	internal struct DmoPartialMediaType
	{
		private Guid type;

		private Guid subtype;

		public Guid Type
		{
			get
			{
				return type;
			}
			internal set
			{
				type = value;
			}
		}

		public Guid Subtype
		{
			get
			{
				return subtype;
			}
			internal set
			{
				subtype = value;
			}
		}
	}
	[Flags]
	public enum DmoProcessOutputFlags
	{
		None = 0,
		DiscardWhenNoBuffer = 1
	}
	[Flags]
	internal enum DmoSetTypeFlags
	{
		None = 0,
		DMO_SET_TYPEF_TEST_ONLY = 1,
		DMO_SET_TYPEF_CLEAR = 2
	}
	[ComImport]
	[Guid("2c3cd98a-2bfa-4a53-9c27-5249ba64ba0f")]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	internal interface IEnumDmo
	{
		int Next(int itemsToFetch, out Guid clsid, out IntPtr name, out int itemsFetched);

		int Skip(int itemsToSkip);

		int Reset();

		int Clone(out IEnumDmo enumPointer);
	}
	[ComImport]
	[SuppressUnmanagedCodeSecurity]
	[Guid("59eff8b9-938c-4a26-82f2-95cb84cdc837")]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	public interface IMediaBuffer
	{
		[PreserveSig]
		int SetLength(int length);

		[PreserveSig]
		int GetMaxLength(out int maxLength);

		[PreserveSig]
		int GetBufferAndLength(IntPtr bufferPointerPointer, IntPtr validDataLengthPointer);
	}
	[ComImport]
	[SuppressUnmanagedCodeSecurity]
	[Guid("d8ad0f58-5494-4102-97c5-ec798e59bcf4")]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	internal interface IMediaObject
	{
		[PreserveSig]
		int GetStreamCount(out int inputStreams, out int outputStreams);

		[PreserveSig]
		int GetInputStreamInfo(int inputStreamIndex, out InputStreamInfoFlags flags);

		[PreserveSig]
		int GetOutputStreamInfo(int outputStreamIndex, out OutputStreamInfoFlags flags);

		[PreserveSig]
		int GetInputType(int inputStreamIndex, int typeIndex, out DmoMediaType mediaType);

		[PreserveSig]
		int GetOutputType(int outputStreamIndex, int typeIndex, out DmoMediaType mediaType);

		[PreserveSig]
		int SetInputType(int inputStreamIndex, [In] ref DmoMediaType mediaType, DmoSetTypeFlags flags);

		[PreserveSig]
		int SetOutputType(int outputStreamIndex, [In] ref DmoMediaType mediaType, DmoSetTypeFlags flags);

		[PreserveSig]
		int GetInputCurrentType(int inputStreamIndex, out DmoMediaType mediaType);

		[PreserveSig]
		int GetOutputCurrentType(int outputStreamIndex, out DmoMediaType mediaType);

		[PreserveSig]
		int GetInputSizeInfo(int inputStreamIndex, out int size, out int maxLookahead, out int alignment);

		[PreserveSig]
		int GetOutputSizeInfo(int outputStreamIndex, out int size, out int alignment);

		[PreserveSig]
		int GetInputMaxLatency(int inputStreamIndex, out long referenceTimeMaxLatency);

		[PreserveSig]
		int SetInputMaxLatency(int inputStreamIndex, long referenceTimeMaxLatency);

		[PreserveSig]
		int Flush();

		[PreserveSig]
		int Discontinuity(int inputStreamIndex);

		[PreserveSig]
		int AllocateStreamingResources();

		[PreserveSig]
		int FreeStreamingResources();

		[PreserveSig]
		int GetInputStatus(int inputStreamIndex, out DmoInputStatusFlags flags);

		[PreserveSig]
		int ProcessInput(int inputStreamIndex, [In] IMediaBuffer mediaBuffer, DmoInputDataBufferFlags flags, long referenceTimeTimestamp, long referenceTimeDuration);

		[PreserveSig]
		int ProcessOutput(DmoProcessOutputFlags flags, int outputBufferCount, [In][Out][MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] DmoOutputDataBuffer[] outputBuffers, out int statusReserved);

		[PreserveSig]
		int Lock(bool acquireLock);
	}
	[ComImport]
	[SuppressUnmanagedCodeSecurity]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	[Guid("651B9AD0-0FC7-4AA9-9538-D89931010741")]
	internal interface IMediaObjectInPlace
	{
		[PreserveSig]
		int Process([In] int size, [In] IntPtr data, [In] long refTimeStart, [In] DmoInPlaceProcessFlags dwFlags);

		[PreserveSig]
		int Clone([MarshalAs(UnmanagedType.Interface)] out IMediaObjectInPlace mediaObjectInPlace);

		[PreserveSig]
		int GetLatency(out long latencyTime);
	}
	[ComImport]
	[SuppressUnmanagedCodeSecurity]
	[Guid("6d6cbb60-a223-44aa-842f-a2f06750be6d")]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	internal interface IMediaParamInfo
	{
		[PreserveSig]
		int GetParamCount(out int paramCount);

		[PreserveSig]
		int GetParamInfo(int paramIndex, ref MediaParamInfo paramInfo);

		[PreserveSig]
		int GetParamText(int paramIndex, out IntPtr paramText);

		[PreserveSig]
		int GetNumTimeFormats(out int numTimeFormats);

		[PreserveSig]
		int GetSupportedTimeFormat(int formatIndex, out Guid guidTimeFormat);

		[PreserveSig]
		int GetCurrentTimeFormat(out Guid guidTimeFormat, out int mediaTimeData);
	}
	[Flags]
	internal enum InputStreamInfoFlags
	{
		None = 0,
		DMO_INPUT_STREAMF_WHOLE_SAMPLES = 1,
		DMO_INPUT_STREAMF_SINGLE_SAMPLE_PER_BUFFER = 2,
		DMO_INPUT_STREAMF_FIXED_SAMPLE_SIZE = 4,
		DMO_INPUT_STREAMF_HOLDS_BUFFERS = 8
	}
	[ComImport]
	[Guid("E7E9984F-F09F-4da4-903F-6E2E0EFE56B5")]
	[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
	internal interface IWMResamplerProps
	{
		int SetHalfFilterLength(int outputQuality);

		int SetUserChannelMtx([In] float[] channelConversionMatrix);
	}
	public class MediaBuffer : IMediaBuffer, IDisposable
	{
		private IntPtr buffer;

		private int length;

		private readonly int maxLength;

		public int Length
		{
			get
			{
				return length;
			}
			set
			{
				if (length > maxLength)
				{
					throw new ArgumentException("Cannot be greater than maximum buffer size");
				}
				length = value;
			}
		}

		public MediaBuffer(int maxLength)
		{
			buffer = Marshal.AllocCoTaskMem(maxLength);
			this.maxLength = maxLength;
		}

		public void Dispose()
		{
			if (buffer != IntPtr.Zero)
			{
				Marshal.FreeCoTaskMem(buffer);
				buffer = IntPtr.Zero;
				GC.SuppressFinalize(this);
			}
		}

		~MediaBuffer()
		{
			Dispose();
		}

		int IMediaBuffer.SetLength(int length)
		{
			if (length > maxLength)
			{
				return -2147483645;
			}
			this.length = length;
			return 0;
		}

		int IMediaBuffer.GetMaxLength(out int maxLength)
		{
			maxLength = this.maxLength;
			return 0;
		}

		int IMediaBuffer.GetBufferAndLength(IntPtr bufferPointerPointer, IntPtr validDataLengthPointer)
		{
			if (bufferPointerPointer != IntPtr.Zero)
			{
				Marshal.WriteIntPtr(bufferPointerPointer, buffer);
			}
			if (validDataLengthPointer != IntPtr.Zero)
			{
				Marshal.WriteInt32(validDataLengthPointer, length);
			}
			return 0;
		}

		public void LoadData(byte[] data, int bytes)
		{
			Length = bytes;
			Marshal.Copy(data, 0, buffer, bytes);
		}

		public void RetrieveData(byte[] data, int offset)
		{
			Marshal.Copy(buffer, data, offset, Length);
		}
	}
	public class MediaObject : IDisposable
	{
		private IMediaObject mediaObject;

		private readonly int inputStreams;

		private readonly int outputStreams;

		public int InputStreamCount => inputStreams;

		public int OutputStreamCount => outputStreams;

		internal MediaObject(IMediaObject mediaObject)
		{
			this.mediaObject = mediaObject;
			mediaObject.GetStreamCount(out inputStreams, out outputStreams);
		}

		public DmoMediaType? GetInputType(int inputStream, int inputTypeIndex)
		{
			try
			{
				if (mediaObject.GetInputType(inputStream, inputTypeIndex, out var mediaType) == 0)
				{
					DmoInterop.MoFreeMediaType(ref mediaType);
					return mediaType;
				}
			}
			catch (COMException ex)
			{
				if (HResult.GetHResult(ex) != -2147220986)
				{
					throw;
				}
			}
			return null;
		}

		public DmoMediaType? GetOutputType(int outputStream, int outputTypeIndex)
		{
			try
			{
				if (mediaObject.GetOutputType(outputStream, outputTypeIndex, out var mediaType) == 0)
				{
					DmoInterop.MoFreeMediaType(ref mediaType);
					return mediaType;
				}
			}
			catch (COMException ex)
			{
				if (HResult.GetHResult(ex) != -2147220986)
				{
					throw;
				}
			}
			return null;
		}

		public DmoMediaType GetOutputCurrentType(int outputStreamIndex)
		{
			DmoMediaType mediaType;
			int outputCurrentType = mediaObject.GetOutputCurrentType(outputStreamIndex, out mediaType);
			switch (outputCurrentType)
			{
			case 0:
				DmoInterop.MoFreeMediaType(ref mediaType);
				return mediaType;
			case -2147220989:
				throw new InvalidOperationException("Media type was not set.");
			default:
				throw Marshal.GetExceptionForHR(outputCurrentType);
			}
		}

		public IEnumerable<DmoMediaType> GetInputTypes(int inputStreamIndex)
		{
			int typeIndex = 0;
			while (true)
			{
				DmoMediaType? inputType;
				DmoMediaType? dmoMediaType = (inputType = GetInputType(inputStreamIndex, typeIndex));
				if (dmoMediaType.HasValue)
				{
					yield return inputType.Value;
					typeIndex++;
					continue;
				}
				break;
			}
		}

		public IEnumerable<DmoMediaType> GetOutputTypes(int outputStreamIndex)
		{
			int typeIndex = 0;
			while (true)
			{
				DmoMediaType? outputType;
				DmoMediaType? dmoMediaType = (outputType = GetOutputType(outputStreamIndex, typeIndex));
				if (dmoMediaType.HasValue)
				{
					yield return outputType.Value;
					typeIndex++;
					continue;
				}
				break;
			}
		}

		public bool SupportsInputType(int inputStreamIndex, DmoMediaType mediaType)
		{
			return SetInputType(inputStreamIndex, mediaType, DmoSetTypeFlags.DMO_SET_TYPEF_TEST_ONLY);
		}

		private bool SetInputType(int inputStreamIndex, DmoMediaType mediaType, DmoSetTypeFlags flags)
		{
			switch (mediaObject.SetInputType(inputStreamIndex, ref mediaType, flags))
			{
			case -2147220991:
				throw new ArgumentException("Invalid stream index");
			default:
				_ = -2147220987;
				return false;
			case 0:
				return true;
			}
		}

		public void SetInputType(int inputStreamIndex, DmoMediaType mediaType)
		{
			if (!SetInputType(inputStreamIndex, mediaType, DmoSetTypeFlags.None))
			{
				throw new ArgumentException("Media Type not supported");
			}
		}

		public void SetInputWaveFormat(int inputStreamIndex, WaveFormat waveFormat)
		{
			DmoMediaType mediaType = CreateDmoMediaTypeForWaveFormat(waveFormat);
			bool num = SetInputType(inputStreamIndex, mediaType, DmoSetTypeFlags.None);
			DmoInterop.MoFreeMediaType(ref mediaType);
			if (!num)
			{
				throw new ArgumentException("Media Type not supported");
			}
		}

		public bool SupportsInputWaveFormat(int inputStreamIndex, WaveFormat waveFormat)
		{
			DmoMediaType mediaType = CreateDmoMediaTypeForWaveFormat(waveFormat);
			bool result = SetInputType(inputStreamIndex, mediaType, DmoSetTypeFlags.DMO_SET_TYPEF_TEST_ONLY);
			DmoInterop.MoFreeMediaType(ref mediaType);
			return result;
		}

		private DmoMediaType CreateDmoMediaTypeForWaveFormat(WaveFormat

plugins/Lib/NAudio.WinMM.dll

Decompiled 10 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Threading;
using Microsoft.Win32;
using NAudio.CoreAudioApi;
using NAudio.Mixer;
using NAudio.Utils;
using NAudio.Wave.Compression;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("NAudio.WinMM")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("© Mark Heath 2023")]
[assembly: AssemblyFileVersion("2.2.1.0")]
[assembly: AssemblyInformationalVersion("2.2.1")]
[assembly: AssemblyProduct("NAudio.WinMM")]
[assembly: AssemblyTitle("NAudio.WinMM")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/naudio/NAudio")]
[assembly: AssemblyVersion("2.2.1.0")]
namespace NAudio.Mixer
{
	public class BooleanMixerControl : MixerControl
	{
		private MixerInterop.MIXERCONTROLDETAILS_BOOLEAN boolDetails;

		public bool Value
		{
			get
			{
				GetControlDetails();
				return boolDetails.fValue == 1;
			}
			set
			{
				//IL_0055: Unknown result type (might be due to invalid IL or missing references)
				boolDetails.fValue = (value ? 1 : 0);
				mixerControlDetails.paDetails = Marshal.AllocHGlobal(Marshal.SizeOf(boolDetails));
				Marshal.StructureToPtr(boolDetails, mixerControlDetails.paDetails, fDeleteOld: false);
				MmException.Try(MixerInterop.mixerSetControlDetails(mixerHandle, ref mixerControlDetails, MixerFlags.Mixer | mixerHandleType), "mixerSetControlDetails");
				Marshal.FreeHGlobal(mixerControlDetails.paDetails);
			}
		}

		internal BooleanMixerControl(MixerInterop.MIXERCONTROL mixerControl, IntPtr mixerHandle, MixerFlags mixerHandleType, int nChannels)
		{
			base.mixerControl = mixerControl;
			base.mixerHandle = mixerHandle;
			base.mixerHandleType = mixerHandleType;
			base.nChannels = nChannels;
			mixerControlDetails = default(MixerInterop.MIXERCONTROLDETAILS);
			GetControlDetails();
		}

		protected override void GetDetails(IntPtr pDetails)
		{
			boolDetails = Marshal.PtrToStructure<MixerInterop.MIXERCONTROLDETAILS_BOOLEAN>(pDetails);
		}
	}
	public class CustomMixerControl : MixerControl
	{
		internal CustomMixerControl(MixerInterop.MIXERCONTROL mixerControl, IntPtr mixerHandle, MixerFlags mixerHandleType, int nChannels)
		{
			base.mixerControl = mixerControl;
			base.mixerHandle = mixerHandle;
			base.mixerHandleType = mixerHandleType;
			base.nChannels = nChannels;
			mixerControlDetails = default(MixerInterop.MIXERCONTROLDETAILS);
			GetControlDetails();
		}

		protected override void GetDetails(IntPtr pDetails)
		{
		}
	}
	public class ListTextMixerControl : MixerControl
	{
		internal ListTextMixerControl(MixerInterop.MIXERCONTROL mixerControl, IntPtr mixerHandle, MixerFlags mixerHandleType, int nChannels)
		{
			base.mixerControl = mixerControl;
			base.mixerHandle = mixerHandle;
			base.mixerHandleType = mixerHandleType;
			base.nChannels = nChannels;
			mixerControlDetails = default(MixerInterop.MIXERCONTROLDETAILS);
			GetControlDetails();
		}

		protected override void GetDetails(IntPtr pDetails)
		{
		}
	}
	public class Mixer
	{
		private MixerInterop.MIXERCAPS caps;

		private IntPtr mixerHandle;

		private MixerFlags mixerHandleType;

		public static int NumberOfDevices => MixerInterop.mixerGetNumDevs();

		public int DestinationCount => (int)caps.cDestinations;

		public string Name => caps.szPname;

		public Manufacturers Manufacturer => (Manufacturers)caps.wMid;

		public int ProductID => caps.wPid;

		public IEnumerable<MixerLine> Destinations
		{
			get
			{
				for (int destination = 0; destination < DestinationCount; destination++)
				{
					yield return GetDestination(destination);
				}
			}
		}

		public static IEnumerable<Mixer> Mixers
		{
			get
			{
				for (int device = 0; device < NumberOfDevices; device++)
				{
					yield return new Mixer(device);
				}
			}
		}

		public Mixer(int mixerIndex)
		{
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			if (mixerIndex < 0 || mixerIndex >= NumberOfDevices)
			{
				throw new ArgumentOutOfRangeException("mixerID");
			}
			caps = default(MixerInterop.MIXERCAPS);
			MmException.Try(MixerInterop.mixerGetDevCaps((IntPtr)mixerIndex, ref caps, Marshal.SizeOf(caps)), "mixerGetDevCaps");
			mixerHandle = (IntPtr)mixerIndex;
			mixerHandleType = MixerFlags.Mixer;
		}

		public MixerLine GetDestination(int destinationIndex)
		{
			if (destinationIndex < 0 || destinationIndex >= DestinationCount)
			{
				throw new ArgumentOutOfRangeException("destinationIndex");
			}
			return new MixerLine(mixerHandle, destinationIndex, mixerHandleType);
		}
	}
	public abstract class MixerControl
	{
		internal MixerInterop.MIXERCONTROL mixerControl;

		internal MixerInterop.MIXERCONTROLDETAILS mixerControlDetails;

		protected IntPtr mixerHandle;

		protected int nChannels;

		protected MixerFlags mixerHandleType;

		public string Name => mixerControl.szName;

		public MixerControlType ControlType => mixerControl.dwControlType;

		public bool IsBoolean => IsControlBoolean(mixerControl.dwControlType);

		public bool IsListText => IsControlListText(mixerControl.dwControlType);

		public bool IsSigned => IsControlSigned(mixerControl.dwControlType);

		public bool IsUnsigned => IsControlUnsigned(mixerControl.dwControlType);

		public bool IsCustom => IsControlCustom(mixerControl.dwControlType);

		public static IList<MixerControl> GetMixerControls(IntPtr mixerHandle, MixerLine mixerLine, MixerFlags mixerHandleType)
		{
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			List<MixerControl> list = new List<MixerControl>();
			if (mixerLine.ControlsCount > 0)
			{
				int num = Marshal.SizeOf<MixerInterop.MIXERCONTROL>();
				MixerInterop.MIXERLINECONTROLS mixerLineControls = default(MixerInterop.MIXERLINECONTROLS);
				IntPtr intPtr = Marshal.AllocHGlobal(num * mixerLine.ControlsCount);
				mixerLineControls.cbStruct = Marshal.SizeOf(mixerLineControls);
				mixerLineControls.dwLineID = mixerLine.LineId;
				mixerLineControls.cControls = mixerLine.ControlsCount;
				mixerLineControls.pamxctrl = intPtr;
				mixerLineControls.cbmxctrl = Marshal.SizeOf<MixerInterop.MIXERCONTROL>();
				try
				{
					MmResult val = MixerInterop.mixerGetLineControls(mixerHandle, ref mixerLineControls, MixerFlags.Mixer | mixerHandleType);
					if ((int)val != 0)
					{
						throw new MmException(val, "mixerGetLineControls");
					}
					for (int i = 0; i < mixerLineControls.cControls; i++)
					{
						MixerInterop.MIXERCONTROL mIXERCONTROL = Marshal.PtrToStructure<MixerInterop.MIXERCONTROL>((IntPtr)(intPtr.ToInt64() + num * i));
						MixerControl item = GetMixerControl(mixerHandle, mixerLine.LineId, mIXERCONTROL.dwControlID, mixerLine.Channels, mixerHandleType);
						list.Add(item);
					}
				}
				finally
				{
					Marshal.FreeHGlobal(intPtr);
				}
			}
			return list;
		}

		public static MixerControl GetMixerControl(IntPtr mixerHandle, int nLineId, int controlId, int nChannels, MixerFlags mixerFlags)
		{
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			MixerInterop.MIXERLINECONTROLS mixerLineControls = default(MixerInterop.MIXERLINECONTROLS);
			MixerInterop.MIXERCONTROL structure = default(MixerInterop.MIXERCONTROL);
			IntPtr intPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(structure));
			mixerLineControls.cbStruct = Marshal.SizeOf(mixerLineControls);
			mixerLineControls.cControls = 1;
			mixerLineControls.dwControlID = controlId;
			mixerLineControls.cbmxctrl = Marshal.SizeOf(structure);
			mixerLineControls.pamxctrl = intPtr;
			mixerLineControls.dwLineID = nLineId;
			MmResult val = MixerInterop.mixerGetLineControls(mixerHandle, ref mixerLineControls, MixerFlags.ListText | mixerFlags);
			if ((int)val != 0)
			{
				Marshal.FreeCoTaskMem(intPtr);
				throw new MmException(val, "mixerGetLineControls");
			}
			structure = Marshal.PtrToStructure<MixerInterop.MIXERCONTROL>(mixerLineControls.pamxctrl);
			Marshal.FreeCoTaskMem(intPtr);
			if (IsControlBoolean(structure.dwControlType))
			{
				return new BooleanMixerControl(structure, mixerHandle, mixerFlags, nChannels);
			}
			if (IsControlSigned(structure.dwControlType))
			{
				return new SignedMixerControl(structure, mixerHandle, mixerFlags, nChannels);
			}
			if (IsControlUnsigned(structure.dwControlType))
			{
				return new UnsignedMixerControl(structure, mixerHandle, mixerFlags, nChannels);
			}
			if (IsControlListText(structure.dwControlType))
			{
				return new ListTextMixerControl(structure, mixerHandle, mixerFlags, nChannels);
			}
			if (IsControlCustom(structure.dwControlType))
			{
				return new CustomMixerControl(structure, mixerHandle, mixerFlags, nChannels);
			}
			throw new InvalidOperationException($"Unknown mixer control type {structure.dwControlType}");
		}

		protected void GetControlDetails()
		{
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
			mixerControlDetails.cbStruct = Marshal.SizeOf(mixerControlDetails);
			mixerControlDetails.dwControlID = mixerControl.dwControlID;
			if (IsCustom)
			{
				mixerControlDetails.cChannels = 0;
			}
			else if ((mixerControl.fdwControl & (true ? 1u : 0u)) != 0)
			{
				mixerControlDetails.cChannels = 1;
			}
			else
			{
				mixerControlDetails.cChannels = nChannels;
			}
			if ((mixerControl.fdwControl & 2u) != 0)
			{
				mixerControlDetails.hwndOwner = (IntPtr)mixerControl.cMultipleItems;
			}
			else if (IsCustom)
			{
				mixerControlDetails.hwndOwner = IntPtr.Zero;
			}
			else
			{
				mixerControlDetails.hwndOwner = IntPtr.Zero;
			}
			if (IsBoolean)
			{
				mixerControlDetails.cbDetails = Marshal.SizeOf<MixerInterop.MIXERCONTROLDETAILS_BOOLEAN>();
			}
			else if (IsListText)
			{
				mixerControlDetails.cbDetails = Marshal.SizeOf<MixerInterop.MIXERCONTROLDETAILS_LISTTEXT>();
			}
			else if (IsSigned)
			{
				mixerControlDetails.cbDetails = Marshal.SizeOf<MixerInterop.MIXERCONTROLDETAILS_SIGNED>();
			}
			else if (IsUnsigned)
			{
				mixerControlDetails.cbDetails = Marshal.SizeOf<MixerInterop.MIXERCONTROLDETAILS_UNSIGNED>();
			}
			else
			{
				mixerControlDetails.cbDetails = mixerControl.Metrics.customData;
			}
			int num = mixerControlDetails.cbDetails * mixerControlDetails.cChannels;
			if ((mixerControl.fdwControl & 2u) != 0)
			{
				num *= (int)mixerControl.cMultipleItems;
			}
			IntPtr intPtr = Marshal.AllocCoTaskMem(num);
			mixerControlDetails.paDetails = intPtr;
			MmResult val = MixerInterop.mixerGetControlDetails(mixerHandle, ref mixerControlDetails, MixerFlags.Mixer | mixerHandleType);
			if ((int)val == 0)
			{
				GetDetails(mixerControlDetails.paDetails);
			}
			Marshal.FreeCoTaskMem(intPtr);
			if ((int)val != 0)
			{
				throw new MmException(val, "mixerGetControlDetails");
			}
		}

		protected abstract void GetDetails(IntPtr pDetails);

		private static bool IsControlBoolean(MixerControlType controlType)
		{
			switch (controlType)
			{
			case MixerControlType.BooleanMeter:
			case MixerControlType.Boolean:
			case MixerControlType.OnOff:
			case MixerControlType.Mute:
			case MixerControlType.Mono:
			case MixerControlType.Loudness:
			case MixerControlType.StereoEnhance:
			case MixerControlType.Button:
			case MixerControlType.SingleSelect:
			case MixerControlType.Mux:
			case MixerControlType.MultipleSelect:
			case MixerControlType.Mixer:
				return true;
			default:
				return false;
			}
		}

		private static bool IsControlListText(MixerControlType controlType)
		{
			if (controlType == MixerControlType.Equalizer || (uint)(controlType - 1879113728) <= 1u || (uint)(controlType - 1895890944) <= 1u)
			{
				return true;
			}
			return false;
		}

		private static bool IsControlSigned(MixerControlType controlType)
		{
			switch (controlType)
			{
			case MixerControlType.SignedMeter:
			case MixerControlType.PeakMeter:
			case MixerControlType.Signed:
			case MixerControlType.Decibels:
			case MixerControlType.Slider:
			case MixerControlType.Pan:
			case MixerControlType.QSoundPan:
				return true;
			default:
				return false;
			}
		}

		private static bool IsControlUnsigned(MixerControlType controlType)
		{
			switch (controlType)
			{
			case MixerControlType.UnsignedMeter:
			case MixerControlType.Unsigned:
			case MixerControlType.Percent:
			case MixerControlType.Fader:
			case MixerControlType.Volume:
			case MixerControlType.Bass:
			case MixerControlType.Treble:
			case MixerControlType.Equalizer:
			case MixerControlType.MicroTime:
			case MixerControlType.MilliTime:
				return true;
			default:
				return false;
			}
		}

		private static bool IsControlCustom(MixerControlType controlType)
		{
			return controlType == MixerControlType.Custom;
		}

		public override string ToString()
		{
			return $"{Name} {ControlType}";
		}
	}
	[Flags]
	internal enum MixerControlClass
	{
		Custom = 0,
		Meter = 0x10000000,
		Switch = 0x20000000,
		Number = 0x30000000,
		Slider = 0x40000000,
		Fader = 0x50000000,
		Time = 0x60000000,
		List = 0x70000000,
		Mask = 0x70000000
	}
	[Flags]
	internal enum MixerControlSubclass
	{
		SwitchBoolean = 0,
		SwitchButton = 0x1000000,
		MeterPolled = 0,
		TimeMicrosecs = 0,
		TimeMillisecs = 0x1000000,
		ListSingle = 0,
		ListMultiple = 0x1000000,
		Mask = 0xF000000
	}
	[Flags]
	internal enum MixerControlUnits
	{
		Custom = 0,
		Boolean = 0x10000,
		Signed = 0x20000,
		Unsigned = 0x30000,
		Decibels = 0x40000,
		Percent = 0x50000,
		Mask = 0xFF0000
	}
	public enum MixerControlType
	{
		Custom = 0,
		BooleanMeter = 268500992,
		SignedMeter = 268566528,
		PeakMeter = 268566529,
		UnsignedMeter = 268632064,
		Boolean = 536936448,
		OnOff = 536936449,
		Mute = 536936450,
		Mono = 536936451,
		Loudness = 536936452,
		StereoEnhance = 536936453,
		Button = 553713664,
		Decibels = 805568512,
		Signed = 805437440,
		Unsigned = 805502976,
		Percent = 805634048,
		Slider = 1073872896,
		Pan = 1073872897,
		QSoundPan = 1073872898,
		Fader = 1342373888,
		Volume = 1342373889,
		Bass = 1342373890,
		Treble = 1342373891,
		Equalizer = 1342373892,
		SingleSelect = 1879113728,
		Mux = 1879113729,
		MultipleSelect = 1895890944,
		Mixer = 1895890945,
		MicroTime = 1610809344,
		MilliTime = 1627586560
	}
	[Flags]
	public enum MixerFlags
	{
		Handle = int.MinValue,
		Mixer = 0,
		MixerHandle = int.MinValue,
		WaveOut = 0x10000000,
		WaveOutHandle = -1879048192,
		WaveIn = 0x20000000,
		WaveInHandle = -1610612736,
		MidiOut = 0x30000000,
		MidiOutHandle = -1342177280,
		MidiIn = 0x40000000,
		MidiInHandle = -1073741824,
		Aux = 0x50000000,
		Value = 0,
		ListText = 1,
		QueryMask = 0xF,
		All = 0,
		OneById = 1,
		OneByType = 2,
		GetLineInfoOfDestination = 0,
		GetLineInfoOfSource = 1,
		GetLineInfoOfLineId = 2,
		GetLineInfoOfComponentType = 3,
		GetLineInfoOfTargetType = 4,
		GetLineInfoOfQueryMask = 0xF
	}
	internal class MixerInterop
	{
		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
		public struct MIXERCONTROLDETAILS
		{
			public int cbStruct;

			public int dwControlID;

			public int cChannels;

			public IntPtr hwndOwner;

			public int cbDetails;

			public IntPtr paDetails;
		}

		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct MIXERCAPS
		{
			public ushort wMid;

			public ushort wPid;

			public uint vDriverVersion;

			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
			public string szPname;

			public uint fdwSupport;

			public uint cDestinations;
		}

		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct MIXERLINECONTROLS
		{
			public int cbStruct;

			public int dwLineID;

			public int dwControlID;

			public int cControls;

			public int cbmxctrl;

			public IntPtr pamxctrl;
		}

		[Flags]
		public enum MIXERLINE_LINEF
		{
			MIXERLINE_LINEF_ACTIVE = 1,
			MIXERLINE_LINEF_DISCONNECTED = 0x8000,
			MIXERLINE_LINEF_SOURCE = int.MinValue
		}

		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct MIXERLINE
		{
			public int cbStruct;

			public int dwDestination;

			public int dwSource;

			public int dwLineID;

			public MIXERLINE_LINEF fdwLine;

			public IntPtr dwUser;

			public MixerLineComponentType dwComponentType;

			public int cChannels;

			public int cConnections;

			public int cControls;

			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
			public string szShortName;

			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
			public string szName;

			public uint dwType;

			public uint dwDeviceID;

			public ushort wMid;

			public ushort wPid;

			public uint vDriverVersion;

			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
			public string szPname;
		}

		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct Bounds
		{
			public int minimum;

			public int maximum;

			public int reserved2;

			public int reserved3;

			public int reserved4;

			public int reserved5;
		}

		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct Metrics
		{
			public int step;

			public int customData;

			public int reserved2;

			public int reserved3;

			public int reserved4;

			public int reserved5;
		}

		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct MIXERCONTROL
		{
			public uint cbStruct;

			public int dwControlID;

			public MixerControlType dwControlType;

			public uint fdwControl;

			public uint cMultipleItems;

			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
			public string szShortName;

			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
			public string szName;

			public Bounds Bounds;

			public Metrics Metrics;
		}

		public struct MIXERCONTROLDETAILS_BOOLEAN
		{
			public int fValue;
		}

		public struct MIXERCONTROLDETAILS_SIGNED
		{
			public int lValue;
		}

		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		public struct MIXERCONTROLDETAILS_LISTTEXT
		{
			public uint dwParam1;

			public uint dwParam2;

			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
			public string szName;
		}

		public struct MIXERCONTROLDETAILS_UNSIGNED
		{
			public uint dwValue;
		}

		public const uint MIXERCONTROL_CONTROLF_UNIFORM = 1u;

		public const uint MIXERCONTROL_CONTROLF_MULTIPLE = 2u;

		public const uint MIXERCONTROL_CONTROLF_DISABLED = 2147483648u;

		public const int MAXPNAMELEN = 32;

		public const int MIXER_SHORT_NAME_CHARS = 16;

		public const int MIXER_LONG_NAME_CHARS = 64;

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern int mixerGetNumDevs();

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerOpen(out IntPtr hMixer, int uMxId, IntPtr dwCallback, IntPtr dwInstance, MixerFlags dwOpenFlags);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerClose(IntPtr hMixer);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerGetControlDetails(IntPtr hMixer, ref MIXERCONTROLDETAILS mixerControlDetails, MixerFlags dwDetailsFlags);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerGetDevCaps(IntPtr nMixerID, ref MIXERCAPS mixerCaps, int mixerCapsSize);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerGetID(IntPtr hMixer, out int mixerID, MixerFlags dwMixerIDFlags);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerGetLineControls(IntPtr hMixer, ref MIXERLINECONTROLS mixerLineControls, MixerFlags dwControlFlags);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerGetLineInfo(IntPtr hMixer, ref MIXERLINE mixerLine, MixerFlags dwInfoFlags);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerMessage(IntPtr hMixer, uint nMessage, IntPtr dwParam1, IntPtr dwParam2);

		[DllImport("winmm.dll", CharSet = CharSet.Ansi)]
		public static extern MmResult mixerSetControlDetails(IntPtr hMixer, ref MIXERCONTROLDETAILS mixerControlDetails, MixerFlags dwDetailsFlags);
	}
	public class MixerLine
	{
		private MixerInterop.MIXERLINE mixerLine;

		private IntPtr mixerHandle;

		private MixerFlags mixerHandleType;

		public string Name => mixerLine.szName;

		public string ShortName => mixerLine.szShortName;

		public int LineId => mixerLine.dwLineID;

		public MixerLineComponentType ComponentType => mixerLine.dwComponentType;

		public string TypeDescription => mixerLine.dwComponentType switch
		{
			MixerLineComponentType.DestinationUndefined => "Undefined Destination", 
			MixerLineComponentType.DestinationDigital => "Digital Destination", 
			MixerLineComponentType.DestinationLine => "Line Level Destination", 
			MixerLineComponentType.DestinationMonitor => "Monitor Destination", 
			MixerLineComponentType.DestinationSpeakers => "Speakers Destination", 
			MixerLineComponentType.DestinationHeadphones => "Headphones Destination", 
			MixerLineComponentType.DestinationTelephone => "Telephone Destination", 
			MixerLineComponentType.DestinationWaveIn => "Wave Input Destination", 
			MixerLineComponentType.DestinationVoiceIn => "Voice Recognition Destination", 
			MixerLineComponentType.SourceUndefined => "Undefined Source", 
			MixerLineComponentType.SourceDigital => "Digital Source", 
			MixerLineComponentType.SourceLine => "Line Level Source", 
			MixerLineComponentType.SourceMicrophone => "Microphone Source", 
			MixerLineComponentType.SourceSynthesizer => "Synthesizer Source", 
			MixerLineComponentType.SourceCompactDisc => "Compact Disk Source", 
			MixerLineComponentType.SourceTelephone => "Telephone Source", 
			MixerLineComponentType.SourcePcSpeaker => "PC Speaker Source", 
			MixerLineComponentType.SourceWaveOut => "Wave Out Source", 
			MixerLineComponentType.SourceAuxiliary => "Auxiliary Source", 
			MixerLineComponentType.SourceAnalog => "Analog Source", 
			_ => "Invalid Component Type", 
		};

		public int Channels => mixerLine.cChannels;

		public int SourceCount => mixerLine.cConnections;

		public int ControlsCount => mixerLine.cControls;

		public bool IsActive => (mixerLine.fdwLine & MixerInterop.MIXERLINE_LINEF.MIXERLINE_LINEF_ACTIVE) != 0;

		public bool IsDisconnected => (mixerLine.fdwLine & MixerInterop.MIXERLINE_LINEF.MIXERLINE_LINEF_DISCONNECTED) != 0;

		public bool IsSource => (mixerLine.fdwLine & MixerInterop.MIXERLINE_LINEF.MIXERLINE_LINEF_SOURCE) != 0;

		public IEnumerable<MixerControl> Controls => MixerControl.GetMixerControls(mixerHandle, this, mixerHandleType);

		public IEnumerable<MixerLine> Sources
		{
			get
			{
				for (int source = 0; source < SourceCount; source++)
				{
					yield return GetSource(source);
				}
			}
		}

		public string TargetName => mixerLine.szPname;

		public MixerLine(IntPtr mixerHandle, int destinationIndex, MixerFlags mixerHandleType)
		{
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			this.mixerHandle = mixerHandle;
			this.mixerHandleType = mixerHandleType;
			mixerLine = default(MixerInterop.MIXERLINE);
			mixerLine.cbStruct = Marshal.SizeOf(mixerLine);
			mixerLine.dwDestination = destinationIndex;
			MmException.Try(MixerInterop.mixerGetLineInfo(mixerHandle, ref mixerLine, mixerHandleType | MixerFlags.Mixer), "mixerGetLineInfo");
		}

		public MixerLine(IntPtr mixerHandle, int destinationIndex, int sourceIndex, MixerFlags mixerHandleType)
		{
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			this.mixerHandle = mixerHandle;
			this.mixerHandleType = mixerHandleType;
			mixerLine = default(MixerInterop.MIXERLINE);
			mixerLine.cbStruct = Marshal.SizeOf(mixerLine);
			mixerLine.dwDestination = destinationIndex;
			mixerLine.dwSource = sourceIndex;
			MmException.Try(MixerInterop.mixerGetLineInfo(mixerHandle, ref mixerLine, mixerHandleType | MixerFlags.ListText), "mixerGetLineInfo");
		}

		public static int GetMixerIdForWaveIn(int waveInDevice)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			int mixerID = -1;
			MmException.Try(MixerInterop.mixerGetID((IntPtr)waveInDevice, out mixerID, MixerFlags.WaveIn), "mixerGetID");
			return mixerID;
		}

		public MixerLine GetSource(int sourceIndex)
		{
			if (sourceIndex < 0 || sourceIndex >= SourceCount)
			{
				throw new ArgumentOutOfRangeException("sourceIndex");
			}
			return new MixerLine(mixerHandle, mixerLine.dwDestination, sourceIndex, mixerHandleType);
		}

		public override string ToString()
		{
			return $"{Name} {TypeDescription} ({ControlsCount} controls, ID={mixerLine.dwLineID})";
		}
	}
	public enum MixerLineComponentType
	{
		DestinationUndefined = 0,
		DestinationDigital = 1,
		DestinationLine = 2,
		DestinationMonitor = 3,
		DestinationSpeakers = 4,
		DestinationHeadphones = 5,
		DestinationTelephone = 6,
		DestinationWaveIn = 7,
		DestinationVoiceIn = 8,
		SourceUndefined = 4096,
		SourceDigital = 4097,
		SourceLine = 4098,
		SourceMicrophone = 4099,
		SourceSynthesizer = 4100,
		SourceCompactDisc = 4101,
		SourceTelephone = 4102,
		SourcePcSpeaker = 4103,
		SourceWaveOut = 4104,
		SourceAuxiliary = 4105,
		SourceAnalog = 4106
	}
	public class SignedMixerControl : MixerControl
	{
		private MixerInterop.MIXERCONTROLDETAILS_SIGNED signedDetails;

		public int Value
		{
			get
			{
				GetControlDetails();
				return signedDetails.lValue;
			}
			set
			{
				//IL_0052: Unknown result type (might be due to invalid IL or missing references)
				signedDetails.lValue = value;
				mixerControlDetails.paDetails = Marshal.AllocHGlobal(Marshal.SizeOf(signedDetails));
				Marshal.StructureToPtr(signedDetails, mixerControlDetails.paDetails, fDeleteOld: false);
				MmException.Try(MixerInterop.mixerSetControlDetails(mixerHandle, ref mixerControlDetails, MixerFlags.Mixer | mixerHandleType), "mixerSetControlDetails");
				Marshal.FreeHGlobal(mixerControlDetails.paDetails);
			}
		}

		public int MinValue => mixerControl.Bounds.minimum;

		public int MaxValue => mixerControl.Bounds.maximum;

		public double Percent
		{
			get
			{
				return 100.0 * (double)(Value - MinValue) / (double)(MaxValue - MinValue);
			}
			set
			{
				Value = (int)((double)MinValue + value / 100.0 * (double)(MaxValue - MinValue));
			}
		}

		internal SignedMixerControl(MixerInterop.MIXERCONTROL mixerControl, IntPtr mixerHandle, MixerFlags mixerHandleType, int nChannels)
		{
			base.mixerControl = mixerControl;
			base.mixerHandle = mixerHandle;
			base.mixerHandleType = mixerHandleType;
			base.nChannels = nChannels;
			mixerControlDetails = default(MixerInterop.MIXERCONTROLDETAILS);
			GetControlDetails();
		}

		protected override void GetDetails(IntPtr pDetails)
		{
			signedDetails = Marshal.PtrToStructure<MixerInterop.MIXERCONTROLDETAILS_SIGNED>(mixerControlDetails.paDetails);
		}

		public override string ToString()
		{
			return $"{base.ToString()} {Percent}%";
		}
	}
	public class UnsignedMixerControl : MixerControl
	{
		private MixerInterop.MIXERCONTROLDETAILS_UNSIGNED[] unsignedDetails;

		public uint Value
		{
			get
			{
				GetControlDetails();
				return unsignedDetails[0].dwValue;
			}
			set
			{
				//IL_008f: Unknown result type (might be due to invalid IL or missing references)
				int num = Marshal.SizeOf(unsignedDetails[0]);
				mixerControlDetails.paDetails = Marshal.AllocHGlobal(num * nChannels);
				for (int i = 0; i < nChannels; i++)
				{
					unsignedDetails[i].dwValue = value;
					long num2 = mixerControlDetails.paDetails.ToInt64() + num * i;
					Marshal.StructureToPtr(unsignedDetails[i], (IntPtr)num2, fDeleteOld: false);
				}
				MmException.Try(MixerInterop.mixerSetControlDetails(mixerHandle, ref mixerControlDetails, MixerFlags.Mixer | mixerHandleType), "mixerSetControlDetails");
				Marshal.FreeHGlobal(mixerControlDetails.paDetails);
			}
		}

		public uint MinValue => (uint)mixerControl.Bounds.minimum;

		public uint MaxValue => (uint)mixerControl.Bounds.maximum;

		public double Percent
		{
			get
			{
				return 100.0 * (double)(Value - MinValue) / (double)(MaxValue - MinValue);
			}
			set
			{
				Value = (uint)((double)MinValue + value / 100.0 * (double)(MaxValue - MinValue));
			}
		}

		internal UnsignedMixerControl(MixerInterop.MIXERCONTROL mixerControl, IntPtr mixerHandle, MixerFlags mixerHandleType, int nChannels)
		{
			base.mixerControl = mixerControl;
			base.mixerHandle = mixerHandle;
			base.mixerHandleType = mixerHandleType;
			base.nChannels = nChannels;
			mixerControlDetails = default(MixerInterop.MIXERCONTROLDETAILS);
			GetControlDetails();
		}

		protected override void GetDetails(IntPtr pDetails)
		{
			unsignedDetails = new MixerInterop.MIXERCONTROLDETAILS_UNSIGNED[nChannels];
			for (int i = 0; i < nChannels; i++)
			{
				unsignedDetails[i] = Marshal.PtrToStructure<MixerInterop.MIXERCONTROLDETAILS_UNSIGNED>(mixerControlDetails.paDetails);
			}
		}

		public override string ToString()
		{
			return $"{base.ToString()} {Percent}%";
		}
	}
}
namespace NAudio.Wave
{
	internal enum AcmMetrics
	{
		CountDrivers = 1,
		CountCodecs = 2,
		CountConverters = 3,
		CountFilters = 4,
		CountDisabled = 5,
		CountHardware = 6,
		CountLocalDrivers = 20,
		CountLocalCodecs = 21,
		CountLocalConverters = 22,
		CountLocalFilters = 23,
		CountLocalDisabled = 24,
		HardwareWaveInput = 30,
		HardwareWaveOutput = 31,
		MaxSizeFormat = 50,
		MaxSizeFilter = 51,
		DriverSupport = 100,
		DriverPriority = 101
	}
	[Flags]
	internal enum AcmStreamConvertFlags
	{
		BlockAlign = 4,
		Start = 0x10,
		End = 0x20
	}
	[StructLayout(LayoutKind.Explicit)]
	public struct MmTime
	{
		public const int TIME_MS = 1;

		public const int TIME_SAMPLES = 2;

		public const int TIME_BYTES = 4;

		[FieldOffset(0)]
		public uint wType;

		[FieldOffset(4)]
		public uint ms;

		[FieldOffset(4)]
		public uint sample;

		[FieldOffset(4)]
		public uint cb;

		[FieldOffset(4)]
		public uint ticks;

		[FieldOffset(4)]
		public byte smpteHour;

		[FieldOffset(5)]
		public byte smpteMin;

		[FieldOffset(6)]
		public byte smpteSec;

		[FieldOffset(7)]
		public byte smpteFrame;

		[FieldOffset(8)]
		public byte smpteFps;

		[FieldOffset(9)]
		public byte smpteDummy;

		[FieldOffset(10)]
		public byte smptePad0;

		[FieldOffset(11)]
		public byte smptePad1;

		[FieldOffset(4)]
		public uint midiSongPtrPos;
	}
	public enum WaveCallbackStrategy
	{
		FunctionCallback,
		NewWindow,
		ExistingWindow,
		Event
	}
	[StructLayout(LayoutKind.Sequential)]
	public sealed class WaveHeader
	{
		public IntPtr dataBuffer;

		public int bufferLength;

		public int bytesRecorded;

		public IntPtr userData;

		public WaveHeaderFlags flags;

		public int loops;

		public IntPtr next;

		public IntPtr reserved;
	}
	[Flags]
	public enum WaveHeaderFlags
	{
		BeginLoop = 4,
		Done = 1,
		EndLoop = 8,
		InQueue = 0x10,
		Prepared = 2
	}
	[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
	public struct WaveInCapabilities
	{
		private short manufacturerId;

		private short productId;

		private int driverVersion;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
		private string productName;

		private SupportedWaveFormat supportedFormats;

		private short channels;

		private short reserved;

		private Guid manufacturerGuid;

		private Guid productGuid;

		private Guid nameGuid;

		private const int MaxProductNameLength = 32;

		public int Channels => channels;

		public string ProductName => productName;

		public Guid NameGuid => nameGuid;

		public Guid ProductGuid => productGuid;

		public Guid ManufacturerGuid => manufacturerGuid;

		public bool SupportsWaveFormat(SupportedWaveFormat waveFormat)
		{
			return (supportedFormats & waveFormat) == waveFormat;
		}
	}
	public static class WaveCapabilitiesHelpers
	{
		public static readonly Guid MicrosoftDefaultManufacturerId = new Guid("d5a47fa8-6d98-11d1-a21a-00a0c9223196");

		public static readonly Guid DefaultWaveOutGuid = new Guid("E36DC310-6D9A-11D1-A21A-00A0C9223196");

		public static readonly Guid DefaultWaveInGuid = new Guid("E36DC311-6D9A-11D1-A21A-00A0C9223196");

		public static string GetNameFromGuid(Guid guid)
		{
			string result = null;
			using (RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\MediaCategories"))
			{
				using RegistryKey registryKey2 = registryKey.OpenSubKey(guid.ToString("B"));
				if (registryKey2 != null)
				{
					result = registryKey2.GetValue("Name") as string;
				}
			}
			return result;
		}
	}
	public class WaveInterop
	{
		[Flags]
		public enum WaveInOutOpenFlags
		{
			CallbackNull = 0,
			CallbackFunction = 0x30000,
			CallbackEvent = 0x50000,
			CallbackWindow = 0x10000,
			CallbackThread = 0x20000
		}

		public enum WaveMessage
		{
			WaveInOpen = 958,
			WaveInClose = 959,
			WaveInData = 960,
			WaveOutClose = 956,
			WaveOutDone = 957,
			WaveOutOpen = 955
		}

		public delegate void WaveCallback(IntPtr hWaveOut, WaveMessage message, IntPtr dwInstance, WaveHeader wavhdr, IntPtr dwReserved);

		[DllImport("winmm.dll")]
		public static extern int mmioStringToFOURCC([MarshalAs(UnmanagedType.LPStr)] string s, int flags);

		[DllImport("winmm.dll")]
		public static extern int waveOutGetNumDevs();

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutPrepareHeader(IntPtr hWaveOut, WaveHeader lpWaveOutHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutUnprepareHeader(IntPtr hWaveOut, WaveHeader lpWaveOutHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutWrite(IntPtr hWaveOut, WaveHeader lpWaveOutHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutOpen(out IntPtr hWaveOut, IntPtr uDeviceID, WaveFormat lpFormat, WaveCallback dwCallback, IntPtr dwInstance, WaveInOutOpenFlags dwFlags);

		[DllImport("winmm.dll", EntryPoint = "waveOutOpen")]
		public static extern MmResult waveOutOpenWindow(out IntPtr hWaveOut, IntPtr uDeviceID, WaveFormat lpFormat, IntPtr callbackWindowHandle, IntPtr dwInstance, WaveInOutOpenFlags dwFlags);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutReset(IntPtr hWaveOut);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutClose(IntPtr hWaveOut);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutPause(IntPtr hWaveOut);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutRestart(IntPtr hWaveOut);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutGetPosition(IntPtr hWaveOut, ref MmTime mmTime, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutSetVolume(IntPtr hWaveOut, int dwVolume);

		[DllImport("winmm.dll")]
		public static extern MmResult waveOutGetVolume(IntPtr hWaveOut, out int dwVolume);

		[DllImport("winmm.dll", CharSet = CharSet.Auto)]
		public static extern MmResult waveOutGetDevCaps(IntPtr deviceID, out WaveOutCapabilities waveOutCaps, int waveOutCapsSize);

		[DllImport("winmm.dll")]
		public static extern int waveInGetNumDevs();

		[DllImport("winmm.dll", CharSet = CharSet.Auto)]
		public static extern MmResult waveInGetDevCaps(IntPtr deviceID, out WaveInCapabilities waveInCaps, int waveInCapsSize);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInAddBuffer(IntPtr hWaveIn, WaveHeader pwh, int cbwh);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInClose(IntPtr hWaveIn);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInOpen(out IntPtr hWaveIn, IntPtr uDeviceID, WaveFormat lpFormat, WaveCallback dwCallback, IntPtr dwInstance, WaveInOutOpenFlags dwFlags);

		[DllImport("winmm.dll", EntryPoint = "waveInOpen")]
		public static extern MmResult waveInOpenWindow(out IntPtr hWaveIn, IntPtr uDeviceID, WaveFormat lpFormat, IntPtr callbackWindowHandle, IntPtr dwInstance, WaveInOutOpenFlags dwFlags);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInPrepareHeader(IntPtr hWaveIn, WaveHeader lpWaveInHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInUnprepareHeader(IntPtr hWaveIn, WaveHeader lpWaveInHdr, int uSize);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInReset(IntPtr hWaveIn);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInStart(IntPtr hWaveIn);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInStop(IntPtr hWaveIn);

		[DllImport("winmm.dll")]
		public static extern MmResult waveInGetPosition(IntPtr hWaveIn, out MmTime mmTime, int uSize);
	}
	[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
	public struct WaveOutCapabilities
	{
		private short manufacturerId;

		private short productId;

		private int driverVersion;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
		private string productName;

		private SupportedWaveFormat supportedFormats;

		private short channels;

		private short reserved;

		private WaveOutSupport support;

		private Guid manufacturerGuid;

		private Guid productGuid;

		private Guid nameGuid;

		private const int MaxProductNameLength = 32;

		public int Channels => channels;

		public bool SupportsPlaybackRateControl => (support & WaveOutSupport.PlaybackRate) == WaveOutSupport.PlaybackRate;

		public string ProductName => productName;

		public Guid NameGuid => nameGuid;

		public Guid ProductGuid => productGuid;

		public Guid ManufacturerGuid => manufacturerGuid;

		public bool SupportsWaveFormat(SupportedWaveFormat waveFormat)
		{
			return (supportedFormats & waveFormat) == waveFormat;
		}
	}
	[Flags]
	public enum SupportedWaveFormat
	{
		WAVE_FORMAT_1M08 = 1,
		WAVE_FORMAT_1S08 = 2,
		WAVE_FORMAT_1M16 = 4,
		WAVE_FORMAT_1S16 = 8,
		WAVE_FORMAT_2M08 = 0x10,
		WAVE_FORMAT_2S08 = 0x20,
		WAVE_FORMAT_2M16 = 0x40,
		WAVE_FORMAT_2S16 = 0x80,
		WAVE_FORMAT_4M08 = 0x100,
		WAVE_FORMAT_4S08 = 0x200,
		WAVE_FORMAT_4M16 = 0x400,
		WAVE_FORMAT_4S16 = 0x800,
		WAVE_FORMAT_44M08 = 0x100,
		WAVE_FORMAT_44S08 = 0x200,
		WAVE_FORMAT_44M16 = 0x400,
		WAVE_FORMAT_44S16 = 0x800,
		WAVE_FORMAT_48M08 = 0x1000,
		WAVE_FORMAT_48S08 = 0x2000,
		WAVE_FORMAT_48M16 = 0x4000,
		WAVE_FORMAT_48S16 = 0x8000,
		WAVE_FORMAT_96M08 = 0x10000,
		WAVE_FORMAT_96S08 = 0x20000,
		WAVE_FORMAT_96M16 = 0x40000,
		WAVE_FORMAT_96S16 = 0x80000
	}
	[Flags]
	internal enum WaveOutSupport
	{
		Pitch = 1,
		PlaybackRate = 2,
		Volume = 4,
		LRVolume = 8,
		Sync = 0x10,
		SampleAccurate = 0x20
	}
	public class AcmMp3FrameDecompressor : IMp3FrameDecompressor, IDisposable
	{
		private readonly AcmStream conversionStream;

		private readonly WaveFormat pcmFormat;

		private bool disposed;

		public WaveFormat OutputFormat => pcmFormat;

		public AcmMp3FrameDecompressor(WaveFormat sourceFormat)
		{
			pcmFormat = AcmStream.SuggestPcmFormat(sourceFormat);
			try
			{
				conversionStream = new AcmStream(sourceFormat, pcmFormat);
			}
			catch (Exception)
			{
				disposed = true;
				GC.SuppressFinalize(this);
				throw;
			}
		}

		public int DecompressFrame(Mp3Frame frame, byte[] dest, int destOffset)
		{
			if (frame == null)
			{
				throw new ArgumentNullException("frame", "You must provide a non-null Mp3Frame to decompress");
			}
			Array.Copy(frame.RawData, conversionStream.SourceBuffer, frame.FrameLength);
			int sourceBytesConverted;
			int num = conversionStream.Convert(frame.FrameLength, out sourceBytesConverted);
			if (sourceBytesConverted != frame.FrameLength)
			{
				throw new InvalidOperationException($"Couldn't convert the whole MP3 frame (converted {sourceBytesConverted}/{frame.FrameLength})");
			}
			Array.Copy(conversionStream.DestBuffer, 0, dest, destOffset, num);
			return num;
		}

		public void Reset()
		{
			conversionStream.Reposition();
		}

		public void Dispose()
		{
			if (!disposed)
			{
				disposed = true;
				if (conversionStream != null)
				{
					conversionStream.Dispose();
				}
				GC.SuppressFinalize(this);
			}
		}

		~AcmMp3FrameDecompressor()
		{
			Dispose();
		}
	}
	public class WaveFormatConversionProvider : IWaveProvider, IDisposable
	{
		private readonly AcmStream conversionStream;

		private readonly IWaveProvider sourceProvider;

		private readonly int preferredSourceReadSize;

		private int leftoverDestBytes;

		private int leftoverDestOffset;

		private int leftoverSourceBytes;

		private bool isDisposed;

		public WaveFormat WaveFormat { get; }

		public WaveFormatConversionProvider(WaveFormat targetFormat, IWaveProvider sourceProvider)
		{
			this.sourceProvider = sourceProvider;
			WaveFormat = targetFormat;
			conversionStream = new AcmStream(sourceProvider.WaveFormat, targetFormat);
			preferredSourceReadSize = Math.Min(sourceProvider.WaveFormat.AverageBytesPerSecond, conversionStream.SourceBuffer.Length);
			preferredSourceReadSize -= preferredSourceReadSize % sourceProvider.WaveFormat.BlockAlign;
		}

		public void Reposition()
		{
			leftoverDestBytes = 0;
			leftoverDestOffset = 0;
			leftoverSourceBytes = 0;
			conversionStream.Reposition();
		}

		public int Read(byte[] buffer, int offset, int count)
		{
			int i = 0;
			if (count % WaveFormat.BlockAlign != 0)
			{
				count -= count % WaveFormat.BlockAlign;
			}
			int num5;
			for (; i < count; i += num5)
			{
				int num = Math.Min(count - i, leftoverDestBytes);
				if (num > 0)
				{
					Array.Copy(conversionStream.DestBuffer, leftoverDestOffset, buffer, offset + i, num);
					leftoverDestOffset += num;
					leftoverDestBytes -= num;
					i += num;
				}
				if (i >= count)
				{
					break;
				}
				int num2 = Math.Min(preferredSourceReadSize, conversionStream.SourceBuffer.Length - leftoverSourceBytes);
				int num3 = sourceProvider.Read(conversionStream.SourceBuffer, leftoverSourceBytes, num2) + leftoverSourceBytes;
				if (num3 == 0)
				{
					break;
				}
				int sourceBytesConverted;
				int num4 = conversionStream.Convert(num3, out sourceBytesConverted);
				if (sourceBytesConverted == 0)
				{
					break;
				}
				leftoverSourceBytes = num3 - sourceBytesConverted;
				if (leftoverSourceBytes > 0)
				{
					Buffer.BlockCopy(conversionStream.SourceBuffer, sourceBytesConverted, conversionStream.SourceBuffer, 0, leftoverSourceBytes);
				}
				if (num4 <= 0)
				{
					break;
				}
				int val = count - i;
				num5 = Math.Min(num4, val);
				if (num5 < num4)
				{
					leftoverDestBytes = num4 - num5;
					leftoverDestOffset = num5;
				}
				Array.Copy(conversionStream.DestBuffer, 0, buffer, i + offset, num5);
			}
			return i;
		}

		protected virtual void Dispose(bool disposing)
		{
			if (!isDisposed)
			{
				isDisposed = true;
				conversionStream?.Dispose();
			}
		}

		public void Dispose()
		{
			GC.SuppressFinalize(this);
			Dispose(disposing: true);
		}

		~WaveFormatConversionProvider()
		{
			Dispose(disposing: false);
		}
	}
	public class WaveFormatConversionStream : WaveStream
	{
		private readonly WaveFormatConversionProvider conversionProvider;

		private readonly WaveFormat targetFormat;

		private readonly long length;

		private long position;

		private readonly WaveStream sourceStream;

		private bool isDisposed;

		public override long Position
		{
			get
			{
				return position;
			}
			set
			{
				value -= value % ((WaveStream)this).BlockAlign;
				long num = EstimateDestToSource(value);
				((Stream)(object)sourceStream).Position = num;
				position = EstimateSourceToDest(((Stream)(object)sourceStream).Position);
				conversionProvider.Reposition();
			}
		}

		public override long Length => length;

		public override WaveFormat WaveFormat => targetFormat;

		public WaveFormatConversionStream(WaveFormat targetFormat, WaveStream sourceStream)
		{
			this.sourceStream = sourceStream;
			this.targetFormat = targetFormat;
			conversionProvider = new WaveFormatConversionProvider(targetFormat, (IWaveProvider)(object)sourceStream);
			length = EstimateSourceToDest((int)((Stream)(object)sourceStream).Length);
			position = 0L;
		}

		public static WaveStream CreatePcmStream(WaveStream sourceStream)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Invalid comparison between Unknown and I4
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Invalid comparison between Unknown and I4
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Expected O, but got Unknown
			if ((int)sourceStream.WaveFormat.Encoding == 1)
			{
				return sourceStream;
			}
			WaveFormat val = AcmStream.SuggestPcmFormat(sourceStream.WaveFormat);
			if (val.SampleRate < 8000)
			{
				if ((int)sourceStream.WaveFormat.Encoding != 163)
				{
					throw new InvalidOperationException("Invalid suggested output format, please explicitly provide a target format");
				}
				val = new WaveFormat(8000, 16, 1);
			}
			return (WaveStream)(object)new WaveFormatConversionStream(val, sourceStream);
		}

		[Obsolete("can be unreliable, use of this method not encouraged")]
		public int SourceToDest(int source)
		{
			return (int)EstimateSourceToDest(source);
		}

		private long EstimateSourceToDest(long source)
		{
			long num = source * targetFormat.AverageBytesPerSecond / sourceStream.WaveFormat.AverageBytesPerSecond;
			return num - num % targetFormat.BlockAlign;
		}

		private long EstimateDestToSource(long dest)
		{
			long num = dest * sourceStream.WaveFormat.AverageBytesPerSecond / targetFormat.AverageBytesPerSecond;
			return (int)(num - num % sourceStream.WaveFormat.BlockAlign);
		}

		[Obsolete("can be unreliable, use of this method not encouraged")]
		public int DestToSource(int dest)
		{
			return (int)EstimateDestToSource(dest);
		}

		public override int Read(byte[] buffer, int offset, int count)
		{
			int num = conversionProvider.Read(buffer, offset, count);
			position += num;
			return num;
		}

		protected override void Dispose(bool disposing)
		{
			if (!isDisposed)
			{
				isDisposed = true;
				if (disposing)
				{
					((Stream)(object)sourceStream).Dispose();
					conversionProvider.Dispose();
				}
			}
			((Stream)this).Dispose(disposing);
		}
	}
	public class WaveInBuffer : IDisposable
	{
		private readonly WaveHeader header;

		private readonly int bufferSize;

		private readonly byte[] buffer;

		private GCHandle hBuffer;

		private IntPtr waveInHandle;

		private GCHandle hHeader;

		private GCHandle hThis;

		public byte[] Data => buffer;

		public bool Done => (header.flags & WaveHeaderFlags.Done) == WaveHeaderFlags.Done;

		public bool InQueue => (header.flags & WaveHeaderFlags.InQueue) == WaveHeaderFlags.InQueue;

		public int BytesRecorded => header.bytesRecorded;

		public int BufferSize => bufferSize;

		public WaveInBuffer(IntPtr waveInHandle, int bufferSize)
		{
			//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
			this.bufferSize = bufferSize;
			buffer = new byte[bufferSize];
			hBuffer = GCHandle.Alloc(buffer, GCHandleType.Pinned);
			this.waveInHandle = waveInHandle;
			header = new WaveHeader();
			hHeader = GCHandle.Alloc(header, GCHandleType.Pinned);
			header.dataBuffer = hBuffer.AddrOfPinnedObject();
			header.bufferLength = bufferSize;
			header.loops = 1;
			hThis = GCHandle.Alloc(this);
			header.userData = (IntPtr)hThis;
			MmException.Try(WaveInterop.waveInPrepareHeader(waveInHandle, header, Marshal.SizeOf(header)), "waveInPrepareHeader");
		}

		public void Reuse()
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			MmException.Try(WaveInterop.waveInUnprepareHeader(waveInHandle, header, Marshal.SizeOf(header)), "waveUnprepareHeader");
			MmException.Try(WaveInterop.waveInPrepareHeader(waveInHandle, header, Marshal.SizeOf(header)), "waveInPrepareHeader");
			MmException.Try(WaveInterop.waveInAddBuffer(waveInHandle, header, Marshal.SizeOf(header)), "waveInAddBuffer");
		}

		~WaveInBuffer()
		{
			Dispose(disposing: false);
		}

		public void Dispose()
		{
			GC.SuppressFinalize(this);
			Dispose(disposing: true);
		}

		protected void Dispose(bool disposing)
		{
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			if (waveInHandle != IntPtr.Zero)
			{
				WaveInterop.waveInUnprepareHeader(waveInHandle, header, Marshal.SizeOf(header));
				waveInHandle = IntPtr.Zero;
			}
			if (hHeader.IsAllocated)
			{
				hHeader.Free();
			}
			if (hBuffer.IsAllocated)
			{
				hBuffer.Free();
			}
			if (hThis.IsAllocated)
			{
				hThis.Free();
			}
		}
	}
	public class WaveInEvent : IWaveIn, IDisposable
	{
		private readonly AutoResetEvent callbackEvent;

		private readonly SynchronizationContext syncContext;

		private IntPtr waveInHandle;

		private volatile CaptureState captureState;

		private WaveInBuffer[] buffers;

		public static int DeviceCount => WaveInterop.waveInGetNumDevs();

		public int BufferMilliseconds { get; set; }

		public int NumberOfBuffers { get; set; }

		public int DeviceNumber { get; set; }

		public WaveFormat WaveFormat { get; set; }

		public event EventHandler<WaveInEventArgs> DataAvailable;

		public event EventHandler<StoppedEventArgs> RecordingStopped;

		public WaveInEvent()
		{
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Expected O, but got Unknown
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			callbackEvent = new AutoResetEvent(initialState: false);
			syncContext = SynchronizationContext.Current;
			DeviceNumber = 0;
			WaveFormat = new WaveFormat(8000, 16, 1);
			BufferMilliseconds = 100;
			NumberOfBuffers = 3;
			captureState = (CaptureState)0;
		}

		public static WaveInCapabilities GetCapabilities(int devNumber)
		{
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			WaveInCapabilities waveInCaps = default(WaveInCapabilities);
			int waveInCapsSize = Marshal.SizeOf(waveInCaps);
			MmException.Try(WaveInterop.waveInGetDevCaps((IntPtr)devNumber, out waveInCaps, waveInCapsSize), "waveInGetDevCaps");
			return waveInCaps;
		}

		private void CreateBuffers()
		{
			int num = BufferMilliseconds * WaveFormat.AverageBytesPerSecond / 1000;
			if (num % WaveFormat.BlockAlign != 0)
			{
				num -= num % WaveFormat.BlockAlign;
			}
			buffers = new WaveInBuffer[NumberOfBuffers];
			for (int i = 0; i < buffers.Length; i++)
			{
				buffers[i] = new WaveInBuffer(waveInHandle, num);
			}
		}

		private void OpenWaveInDevice()
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			CloseWaveInDevice();
			MmException.Try(WaveInterop.waveInOpenWindow(out waveInHandle, (IntPtr)DeviceNumber, WaveFormat, callbackEvent.SafeWaitHandle.DangerousGetHandle(), IntPtr.Zero, WaveInterop.WaveInOutOpenFlags.CallbackEvent), "waveInOpen");
			CreateBuffers();
		}

		public void StartRecording()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			if ((int)captureState != 0)
			{
				throw new InvalidOperationException("Already recording");
			}
			OpenWaveInDevice();
			MmException.Try(WaveInterop.waveInStart(waveInHandle), "waveInStart");
			captureState = (CaptureState)1;
			ThreadPool.QueueUserWorkItem(delegate
			{
				RecordThread();
			}, null);
		}

		private void RecordThread()
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			Exception e = null;
			try
			{
				DoRecording();
			}
			catch (Exception ex)
			{
				e = ex;
			}
			finally
			{
				captureState = (CaptureState)0;
				RaiseRecordingStoppedEvent(e);
			}
		}

		private void DoRecording()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Invalid comparison between Unknown and I4
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Invalid comparison between Unknown and I4
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Expected O, but got Unknown
			captureState = (CaptureState)2;
			WaveInBuffer[] array = buffers;
			foreach (WaveInBuffer waveInBuffer in array)
			{
				if (!waveInBuffer.InQueue)
				{
					waveInBuffer.Reuse();
				}
			}
			while ((int)captureState == 2)
			{
				if (!callbackEvent.WaitOne())
				{
					continue;
				}
				array = buffers;
				foreach (WaveInBuffer waveInBuffer2 in array)
				{
					if (waveInBuffer2.Done)
					{
						if (waveInBuffer2.BytesRecorded > 0)
						{
							this.DataAvailable?.Invoke(this, new WaveInEventArgs(waveInBuffer2.Data, waveInBuffer2.BytesRecorded));
						}
						if ((int)captureState == 2)
						{
							waveInBuffer2.Reuse();
						}
					}
				}
			}
		}

		private void RaiseRecordingStoppedEvent(Exception e)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			EventHandler<StoppedEventArgs> handler = this.RecordingStopped;
			if (handler == null)
			{
				return;
			}
			if (syncContext == null)
			{
				handler(this, new StoppedEventArgs(e));
				return;
			}
			syncContext.Post(delegate
			{
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				//IL_001c: Expected O, but got Unknown
				handler(this, new StoppedEventArgs(e));
			}, null);
		}

		public void StopRecording()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			if ((int)captureState != 0)
			{
				captureState = (CaptureState)3;
				MmException.Try(WaveInterop.waveInStop(waveInHandle), "waveInStop");
				MmException.Try(WaveInterop.waveInReset(waveInHandle), "waveInReset");
				callbackEvent.Set();
			}
		}

		public long GetPosition()
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			MmTime mmTime = default(MmTime);
			mmTime.wType = 4u;
			MmException.Try(WaveInterop.waveInGetPosition(waveInHandle, out mmTime, Marshal.SizeOf(mmTime)), "waveInGetPosition");
			if (mmTime.wType != 4)
			{
				throw new Exception($"waveInGetPosition: wType -> Expected {4}, Received {mmTime.wType}");
			}
			return mmTime.cb;
		}

		protected virtual void Dispose(bool disposing)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			if (disposing)
			{
				if ((int)captureState != 0)
				{
					StopRecording();
				}
				CloseWaveInDevice();
			}
		}

		private void CloseWaveInDevice()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			WaveInterop.waveInReset(waveInHandle);
			if (buffers != null)
			{
				for (int i = 0; i < buffers.Length; i++)
				{
					buffers[i].Dispose();
				}
				buffers = null;
			}
			WaveInterop.waveInClose(waveInHandle);
			waveInHandle = IntPtr.Zero;
		}

		public MixerLine GetMixerLine()
		{
			if (waveInHandle != IntPtr.Zero)
			{
				return new MixerLine(waveInHandle, 0, MixerFlags.WaveInHandle);
			}
			return new MixerLine((IntPtr)DeviceNumber, 0, MixerFlags.WaveIn);
		}

		public void Dispose()
		{
			Dispose(disposing: true);
			GC.SuppressFinalize(this);
		}
	}
	public class WaveOutBuffer : IDisposable
	{
		private readonly WaveHeader header;

		private readonly int bufferSize;

		private readonly byte[] buffer;

		private readonly IWaveProvider waveStream;

		private readonly object waveOutLock;

		private GCHandle hBuffer;

		private IntPtr hWaveOut;

		private GCHandle hHeader;

		private GCHandle hThis;

		public bool InQueue => (header.flags & WaveHeaderFlags.InQueue) == WaveHeaderFlags.InQueue;

		public int BufferSize => bufferSize;

		public WaveOutBuffer(IntPtr hWaveOut, int bufferSize, IWaveProvider bufferFillStream, object waveOutLock)
		{
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			this.bufferSize = bufferSize;
			buffer = new byte[bufferSize];
			hBuffer = GCHandle.Alloc(buffer, GCHandleType.Pinned);
			this.hWaveOut = hWaveOut;
			waveStream = bufferFillStream;
			this.waveOutLock = waveOutLock;
			header = new WaveHeader();
			hHeader = GCHandle.Alloc(header, GCHandleType.Pinned);
			header.dataBuffer = hBuffer.AddrOfPinnedObject();
			header.bufferLength = bufferSize;
			header.loops = 1;
			hThis = GCHandle.Alloc(this);
			header.userData = (IntPtr)hThis;
			lock (waveOutLock)
			{
				MmException.Try(WaveInterop.waveOutPrepareHeader(hWaveOut, header, Marshal.SizeOf(header)), "waveOutPrepareHeader");
			}
		}

		~WaveOutBuffer()
		{
			Dispose(disposing: false);
		}

		public void Dispose()
		{
			GC.SuppressFinalize(this);
			Dispose(disposing: true);
		}

		protected void Dispose(bool disposing)
		{
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			if (hHeader.IsAllocated)
			{
				hHeader.Free();
			}
			if (hBuffer.IsAllocated)
			{
				hBuffer.Free();
			}
			if (hThis.IsAllocated)
			{
				hThis.Free();
			}
			if (hWaveOut != IntPtr.Zero)
			{
				lock (waveOutLock)
				{
					WaveInterop.waveOutUnprepareHeader(hWaveOut, header, Marshal.SizeOf(header));
				}
				hWaveOut = IntPtr.Zero;
			}
		}

		public bool OnDone()
		{
			int num;
			lock (waveStream)
			{
				num = waveStream.Read(buffer, 0, buffer.Length);
			}
			if (num == 0)
			{
				return false;
			}
			for (int i = num; i < buffer.Length; i++)
			{
				buffer[i] = 0;
			}
			WriteToWaveOut();
			return true;
		}

		private void WriteToWaveOut()
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			MmResult val;
			lock (waveOutLock)
			{
				val = WaveInterop.waveOutWrite(hWaveOut, header, Marshal.SizeOf(header));
			}
			if ((int)val != 0)
			{
				throw new MmException(val, "waveOutWrite");
			}
			GC.KeepAlive(this);
		}
	}
	public class WaveOutEvent : IWavePlayer, IDisposable, IWavePosition
	{
		private readonly object waveOutLock;

		private readonly SynchronizationContext syncContext;

		private IntPtr hWaveOut;

		private WaveOutBuffer[] buffers;

		private IWaveProvider waveStream;

		private volatile PlaybackState playbackState;

		private AutoResetEvent callbackEvent;

		public int DesiredLatency { get; set; }

		public int NumberOfBuffers { get; set; }

		public int DeviceNumber { get; set; } = -1;


		public WaveFormat OutputWaveFormat => waveStream.WaveFormat;

		public PlaybackState PlaybackState => playbackState;

		public float Volume
		{
			get
			{
				return WaveOutUtils.GetWaveOutVolume(hWaveOut, waveOutLock);
			}
			set
			{
				WaveOutUtils.SetWaveOutVolume(value, hWaveOut, waveOutLock);
			}
		}

		public event EventHandler<StoppedEventArgs> PlaybackStopped;

		public WaveOutEvent()
		{
			syncContext = SynchronizationContext.Current;
			if (syncContext != null && (syncContext.GetType().Name == "LegacyAspNetSynchronizationContext" || syncContext.GetType().Name == "AspNetSynchronizationContext"))
			{
				syncContext = null;
			}
			DesiredLatency = 300;
			NumberOfBuffers = 2;
			waveOutLock = new object();
		}

		public void Init(IWaveProvider waveProvider)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			if ((int)playbackState != 0)
			{
				throw new InvalidOperationException("Can't re-initialize during playback");
			}
			if (hWaveOut != IntPtr.Zero)
			{
				DisposeBuffers();
				CloseWaveOut();
			}
			callbackEvent = new AutoResetEvent(initialState: false);
			waveStream = waveProvider;
			int bufferSize = waveProvider.WaveFormat.ConvertLatencyToByteSize((DesiredLatency + NumberOfBuffers - 1) / NumberOfBuffers);
			MmResult val;
			lock (waveOutLock)
			{
				val = WaveInterop.waveOutOpenWindow(out hWaveOut, (IntPtr)DeviceNumber, waveStream.WaveFormat, callbackEvent.SafeWaitHandle.DangerousGetHandle(), IntPtr.Zero, WaveInterop.WaveInOutOpenFlags.CallbackEvent);
			}
			MmException.Try(val, "waveOutOpen");
			buffers = new WaveOutBuffer[NumberOfBuffers];
			playbackState = (PlaybackState)0;
			for (int i = 0; i < NumberOfBuffers; i++)
			{
				buffers[i] = new WaveOutBuffer(hWaveOut, bufferSize, waveStream, waveOutLock);
			}
		}

		public void Play()
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Invalid comparison between Unknown and I4
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			if (buffers == null || waveStream == null)
			{
				throw new InvalidOperationException("Must call Init first");
			}
			if ((int)playbackState == 0)
			{
				playbackState = (PlaybackState)1;
				callbackEvent.Set();
				ThreadPool.QueueUserWorkItem(delegate
				{
					PlaybackThread();
				}, null);
			}
			else if ((int)playbackState == 2)
			{
				Resume();
				callbackEvent.Set();
			}
		}

		private void PlaybackThread()
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			Exception e = null;
			try
			{
				DoPlayback();
			}
			catch (Exception ex)
			{
				e = ex;
			}
			finally
			{
				playbackState = (PlaybackState)0;
				RaisePlaybackStoppedEvent(e);
			}
		}

		private void DoPlayback()
		{
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Invalid comparison between Unknown and I4
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			while ((int)playbackState != 0)
			{
				if (!callbackEvent.WaitOne(DesiredLatency))
				{
					_ = playbackState;
					_ = 1;
				}
				if ((int)playbackState != 1)
				{
					continue;
				}
				int num = 0;
				WaveOutBuffer[] array = buffers;
				foreach (WaveOutBuffer waveOutBuffer in array)
				{
					if (waveOutBuffer.InQueue || waveOutBuffer.OnDone())
					{
						num++;
					}
				}
				if (num == 0)
				{
					playbackState = (PlaybackState)0;
					callbackEvent.Set();
				}
			}
		}

		public void Pause()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Invalid comparison between Unknown and I4
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			if ((int)playbackState == 1)
			{
				playbackState = (PlaybackState)2;
				MmResult val;
				lock (waveOutLock)
				{
					val = WaveInterop.waveOutPause(hWaveOut);
				}
				if ((int)val != 0)
				{
					throw new MmException(val, "waveOutPause");
				}
			}
		}

		private void Resume()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Invalid comparison between Unknown and I4
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			if ((int)playbackState == 2)
			{
				MmResult val;
				lock (waveOutLock)
				{
					val = WaveInterop.waveOutRestart(hWaveOut);
				}
				if ((int)val != 0)
				{
					throw new MmException(val, "waveOutRestart");
				}
				playbackState = (PlaybackState)1;
			}
		}

		public void Stop()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			if ((int)playbackState != 0)
			{
				playbackState = (PlaybackState)0;
				MmResult val;
				lock (waveOutLock)
				{
					val = WaveInterop.waveOutReset(hWaveOut);
				}
				if ((int)val != 0)
				{
					throw new MmException(val, "waveOutReset");
				}
				callbackEvent.Set();
			}
		}

		public long GetPosition()
		{
			return WaveOutUtils.GetPositionBytes(hWaveOut, waveOutLock);
		}

		public void Dispose()
		{
			GC.SuppressFinalize(this);
			Dispose(disposing: true);
		}

		protected void Dispose(bool disposing)
		{
			Stop();
			if (disposing)
			{
				DisposeBuffers();
			}
			CloseWaveOut();
		}

		private void CloseWaveOut()
		{
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			if (callbackEvent != null)
			{
				callbackEvent.Close();
				callbackEvent = null;
			}
			lock (waveOutLock)
			{
				if (hWaveOut != IntPtr.Zero)
				{
					WaveInterop.waveOutClose(hWaveOut);
					hWaveOut = IntPtr.Zero;
				}
			}
		}

		private void DisposeBuffers()
		{
			if (buffers != null)
			{
				WaveOutBuffer[] array = buffers;
				for (int i = 0; i < array.Length; i++)
				{
					array[i].Dispose();
				}
				buffers = null;
			}
		}

		~WaveOutEvent()
		{
			Dispose(disposing: false);
		}

		private void RaisePlaybackStoppedEvent(Exception e)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			EventHandler<StoppedEventArgs> handler = this.PlaybackStopped;
			if (handler == null)
			{
				return;
			}
			if (syncContext == null)
			{
				handler(this, new StoppedEventArgs(e));
				return;
			}
			syncContext.Post(delegate
			{
				//IL_0012: Unknown result type (might be due to invalid IL or missing references)
				//IL_001c: Expected O, but got Unknown
				handler(this, new StoppedEventArgs(e));
			}, null);
		}
	}
	public static class WaveOutUtils
	{
		public static float GetWaveOutVolume(IntPtr hWaveOut, object lockObject)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			MmResult val;
			int dwVolume;
			lock (lockObject)
			{
				val = WaveInterop.waveOutGetVolume(hWaveOut, out dwVolume);
			}
			MmException.Try(val, "waveOutGetVolume");
			return (float)(dwVolume & 0xFFFF) / 65535f;
		}

		public static void SetWaveOutVolume(float value, IntPtr hWaveOut, object lockObject)
		{
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Unknown result type (might be due to invalid IL or missing references)
			if (value < 0f)
			{
				throw new ArgumentOutOfRangeException("value", "Volume must be between 0.0 and 1.0");
			}
			if (value > 1f)
			{
				throw new ArgumentOutOfRangeException("value", "Volume must be between 0.0 and 1.0");
			}
			int dwVolume = (int)(value * 65535f) + ((int)(value * 65535f) << 16);
			MmResult val;
			lock (lockObject)
			{
				val = WaveInterop.waveOutSetVolume(hWaveOut, dwVolume);
			}
			MmException.Try(val, "waveOutSetVolume");
		}

		public static long GetPositionBytes(IntPtr hWaveOut, object lockObject)
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			lock (lockObject)
			{
				MmTime mmTime = default(MmTime);
				mmTime.wType = 4u;
				MmException.Try(WaveInterop.waveOutGetPosition(hWaveOut, ref mmTime, Marshal.SizeOf(mmTime)), "waveOutGetPosition");
				if (mmTime.wType != 4)
				{
					throw new Exception($"waveOutGetPosition: wType -> Expected {4}, Received {mmTime.wType}");
				}
				return mmTime.cb;
			}
		}
	}
}
namespace NAudio.Wave.Compression
{
	public class AcmDriver : IDisposable
	{
		private static List<AcmDriver> drivers;

		private AcmDriverDetails details;

		private IntPtr driverId;

		private IntPtr driverHandle;

		private List<AcmFormatTag> formatTags;

		private List<AcmFormat> tempFormatsList;

		private IntPtr localDllHandle;

		public int MaxFormatSize
		{
			get
			{
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				MmException.Try(AcmInterop.acmMetrics(driverHandle, AcmMetrics.MaxSizeFormat, out var output), "acmMetrics");
				return output;
			}
		}

		public string ShortName => details.shortName;

		public string LongName => details.longName;

		public IntPtr DriverId => driverId;

		public IEnumerable<AcmFormatTag> FormatTags
		{
			get
			{
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				if (formatTags == null)
				{
					if (driverHandle == IntPtr.Zero)
					{
						throw new InvalidOperationException("Driver must be opened first");
					}
					formatTags = new List<AcmFormatTag>();
					AcmFormatTagDetails formatTagDetails = default(AcmFormatTagDetails);
					formatTagDetails.structureSize = Marshal.SizeOf(formatTagDetails);
					MmException.Try(AcmInterop.acmFormatTagEnum(driverHandle, ref formatTagDetails, AcmFormatTagEnumCallback, IntPtr.Zero, 0), "acmFormatTagEnum");
				}
				return formatTags;
			}
		}

		public static bool IsCodecInstalled(string shortName)
		{
			foreach (AcmDriver item in EnumerateAcmDrivers())
			{
				if (item.ShortName == shortName)
				{
					return true;
				}
			}
			return false;
		}

		public static AcmDriver AddLocalDriver(string driverFile)
		{
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			IntPtr intPtr = NativeMethods.LoadLibrary(driverFile);
			if (intPtr == IntPtr.Zero)
			{
				throw new ArgumentException("Failed to load driver file");
			}
			IntPtr procAddress = NativeMethods.GetProcAddress(intPtr, "DriverProc");
			if (procAddress == IntPtr.Zero)
			{
				NativeMethods.FreeLibrary(intPtr);
				throw new ArgumentException("Failed to discover DriverProc");
			}
			IntPtr hAcmDriver;
			MmResult val = AcmInterop.acmDriverAdd(out hAcmDriver, intPtr, procAddress, 0, AcmDriverAddFlags.Function);
			if ((int)val != 0)
			{
				NativeMethods.FreeLibrary(intPtr);
				throw new MmException(val, "acmDriverAdd");
			}
			AcmDriver acmDriver = new AcmDriver(hAcmDriver);
			if (string.IsNullOrEmpty(acmDriver.details.longName))
			{
				acmDriver.details.longName = "Local driver: " + Path.GetFileName(driverFile);
				acmDriver.localDllHandle = intPtr;
			}
			return acmDriver;
		}

		public static void RemoveLocalDriver(AcmDriver localDriver)
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			if (localDriver.localDllHandle == IntPtr.Zero)
			{
				throw new ArgumentException("Please pass in the AcmDriver returned by the AddLocalDriver method");
			}
			MmResult val = AcmInterop.acmDriverRemove(localDriver.driverId, 0);
			NativeMethods.FreeLibrary(localDriver.localDllHandle);
			MmException.Try(val, "acmDriverRemove");
		}

		public static bool ShowFormatChooseDialog(IntPtr ownerWindowHandle, string windowTitle, AcmFormatEnumFlags enumFlags, WaveFormat enumFormat, out WaveFormat selectedFormat, out string selectedFormatDescription, out string selectedFormatTagDescription)
		{
			//IL_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Invalid comparison between Unknown and I4
			//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Invalid comparison between Unknown and I4
			//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			AcmFormatChoose formatChoose = default(AcmFormatChoose);
			formatChoose.structureSize = Marshal.SizeOf(formatChoose);
			formatChoose.styleFlags = AcmFormatChooseStyleFlags.None;
			formatChoose.ownerWindowHandle = ownerWindowHandle;
			int num = 200;
			formatChoose.selectedWaveFormatPointer = Marshal.AllocHGlobal(num);
			formatChoose.selectedWaveFormatByteSize = num;
			formatChoose.title = windowTitle;
			formatChoose.name = null;
			formatChoose.formatEnumFlags = enumFlags;
			formatChoose.waveFormatEnumPointer = IntPtr.Zero;
			if (enumFormat != null)
			{
				IntPtr intPtr = Marshal.AllocHGlobal(Marshal.SizeOf<WaveFormat>(enumFormat));
				Marshal.StructureToPtr<WaveFormat>(enumFormat, intPtr, fDeleteOld: false);
				formatChoose.waveFormatEnumPointer = intPtr;
			}
			formatChoose.instanceHandle = IntPtr.Zero;
			formatChoose.templateName = null;
			MmResult val = AcmInterop.acmFormatChoose(ref formatChoose);
			selectedFormat = null;
			selectedFormatDescription = null;
			selectedFormatTagDescription = null;
			if ((int)val == 0)
			{
				selectedFormat = WaveFormat.MarshalFromPtr(formatChoose.selectedWaveFormatPointer);
				selectedFormatDescription = formatChoose.formatDescription;
				selectedFormatTagDescription = formatChoose.formatTagDescription;
			}
			Marshal.FreeHGlobal(formatChoose.waveFormatEnumPointer);
			Marshal.FreeHGlobal(formatChoose.selectedWaveFormatPointer);
			if ((int)val != 515 && (int)val != 0)
			{
				throw new MmException(val, "acmFormatChoose");
			}
			return (int)val == 0;
		}

		public static AcmDriver FindByShortName(string shortName)
		{
			foreach (AcmDriver item in EnumerateAcmDrivers())
			{
				if (item.ShortName == shortName)
				{
					return item;
				}
			}
			return null;
		}

		public static IEnumerable<AcmDriver> EnumerateAcmDrivers()
		{
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			drivers = new List<AcmDriver>();
			MmException.Try(AcmInterop.acmDriverEnum(DriverEnumCallback, IntPtr.Zero, (AcmDriverEnumFlags)0), "acmDriverEnum");
			return drivers;
		}

		private static bool DriverEnumCallback(IntPtr hAcmDriver, IntPtr dwInstance, AcmDriverDetailsSupportFlags flags)
		{
			drivers.Add(new AcmDriver(hAcmDriver));
			return true;
		}

		private AcmDriver(IntPtr hAcmDriver)
		{
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			driverId = hAcmDriver;
			details = default(AcmDriverDetails);
			details.structureSize = Marshal.SizeOf(details);
			MmException.Try(AcmInterop.acmDriverDetails(hAcmDriver, ref details, 0), "acmDriverDetails");
		}

		public override string ToString()
		{
			return LongName;
		}

		public IEnumerable<AcmFormat> GetFormats(AcmFormatTag formatTag)
		{
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Expected I4, but got Unknown
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			if (driverHandle == IntPtr.Zero)
			{
				throw new InvalidOperationException("Driver must be opened first");
			}
			tempFormatsList = new List<AcmFormat>();
			AcmFormatDetails formatDetails = default(AcmFormatDetails);
			formatDetails.structSize = Marshal.SizeOf(formatDetails);
			formatDetails.waveFormatByteSize = 1024;
			formatDetails.waveFormatPointer = Marshal.AllocHGlobal(formatDetails.waveFormatByteSize);
			formatDetails.formatTag = (int)formatTag.FormatTag;
			MmResult val = AcmInterop.acmFormatEnum(driverHandle, ref formatDetails, AcmFormatEnumCallback, IntPtr.Zero, AcmFormatEnumFlags.None);
			Marshal.FreeHGlobal(formatDetails.waveFormatPointer);
			MmException.Try(val, "acmFormatEnum");
			return tempFormatsList;
		}

		public void Open()
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			if (driverHandle == IntPtr.Zero)
			{
				MmException.Try(AcmInterop.acmDriverOpen(out driverHandle, DriverId, 0), "acmDriverOpen");
			}
		}

		public void Close()
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			if (driverHandle != IntPtr.Zero)
			{
				MmException.Try(AcmInterop.acmDriverClose(driverHandle, 0), "acmDriverClose");
				driverHandle = IntPtr.Zero;
			}
		}

		private bool AcmFormatTagEnumCallback(IntPtr hAcmDriverId, ref AcmFormatTagDetails formatTagDetails, IntPtr dwInstance, AcmDriverDetailsSupportFlags flags)
		{
			formatTags.Add(new AcmFormatTag(formatTagDetails));
			return true;
		}

		private bool AcmFormatEnumCallback(IntPtr hAcmDriverId, ref AcmFormatDetails formatDetails, IntPtr dwInstance, AcmDriverDetailsSupportFlags flags)
		{
			tempFormatsList.Add(new AcmFormat(formatDetails));
			return true;
		}

		public void Dispose()
		{
			if (driverHandle != IntPtr.Zero)
			{
				Close();
				GC.SuppressFinalize(this);
			}
		}
	}
	internal enum AcmDriverAddFlags
	{
		Local = 0,
		Global = 8,
		Function = 3,
		NotifyWindowHandle = 4
	}
	[StructLayout(LayoutKind.Sequential, Pack = 2)]
	internal struct AcmDriverDetails
	{
		public int structureSize;

		public uint fccType;

		public uint fccComp;

		public ushort manufacturerId;

		public ushort productId;

		public uint acmVersion;

		public uint driverVersion;

		public AcmDriverDetailsSupportFlags supportFlags;

		public int formatTagsCount;

		public int filterTagsCount;

		public IntPtr hicon;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
		public string shortName;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
		public string longName;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
		public string copyright;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
		public string licensing;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
		public string features;

		private const int ShortNameChars = 32;

		private const int LongNameChars = 128;

		private const int CopyrightChars = 80;

		private const int LicensingChars = 128;

		private const int FeaturesChars = 512;
	}
	[Flags]
	public enum AcmDriverDetailsSupportFlags
	{
		Codec = 1,
		Converter = 2,
		Filter = 4,
		Hardware = 8,
		Async = 0x10,
		Local = 0x40000000,
		Disabled = int.MinValue
	}
	[Flags]
	internal enum AcmDriverEnumFlags
	{
		NoLocal = 0x40000000,
		Disabled = int.MinValue
	}
	public class AcmFormat
	{
		private readonly AcmFormatDetails formatDetails;

		public int FormatIndex => formatDetails.formatIndex;

		public WaveFormatEncoding FormatTag => (WaveFormatEncoding)(ushort)formatDetails.formatTag;

		public AcmDriverDetailsSupportFlags SupportFlags => formatDetails.supportFlags;

		public WaveFormat WaveFormat { get; private set; }

		public int WaveFormatByteSize => formatDetails.waveFormatByteSize;

		public string FormatDescription => formatDetails.formatDescription;

		internal AcmFormat(AcmFormatDetails formatDetails)
		{
			this.formatDetails = formatDetails;
			WaveFormat = WaveFormat.MarshalFromPtr(formatDetails.waveFormatPointer);
		}
	}
	[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 4)]
	internal struct AcmFormatChoose
	{
		public int structureSize;

		public AcmFormatChooseStyleFlags styleFlags;

		public IntPtr ownerWindowHandle;

		public IntPtr selectedWaveFormatPointer;

		public int selectedWaveFormatByteSize;

		[MarshalAs(UnmanagedType.LPTStr)]
		public string title;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 48)]
		public string formatTagDescription;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
		public string formatDescription;

		[MarshalAs(UnmanagedType.LPTStr)]
		public string name;

		public int nameByteSize;

		public AcmFormatEnumFlags formatEnumFlags;

		public IntPtr waveFormatEnumPointer;

		public IntPtr instanceHandle;

		[MarshalAs(UnmanagedType.LPTStr)]
		public string templateName;

		public IntPtr customData;

		public AcmInterop.AcmFormatChooseHookProc windowCallbackFunction;
	}
	[Flags]
	internal enum AcmFormatChooseStyleFlags
	{
		None = 0,
		ShowHelp = 4,
		EnableHook = 8,
		EnableTemplate = 0x10,
		EnableTemplateHandle = 0x20,
		InitToWfxStruct = 0x40,
		ContextHelp = 0x80
	}
	[StructLayout(LayoutKind.Sequential, Pack = 4)]
	internal struct AcmFormatDetails
	{
		public int structSize;

		public int formatIndex;

		public int formatTag;

		public AcmDriverDetailsSupportFlags supportFlags;

		public IntPtr waveFormatPointer;

		public int waveFormatByteSize;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
		public string formatDescription;

		public const int FormatDescriptionChars = 128;
	}
	[Flags]
	public enum AcmFormatEnumFlags
	{
		None = 0,
		Convert = 0x100000,
		Hardware = 0x400000,
		Input = 0x800000,
		Channels = 0x20000,
		SamplesPerSecond = 0x40000,
		Output = 0x1000000,
		Suggest = 0x200000,
		BitsPerSample = 0x80000,
		FormatTag = 0x10000
	}
	[Flags]
	internal enum AcmFormatSuggestFlags
	{
		FormatTag = 0x10000,
		Channels = 0x20000,
		SamplesPerSecond = 0x40000,
		BitsPerSample = 0x80000,
		TypeMask = 0xFF0000
	}
	public class AcmFormatTag
	{
		private AcmFormatTagDetails formatTagDetails;

		public int FormatTagIndex => formatTagDetails.formatTagIndex;

		public WaveFormatEncoding FormatTag => (WaveFormatEncoding)(ushort)formatTagDetails.formatTag;

		public int FormatSize => formatTagDetails.formatSize;

		public AcmDriverDetailsSupportFlags SupportFlags => formatTagDetails.supportFlags;

		public int StandardFormatsCount => formatTagDetails.standardFormatsCount;

		public string FormatDescription => formatTagDetails.formatDescription;

		internal AcmFormatTag(AcmFormatTagDetails formatTagDetails)
		{
			this.formatTagDetails = formatTagDetails;
		}
	}
	internal struct AcmFormatTagDetails
	{
		public int structureSize;

		public int formatTagIndex;

		public int formatTag;

		public int formatSize;

		public AcmDriverDetailsSupportFlags supportFlags;

		public int standardFormatsCount;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 48)]
		public string formatDescription;

		public const int FormatTagDescriptionChars = 48;
	}
	internal class AcmInterop
	{
		public delegate bool AcmDriverEnumCallback(IntPtr hAcmDriverId, IntPtr instance, AcmDriverDetailsSupportFlags flags);

		public delegate bool AcmFormatEnumCallback(IntPtr hAcmDriverId, ref AcmFormatDetails formatDetails, IntPtr dwInstance, AcmDriverDetailsSupportFlags flags);

		public delegate bool AcmFormatTagEnumCallback(IntPtr hAcmDriverId, ref AcmFormatTagDetails formatTagDetails, IntPtr dwInstance, AcmDriverDetailsSupportFlags flags);

		public delegate bool AcmFormatChooseHookProc(IntPtr windowHandle, int message, IntPtr wParam, IntPtr lParam);

		[DllImport("msacm32.dll")]
		public static extern MmResult acmDriverAdd(out IntPtr driverHandle, IntPtr driverModule, IntPtr driverFunctionAddress, int priority, AcmDriverAddFlags flags);

		[DllImport("msacm32.dll")]
		public static extern MmResult acmDriverRemove(IntPtr driverHandle, int removeFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmDriverClose(IntPtr hAcmDriver, int closeFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmDriverEnum(AcmDriverEnumCallback fnCallback, IntPtr dwInstance, AcmDriverEnumFlags flags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmDriverDetails(IntPtr hAcmDriver, ref AcmDriverDetails driverDetails, int reserved);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmDriverOpen(out IntPtr pAcmDriver, IntPtr hAcmDriverId, int openFlags);

		[DllImport("Msacm32.dll", EntryPoint = "acmFormatChooseW")]
		public static extern MmResult acmFormatChoose(ref AcmFormatChoose formatChoose);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmFormatEnum(IntPtr hAcmDriver, ref AcmFormatDetails formatDetails, AcmFormatEnumCallback callback, IntPtr instance, AcmFormatEnumFlags flags);

		[DllImport("Msacm32.dll", EntryPoint = "acmFormatSuggest")]
		public static extern MmResult acmFormatSuggest2(IntPtr hAcmDriver, IntPtr sourceFormatPointer, IntPtr destFormatPointer, int sizeDestFormat, AcmFormatSuggestFlags suggestFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmFormatTagEnum(IntPtr hAcmDriver, ref AcmFormatTagDetails formatTagDetails, AcmFormatTagEnumCallback callback, IntPtr instance, int reserved);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmMetrics(IntPtr hAcmObject, AcmMetrics metric, out int output);

		[DllImport("Msacm32.dll", EntryPoint = "acmStreamOpen")]
		public static extern MmResult acmStreamOpen2(out IntPtr hAcmStream, IntPtr hAcmDriver, IntPtr sourceFormatPointer, IntPtr destFormatPointer, [In] WaveFilter waveFilter, IntPtr callback, IntPtr instance, AcmStreamOpenFlags openFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmStreamClose(IntPtr hAcmStream, int closeFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmStreamConvert(IntPtr hAcmStream, [In][Out] AcmStreamHeaderStruct streamHeader, AcmStreamConvertFlags streamConvertFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmStreamPrepareHeader(IntPtr hAcmStream, [In][Out] AcmStreamHeaderStruct streamHeader, int prepareFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmStreamReset(IntPtr hAcmStream, int resetFlags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmStreamSize(IntPtr hAcmStream, int inputBufferSize, out int outputBufferSize, AcmStreamSizeFlags flags);

		[DllImport("Msacm32.dll")]
		public static extern MmResult acmStreamUnprepareHeader(IntPtr hAcmStream, [In][Out] AcmStreamHeaderStruct streamHeader, int flags);
	}
	public class AcmStream : IDisposable
	{
		private IntPtr streamHandle;

		private IntPtr driverHandle;

		private AcmStreamHeader streamHeader;

		private readonly WaveFormat sourceFormat;

		public byte[] SourceBuffer => streamHeader.SourceBuffer;

		public byte[] DestBuffer => streamHeader.DestBuffer;

		public AcmStream(WaveFormat sourceFormat, WaveFormat destFormat)
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				streamHandle = IntPtr.Zero;
				this.sourceFormat = sourceFormat;
				int num = Math.Max(65536, sourceFormat.AverageBytesPerSecond);
				num -= num % sourceFormat.BlockAlign;
				IntPtr intPtr = WaveFormat.MarshalToPtr(sourceFormat);
				IntPtr intPtr2 = WaveFormat.MarshalToPtr(destFormat);
				try
				{
					MmException.Try(AcmInterop.acmStreamOpen2(out streamHandle, IntPtr.Zero, intPtr, intPtr2, null, IntPtr.Zero, IntPtr.Zero, AcmStreamOpenFlags.NonRealTime), "acmStreamOpen");
				}
				finally
				{
					Marshal.FreeHGlobal(intPtr);
					Marshal.FreeHGlobal(intPtr2);
				}
				int destBufferLength = SourceToDest(num);
				streamHeader = new AcmStreamHeader(streamHandle, num, destBufferLength);
				driverHandle = IntPtr.Zero;
			}
			catch
			{
				Dispose();
				throw;
			}
		}

		public AcmStream(IntPtr driverId, WaveFormat sourceFormat, WaveFilter waveFilter)
		{
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0061: Unknown result type (might be due to invalid IL or missing references)
			int num = Math.Max(16384, sourceFormat.AverageBytesPerSecond);
			this.sourceFormat = sourceFormat;
			num -= num % sourceFormat.BlockAlign;
			MmException.Try(AcmInterop.acmDriverOpen(out driverHandle, driverId, 0), "acmDriverOpen");
			IntPtr intPtr = WaveFormat.MarshalToPtr(sourceFormat);
			try
			{
				MmException.Try(AcmInterop.acmStreamOpen2(out streamHandle, driverHandle, intPtr, intPtr, waveFilter, IntPtr.Zero, IntPtr.Zero, AcmStreamOpenFlags.NonRealTime), "acmStreamOpen");
			}
			finally
			{
				Marshal.FreeHGlobal(intPtr);
			}
			streamHeader = new AcmStreamHeader(streamHandle, num, SourceToDest(num));
		}

		public int SourceToDest(int source)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			if (source == 0)
			{
				return 0;
			}
			MmException.Try(AcmInterop.acmStreamSize(streamHandle, source, out var outputBufferSize, AcmStreamSizeFlags.Source), "acmStreamSize");
			return outputBufferSize;
		}

		public int DestToSource(int dest)
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			if (dest == 0)
			{
				return 0;
			}
			MmException.Try(AcmInterop.acmStreamSize(streamHandle, dest, out var outputBufferSize, AcmStreamSizeFlags.Destination), "acmStreamSize");
			return outputBufferSize;
		}

		public static WaveFormat SuggestPcmFormat(WaveFormat compressedFormat)
		{
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Expected O, but got Unknown
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			WaveFormat val = new WaveFormat(compressedFormat.SampleRate, 16, compressedFormat.Channels);
			IntPtr intPtr = WaveFormat.MarshalToPtr(val);
			IntPtr intPtr2 = WaveFormat.MarshalToPtr(compressedFormat);
			try
			{
				MmResult val2 = AcmInterop.acmFormatSuggest2(IntPtr.Zero, intPtr2, intPtr, Marshal.SizeOf<WaveFormat>(val), AcmFormatSuggestFlags.FormatTag);
				val = WaveFormat.MarshalFromPtr(intPtr);
				MmException.Try(val2, "acmFormatSuggest");
				return val;
			}
			finally
			{
				Marshal.FreeHGlobal(intPtr);
				Marshal.FreeHGlobal(intPtr2);
			}
		}

		public void Reposition()
		{
			streamHeader.Reposition();
		}

		public int Convert(int bytesToConvert, out int sourceBytesConverted)
		{
			if (bytesToConvert % sourceFormat.BlockAlign != 0)
			{
				bytesToConvert -= bytesToConvert % sourceFormat.BlockAlign;
			}
			return streamHeader.Convert(bytesToConvert, out sourceBytesConverted);
		}

		[Obsolete("Call the version returning sourceBytesConverted instead")]
		public int Convert(int bytesToConvert)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			int sourceBytesConverted;
			int result = Convert(bytesToConvert, out sourceBytesConverted);
			if (sourceBytesConverted != bytesToConvert)
			{
				throw new MmException((MmResult)8, "AcmStreamHeader.Convert didn't convert everything");
			}
			return result;
		}

		public void Dispose()
		{
			Dispose(disposing: true);
			GC.SuppressFinalize(this);
		}

		protected virtual void Dispose(bool disposing)
		{
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0050: Unknown result type (might be due to invalid IL or missing references)
			if (disposing && streamHeader != null)
			{
				streamHeader.Dispose();
				streamHeader = null;
			}
			if (streamHandle != IntPtr.Zero)
			{
				MmResult val = AcmInterop.acmStreamClose(streamHandle, 0);
				streamHandle = IntPtr.Zero;
				if ((int)val != 0)
				{
					throw new MmException(val, "acmStreamClose");
				}
			}
			if (driverHandle != IntPtr.Zero)
			{
				AcmInterop.acmDriverClose(driverHandle, 0);
				driverHandle = IntPtr.Zero;
			}
		}

		~AcmStream()
		{
			Dispose(disposing: false);
		}
	}
	internal class AcmStreamHeader : IDisposable
	{
		private AcmStreamHeaderStruct streamHeader;

		private GCHandle hSourceBuffer;

		private GCHandle hDestBuffer;

		private IntPtr streamHandle;

		private bool firstTime;

		private bool disposed;

		public byte[] SourceBuffer { get; private set; }

		public byte[] DestBuffer { get; private set; }

		public AcmStreamHeader(IntPtr streamHandle, int sourceBufferLength, int destBufferLength)
		{
			streamHeader = new AcmStreamHeaderStruct();
			SourceBuffer = new byte[sourceBufferLength];
			hSourceBuffer = GCHandle.Alloc(SourceBuffer, GCHandleType.Pinned);
			DestBuffer = new byte[destBufferLength];
			hDestBuffer = GCHandle.Alloc(DestBuffer, GCHandleType.Pinned);
			this.streamHandle = streamHandle;
			firstTime = true;
		}

		private void Prepare()
		{
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			streamHeader.cbStruct = Marshal.SizeOf(streamHeader);
			streamHeader.sourceBufferLength = SourceBuffer.Length;
			streamHeader.sourceBufferPointer = hSourceBuffer.AddrOfPinnedObject();
			streamHeader.destBufferLength = DestBuffer.Length;
			streamHeader.destBufferPointer = hDestBuffer.AddrOfPinnedObject();
			MmException.Try(AcmInterop.acmStreamPrepareHeader(streamHandle, streamHeader, 0), "acmStreamPrepareHeader");
		}

		private void Unprepare()
		{
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			streamHeader.sourceBufferLength = SourceBuffer.Length;
			streamHeader.sourceBufferPointer = hSourceBuffer.AddrOfPinnedObject();
			streamHeader.destBufferLength = DestBuffer.Length;
			streamHeader.destBufferPointer = hDestBuffer.AddrOfPinnedObject();
			MmResult val = AcmInterop.acmStreamUnprepareHeader(streamHandle, streamHeader, 0);
			if ((int)val != 0)
			{
				throw new MmException(val, "acmStreamUnprepareHeader");
			}
		}

		public void Reposition()
		{
			firstTime = true;
		}

		public int Convert(int bytesToConvert, out int sourceBytesConverted)
		{
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			Prepare();
			try
			{
				streamHeader.sourceBufferLength = bytesToConvert;
				streamHeader.sourceBufferLengthUsed = bytesToConvert;
				AcmStreamConvertFlags streamConvertFlags = (firstTime ? (AcmStreamConvertFlags.BlockAlign | AcmStreamConvertFlags.Start) : AcmStreamConvertFlags.BlockAlign);
				MmException.Try(AcmInterop.acmStreamConvert(streamHandle, streamHeader, streamConvertFlags), "acmStreamConvert");
				firstTime = false;
				sourceBytesConverted = streamHeader.sourceBufferLengthUsed;
			}
			finally
			{
				Unprepare();
			}
			return streamHeader.destBufferLengthUsed;
		}

		public void Dispose()
		{
			GC.SuppressFinalize(this);
			Dispose(disposing: true);
		}

		protected virtual void Dispose(bool disposing)
		{
			if (!disposed)
			{
				SourceBuffer = null;
				DestBuffer = null;
				hSourceBuffer.Free();
				hDestBuffer.Free();
			}
			disposed = true;
		}

		~AcmStreamHeader()
		{
			Dispose(disposing: false);
		}
	}
	[Flags]
	internal enum AcmStreamHeaderStatusFlags
	{
		Done = 0x10000,
		Prepared = 0x20000,
		InQueue = 0x100000
	}
	[StructLayout(LayoutKind.Sequential, Size = 128)]
	internal class AcmStreamHeaderStruct
	{
		public int cbStruct;

		public AcmStreamHeaderStatusFlags fdwStatus;

		public IntPtr userData;

		public IntPtr sourceBufferPointer;

		public int sourceBufferLength;

		public int sourceBufferLengthUsed;

		public IntPtr sourceUserData;

		public IntPtr destBufferPointer;

		public int destBufferLength;

		public int destBufferLengthUsed;

		public IntPtr destUserData;
	}
	[Flags]
	internal enum AcmStreamOpenFlags
	{
		Query = 1,
		Async = 2,
		NonRealTime = 4,
		CallbackTypeMask = 0x70000,
		CallbackNull = 0,
		CallbackWindow = 0x10000,
		CallbackTask = 0x20000,
		CallbackFunction = 0x30000,
		CallbackThread = 0x20000,
		CallbackEvent = 0x50000
	}
	internal enum AcmStreamSizeFlags
	{
		Source,
		Destination
	}
	[StructLayout(LayoutKind.Sequential)]
	public class WaveFilter
	{
		public int StructureSize = Marshal.SizeOf(typeof(WaveFilter));

		public int FilterTag;

		public int Filter;

		[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
		public int[] Reserved;
	}
}

plugins/Lib/UniTask.Addressables.dll

Decompiled 10 months ago
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[0];
		result.TypesData = new byte[0];
		result.TotalFiles = 0;
		result.TotalTypes = 0;
		result.IsEditorOnly = false;
		return result;
	}
}

plugins/Lib/UniTask.dll

Decompiled 10 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Security;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using Cysharp.Threading.Tasks.CompilerServices;
using Cysharp.Threading.Tasks.Internal;
using Cysharp.Threading.Tasks.Triggers;
using Unity.Jobs;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.LowLevel;
using UnityEngine.Networking;
using UnityEngine.ParticleSystemJobs;
using UnityEngine.PlayerLoop;
using UnityEngine.Rendering;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: InternalsVisibleTo("UniTask.Linq")]
[assembly: InternalsVisibleTo("UniTask.Addressables")]
[assembly: InternalsVisibleTo("UniTask.DOTween")]
[assembly: InternalsVisibleTo("UniTask.TextMeshPro")]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[6371]
		{
			0, 0, 0, 2, 0, 0, 0, 68, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 65, 115, 121, 110, 99, 76,
			97, 122, 121, 46, 99, 115, 0, 0, 0, 11,
			0, 0, 0, 80, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			65, 115, 121, 110, 99, 82, 101, 97, 99, 116,
			105, 118, 101, 80, 114, 111, 112, 101, 114, 116,
			121, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 68, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 65, 115,
			121, 110, 99, 85, 110, 105, 116, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 92, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 67, 97, 110, 99, 101, 108,
			108, 97, 116, 105, 111, 110, 84, 111, 107, 101,
			110, 69, 113, 117, 97, 108, 105, 116, 121, 67,
			111, 109, 112, 97, 114, 101, 114, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 86, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 67, 97, 110, 99, 101, 108,
			108, 97, 116, 105, 111, 110, 84, 111, 107, 101,
			110, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 92, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 97,
			110, 99, 101, 108, 108, 97, 116, 105, 111, 110,
			84, 111, 107, 101, 110, 83, 111, 117, 114, 99,
			101, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 99, 115, 0, 0, 0, 10, 0, 0,
			0, 66, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 67, 104,
			97, 110, 110, 101, 108, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 103, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 105, 108, 101, 114,
			83, 101, 114, 118, 105, 99, 101, 115, 92, 65,
			115, 121, 110, 99, 77, 101, 116, 104, 111, 100,
			66, 117, 105, 108, 100, 101, 114, 65, 116, 116,
			114, 105, 98, 117, 116, 101, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 101, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 67, 111, 109, 112, 105, 108, 101,
			114, 83, 101, 114, 118, 105, 99, 101, 115, 92,
			65, 115, 121, 110, 99, 85, 110, 105, 84, 97,
			115, 107, 77, 101, 116, 104, 111, 100, 66, 117,
			105, 108, 100, 101, 114, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 105, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 67, 111, 109, 112, 105, 108, 101, 114,
			83, 101, 114, 118, 105, 99, 101, 115, 92, 65,
			115, 121, 110, 99, 85, 110, 105, 84, 97, 115,
			107, 86, 111, 105, 100, 77, 101, 116, 104, 111,
			100, 66, 117, 105, 108, 100, 101, 114, 46, 99,
			115, 0, 0, 0, 7, 0, 0, 0, 94, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 67, 111, 109, 112, 105,
			108, 101, 114, 83, 101, 114, 118, 105, 99, 101,
			115, 92, 83, 116, 97, 116, 101, 77, 97, 99,
			104, 105, 110, 101, 82, 117, 110, 110, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			84, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 65, 115, 121,
			110, 99, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 84, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 69,
			110, 117, 109, 101, 114, 97, 116, 111, 114, 65,
			115, 121, 110, 99, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 78, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 69, 120, 99, 101, 112, 116, 105, 111, 110,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			77, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 110, 116,
			101, 114, 110, 97, 108, 92, 65, 114, 114, 97,
			121, 80, 111, 111, 108, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 81, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 73, 110, 116, 101, 114, 110, 97, 108,
			92, 65, 114, 114, 97, 121, 80, 111, 111, 108,
			85, 116, 105, 108, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 77, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 73, 110, 116, 101, 114, 110, 97, 108, 92,
			65, 114, 114, 97, 121, 85, 116, 105, 108, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 85,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 73, 110, 116, 101,
			114, 110, 97, 108, 92, 67, 111, 110, 116, 105,
			110, 117, 97, 116, 105, 111, 110, 81, 117, 101,
			117, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 89, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 73,
			110, 116, 101, 114, 110, 97, 108, 92, 68, 105,
			97, 103, 110, 111, 115, 116, 105, 99, 115, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 73,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 73, 110, 116, 101,
			114, 110, 97, 108, 92, 69, 114, 114, 111, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			80, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 110, 116,
			101, 114, 110, 97, 108, 92, 77, 105, 110, 105,
			109, 117, 109, 81, 117, 101, 117, 101, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 84, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 73, 110, 116, 101, 114,
			110, 97, 108, 92, 80, 108, 97, 121, 101, 114,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			82, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 110, 116,
			101, 114, 110, 97, 108, 92, 80, 111, 111, 108,
			101, 100, 68, 101, 108, 101, 103, 97, 116, 101,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			93, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 110, 116,
			101, 114, 110, 97, 108, 92, 82, 117, 110, 116,
			105, 109, 101, 72, 101, 108, 112, 101, 114, 115,
			65, 98, 115, 116, 114, 97, 99, 116, 105, 111,
			110, 46, 99, 115, 0, 0, 0, 7, 0, 0,
			0, 77, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 110,
			116, 101, 114, 110, 97, 108, 92, 83, 116, 97,
			116, 101, 80, 111, 111, 108, 46, 99, 115, 0,
			0, 0, 1, 0, 0, 0, 79, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 73, 110, 116, 101, 114, 110, 97,
			108, 92, 84, 97, 115, 107, 84, 114, 97, 99,
			107, 101, 114, 46, 99, 115, 0, 0, 0, 15,
			0, 0, 0, 89, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			73, 110, 116, 101, 114, 110, 97, 108, 92, 85,
			110, 105, 116, 121, 69, 113, 117, 97, 108, 105,
			116, 121, 67, 111, 109, 112, 97, 114, 101, 114,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			93, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 73, 110, 116,
			101, 114, 110, 97, 108, 92, 85, 110, 105, 116,
			121, 87, 101, 98, 82, 101, 113, 117, 101, 115,
			116, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 82, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 110,
			116, 101, 114, 110, 97, 108, 92, 86, 97, 108,
			117, 101, 83, 116, 111, 112, 119, 97, 116, 99,
			104, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 82, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 110,
			116, 101, 114, 110, 97, 108, 92, 87, 101, 97,
			107, 68, 105, 99, 116, 105, 111, 110, 97, 114,
			121, 46, 99, 115, 0, 0, 0, 8, 0, 0,
			0, 82, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 85,
			110, 105, 84, 97, 115, 107, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 73, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 73, 85,
			110, 105, 84, 97, 115, 107, 83, 111, 117, 114,
			99, 101, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 73, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 77,
			111, 118, 101, 78, 101, 120, 116, 83, 111, 117,
			114, 99, 101, 46, 99, 115, 0, 0, 0, 35,
			0, 0, 0, 75, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			80, 108, 97, 121, 101, 114, 76, 111, 111, 112,
			72, 101, 108, 112, 101, 114, 46, 99, 115, 0,
			0, 0, 4, 0, 0, 0, 74, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 80, 108, 97, 121, 101, 114, 76,
			111, 111, 112, 84, 105, 109, 101, 114, 46, 99,
			115, 0, 0, 0, 4, 0, 0, 0, 67, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 80, 114, 111, 103, 114,
			101, 115, 115, 46, 99, 115, 0, 0, 0, 3,
			0, 0, 0, 67, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			84, 97, 115, 107, 80, 111, 111, 108, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 76, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 84, 105, 109, 101, 111,
			117, 116, 67, 111, 110, 116, 114, 111, 108, 108,
			101, 114, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 71, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 84,
			114, 105, 103, 103, 101, 114, 69, 118, 101, 110,
			116, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 85, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 84, 114,
			105, 103, 103, 101, 114, 115, 92, 65, 115, 121,
			110, 99, 65, 119, 97, 107, 101, 84, 114, 105,
			103, 103, 101, 114, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 87, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 84, 114, 105, 103, 103, 101, 114, 115, 92,
			65, 115, 121, 110, 99, 68, 101, 115, 116, 114,
			111, 121, 84, 114, 105, 103, 103, 101, 114, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 85,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 84, 114, 105, 103,
			103, 101, 114, 115, 92, 65, 115, 121, 110, 99,
			83, 116, 97, 114, 116, 84, 114, 105, 103, 103,
			101, 114, 46, 99, 115, 0, 0, 0, 6, 0,
			0, 0, 84, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 84,
			114, 105, 103, 103, 101, 114, 115, 92, 65, 115,
			121, 110, 99, 84, 114, 105, 103, 103, 101, 114,
			66, 97, 115, 101, 46, 99, 115, 0, 0, 0,
			2, 0, 0, 0, 90, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 84, 114, 105, 103, 103, 101, 114, 115, 92,
			65, 115, 121, 110, 99, 84, 114, 105, 103, 103,
			101, 114, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 99, 115, 0, 0, 1, 40, 0,
			0, 0, 97, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 84,
			114, 105, 103, 103, 101, 114, 115, 92, 77, 111,
			110, 111, 66, 101, 104, 97, 118, 105, 111, 117,
			114, 77, 101, 115, 115, 97, 103, 101, 115, 84,
			114, 105, 103, 103, 101, 114, 115, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 73, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 84, 97, 115,
			107, 46, 66, 114, 105, 100, 103, 101, 46, 99,
			115, 0, 0, 0, 10, 0, 0, 0, 66, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 84, 97,
			115, 107, 46, 99, 115, 0, 0, 0, 10, 0,
			0, 0, 72, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 84, 97, 115, 107, 46, 68, 101, 108,
			97, 121, 46, 99, 115, 0, 0, 0, 10, 0,
			0, 0, 74, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 84, 97, 115, 107, 46, 70, 97, 99,
			116, 111, 114, 121, 46, 99, 115, 0, 0, 0,
			1, 0, 0, 0, 70, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 84, 97, 115, 107, 46, 82,
			117, 110, 46, 99, 115, 0, 0, 0, 13, 0,
			0, 0, 76, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 84, 97, 115, 107, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 99, 115, 0,
			0, 0, 6, 0, 0, 0, 76, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 84, 97, 115, 107,
			46, 87, 97, 105, 116, 85, 110, 116, 105, 108,
			46, 99, 115, 0, 0, 0, 3, 0, 0, 0,
			74, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			84, 97, 115, 107, 46, 87, 104, 101, 110, 65,
			108, 108, 46, 99, 115, 0, 0, 0, 15, 0,
			0, 0, 84, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 84, 97, 115, 107, 46, 87, 104, 101,
			110, 65, 108, 108, 46, 71, 101, 110, 101, 114,
			97, 116, 101, 100, 46, 99, 115, 0, 0, 0,
			4, 0, 0, 0, 74, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 85, 110, 105, 84, 97, 115, 107, 46, 87,
			104, 101, 110, 65, 110, 121, 46, 99, 115, 0,
			0, 0, 15, 0, 0, 0, 84, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 84, 97, 115, 107,
			46, 87, 104, 101, 110, 65, 110, 121, 46, 71,
			101, 110, 101, 114, 97, 116, 101, 100, 46, 99,
			115, 0, 0, 0, 13, 0, 0, 0, 82, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 84, 97,
			115, 107, 67, 111, 109, 112, 108, 101, 116, 105,
			111, 110, 83, 111, 117, 114, 99, 101, 46, 99,
			115, 0, 0, 0, 5, 0, 0, 0, 76, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 84, 97,
			115, 107, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 99, 115, 0, 0, 0, 1, 0,
			0, 0, 86, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 84, 97, 115, 107, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 46, 83, 104, 111,
			114, 116, 104, 97, 110, 100, 46, 99, 115, 0,
			0, 0, 14, 0, 0, 0, 86, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 84, 97, 115, 107,
			79, 98, 115, 101, 114, 118, 97, 98, 108, 101,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 99, 115, 0, 0, 0, 1, 0, 0, 0,
			75, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 85, 110, 105,
			84, 97, 115, 107, 83, 99, 104, 101, 100, 117,
			108, 101, 114, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 88, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 84, 97, 115, 107, 83, 121, 110,
			99, 104, 114, 111, 110, 105, 122, 97, 116, 105,
			111, 110, 67, 111, 110, 116, 101, 120, 116, 46,
			99, 115, 0, 0, 0, 1, 0, 0, 0, 70,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 85, 110, 105, 84,
			97, 115, 107, 86, 111, 105, 100, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 107, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 116, 121, 65,
			115, 121, 110, 99, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 46, 65, 115, 115, 101, 116,
			66, 117, 110, 100, 108, 101, 82, 101, 113, 117,
			101, 115, 116, 65, 108, 108, 65, 115, 115, 101,
			116, 115, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 96, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 85,
			110, 105, 116, 121, 65, 115, 121, 110, 99, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 46,
			65, 115, 121, 110, 99, 71, 80, 85, 82, 101,
			97, 100, 98, 97, 99, 107, 46, 99, 115, 0,
			0, 0, 11, 0, 0, 0, 79, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 116, 121, 65, 115,
			121, 110, 99, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 84, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			85, 110, 105, 116, 121, 65, 115, 121, 110, 99,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			46, 74, 111, 98, 115, 46, 99, 115, 0, 0,
			0, 1, 0, 0, 0, 93, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 85, 110, 105, 116, 121, 65, 115, 121,
			110, 99, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 46, 77, 111, 110, 111, 66, 101, 104,
			97, 118, 105, 111, 117, 114, 46, 99, 115, 0,
			0, 0, 16, 0, 0, 0, 84, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 85, 110, 105, 116, 121, 65, 115,
			121, 110, 99, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 46, 117, 71, 85, 73, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 81, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 85, 110, 105, 116, 121,
			66, 105, 110, 100, 105, 110, 103, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 46, 99, 115,
			0, 0, 0, 1, 0, 0, 0, 83, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 85, 110, 105, 116, 121, 87,
			101, 98, 82, 101, 113, 117, 101, 115, 116, 69,
			120, 99, 101, 112, 116, 105, 111, 110, 46, 99,
			115
		};
		result.TypesData = new byte[36615]
		{
			1, 0, 0, 0, 33, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 124, 65,
			115, 121, 110, 99, 76, 97, 122, 121, 1, 0,
			0, 0, 33, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 124, 65, 115, 121,
			110, 99, 76, 97, 122, 121, 0, 0, 0, 0,
			54, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 73, 82, 101, 97, 100,
			79, 110, 108, 121, 65, 115, 121, 110, 99, 82,
			101, 97, 99, 116, 105, 118, 101, 80, 114, 111,
			112, 101, 114, 116, 121, 0, 0, 0, 0, 46,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 124, 73, 65, 115, 121, 110, 99,
			82, 101, 97, 99, 116, 105, 118, 101, 80, 114,
			111, 112, 101, 114, 116, 121, 0, 0, 0, 0,
			45, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 65, 115, 121, 110, 99,
			82, 101, 97, 99, 116, 105, 118, 101, 80, 114,
			111, 112, 101, 114, 116, 121, 0, 0, 0, 0,
			61, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 65, 115, 121, 110, 99,
			82, 101, 97, 99, 116, 105, 118, 101, 80, 114,
			111, 112, 101, 114, 116, 121, 124, 87, 97, 105,
			116, 65, 115, 121, 110, 99, 83, 111, 117, 114,
			99, 101, 0, 0, 0, 0, 70, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 65, 115, 121, 110, 99, 82, 101, 97, 99,
			116, 105, 118, 101, 80, 114, 111, 112, 101, 114,
			116, 121, 124, 87, 105, 116, 104, 111, 117, 116,
			67, 117, 114, 114, 101, 110, 116, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 0, 0, 0,
			0, 56, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 65, 115, 121, 110,
			99, 82, 101, 97, 99, 116, 105, 118, 101, 80,
			114, 111, 112, 101, 114, 116, 121, 124, 69, 110,
			117, 109, 101, 114, 97, 116, 111, 114, 0, 0,
			0, 0, 53, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 124, 82, 101, 97,
			100, 79, 110, 108, 121, 65, 115, 121, 110, 99,
			82, 101, 97, 99, 116, 105, 118, 101, 80, 114,
			111, 112, 101, 114, 116, 121, 0, 0, 0, 0,
			69, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 82, 101, 97, 100, 79,
			110, 108, 121, 65, 115, 121, 110, 99, 82, 101,
			97, 99, 116, 105, 118, 101, 80, 114, 111, 112,
			101, 114, 116, 121, 124, 87, 97, 105, 116, 65,
			115, 121, 110, 99, 83, 111, 117, 114, 99, 101,
			0, 0, 0, 0, 78, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 82,
			101, 97, 100, 79, 110, 108, 121, 65, 115, 121,
			110, 99, 82, 101, 97, 99, 116, 105, 118, 101,
			80, 114, 111, 112, 101, 114, 116, 121, 124, 87,
			105, 116, 104, 111, 117, 116, 67, 117, 114, 114,
			101, 110, 116, 69, 110, 117, 109, 101, 114, 97,
			98, 108, 101, 0, 0, 0, 0, 64, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 82, 101, 97, 100, 79, 110, 108, 121,
			65, 115, 121, 110, 99, 82, 101, 97, 99, 116,
			105, 118, 101, 80, 114, 111, 112, 101, 114, 116,
			121, 124, 69, 110, 117, 109, 101, 114, 97, 116,
			111, 114, 0, 0, 0, 0, 39, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 83, 116, 97, 116, 101, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			33, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 65, 115, 121, 110, 99,
			85, 110, 105, 116, 0, 0, 0, 0, 57, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 124, 67, 97, 110, 99, 101, 108, 108,
			97, 116, 105, 111, 110, 84, 111, 107, 101, 110,
			69, 113, 117, 97, 108, 105, 116, 121, 67, 111,
			109, 112, 97, 114, 101, 114, 0, 0, 0, 0,
			51, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 67, 97, 110, 99, 101,
			108, 108, 97, 116, 105, 111, 110, 84, 111, 107,
			101, 110, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 0, 0, 0, 0, 50, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 67, 97, 110, 99, 101, 108, 108, 97, 116,
			105, 111, 110, 84, 111, 107, 101, 110, 65, 119,
			97, 105, 116, 97, 98, 108, 101, 1, 0, 0,
			0, 32, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 124, 65, 119, 97,
			105, 116, 101, 114, 0, 0, 0, 0, 57, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 124, 67, 97, 110, 99, 101, 108, 108,
			97, 116, 105, 111, 110, 84, 111, 107, 101, 110,
			83, 111, 117, 114, 99, 101, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 1, 0, 0, 0,
			31, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 67, 104, 97, 110, 110,
			101, 108, 1, 0, 0, 0, 31, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 67, 104, 97, 110, 110, 101, 108, 1, 0,
			0, 0, 31, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 124, 67, 104, 97,
			110, 110, 101, 108, 0, 0, 0, 0, 37, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 124, 67, 104, 97, 110, 110, 101, 108,
			82, 101, 97, 100, 101, 114, 0, 0, 0, 0,
			37, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 67, 104, 97, 110, 110,
			101, 108, 87, 114, 105, 116, 101, 114, 0, 0,
			0, 0, 46, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 124, 67, 104, 97,
			110, 110, 101, 108, 67, 108, 111, 115, 101, 100,
			69, 120, 99, 101, 112, 116, 105, 111, 110, 0,
			0, 0, 0, 54, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 124, 83, 105,
			110, 103, 108, 101, 67, 111, 110, 115, 117, 109,
			101, 114, 85, 110, 98, 111, 117, 110, 100, 101,
			100, 67, 104, 97, 110, 110, 101, 108, 0, 0,
			0, 0, 91, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 83, 105, 110,
			103, 108, 101, 67, 111, 110, 115, 117, 109, 101,
			114, 85, 110, 98, 111, 117, 110, 100, 101, 100,
			67, 104, 97, 110, 110, 101, 108, 124, 83, 105,
			110, 103, 108, 101, 67, 111, 110, 115, 117, 109,
			101, 114, 85, 110, 98, 111, 117, 110, 100, 101,
			100, 67, 104, 97, 110, 110, 101, 108, 87, 114,
			105, 116, 101, 114, 0, 0, 0, 0, 91, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 83, 105, 110, 103, 108, 101, 67,
			111, 110, 115, 117, 109, 101, 114, 85, 110, 98,
			111, 117, 110, 100, 101, 100, 67, 104, 97, 110,
			110, 101, 108, 124, 83, 105, 110, 103, 108, 101,
			67, 111, 110, 115, 117, 109, 101, 114, 85, 110,
			98, 111, 117, 110, 100, 101, 100, 67, 104, 97,
			110, 110, 101, 108, 82, 101, 97, 100, 101, 114,
			0, 0, 0, 0, 114, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 83,
			105, 110, 103, 108, 101, 67, 111, 110, 115, 117,
			109, 101, 114, 85, 110, 98, 111, 117, 110, 100,
			101, 100, 67, 104, 97, 110, 110, 101, 108, 43,
			83, 105, 110, 103, 108, 101, 67, 111, 110, 115,
			117, 109, 101, 114, 85, 110, 98, 111, 117, 110,
			100, 101, 100, 67, 104, 97, 110, 110, 101, 108,
			82, 101, 97, 100, 101, 114, 124, 82, 101, 97,
			100, 65, 108, 108, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 0,
			0, 0, 0, 59, 83, 121, 115, 116, 101, 109,
			46, 82, 117, 110, 116, 105, 109, 101, 46, 67,
			111, 109, 112, 105, 108, 101, 114, 83, 101, 114,
			118, 105, 99, 101, 115, 124, 65, 115, 121, 110,
			99, 77, 101, 116, 104, 111, 100, 66, 117, 105,
			108, 100, 101, 114, 65, 116, 116, 114, 105, 98,
			117, 116, 101, 1, 0, 0, 0, 66, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 67, 111, 109, 112, 105, 108, 101, 114,
			83, 101, 114, 118, 105, 99, 101, 115, 124, 65,
			115, 121, 110, 99, 85, 110, 105, 84, 97, 115,
			107, 77, 101, 116, 104, 111, 100, 66, 117, 105,
			108, 100, 101, 114, 1, 0, 0, 0, 66, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 67, 111, 109, 112, 105, 108, 101,
			114, 83, 101, 114, 118, 105, 99, 101, 115, 124,
			65, 115, 121, 110, 99, 85, 110, 105, 84, 97,
			115, 107, 77, 101, 116, 104, 111, 100, 66, 117,
			105, 108, 100, 101, 114, 0, 0, 0, 0, 70,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 67, 111, 109, 112, 105, 108,
			101, 114, 83, 101, 114, 118, 105, 99, 101, 115,
			124, 65, 115, 121, 110, 99, 85, 110, 105, 84,
			97, 115, 107, 86, 111, 105, 100, 77, 101, 116,
			104, 111, 100, 66, 117, 105, 108, 100, 101, 114,
			0, 0, 0, 0, 60, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 67,
			111, 109, 112, 105, 108, 101, 114, 83, 101, 114,
			118, 105, 99, 101, 115, 124, 73, 83, 116, 97,
			116, 101, 77, 97, 99, 104, 105, 110, 101, 82,
			117, 110, 110, 101, 114, 1, 0, 0, 0, 67,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 67, 111, 109, 112, 105, 108,
			101, 114, 83, 101, 114, 118, 105, 99, 101, 115,
			124, 73, 83, 116, 97, 116, 101, 77, 97, 99,
			104, 105, 110, 101, 82, 117, 110, 110, 101, 114,
			80, 114, 111, 109, 105, 115, 101, 1, 0, 0,
			0, 67, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 67, 111, 109, 112,
			105, 108, 101, 114, 83, 101, 114, 118, 105, 99,
			101, 115, 124, 73, 83, 116, 97, 116, 101, 77,
			97, 99, 104, 105, 110, 101, 82, 117, 110, 110,
			101, 114, 80, 114, 111, 109, 105, 115, 101, 0,
			0, 0, 0, 60, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 67, 111,
			109, 112, 105, 108, 101, 114, 83, 101, 114, 118,
			105, 99, 101, 115, 124, 83, 116, 97, 116, 101,
			77, 97, 99, 104, 105, 110, 101, 85, 116, 105,
			108, 105, 116, 121, 0, 0, 0, 0, 57, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 67, 111, 109, 112, 105, 108, 101,
			114, 83, 101, 114, 118, 105, 99, 101, 115, 124,
			65, 115, 121, 110, 99, 85, 110, 105, 84, 97,
			115, 107, 86, 111, 105, 100, 1, 0, 0, 0,
			53, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 67, 111, 109, 112, 105,
			108, 101, 114, 83, 101, 114, 118, 105, 99, 101,
			115, 124, 65, 115, 121, 110, 99, 85, 110, 105,
			84, 97, 115, 107, 1, 0, 0, 0, 53, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 67, 111, 109, 112, 105, 108, 101,
			114, 83, 101, 114, 118, 105, 99, 101, 115, 124,
			65, 115, 121, 110, 99, 85, 110, 105, 84, 97,
			115, 107, 0, 0, 0, 0, 49, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 65, 115, 121, 110, 99, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			49, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 69, 110, 117, 109, 101,
			114, 97, 116, 111, 114, 65, 115, 121, 110, 99,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 67, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 69,
			110, 117, 109, 101, 114, 97, 116, 111, 114, 65,
			115, 121, 110, 99, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 124, 69, 110, 117, 109, 101,
			114, 97, 116, 111, 114, 80, 114, 111, 109, 105,
			115, 101, 0, 0, 0, 0, 43, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 69, 120, 99, 101, 112, 116, 105, 111, 110,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 42, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 73,
			110, 116, 101, 114, 110, 97, 108, 124, 65, 114,
			114, 97, 121, 80, 111, 111, 108, 0, 0, 0,
			0, 46, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 73, 110, 116, 101,
			114, 110, 97, 108, 124, 65, 114, 114, 97, 121,
			80, 111, 111, 108, 85, 116, 105, 108, 0, 0,
			0, 0, 56, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 73, 110, 116,
			101, 114, 110, 97, 108, 46, 65, 114, 114, 97,
			121, 80, 111, 111, 108, 85, 116, 105, 108, 124,
			82, 101, 110, 116, 65, 114, 114, 97, 121, 0,
			0, 0, 0, 42, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 73, 110,
			116, 101, 114, 110, 97, 108, 124, 65, 114, 114,
			97, 121, 85, 116, 105, 108, 0, 0, 0, 0,
			50, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 73, 110, 116, 101, 114,
			110, 97, 108, 124, 67, 111, 110, 116, 105, 110,
			117, 97, 116, 105, 111, 110, 81, 117, 101, 117,
			101, 0, 0, 0, 0, 54, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			73, 110, 116, 101, 114, 110, 97, 108, 124, 68,
			105, 97, 103, 110, 111, 115, 116, 105, 99, 115,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 38, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 73,
			110, 116, 101, 114, 110, 97, 108, 124, 69, 114,
			114, 111, 114, 0, 0, 0, 0, 45, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 73, 110, 116, 101, 114, 110, 97, 108,
			124, 77, 105, 110, 105, 109, 117, 109, 81, 117,
			101, 117, 101, 0, 0, 0, 0, 49, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 73, 110, 116, 101, 114, 110, 97, 108,
			124, 80, 108, 97, 121, 101, 114, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 0, 0, 0,
			0, 47, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 73, 110, 116, 101,
			114, 110, 97, 108, 124, 80, 111, 111, 108, 101,
			100, 68, 101, 108, 101, 103, 97, 116, 101, 0,
			0, 0, 0, 58, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 73, 110,
			116, 101, 114, 110, 97, 108, 124, 82, 117, 110,
			116, 105, 109, 101, 72, 101, 108, 112, 101, 114,
			115, 65, 98, 115, 116, 114, 97, 99, 116, 105,
			111, 110, 0, 0, 0, 0, 91, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 73, 110, 116, 101, 114, 110, 97, 108, 46,
			82, 117, 110, 116, 105, 109, 101, 72, 101, 108,
			112, 101, 114, 115, 65, 98, 115, 116, 114, 97,
			99, 116, 105, 111, 110, 124, 87, 101, 108, 108,
			75, 110, 111, 119, 110, 78, 111, 82, 101, 102,
			101, 114, 101, 110, 99, 101, 67, 111, 110, 116,
			97, 105, 110, 115, 84, 121, 112, 101, 1, 0,
			0, 0, 43, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 73, 110, 116,
			101, 114, 110, 97, 108, 124, 83, 116, 97, 116,
			101, 84, 117, 112, 108, 101, 1, 0, 0, 0,
			43, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 73, 110, 116, 101, 114,
			110, 97, 108, 124, 83, 116, 97, 116, 101, 84,
			117, 112, 108, 101, 1, 0, 0, 0, 42, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 73, 110, 116, 101, 114, 110, 97,
			108, 124, 83, 116, 97, 116, 101, 80, 111, 111,
			108, 1, 0, 0, 0, 43, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			73, 110, 116, 101, 114, 110, 97, 108, 124, 83,
			116, 97, 116, 101, 84, 117, 112, 108, 101, 1,
			0, 0, 0, 42, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 73, 110,
			116, 101, 114, 110, 97, 108, 124, 83, 116, 97,
			116, 101, 80, 111, 111, 108, 1, 0, 0, 0,
			43, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 73, 110, 116, 101, 114,
			110, 97, 108, 124, 83, 116, 97, 116, 101, 84,
			117, 112, 108, 101, 1, 0, 0, 0, 42, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 73, 110, 116, 101, 114, 110, 97,
			108, 124, 83, 116, 97, 116, 101, 80, 111, 111,
			108, 0, 0, 0, 0, 35, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 124,
			84, 97, 115, 107, 84, 114, 97, 99, 107, 101,
			114, 0, 0, 0, 0, 54, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			73, 110, 116, 101, 114, 110, 97, 108, 124, 85,
			110, 105, 116, 121, 69, 113, 117, 97, 108, 105,
			116, 121, 67, 111, 109, 112, 97, 114, 101, 114,
			0, 0, 0, 0, 60, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 73,
			110, 116, 101, 114, 110, 97, 108, 46, 85, 110,
			105, 116, 121, 69, 113, 117, 97, 108, 105, 116,
			121, 67, 111, 109, 112, 97, 114, 101, 114, 124,
			67, 97, 99, 104, 101, 0, 0, 0, 0, 78,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 73, 110, 116, 101, 114, 110,
			97, 108, 46, 85, 110, 105, 116, 121, 69, 113,
			117, 97, 108, 105, 116, 121, 67, 111, 109, 112,
			97, 114, 101, 114, 124, 86, 101, 99, 116, 111,
			114, 50, 69, 113, 117, 97, 108, 105, 116, 121,
			67, 111, 109, 112, 97, 114, 101, 114, 0, 0,
			0, 0, 78, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 73, 110, 116,
			101, 114, 110, 97, 108, 46, 85, 110, 105, 116,
			121, 69, 113, 117, 97, 108, 105, 116, 121, 67,
			111, 109, 112, 97, 114, 101, 114, 124, 86, 101,
			99, 116, 111, 114, 51, 69, 113, 117, 97, 108,
			105, 116, 121, 67, 111, 109, 112, 97, 114, 101,
			114, 0, 0, 0, 0, 78, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			73, 110, 116, 101, 114, 110, 97, 108, 46, 85,
			110, 105, 116, 121, 69, 113, 117, 97, 108, 105,
			116, 121, 67, 111, 109, 112, 97, 114, 101, 114,
			124, 86, 101, 99, 116, 111, 114, 52, 69, 113,
			117, 97, 108, 105, 116, 121, 67, 111, 109, 112,
			97, 114, 101, 114, 0, 0, 0, 0, 76, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 73, 110, 116, 101, 114, 110, 97,
			108, 46, 85, 110, 105, 116, 121, 69, 113, 117,
			97, 108, 105, 116, 121, 67, 111, 109, 112, 97,
			114, 101, 114, 124, 67, 111, 108, 111, 114, 69,
			113, 117, 97, 108, 105, 116, 121, 67, 111, 109,
			112, 97, 114, 101, 114, 0, 0, 0, 0, 75,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 73, 110, 116, 101, 114, 110,
			97, 108, 46, 85, 110, 105, 116, 121, 69, 113,
			117, 97, 108, 105, 116, 121, 67, 111, 109, 112,
			97, 114, 101, 114, 124, 82, 101, 99, 116, 69,
			113, 117, 97, 108, 105, 116, 121, 67, 111, 109,
			112, 97, 114, 101, 114, 0, 0, 0, 0, 77,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 73, 110, 116, 101, 114, 110,
			97, 108, 46, 85, 110, 105, 116, 121, 69, 113,
			117, 97, 108, 105, 116, 121, 67, 111, 109, 112,
			97, 114, 101, 114, 124, 66, 111, 117, 110, 100,
			115, 69, 113, 117, 97, 108, 105, 116, 121, 67,
			111, 109, 112, 97, 114, 101, 114, 0, 0, 0,
			0, 81, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 73, 110, 116, 101,
			114, 110, 97, 108, 46, 85, 110, 105, 116, 121,
			69, 113, 117, 97, 108, 105, 116, 121, 67, 111,
			109, 112, 97, 114, 101, 114, 124, 81, 117, 97,
			116, 101, 114, 110, 105, 111, 110, 69, 113, 117,
			97, 108, 105, 116, 121, 67, 111, 109, 112, 97,
			114, 101, 114, 0, 0, 0, 0, 78, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 73, 110, 116, 101, 114, 110, 97, 108,
			46, 85, 110, 105, 116, 121, 69, 113, 117, 97,
			108, 105, 116, 121, 67, 111, 109, 112, 97, 114,
			101, 114, 124, 67, 111, 108, 111, 114, 51, 50,
			69, 113, 117, 97, 108, 105, 116, 121, 67, 111,
			109, 112, 97, 114, 101, 114, 0, 0, 0, 0,
			81, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 73, 110, 116, 101, 114,
			110, 97, 108, 46, 85, 110, 105, 116, 121, 69,
			113, 117, 97, 108, 105, 116, 121, 67, 111, 109,
			112, 97, 114, 101, 114, 124, 86, 101, 99, 116,
			111, 114, 50, 73, 110, 116, 69, 113, 117, 97,
			108, 105, 116, 121, 67, 111, 109, 112, 97, 114,
			101, 114, 0, 0, 0, 0, 81, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 73, 110, 116, 101, 114, 110, 97, 108, 46,
			85, 110, 105, 116, 121, 69, 113, 117, 97, 108,
			105, 116, 121, 67, 111, 109, 112, 97, 114, 101,
			114, 124, 86, 101, 99, 116, 111, 114, 51, 73,
			110, 116, 69, 113, 117, 97, 108, 105, 116, 121,
			67, 111, 109, 112, 97, 114, 101, 114, 0, 0,
			0, 0, 79, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 73, 110, 116,
			101, 114, 110, 97, 108, 46, 85, 110, 105, 116,
			121, 69, 113, 117, 97, 108, 105, 116, 121, 67,
			111, 109, 112, 97, 114, 101, 114, 124, 82, 97,
			110, 103, 101, 73, 110, 116, 69, 113, 117, 97,
			108, 105, 116, 121, 67, 111, 109, 112, 97, 114,
			101, 114, 0, 0, 0, 0, 78, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 73, 110, 116, 101, 114, 110, 97, 108, 46,
			85, 110, 105, 116, 121, 69, 113, 117, 97, 108,
			105, 116, 121, 67, 111, 109, 112, 97, 114, 101,
			114, 124, 82, 101, 99, 116, 73, 110, 116, 69,
			113, 117, 97, 108, 105, 116, 121, 67, 111, 109,
			112, 97, 114, 101, 114, 0, 0, 0, 0, 80,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 73, 110, 116, 101, 114, 110,
			97, 108, 46, 85, 110, 105, 116, 121, 69, 113,
			117, 97, 108, 105, 116, 121, 67, 111, 109, 112,
			97, 114, 101, 114, 124, 66, 111, 117, 110, 100,
			115, 73, 110, 116, 69, 113, 117, 97, 108, 105,
			116, 121, 67, 111, 109, 112, 97, 114, 101, 114,
			0, 0, 0, 0, 64, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 73,
			110, 116, 101, 114, 110, 97, 108, 124, 85, 110,
			105, 116, 121, 87, 101, 98, 82, 101, 113, 117,
			101, 115, 116, 82, 101, 115, 117, 108, 116, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 47, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 73, 110,
			116, 101, 114, 110, 97, 108, 124, 86, 97, 108,
			117, 101, 83, 116, 111, 112, 119, 97, 116, 99,
			104, 0, 0, 0, 0, 47, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			73, 110, 116, 101, 114, 110, 97, 108, 124, 87,
			101, 97, 107, 68, 105, 99, 116, 105, 111, 110,
			97, 114, 121, 0, 0, 0, 0, 53, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 73, 110, 116, 101, 114, 110, 97, 108,
			46, 87, 101, 97, 107, 68, 105, 99, 116, 105,
			111, 110, 97, 114, 121, 124, 69, 110, 116, 114,
			121, 0, 0, 0, 0, 47, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 124,
			73, 85, 110, 105, 84, 97, 115, 107, 65, 115,
			121, 110, 99, 69, 110, 117, 109, 101, 114, 97,
			98, 108, 101, 0, 0, 0, 0, 47, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 124, 73, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 116, 111, 114, 0, 0, 0, 0, 47,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 124, 73, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 68, 105, 115,
			112, 111, 115, 97, 98, 108, 101, 0, 0, 0,
			0, 54, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 124, 73, 85, 110, 105,
			84, 97, 115, 107, 79, 114, 100, 101, 114, 101,
			100, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			58, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 73, 67, 111, 110, 110,
			101, 99, 116, 97, 98, 108, 101, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 0,
			0, 0, 0, 56, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 124, 85, 110,
			105, 84, 97, 115, 107, 65, 115, 121, 110, 99,
			69, 110, 117, 109, 101, 114, 97, 98, 108, 101,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115,
			0, 0, 0, 0, 56, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 124, 85,
			110, 105, 84, 97, 115, 107, 67, 97, 110, 99,
			101, 108, 97, 98, 108, 101, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 0, 0, 0, 0, 35, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			124, 69, 110, 117, 109, 101, 114, 97, 116, 111,
			114, 1, 0, 0, 0, 38, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 124,
			73, 85, 110, 105, 84, 97, 115, 107, 83, 111,
			117, 114, 99, 101, 1, 0, 0, 0, 38, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 124, 73, 85, 110, 105, 84, 97, 115,
			107, 83, 111, 117, 114, 99, 101, 0, 0, 0,
			0, 47, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 124, 85, 110, 105, 84,
			97, 115, 107, 83, 116, 97, 116, 117, 115, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 38, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 124, 77, 111,
			118, 101, 78, 101, 120, 116, 83, 111, 117, 114,
			99, 101, 0, 0, 0, 0, 42, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 115, 0,
			0, 0, 0, 74, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 85, 110,
			105, 84, 97, 115, 107, 76, 111, 111, 112, 82,
			117, 110, 110, 101, 114, 115, 124, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 73, 110, 105, 116, 105, 97,
			108, 105, 122, 97, 116, 105, 111, 110, 0, 0,
			0, 0, 71, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 115, 124, 85, 110, 105, 84,
			97, 115, 107, 76, 111, 111, 112, 82, 117, 110,
			110, 101, 114, 69, 97, 114, 108, 121, 85, 112,
			100, 97, 116, 101, 0, 0, 0, 0, 71, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			115, 124, 85, 110, 105, 84, 97, 115, 107, 76,
			111, 111, 112, 82, 117, 110, 110, 101, 114, 70,
			105, 120, 101, 100, 85, 112, 100, 97, 116, 101,
			0, 0, 0, 0, 69, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 85,
			110, 105, 84, 97, 115, 107, 76, 111, 111, 112,
			82, 117, 110, 110, 101, 114, 115, 124, 85, 110,
			105, 84, 97, 115, 107, 76, 111, 111, 112, 82,
			117, 110, 110, 101, 114, 80, 114, 101, 85, 112,
			100, 97, 116, 101, 0, 0, 0, 0, 66, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			115, 124, 85, 110, 105, 84, 97, 115, 107, 76,
			111, 111, 112, 82, 117, 110, 110, 101, 114, 85,
			112, 100, 97, 116, 101, 0, 0, 0, 0, 73,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 85, 110, 105, 84, 97, 115,
			107, 76, 111, 111, 112, 82, 117, 110, 110, 101,
			114, 115, 124, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			80, 114, 101, 76, 97, 116, 101, 85, 112, 100,
			97, 116, 101, 0, 0, 0, 0, 74, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 85, 110, 105, 84, 97, 115, 107, 76,
			111, 111, 112, 82, 117, 110, 110, 101, 114, 115,
			124, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 80, 111,
			115, 116, 76, 97, 116, 101, 85, 112, 100, 97,
			116, 101, 0, 0, 0, 0, 78, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 115, 124,
			85, 110, 105, 84, 97, 115, 107, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 76, 97, 115,
			116, 73, 110, 105, 116, 105, 97, 108, 105, 122,
			97, 116, 105, 111, 110, 0, 0, 0, 0, 75,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 85, 110, 105, 84, 97, 115,
			107, 76, 111, 111, 112, 82, 117, 110, 110, 101,
			114, 115, 124, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			76, 97, 115, 116, 69, 97, 114, 108, 121, 85,
			112, 100, 97, 116, 101, 0, 0, 0, 0, 75,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 85, 110, 105, 84, 97, 115,
			107, 76, 111, 111, 112, 82, 117, 110, 110, 101,
			114, 115, 124, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			76, 97, 115, 116, 70, 105, 120, 101, 100, 85,
			112, 100, 97, 116, 101, 0, 0, 0, 0, 73,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 85, 110, 105, 84, 97, 115,
			107, 76, 111, 111, 112, 82, 117, 110, 110, 101,
			114, 115, 124, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			76, 97, 115, 116, 80, 114, 101, 85, 112, 100,
			97, 116, 101, 0, 0, 0, 0, 70, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 85, 110, 105, 84, 97, 115, 107, 76,
			111, 111, 112, 82, 117, 110, 110, 101, 114, 115,
			124, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 76, 97,
			115, 116, 85, 112, 100, 97, 116, 101, 0, 0,
			0, 0, 77, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 115, 124, 85, 110, 105, 84,
			97, 115, 107, 76, 111, 111, 112, 82, 117, 110,
			110, 101, 114, 76, 97, 115, 116, 80, 114, 101,
			76, 97, 116, 101, 85, 112, 100, 97, 116, 101,
			0, 0, 0, 0, 78, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 85,
			110, 105, 84, 97, 115, 107, 76, 111, 111, 112,
			82, 117, 110, 110, 101, 114, 115, 124, 85, 110,
			105, 84, 97, 115, 107, 76, 111, 111, 112, 82,
			117, 110, 110, 101, 114, 76, 97, 115, 116, 80,
			111, 115, 116, 76, 97, 116, 101, 85, 112, 100,
			97, 116, 101, 0, 0, 0, 0, 79, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 85, 110, 105, 84, 97, 115, 107, 76,
			111, 111, 112, 82, 117, 110, 110, 101, 114, 115,
			124, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 89, 105,
			101, 108, 100, 73, 110, 105, 116, 105, 97, 108,
			105, 122, 97, 116, 105, 111, 110, 0, 0, 0,
			0, 76, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 85, 110, 105, 84,
			97, 115, 107, 76, 111, 111, 112, 82, 117, 110,
			110, 101, 114, 115, 124, 85, 110, 105, 84, 97,
			115, 107, 76, 111, 111, 112, 82, 117, 110, 110,
			101, 114, 89, 105, 101, 108, 100, 69, 97, 114,
			108, 121, 85, 112, 100, 97, 116, 101, 0, 0,
			0, 0, 76, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 115, 124, 85, 110, 105, 84,
			97, 115, 107, 76, 111, 111, 112, 82, 117, 110,
			110, 101, 114, 89, 105, 101, 108, 100, 70, 105,
			120, 101, 100, 85, 112, 100, 97, 116, 101, 0,
			0, 0, 0, 74, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 85, 110,
			105, 84, 97, 115, 107, 76, 111, 111, 112, 82,
			117, 110, 110, 101, 114, 115, 124, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 89, 105, 101, 108, 100, 80,
			114, 101, 85, 112, 100, 97, 116, 101, 0, 0,
			0, 0, 71, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 115, 124, 85, 110, 105, 84,
			97, 115, 107, 76, 111, 111, 112, 82, 117, 110,
			110, 101, 114, 89, 105, 101, 108, 100, 85, 112,
			100, 97, 116, 101, 0, 0, 0, 0, 78, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			115, 124, 85, 110, 105, 84, 97, 115, 107, 76,
			111, 111, 112, 82, 117, 110, 110, 101, 114, 89,
			105, 101, 108, 100, 80, 114, 101, 76, 97, 116,
			101, 85, 112, 100, 97, 116, 101, 0, 0, 0,
			0, 79, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 85, 110, 105, 84,
			97, 115, 107, 76, 111, 111, 112, 82, 117, 110,
			110, 101, 114, 115, 124, 85, 110, 105, 84, 97,
			115, 107, 76, 111, 111, 112, 82, 117, 110, 110,
			101, 114, 89, 105, 101, 108, 100, 80, 111, 115,
			116, 76, 97, 116, 101, 85, 112, 100, 97, 116,
			101, 0, 0, 0, 0, 83, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			85, 110, 105, 84, 97, 115, 107, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 115, 124, 85,
			110, 105, 84, 97, 115, 107, 76, 111, 111, 112,
			82, 117, 110, 110, 101, 114, 76, 97, 115, 116,
			89, 105, 101, 108, 100, 73, 110, 105, 116, 105,
			97, 108, 105, 122, 97, 116, 105, 111, 110, 0,
			0, 0, 0, 80, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 85, 110,
			105, 84, 97, 115, 107, 76, 111, 111, 112, 82,
			117, 110, 110, 101, 114, 115, 124, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 76, 97, 115, 116, 89, 105,
			101, 108, 100, 69, 97, 114, 108, 121, 85, 112,
			100, 97, 116, 101, 0, 0, 0, 0, 80, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 85, 110, 105, 84, 97, 115, 107,
			76, 111, 111, 112, 82, 117, 110, 110, 101, 114,
			115, 124, 85, 110, 105, 84, 97, 115, 107, 76,
			111, 111, 112, 82, 117, 110, 110, 101, 114, 76,
			97, 115, 116, 89, 105, 101, 108, 100, 70, 105,
			120, 101, 100, 85, 112, 100, 97, 116, 101, 0,
			0, 0, 0, 78, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 85, 110,
			105, 84, 97, 115, 107, 76, 111, 111, 112, 82,
			117, 110, 110, 101, 114, 115, 124, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 76, 97, 115, 116, 89, 105,
			101, 108, 100, 80, 114, 101, 85, 112, 100, 97,
			116, 101, 0, 0, 0, 0, 75, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 115, 124,
			85, 110, 105, 84, 97, 115, 107, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 76, 97, 115,
			116, 89, 105, 101, 108, 100, 85, 112, 100, 97,
			116, 101, 0, 0, 0, 0, 82, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 115, 124,
			85, 110, 105, 84, 97, 115, 107, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 76, 97, 115,
			116, 89, 105, 101, 108, 100, 80, 114, 101, 76,
			97, 116, 101, 85, 112, 100, 97, 116, 101, 0,
			0, 0, 0, 83, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 85, 110,
			105, 84, 97, 115, 107, 76, 111, 111, 112, 82,
			117, 110, 110, 101, 114, 115, 124, 85, 110, 105,
			84, 97, 115, 107, 76, 111, 111, 112, 82, 117,
			110, 110, 101, 114, 76, 97, 115, 116, 89, 105,
			101, 108, 100, 80, 111, 115, 116, 76, 97, 116,
			101, 85, 112, 100, 97, 116, 101, 0, 0, 0,
			0, 70, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 85, 110, 105, 84,
			97, 115, 107, 76, 111, 111, 112, 82, 117, 110,
			110, 101, 114, 115, 124, 85, 110, 105, 84, 97,
			115, 107, 76, 111, 111, 112, 82, 117, 110, 110,
			101, 114, 84, 105, 109, 101, 85, 112, 100, 97,
			116, 101, 0, 0, 0, 0, 74, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 85, 110, 105, 84, 97, 115, 107, 76, 111,
			111, 112, 82, 117, 110, 110, 101, 114, 115, 124,
			85, 110, 105, 84, 97, 115, 107, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 76, 97, 115,
			116, 84, 105, 109, 101, 85, 112, 100, 97, 116,
			101, 0, 0, 0, 0, 75, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			85, 110, 105, 84, 97, 115, 107, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 115, 124, 85,
			110, 105, 84, 97, 115, 107, 76, 111, 111, 112,
			82, 117, 110, 110, 101, 114, 89, 105, 101, 108,
			100, 84, 105, 109, 101, 85, 112, 100, 97, 116,
			101, 0, 0, 0, 0, 79, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			85, 110, 105, 84, 97, 115, 107, 76, 111, 111,
			112, 82, 117, 110, 110, 101, 114, 115, 124, 85,
			110, 105, 84, 97, 115, 107, 76, 111, 111, 112,
			82, 117, 110, 110, 101, 114, 76, 97, 115, 116,
			89, 105, 101, 108, 100, 84, 105, 109, 101, 85,
			112, 100, 97, 116, 101, 0, 0, 0, 0, 39,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 124, 73, 80, 108, 97, 121, 101,
			114, 76, 111, 111, 112, 73, 116, 101, 109, 0,
			0, 0, 0, 40, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 124, 80, 108,
			97, 121, 101, 114, 76, 111, 111, 112, 72, 101,
			108, 112, 101, 114, 0, 0, 0, 0, 39, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 124, 80, 108, 97, 121, 101, 114, 76,
			111, 111, 112, 84, 105, 109, 101, 114, 0, 0,
			0, 0, 48, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 124, 68, 101, 108,
			116, 97, 84, 105, 109, 101, 80, 108, 97, 121,
			101, 114, 76, 111, 111, 112, 84, 105, 109, 101,
			114, 0, 0, 0, 0, 54, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 124,
			73, 103, 110, 111, 114, 101, 84, 105, 109, 101,
			83, 99, 97, 108, 101, 80, 108, 97, 121, 101,
			114, 76, 111, 111, 112, 84, 105, 109, 101, 114,
			0, 0, 0, 0, 47, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 124, 82,
			101, 97, 108, 116, 105, 109, 101, 80, 108, 97,
			121, 101, 114, 76, 111, 111, 112, 84, 105, 109,
			101, 114, 0, 0, 0, 0, 32, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 80, 114, 111, 103, 114, 101, 115, 115, 0,
			0, 0, 0, 45, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 80, 114,
			111, 103, 114, 101, 115, 115, 124, 78, 117, 108,
			108, 80, 114, 111, 103, 114, 101, 115, 115, 0,
			0, 0, 0, 50, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 80, 114,
			111, 103, 114, 101, 115, 115, 124, 65, 110, 111,
			110, 121, 109, 111, 117, 115, 80, 114, 111, 103,
			114, 101, 115, 115, 0, 0, 0, 0, 57, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 80, 114, 111, 103, 114, 101, 115,
			115, 124, 79, 110, 108, 121, 86, 97, 108, 117,
			101, 67, 104, 97, 110, 103, 101, 100, 80, 114,
			111, 103, 114, 101, 115, 115, 1, 0, 0, 0,
			32, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 124, 84, 97, 115, 107, 80,
			111, 111, 108, 0, 0, 0, 0, 37, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 124, 73, 84, 97, 115, 107, 80, 111, 111,
			108, 78, 111, 100, 101, 1, 0, 0, 0, 32,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 124, 84, 97, 115, 107, 80, 111,
			111, 108, 0, 0, 0, 0, 41, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 84, 105, 109, 101, 111, 117, 116, 67, 111,
			110, 116, 114, 111, 108, 108, 101, 114, 0, 0,
			0, 0, 39, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 124, 73, 84, 114,
			105, 103, 103, 101, 114, 72, 97, 110, 100, 108,
			101, 114, 0, 0, 0, 0, 36, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			124, 84, 114, 105, 103, 103, 101, 114, 69, 118,
			101, 110, 116, 1, 0, 0, 0, 55, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 84, 114, 105, 103, 103, 101, 114, 115,
			124, 65, 115, 121, 110, 99, 84, 114, 105, 103,
			103, 101, 114, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 50, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 84, 114, 105, 103, 103, 101, 114, 115,
			124, 65, 115, 121, 110, 99, 65, 119, 97, 107,
			101, 84, 114, 105, 103, 103, 101, 114, 1, 0,
			0, 0, 55, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 52, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 68, 101, 115, 116, 114, 111, 121, 84, 114,
			105, 103, 103, 101, 114, 0, 0, 0, 0, 65,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 84, 114, 105, 103, 103, 101,
			114, 115, 46, 65, 115, 121, 110, 99, 68, 101,
			115, 116, 114, 111, 121, 84, 114, 105, 103, 103,
			101, 114, 124, 65, 119, 97, 107, 101, 77, 111,
			110, 105, 116, 111, 114, 1, 0, 0, 0, 55,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 84, 114, 105, 103, 103, 101,
			114, 115, 124, 65, 115, 121, 110, 99, 84, 114,
			105, 103, 103, 101, 114, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 50,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 84, 114, 105, 103, 103, 101,
			114, 115, 124, 65, 115, 121, 110, 99, 83, 116,
			97, 114, 116, 84, 114, 105, 103, 103, 101, 114,
			0, 0, 0, 0, 49, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 65, 115,
			121, 110, 99, 84, 114, 105, 103, 103, 101, 114,
			66, 97, 115, 101, 0, 0, 0, 0, 72, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 46, 65, 115, 121, 110, 99, 84, 114, 105,
			103, 103, 101, 114, 66, 97, 115, 101, 124, 65,
			115, 121, 110, 99, 84, 114, 105, 103, 103, 101,
			114, 69, 110, 117, 109, 101, 114, 97, 116, 111,
			114, 0, 0, 0, 0, 62, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			84, 114, 105, 103, 103, 101, 114, 115, 46, 65,
			115, 121, 110, 99, 84, 114, 105, 103, 103, 101,
			114, 66, 97, 115, 101, 124, 65, 119, 97, 107,
			101, 77, 111, 110, 105, 116, 111, 114, 0, 0,
			0, 0, 53, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 73, 65, 115, 121,
			110, 99, 79, 110, 101, 83, 104, 111, 116, 84,
			114, 105, 103, 103, 101, 114, 1, 0, 0, 0,
			52, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 84,
			114, 105, 103, 103, 101, 114, 72, 97, 110, 100,
			108, 101, 114, 1, 0, 0, 0, 52, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 84, 114, 105, 103, 103, 101, 114, 115,
			124, 65, 115, 121, 110, 99, 84, 114, 105, 103,
			103, 101, 114, 72, 97, 110, 100, 108, 101, 114,
			0, 0, 0, 0, 53, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 124, 85,
			110, 105, 84, 97, 115, 107, 67, 97, 110, 99,
			101, 108, 108, 97, 116, 105, 111, 110, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 1, 0,
			0, 0, 55, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 57, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 73, 65, 115, 121,
			110, 99, 70, 105, 120, 101, 100, 85, 112, 100,
			97, 116, 101, 72, 97, 110, 100, 108, 101, 114,
			1, 0, 0, 0, 52, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 65, 115,
			121, 110, 99, 84, 114, 105, 103, 103, 101, 114,
			72, 97, 110, 100, 108, 101, 114, 1, 0, 0,
			0, 55, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 84, 114, 105, 103,
			103, 101, 114, 115, 124, 65, 115, 121, 110, 99,
			84, 114, 105, 103, 103, 101, 114, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 0, 0, 0,
			0, 56, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 84, 114, 105, 103,
			103, 101, 114, 115, 124, 65, 115, 121, 110, 99,
			70, 105, 120, 101, 100, 85, 112, 100, 97, 116,
			101, 84, 114, 105, 103, 103, 101, 114, 0, 0,
			0, 0, 56, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 73, 65, 115, 121,
			110, 99, 76, 97, 116, 101, 85, 112, 100, 97,
			116, 101, 72, 97, 110, 100, 108, 101, 114, 1,
			0, 0, 0, 52, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 84, 114, 105, 103, 103, 101, 114, 72,
			97, 110, 100, 108, 101, 114, 1, 0, 0, 0,
			55, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 84,
			114, 105, 103, 103, 101, 114, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			55, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 76,
			97, 116, 101, 85, 112, 100, 97, 116, 101, 84,
			114, 105, 103, 103, 101, 114, 0, 0, 0, 0,
			58, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 73, 65, 115, 121, 110, 99,
			79, 110, 65, 110, 105, 109, 97, 116, 111, 114,
			73, 75, 72, 97, 110, 100, 108, 101, 114, 1,
			0, 0, 0, 52, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 84, 114, 105, 103, 103, 101, 114, 72,
			97, 110, 100, 108, 101, 114, 1, 0, 0, 0,
			55, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 84,
			114, 105, 103, 103, 101, 114, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			55, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 65,
			110, 105, 109, 97, 116, 111, 114, 73, 75, 84,
			114, 105, 103, 103, 101, 114, 0, 0, 0, 0,
			60, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 73, 65, 115, 121, 110, 99,
			79, 110, 65, 110, 105, 109, 97, 116, 111, 114,
			77, 111, 118, 101, 72, 97, 110, 100, 108, 101,
			114, 1, 0, 0, 0, 52, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			84, 114, 105, 103, 103, 101, 114, 115, 124, 65,
			115, 121, 110, 99, 84, 114, 105, 103, 103, 101,
			114, 72, 97, 110, 100, 108, 101, 114, 1, 0,
			0, 0, 55, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 57, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 65, 110, 105, 109, 97, 116, 111, 114, 77,
			111, 118, 101, 84, 114, 105, 103, 103, 101, 114,
			0, 0, 0, 0, 64, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 73, 65,
			115, 121, 110, 99, 79, 110, 65, 112, 112, 108,
			105, 99, 97, 116, 105, 111, 110, 70, 111, 99,
			117, 115, 72, 97, 110, 100, 108, 101, 114, 1,
			0, 0, 0, 52, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 84, 114, 105, 103, 103, 101, 114, 72,
			97, 110, 100, 108, 101, 114, 1, 0, 0, 0,
			55, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 84,
			114, 105, 103, 103, 101, 114, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 0, 0, 0, 0,
			61, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 65,
			112, 112, 108, 105, 99, 97, 116, 105, 111, 110,
			70, 111, 99, 117, 115, 84, 114, 105, 103, 103,
			101, 114, 0, 0, 0, 0, 64, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 84, 114, 105, 103, 103, 101, 114, 115, 124,
			73, 65, 115, 121, 110, 99, 79, 110, 65, 112,
			112, 108, 105, 99, 97, 116, 105, 111, 110, 80,
			97, 117, 115, 101, 72, 97, 110, 100, 108, 101,
			114, 1, 0, 0, 0, 52, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			84, 114, 105, 103, 103, 101, 114, 115, 124, 65,
			115, 121, 110, 99, 84, 114, 105, 103, 103, 101,
			114, 72, 97, 110, 100, 108, 101, 114, 1, 0,
			0, 0, 55, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 61, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 65, 112, 112, 108, 105, 99, 97, 116, 105,
			111, 110, 80, 97, 117, 115, 101, 84, 114, 105,
			103, 103, 101, 114, 0, 0, 0, 0, 63, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 73, 65, 115, 121, 110, 99, 79, 110,
			65, 112, 112, 108, 105, 99, 97, 116, 105, 111,
			110, 81, 117, 105, 116, 72, 97, 110, 100, 108,
			101, 114, 1, 0, 0, 0, 52, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 84, 114, 105, 103, 103, 101, 114, 115, 124,
			65, 115, 121, 110, 99, 84, 114, 105, 103, 103,
			101, 114, 72, 97, 110, 100, 108, 101, 114, 1,
			0, 0, 0, 55, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 84, 114, 105, 103, 103, 101, 114, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 60, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 65, 112, 112, 108, 105, 99, 97, 116,
			105, 111, 110, 81, 117, 105, 116, 84, 114, 105,
			103, 103, 101, 114, 0, 0, 0, 0, 63, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 73, 65, 115, 121, 110, 99, 79, 110,
			65, 117, 100, 105, 111, 70, 105, 108, 116, 101,
			114, 82, 101, 97, 100, 72, 97, 110, 100, 108,
			101, 114, 1, 0, 0, 0, 52, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 84, 114, 105, 103, 103, 101, 114, 115, 124,
			65, 115, 121, 110, 99, 84, 114, 105, 103, 103,
			101, 114, 72, 97, 110, 100, 108, 101, 114, 1,
			0, 0, 0, 55, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 84, 114, 105, 103, 103, 101, 114, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 60, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 65, 117, 100, 105, 111, 70, 105, 108,
			116, 101, 114, 82, 101, 97, 100, 84, 114, 105,
			103, 103, 101, 114, 0, 0, 0, 0, 63, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 73, 65, 115, 121, 110, 99, 79, 110,
			66, 101, 99, 97, 109, 101, 73, 110, 118, 105,
			115, 105, 98, 108, 101, 72, 97, 110, 100, 108,
			101, 114, 1, 0, 0, 0, 52, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 84, 114, 105, 103, 103, 101, 114, 115, 124,
			65, 115, 121, 110, 99, 84, 114, 105, 103, 103,
			101, 114, 72, 97, 110, 100, 108, 101, 114, 1,
			0, 0, 0, 55, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 84, 114, 105, 103, 103, 101, 114, 69,
			120, 116, 101, 110, 115, 105, 111, 110, 115, 0,
			0, 0, 0, 60, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 84, 114,
			105, 103, 103, 101, 114, 115, 124, 65, 115, 121,
			110, 99, 66, 101, 99, 97, 109, 101, 73, 110,
			118, 105, 115, 105, 98, 108, 101, 84, 114, 105,
			103, 103, 101, 114, 0, 0, 0, 0, 61, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 73, 65, 115, 121, 110, 99, 79, 110,
			66, 101, 99, 97, 109, 101, 86, 105, 115, 105,
			98, 108, 101, 72, 97, 110, 100, 108, 101, 114,
			1, 0, 0, 0, 52, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 65, 115,
			121, 110, 99, 84, 114, 105, 103, 103, 101, 114,
			72, 97, 110, 100, 108, 101, 114, 1, 0, 0,
			0, 55, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 84, 114, 105, 103,
			103, 101, 114, 115, 124, 65, 115, 121, 110, 99,
			84, 114, 105, 103, 103, 101, 114, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 0, 0, 0,
			0, 58, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 84, 114, 105, 103,
			103, 101, 114, 115, 124, 65, 115, 121, 110, 99,
			66, 101, 99, 97, 109, 101, 86, 105, 115, 105,
			98, 108, 101, 84, 114, 105, 103, 103, 101, 114,
			0, 0, 0, 0, 76, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 73, 65,
			115, 121, 110, 99, 79, 110, 66, 101, 102, 111,
			114, 101, 84, 114, 97, 110, 115, 102, 111, 114,
			109, 80, 97, 114, 101, 110, 116, 67, 104, 97,
			110, 103, 101, 100, 72, 97, 110, 100, 108, 101,
			114, 1, 0, 0, 0, 52, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			84, 114, 105, 103, 103, 101, 114, 115, 124, 65,
			115, 121, 110, 99, 84, 114, 105, 103, 103, 101,
			114, 72, 97, 110, 100, 108, 101, 114, 1, 0,
			0, 0, 55, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 73, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 66, 101, 102, 111, 114, 101, 84, 114, 97,
			110, 115, 102, 111, 114, 109, 80, 97, 114, 101,
			110, 116, 67, 104, 97, 110, 103, 101, 100, 84,
			114, 105, 103, 103, 101, 114, 0, 0, 0, 0,
			66, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 73, 65, 115, 121, 110, 99,
			79, 110, 67, 97, 110, 118, 97, 115, 71, 114,
			111, 117, 112, 67, 104, 97, 110, 103, 101, 100,
			72, 97, 110, 100, 108, 101, 114, 1, 0, 0,
			0, 52, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 84, 114, 105, 103,
			103, 101, 114, 115, 124, 65, 115, 121, 110, 99,
			84, 114, 105, 103, 103, 101, 114, 72, 97, 110,
			100, 108, 101, 114, 1, 0, 0, 0, 55, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 65, 115, 121, 110, 99, 84, 114, 105,
			103, 103, 101, 114, 69, 120, 116, 101, 110, 115,
			105, 111, 110, 115, 0, 0, 0, 0, 65, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 65, 115, 121, 110, 99, 79, 110, 67,
			97, 110, 118, 97, 115, 71, 114, 111, 117, 112,
			67, 104, 97, 110, 103, 101, 100, 84, 114, 105,
			103, 103, 101, 114, 0, 0, 0, 0, 62, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 73, 65, 115, 121, 110, 99, 79, 110,
			67, 111, 108, 108, 105, 115, 105, 111, 110, 69,
			110, 116, 101, 114, 72, 97, 110, 100, 108, 101,
			114, 1, 0, 0, 0, 52, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			84, 114, 105, 103, 103, 101, 114, 115, 124, 65,
			115, 121, 110, 99, 84, 114, 105, 103, 103, 101,
			114, 72, 97, 110, 100, 108, 101, 114, 1, 0,
			0, 0, 55, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 59, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 67, 111, 108, 108, 105, 115, 105, 111, 110,
			69, 110, 116, 101, 114, 84, 114, 105, 103, 103,
			101, 114, 0, 0, 0, 0, 64, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 84, 114, 105, 103, 103, 101, 114, 115, 124,
			73, 65, 115, 121, 110, 99, 79, 110, 67, 111,
			108, 108, 105, 115, 105, 111, 110, 69, 110, 116,
			101, 114, 50, 68, 72, 97, 110, 100, 108, 101,
			114, 1, 0, 0, 0, 52, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			84, 114, 105, 103, 103, 101, 114, 115, 124, 65,
			115, 121, 110, 99, 84, 114, 105, 103, 103, 101,
			114, 72, 97, 110, 100, 108, 101, 114, 1, 0,
			0, 0, 55, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 69, 120,
			116, 101, 110, 115, 105, 111, 110, 115, 0, 0,
			0, 0, 61, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 67, 111, 108, 108, 105, 115, 105, 111, 110,
			69, 110, 116, 101, 114, 50, 68, 84, 114, 105,
			103, 103, 101, 114, 0, 0, 0, 0, 61, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 73, 65, 115, 121, 110, 99, 79, 110,
			67, 111, 108, 108, 105, 115, 105, 111, 110, 69,
			120, 105, 116, 72, 97, 110, 100, 108, 101, 114,
			1, 0, 0, 0, 52, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 65, 115,
			121, 110, 99, 84, 114, 105, 103, 103, 101, 114,
			72, 97, 110, 100, 108, 101, 114, 1, 0, 0,
			0, 55, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 84, 114, 105, 103,
			103, 101, 114, 115, 124, 65, 115, 121, 110, 99,
			84, 114, 105, 103, 103, 101, 114, 69, 120, 116,
			101, 110, 115, 105, 111, 110, 115, 0, 0, 0,
			0, 58, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 84, 114, 105, 103,
			103, 101, 114, 115, 124, 65, 115, 121, 110, 99,
			67, 111, 108, 108, 105, 115, 105, 111, 110, 69,
			120, 105, 116, 84, 114, 105, 103, 103, 101, 114,
			0, 0, 0, 0, 63, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 73, 65,
			115, 121, 110, 99, 79, 110, 67, 111, 108, 108,
			105, 115, 105, 111, 110, 69, 120, 105, 116, 50,
			68, 72, 97, 110, 100, 108, 101, 114, 1, 0,
			0, 0, 52, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 84, 114, 105,
			103, 103, 101, 114, 115, 124, 65, 115, 121, 110,
			99, 84, 114, 105, 103, 103, 101, 114, 72, 97,
			110, 100, 108, 101, 114, 1, 0, 0, 0, 55,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 84, 114, 105, 103, 103, 101,
			114, 115, 124, 65, 115, 121, 110, 99, 84, 114,
			105, 103, 103, 101, 114, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 0, 0, 0, 0, 60,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 84, 114, 105, 103, 103, 101,
			114, 115, 124, 65, 115, 121, 110, 99, 67, 111,
			108, 108, 105, 115, 105, 111, 110, 69, 120, 105,
			116, 50, 68, 84, 114, 105, 103, 103, 101, 114,
			0, 0, 0, 0, 61, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 84,
			114, 105, 103, 103, 101, 114, 115, 124, 73, 65,
			115, 121, 110, 99, 79, 110, 67, 111, 108, 108,
			105, 115, 105, 111, 110, 83, 116, 97, 121, 72,
			97, 110, 100, 108, 101, 114, 1, 0, 0, 0,
			52, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 65, 115, 121, 110, 99, 84,
			114, 105, 103, 103, 101, 114, 72, 97, 110, 100,
			108, 101, 114, 1, 0, 0, 0, 55, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 84, 114, 105, 103, 103, 101, 114, 115,
			124, 65, 115, 121, 110, 99, 84, 114, 105, 103,
			103, 101, 114, 69, 120, 116, 101, 110, 115, 105,
			111, 110, 115, 0, 0, 0, 0, 58, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 84, 114, 105, 103, 103, 101, 114, 115,
			124, 65, 115, 121, 110, 99, 67, 111, 108, 108,
			105, 115, 105, 111, 110, 83, 116, 97, 121, 84,
			114, 105, 103, 103, 101, 114, 0, 0, 0, 0,
			63, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 84, 114, 105, 103, 103,
			101, 114, 115, 124, 73, 65, 115, 121, 110, 99,
			79, 110, 67, 111, 108, 108, 105, 115, 105, 111,
			110, 83, 116, 97, 121, 50, 68, 72, 97, 110,
			100, 108, 101, 114, 1, 0, 0, 0, 52, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 84, 114, 105, 103, 103, 101, 114,
			115, 124, 65, 115, 121, 110, 99, 84, 114, 105,
			103, 103, 101, 114, 72, 97, 110, 100, 108, 101,
			114

plugins/Lib/UniTask.DOTween.dll

Decompiled 10 months ago
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[0];
		result.TypesData = new byte[0];
		result.TotalFiles = 0;
		result.TotalTypes = 0;
		result.IsEditorOnly = false;
		return result;
	}
}

plugins/Lib/UniTask.Linq.dll

Decompiled 10 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using Cysharp.Threading.Tasks.CompilerServices;
using Cysharp.Threading.Tasks.Internal;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[5897]
		{
			0, 0, 0, 2, 0, 0, 0, 73, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 76, 105, 110, 113, 92, 65,
			103, 103, 114, 101, 103, 97, 116, 101, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 67, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			65, 108, 108, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 67, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			76, 105, 110, 113, 92, 65, 110, 121, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 77, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			65, 112, 112, 101, 110, 100, 80, 114, 101, 112,
			101, 110, 100, 46, 99, 115, 0, 0, 0, 1,
			0, 0, 0, 88, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			76, 105, 110, 113, 92, 65, 115, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 83,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 116, 111, 114, 66, 97, 115, 101,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			71, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 76, 105, 110,
			113, 92, 65, 118, 101, 114, 97, 103, 101, 46,
			99, 115, 0, 0, 0, 5, 0, 0, 0, 70,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 66, 117, 102, 102, 101, 114, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 68, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 76, 105, 110, 113, 92, 67,
			97, 115, 116, 46, 99, 115, 0, 0, 0, 29,
			0, 0, 0, 77, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			76, 105, 110, 113, 92, 67, 111, 109, 98, 105,
			110, 101, 76, 97, 116, 101, 115, 116, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 70, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			67, 111, 110, 99, 97, 116, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 72, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 67, 111,
			110, 116, 97, 105, 110, 115, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 69, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 67, 111,
			117, 110, 116, 46, 99, 115, 0, 0, 0, 5,
			0, 0, 0, 70, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			76, 105, 110, 113, 92, 67, 114, 101, 97, 116,
			101, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 78, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 76, 105,
			110, 113, 92, 68, 101, 102, 97, 117, 108, 116,
			73, 102, 69, 109, 112, 116, 121, 46, 99, 115,
			0, 0, 0, 9, 0, 0, 0, 72, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 76, 105, 110, 113, 92, 68,
			105, 115, 116, 105, 110, 99, 116, 46, 99, 115,
			0, 0, 0, 9, 0, 0, 0, 84, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 76, 105, 110, 113, 92, 68,
			105, 115, 116, 105, 110, 99, 116, 85, 110, 116,
			105, 108, 67, 104, 97, 110, 103, 101, 100, 46,
			99, 115, 0, 0, 0, 3, 0, 0, 0, 66,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 68, 111, 46, 99, 115, 0, 0, 0, 2,
			0, 0, 0, 73, 92, 76, 105, 98, 114, 97,
			114, 121, 92, 80, 97, 99, 107, 97, 103, 101,
			67, 97, 99, 104, 101, 92, 99, 111, 109, 46,
			99, 121, 115, 104, 97, 114, 112, 46, 117, 110,
			105, 116, 97, 115, 107, 64, 50, 46, 53, 46,
			48, 92, 82, 117, 110, 116, 105, 109, 101, 92,
			76, 105, 110, 113, 92, 69, 108, 101, 109, 101,
			110, 116, 65, 116, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 69, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 76, 105, 110, 113, 92, 69, 109, 112, 116,
			121, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 70, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 76, 105,
			110, 113, 92, 69, 120, 99, 101, 112, 116, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 69,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 70, 105, 114, 115, 116, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 71, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 70, 111,
			114, 69, 97, 99, 104, 46, 99, 115, 0, 0,
			0, 13, 0, 0, 0, 71, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 76, 105, 110, 113, 92, 71, 114, 111,
			117, 112, 66, 121, 46, 99, 115, 0, 0, 0,
			7, 0, 0, 0, 73, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 76, 105, 110, 113, 92, 71, 114, 111, 117,
			112, 74, 111, 105, 110, 46, 99, 115, 0, 0,
			0, 3, 0, 0, 0, 73, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 76, 105, 110, 113, 92, 73, 110, 116,
			101, 114, 115, 101, 99, 116, 46, 99, 115, 0,
			0, 0, 7, 0, 0, 0, 68, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 74, 111,
			105, 110, 46, 99, 115, 0, 0, 0, 2, 0,
			0, 0, 68, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 76,
			105, 110, 113, 92, 76, 97, 115, 116, 46, 99,
			115, 0, 0, 0, 2, 0, 0, 0, 73, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			76, 111, 110, 103, 67, 111, 117, 110, 116, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 67,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 77, 97, 120, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 69, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 76, 105, 110, 113, 92, 77, 101, 114, 103,
			101, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 67, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 76, 105,
			110, 113, 92, 77, 105, 110, 46, 99, 115, 0,
			0, 0, 4, 0, 0, 0, 70, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 77, 105,
			110, 77, 97, 120, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 69, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 76, 105, 110, 113, 92, 78, 101, 118, 101,
			114, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 70, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 76, 105,
			110, 113, 92, 79, 102, 84, 121, 112, 101, 46,
			99, 115, 0, 0, 0, 10, 0, 0, 0, 71,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 79, 114, 100, 101, 114, 66, 121, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 72, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			80, 97, 105, 114, 119, 105, 115, 101, 46, 99,
			115, 0, 0, 0, 4, 0, 0, 0, 71, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			80, 117, 98, 108, 105, 115, 104, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 69, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 76, 105, 110, 113, 92, 81,
			117, 101, 117, 101, 46, 99, 115, 0, 0, 0,
			3, 0, 0, 0, 69, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 76, 105, 110, 113, 92, 82, 97, 110, 103,
			101, 46, 99, 115, 0, 0, 0, 3, 0, 0,
			0, 70, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 76, 105,
			110, 113, 92, 82, 101, 112, 101, 97, 116, 46,
			99, 115, 0, 0, 0, 3, 0, 0, 0, 70,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 82, 101, 116, 117, 114, 110, 46, 99, 115,
			0, 0, 0, 3, 0, 0, 0, 71, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 76, 105, 110, 113, 92, 82,
			101, 118, 101, 114, 115, 101, 46, 99, 115, 0,
			0, 0, 13, 0, 0, 0, 70, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 83, 101,
			108, 101, 99, 116, 46, 99, 115, 0, 0, 0,
			7, 0, 0, 0, 74, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 76, 105, 110, 113, 92, 83, 101, 108, 101,
			99, 116, 77, 97, 110, 121, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 77, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 83, 101,
			113, 117, 101, 110, 99, 101, 69, 113, 117, 97,
			108, 46, 99, 115, 0, 0, 0, 2, 0, 0,
			0, 70, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 76, 105,
			110, 113, 92, 83, 105, 110, 103, 108, 101, 46,
			99, 115, 0, 0, 0, 3, 0, 0, 0, 68,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 83, 107, 105, 112, 46, 99, 115, 0, 0,
			0, 3, 0, 0, 0, 72, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 76, 105, 110, 113, 92, 83, 107, 105,
			112, 76, 97, 115, 116, 46, 99, 115, 0, 0,
			0, 3, 0, 0, 0, 73, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 76, 105, 110, 113, 92, 83, 107, 105,
			112, 85, 110, 116, 105, 108, 46, 99, 115, 0,
			0, 0, 3, 0, 0, 0, 81, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 83, 107,
			105, 112, 85, 110, 116, 105, 108, 67, 97, 110,
			99, 101, 108, 101, 100, 46, 99, 115, 0, 0,
			0, 13, 0, 0, 0, 73, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 76, 105, 110, 113, 92, 83, 107, 105,
			112, 87, 104, 105, 108, 101, 46, 99, 115, 0,
			0, 0, 3, 0, 0, 0, 73, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 83, 117,
			98, 115, 99, 114, 105, 98, 101, 46, 99, 115,
			0, 0, 0, 2, 0, 0, 0, 67, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 76, 105, 110, 113, 92, 83,
			117, 109, 46, 99, 115, 0, 0, 0, 3, 0,
			0, 0, 68, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 76,
			105, 110, 113, 92, 84, 97, 107, 101, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 72, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			84, 97, 107, 101, 76, 97, 115, 116, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 73, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			84, 97, 107, 101, 85, 110, 116, 105, 108, 46,
			99, 115, 0, 0, 0, 3, 0, 0, 0, 81,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 84, 97, 107, 101, 85, 110, 116, 105, 108,
			67, 97, 110, 99, 101, 108, 101, 100, 46, 99,
			115, 0, 0, 0, 13, 0, 0, 0, 73, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			84, 97, 107, 101, 87, 104, 105, 108, 101, 46,
			99, 115, 0, 0, 0, 3, 0, 0, 0, 69,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 84, 104, 114, 111, 119, 46, 99, 115, 0,
			0, 0, 2, 0, 0, 0, 71, 92, 76, 105,
			98, 114, 97, 114, 121, 92, 80, 97, 99, 107,
			97, 103, 101, 67, 97, 99, 104, 101, 92, 99,
			111, 109, 46, 99, 121, 115, 104, 97, 114, 112,
			46, 117, 110, 105, 116, 97, 115, 107, 64, 50,
			46, 53, 46, 48, 92, 82, 117, 110, 116, 105,
			109, 101, 92, 76, 105, 110, 113, 92, 84, 111,
			65, 114, 114, 97, 121, 46, 99, 115, 0, 0,
			0, 2, 0, 0, 0, 76, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 76, 105, 110, 113, 92, 84, 111, 68,
			105, 99, 116, 105, 111, 110, 97, 114, 121, 46,
			99, 115, 0, 0, 0, 2, 0, 0, 0, 73,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 84, 111, 72, 97, 115, 104, 83, 101, 116,
			46, 99, 115, 0, 0, 0, 2, 0, 0, 0,
			70, 92, 76, 105, 98, 114, 97, 114, 121, 92,
			80, 97, 99, 107, 97, 103, 101, 67, 97, 99,
			104, 101, 92, 99, 111, 109, 46, 99, 121, 115,
			104, 97, 114, 112, 46, 117, 110, 105, 116, 97,
			115, 107, 64, 50, 46, 53, 46, 48, 92, 82,
			117, 110, 116, 105, 109, 101, 92, 76, 105, 110,
			113, 92, 84, 111, 76, 105, 115, 116, 46, 99,
			115, 0, 0, 0, 4, 0, 0, 0, 72, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			84, 111, 76, 111, 111, 107, 117, 112, 46, 99,
			115, 0, 0, 0, 3, 0, 0, 0, 76, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			84, 111, 79, 98, 115, 101, 114, 118, 97, 98,
			108, 101, 46, 99, 115, 0, 0, 0, 9, 0,
			0, 0, 88, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 76,
			105, 110, 113, 92, 84, 111, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 46, 99,
			115, 0, 0, 0, 1, 0, 0, 0, 69, 92,
			76, 105, 98, 114, 97, 114, 121, 92, 80, 97,
			99, 107, 97, 103, 101, 67, 97, 99, 104, 101,
			92, 99, 111, 109, 46, 99, 121, 115, 104, 97,
			114, 112, 46, 117, 110, 105, 116, 97, 115, 107,
			64, 50, 46, 53, 46, 48, 92, 82, 117, 110,
			116, 105, 109, 101, 92, 76, 105, 110, 113, 92,
			85, 110, 105, 111, 110, 46, 99, 115, 0, 0,
			0, 3, 0, 0, 0, 91, 92, 76, 105, 98,
			114, 97, 114, 121, 92, 80, 97, 99, 107, 97,
			103, 101, 67, 97, 99, 104, 101, 92, 99, 111,
			109, 46, 99, 121, 115, 104, 97, 114, 112, 46,
			117, 110, 105, 116, 97, 115, 107, 64, 50, 46,
			53, 46, 48, 92, 82, 117, 110, 116, 105, 109,
			101, 92, 76, 105, 110, 113, 92, 85, 110, 105,
			116, 121, 69, 120, 116, 101, 110, 115, 105, 111,
			110, 115, 92, 69, 118, 101, 114, 121, 85, 112,
			100, 97, 116, 101, 46, 99, 115, 0, 0, 0,
			5, 0, 0, 0, 97, 92, 76, 105, 98, 114,
			97, 114, 121, 92, 80, 97, 99, 107, 97, 103,
			101, 67, 97, 99, 104, 101, 92, 99, 111, 109,
			46, 99, 121, 115, 104, 97, 114, 112, 46, 117,
			110, 105, 116, 97, 115, 107, 64, 50, 46, 53,
			46, 48, 92, 82, 117, 110, 116, 105, 109, 101,
			92, 76, 105, 110, 113, 92, 85, 110, 105, 116,
			121, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 92, 69, 118, 101, 114, 121, 86, 97, 108,
			117, 101, 67, 104, 97, 110, 103, 101, 100, 46,
			99, 115, 0, 0, 0, 5, 0, 0, 0, 85,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 85, 110, 105, 116, 121, 69, 120, 116, 101,
			110, 115, 105, 111, 110, 115, 92, 84, 105, 109,
			101, 114, 46, 99, 115, 0, 0, 0, 13, 0,
			0, 0, 69, 92, 76, 105, 98, 114, 97, 114,
			121, 92, 80, 97, 99, 107, 97, 103, 101, 67,
			97, 99, 104, 101, 92, 99, 111, 109, 46, 99,
			121, 115, 104, 97, 114, 112, 46, 117, 110, 105,
			116, 97, 115, 107, 64, 50, 46, 53, 46, 48,
			92, 82, 117, 110, 116, 105, 109, 101, 92, 76,
			105, 110, 113, 92, 87, 104, 101, 114, 101, 46,
			99, 115, 0, 0, 0, 7, 0, 0, 0, 67,
			92, 76, 105, 98, 114, 97, 114, 121, 92, 80,
			97, 99, 107, 97, 103, 101, 67, 97, 99, 104,
			101, 92, 99, 111, 109, 46, 99, 121, 115, 104,
			97, 114, 112, 46, 117, 110, 105, 116, 97, 115,
			107, 64, 50, 46, 53, 46, 48, 92, 82, 117,
			110, 116, 105, 109, 101, 92, 76, 105, 110, 113,
			92, 90, 105, 112, 46, 99, 115
		};
		result.TypesData = new byte[17792]
		{
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			38, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			65, 103, 103, 114, 101, 103, 97, 116, 101, 1,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 98, 108, 101, 0, 0, 0, 0, 32,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 65,
			108, 108, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 32, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 65, 110, 121, 1, 0, 0, 0, 51,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 85,
			110, 105, 84, 97, 115, 107, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 0, 0, 0, 0, 42, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 65, 112, 112, 101, 110,
			100, 80, 114, 101, 112, 101, 110, 100, 0, 0,
			0, 0, 57, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 65, 112, 112, 101, 110, 100, 80, 114,
			101, 112, 101, 110, 100, 124, 95, 65, 112, 112,
			101, 110, 100, 80, 114, 101, 112, 101, 110, 100,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			48, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 116, 111, 114, 66, 97, 115, 101, 0,
			0, 0, 0, 61, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 116, 111, 114, 65, 119,
			97, 105, 116, 83, 101, 108, 101, 99, 116, 111,
			114, 66, 97, 115, 101, 1, 0, 0, 0, 51,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 85,
			110, 105, 84, 97, 115, 107, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 0, 0, 0, 0, 36, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 65, 118, 101, 114, 97,
			103, 101, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 35, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 66, 117, 102, 102, 101, 114, 0, 0,
			0, 0, 43, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 66, 117, 102, 102, 101, 114, 124, 95,
			66, 117, 102, 102, 101, 114, 0, 0, 0, 0,
			39, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			66, 117, 102, 102, 101, 114, 83, 107, 105, 112,
			0, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 66, 117, 102, 102, 101, 114,
			83, 107, 105, 112, 124, 95, 66, 117, 102, 102,
			101, 114, 83, 107, 105, 112, 1, 0, 0, 0,
			51, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			85, 110, 105, 84, 97, 115, 107, 65, 115, 121,
			110, 99, 69, 110, 117, 109, 101, 114, 97, 98,
			108, 101, 0, 0, 0, 0, 33, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 67, 97, 115, 116,
			0, 0, 0, 0, 39, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 67, 97, 115, 116, 124, 95,
			67, 97, 115, 116, 1, 0, 0, 0, 51, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 85, 110,
			105, 84, 97, 115, 107, 65, 115, 121, 110, 99,
			69, 110, 117, 109, 101, 114, 97, 98, 108, 101,
			1, 0, 0, 0, 42, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 67, 111, 109, 98, 105, 110,
			101, 76, 97, 116, 101, 115, 116, 1, 0, 0,
			0, 57, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 67, 111, 109, 98, 105, 110, 101, 76, 97,
			116, 101, 115, 116, 124, 95, 67, 111, 109, 98,
			105, 110, 101, 76, 97, 116, 101, 115, 116, 1,
			0, 0, 0, 42, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 67, 111, 109, 98, 105, 110, 101,
			76, 97, 116, 101, 115, 116, 1, 0, 0, 0,
			57, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			67, 111, 109, 98, 105, 110, 101, 76, 97, 116,
			101, 115, 116, 124, 95, 67, 111, 109, 98, 105,
			110, 101, 76, 97, 116, 101, 115, 116, 1, 0,
			0, 0, 42, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 67, 111, 109, 98, 105, 110, 101, 76,
			97, 116, 101, 115, 116, 1, 0, 0, 0, 57,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 67,
			111, 109, 98, 105, 110, 101, 76, 97, 116, 101,
			115, 116, 124, 95, 67, 111, 109, 98, 105, 110,
			101, 76, 97, 116, 101, 115, 116, 1, 0, 0,
			0, 42, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 67, 111, 109, 98, 105, 110, 101, 76, 97,
			116, 101, 115, 116, 1, 0, 0, 0, 57, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 67, 111,
			109, 98, 105, 110, 101, 76, 97, 116, 101, 115,
			116, 124, 95, 67, 111, 109, 98, 105, 110, 101,
			76, 97, 116, 101, 115, 116, 1, 0, 0, 0,
			42, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			67, 111, 109, 98, 105, 110, 101, 76, 97, 116,
			101, 115, 116, 1, 0, 0, 0, 57, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 46, 67, 111, 109,
			98, 105, 110, 101, 76, 97, 116, 101, 115, 116,
			124, 95, 67, 111, 109, 98, 105, 110, 101, 76,
			97, 116, 101, 115, 116, 1, 0, 0, 0, 42,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 67,
			111, 109, 98, 105, 110, 101, 76, 97, 116, 101,
			115, 116, 1, 0, 0, 0, 57, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 67, 111, 109, 98,
			105, 110, 101, 76, 97, 116, 101, 115, 116, 124,
			95, 67, 111, 109, 98, 105, 110, 101, 76, 97,
			116, 101, 115, 116, 1, 0, 0, 0, 42, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 67, 111,
			109, 98, 105, 110, 101, 76, 97, 116, 101, 115,
			116, 1, 0, 0, 0, 57, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 46, 67, 111, 109, 98, 105,
			110, 101, 76, 97, 116, 101, 115, 116, 124, 95,
			67, 111, 109, 98, 105, 110, 101, 76, 97, 116,
			101, 115, 116, 1, 0, 0, 0, 42, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 67, 111, 109,
			98, 105, 110, 101, 76, 97, 116, 101, 115, 116,
			1, 0, 0, 0, 57, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 67, 111, 109, 98, 105, 110,
			101, 76, 97, 116, 101, 115, 116, 124, 95, 67,
			111, 109, 98, 105, 110, 101, 76, 97, 116, 101,
			115, 116, 1, 0, 0, 0, 42, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 67, 111, 109, 98,
			105, 110, 101, 76, 97, 116, 101, 115, 116, 1,
			0, 0, 0, 57, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 67, 111, 109, 98, 105, 110, 101,
			76, 97, 116, 101, 115, 116, 124, 95, 67, 111,
			109, 98, 105, 110, 101, 76, 97, 116, 101, 115,
			116, 1, 0, 0, 0, 42, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 67, 111, 109, 98, 105,
			110, 101, 76, 97, 116, 101, 115, 116, 1, 0,
			0, 0, 57, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 67, 111, 109, 98, 105, 110, 101, 76,
			97, 116, 101, 115, 116, 124, 95, 67, 111, 109,
			98, 105, 110, 101, 76, 97, 116, 101, 115, 116,
			1, 0, 0, 0, 42, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 67, 111, 109, 98, 105, 110,
			101, 76, 97, 116, 101, 115, 116, 1, 0, 0,
			0, 57, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 67, 111, 109, 98, 105, 110, 101, 76, 97,
			116, 101, 115, 116, 124, 95, 67, 111, 109, 98,
			105, 110, 101, 76, 97, 116, 101, 115, 116, 1,
			0, 0, 0, 42, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 67, 111, 109, 98, 105, 110, 101,
			76, 97, 116, 101, 115, 116, 1, 0, 0, 0,
			57, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			67, 111, 109, 98, 105, 110, 101, 76, 97, 116,
			101, 115, 116, 124, 95, 67, 111, 109, 98, 105,
			110, 101, 76, 97, 116, 101, 115, 116, 1, 0,
			0, 0, 42, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 67, 111, 109, 98, 105, 110, 101, 76,
			97, 116, 101, 115, 116, 1, 0, 0, 0, 57,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 67,
			111, 109, 98, 105, 110, 101, 76, 97, 116, 101,
			115, 116, 124, 95, 67, 111, 109, 98, 105, 110,
			101, 76, 97, 116, 101, 115, 116, 1, 0, 0,
			0, 42, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 67, 111, 109, 98, 105, 110, 101, 76, 97,
			116, 101, 115, 116, 1, 0, 0, 0, 57, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 67, 111,
			109, 98, 105, 110, 101, 76, 97, 116, 101, 115,
			116, 124, 95, 67, 111, 109, 98, 105, 110, 101,
			76, 97, 116, 101, 115, 116, 1, 0, 0, 0,
			51, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			85, 110, 105, 84, 97, 115, 107, 65, 115, 121,
			110, 99, 69, 110, 117, 109, 101, 114, 97, 98,
			108, 101, 0, 0, 0, 0, 35, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 67, 111, 110, 99,
			97, 116, 0, 0, 0, 0, 43, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 67, 111, 110, 99,
			97, 116, 124, 95, 67, 111, 110, 99, 97, 116,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			37, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			67, 111, 110, 116, 97, 105, 110, 115, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 34, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 67, 111,
			117, 110, 116, 1, 0, 0, 0, 51, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 0,
			0, 0, 0, 41, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 73, 65, 115, 121, 110, 99, 87,
			114, 105, 116, 101, 114, 0, 0, 0, 0, 35,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 67,
			114, 101, 97, 116, 101, 0, 0, 0, 0, 43,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 67,
			114, 101, 97, 116, 101, 124, 95, 67, 114, 101,
			97, 116, 101, 0, 0, 0, 0, 47, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 46, 67, 114, 101,
			97, 116, 101, 124, 65, 115, 121, 110, 99, 87,
			114, 105, 116, 101, 114, 1, 0, 0, 0, 51,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 85,
			110, 105, 84, 97, 115, 107, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 0, 0, 0, 0, 43, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 68, 101, 102, 97, 117,
			108, 116, 73, 102, 69, 109, 112, 116, 121, 0,
			0, 0, 0, 59, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 68, 101, 102, 97, 117, 108, 116,
			73, 102, 69, 109, 112, 116, 121, 124, 95, 68,
			101, 102, 97, 117, 108, 116, 73, 102, 69, 109,
			112, 116, 121, 1, 0, 0, 0, 51, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 1,
			0, 0, 0, 37, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 68, 105, 115, 116, 105, 110, 99,
			116, 1, 0, 0, 0, 47, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 46, 68, 105, 115, 116, 105,
			110, 99, 116, 124, 95, 68, 105, 115, 116, 105,
			110, 99, 116, 1, 0, 0, 0, 37, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 68, 105, 115,
			116, 105, 110, 99, 116, 1, 0, 0, 0, 47,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 68,
			105, 115, 116, 105, 110, 99, 116, 124, 95, 68,
			105, 115, 116, 105, 110, 99, 116, 0, 0, 0,
			0, 42, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 68, 105, 115, 116, 105, 110, 99, 116, 65,
			119, 97, 105, 116, 0, 0, 0, 0, 57, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 68, 105,
			115, 116, 105, 110, 99, 116, 65, 119, 97, 105,
			116, 124, 95, 68, 105, 115, 116, 105, 110, 99,
			116, 65, 119, 97, 105, 116, 0, 0, 0, 0,
			58, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			68, 105, 115, 116, 105, 110, 99, 116, 65, 119,
			97, 105, 116, 87, 105, 116, 104, 67, 97, 110,
			99, 101, 108, 108, 97, 116, 105, 111, 110, 0,
			0, 0, 0, 89, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 68, 105, 115, 116, 105, 110, 99,
			116, 65, 119, 97, 105, 116, 87, 105, 116, 104,
			67, 97, 110, 99, 101, 108, 108, 97, 116, 105,
			111, 110, 124, 95, 68, 105, 115, 116, 105, 110,
			99, 116, 65, 119, 97, 105, 116, 87, 105, 116,
			104, 67, 97, 110, 99, 101, 108, 108, 97, 116,
			105, 111, 110, 1, 0, 0, 0, 51, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 1,
			0, 0, 0, 49, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 68, 105, 115, 116, 105, 110, 99,
			116, 85, 110, 116, 105, 108, 67, 104, 97, 110,
			103, 101, 100, 1, 0, 0, 0, 71, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 46, 68, 105, 115,
			116, 105, 110, 99, 116, 85, 110, 116, 105, 108,
			67, 104, 97, 110, 103, 101, 100, 124, 95, 68,
			105, 115, 116, 105, 110, 99, 116, 85, 110, 116,
			105, 108, 67, 104, 97, 110, 103, 101, 100, 1,
			0, 0, 0, 49, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 68, 105, 115, 116, 105, 110, 99,
			116, 85, 110, 116, 105, 108, 67, 104, 97, 110,
			103, 101, 100, 1, 0, 0, 0, 71, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 46, 68, 105, 115,
			116, 105, 110, 99, 116, 85, 110, 116, 105, 108,
			67, 104, 97, 110, 103, 101, 100, 124, 95, 68,
			105, 115, 116, 105, 110, 99, 116, 85, 110, 116,
			105, 108, 67, 104, 97, 110, 103, 101, 100, 0,
			0, 0, 0, 54, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 68, 105, 115, 116, 105, 110, 99,
			116, 85, 110, 116, 105, 108, 67, 104, 97, 110,
			103, 101, 100, 65, 119, 97, 105, 116, 0, 0,
			0, 0, 81, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 68, 105, 115, 116, 105, 110, 99, 116,
			85, 110, 116, 105, 108, 67, 104, 97, 110, 103,
			101, 100, 65, 119, 97, 105, 116, 124, 95, 68,
			105, 115, 116, 105, 110, 99, 116, 85, 110, 116,
			105, 108, 67, 104, 97, 110, 103, 101, 100, 65,
			119, 97, 105, 116, 0, 0, 0, 0, 70, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 68, 105,
			115, 116, 105, 110, 99, 116, 85, 110, 116, 105,
			108, 67, 104, 97, 110, 103, 101, 100, 65, 119,
			97, 105, 116, 87, 105, 116, 104, 67, 97, 110,
			99, 101, 108, 108, 97, 116, 105, 111, 110, 0,
			0, 0, 0, 113, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 68, 105, 115, 116, 105, 110, 99,
			116, 85, 110, 116, 105, 108, 67, 104, 97, 110,
			103, 101, 100, 65, 119, 97, 105, 116, 87, 105,
			116, 104, 67, 97, 110, 99, 101, 108, 108, 97,
			116, 105, 111, 110, 124, 95, 68, 105, 115, 116,
			105, 110, 99, 116, 85, 110, 116, 105, 108, 67,
			104, 97, 110, 103, 101, 100, 65, 119, 97, 105,
			116, 87, 105, 116, 104, 67, 97, 110, 99, 101,
			108, 108, 97, 116, 105, 111, 110, 1, 0, 0,
			0, 51, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 85, 110, 105, 84, 97, 115, 107, 65, 115,
			121, 110, 99, 69, 110, 117, 109, 101, 114, 97,
			98, 108, 101, 0, 0, 0, 0, 31, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 68, 111, 0,
			0, 0, 0, 35, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 68, 111, 124, 95, 68, 111, 1,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 98, 108, 101, 0, 0, 0, 0, 38,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 69,
			108, 101, 109, 101, 110, 116, 65, 116, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 34, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 69, 109,
			112, 116, 121, 0, 0, 0, 0, 41, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 46, 69, 109, 112,
			116, 121, 124, 95, 69, 109, 112, 116, 121, 1,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 98, 108, 101, 0, 0, 0, 0, 35,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 69,
			120, 99, 101, 112, 116, 0, 0, 0, 0, 43,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 69,
			120, 99, 101, 112, 116, 124, 95, 69, 120, 99,
			101, 112, 116, 1, 0, 0, 0, 51, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 0,
			0, 0, 0, 34, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 70, 105, 114, 115, 116, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 36, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 70, 111,
			114, 69, 97, 99, 104, 1, 0, 0, 0, 51,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 85,
			110, 105, 84, 97, 115, 107, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 1, 0, 0, 0, 36, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 71, 114, 111, 117, 112,
			66, 121, 1, 0, 0, 0, 45, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 71, 114, 111, 117,
			112, 66, 121, 124, 95, 71, 114, 111, 117, 112,
			66, 121, 1, 0, 0, 0, 36, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 71, 114, 111, 117,
			112, 66, 121, 1, 0, 0, 0, 45, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 46, 71, 114, 111,
			117, 112, 66, 121, 124, 95, 71, 114, 111, 117,
			112, 66, 121, 1, 0, 0, 0, 41, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 71, 114, 111,
			117, 112, 66, 121, 65, 119, 97, 105, 116, 1,
			0, 0, 0, 55, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 71, 114, 111, 117, 112, 66, 121,
			65, 119, 97, 105, 116, 124, 95, 71, 114, 111,
			117, 112, 66, 121, 65, 119, 97, 105, 116, 1,
			0, 0, 0, 41, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 71, 114, 111, 117, 112, 66, 121,
			65, 119, 97, 105, 116, 1, 0, 0, 0, 55,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 71,
			114, 111, 117, 112, 66, 121, 65, 119, 97, 105,
			116, 124, 95, 71, 114, 111, 117, 112, 66, 121,
			65, 119, 97, 105, 116, 1, 0, 0, 0, 57,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 71,
			114, 111, 117, 112, 66, 121, 65, 119, 97, 105,
			116, 87, 105, 116, 104, 67, 97, 110, 99, 101,
			108, 108, 97, 116, 105, 111, 110, 1, 0, 0,
			0, 87, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 71, 114, 111, 117, 112, 66, 121, 65, 119,
			97, 105, 116, 87, 105, 116, 104, 67, 97, 110,
			99, 101, 108, 108, 97, 116, 105, 111, 110, 124,
			95, 71, 114, 111, 117, 112, 66, 121, 65, 119,
			97, 105, 116, 87, 105, 116, 104, 67, 97, 110,
			99, 101, 108, 108, 97, 116, 105, 111, 110, 1,
			0, 0, 0, 57, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 71, 114, 111, 117, 112, 66, 121,
			65, 119, 97, 105, 116, 87, 105, 116, 104, 67,
			97, 110, 99, 101, 108, 108, 97, 116, 105, 111,
			110, 1, 0, 0, 0, 87, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 46, 71, 114, 111, 117, 112,
			66, 121, 65, 119, 97, 105, 116, 87, 105, 116,
			104, 67, 97, 110, 99, 101, 108, 108, 97, 116,
			105, 111, 110, 124, 95, 71, 114, 111, 117, 112,
			66, 121, 65, 119, 97, 105, 116, 87, 105, 116,
			104, 67, 97, 110, 99, 101, 108, 108, 97, 116,
			105, 111, 110, 1, 0, 0, 0, 51, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 0,
			0, 0, 0, 38, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 71, 114, 111, 117, 112, 74, 111,
			105, 110, 0, 0, 0, 0, 49, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 71, 114, 111, 117,
			112, 74, 111, 105, 110, 124, 95, 71, 114, 111,
			117, 112, 74, 111, 105, 110, 0, 0, 0, 0,
			43, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			71, 114, 111, 117, 112, 74, 111, 105, 110, 65,
			119, 97, 105, 116, 0, 0, 0, 0, 59, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 71, 114,
			111, 117, 112, 74, 111, 105, 110, 65, 119, 97,
			105, 116, 124, 95, 71, 114, 111, 117, 112, 74,
			111, 105, 110, 65, 119, 97, 105, 116, 0, 0,
			0, 0, 59, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 71, 114, 111, 117, 112, 74, 111, 105,
			110, 65, 119, 97, 105, 116, 87, 105, 116, 104,
			67, 97, 110, 99, 101, 108, 108, 97, 116, 105,
			111, 110, 0, 0, 0, 0, 91, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 71, 114, 111, 117,
			112, 74, 111, 105, 110, 65, 119, 97, 105, 116,
			87, 105, 116, 104, 67, 97, 110, 99, 101, 108,
			108, 97, 116, 105, 111, 110, 124, 95, 71, 114,
			111, 117, 112, 74, 111, 105, 110, 65, 119, 97,
			105, 116, 87, 105, 116, 104, 67, 97, 110, 99,
			101, 108, 108, 97, 116, 105, 111, 110, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 38, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 73, 110,
			116, 101, 114, 115, 101, 99, 116, 0, 0, 0,
			0, 49, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 73, 110, 116, 101, 114, 115, 101, 99, 116,
			124, 95, 73, 110, 116, 101, 114, 115, 101, 99,
			116, 1, 0, 0, 0, 51, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 0, 0, 0,
			0, 33, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 74, 111, 105, 110, 0, 0, 0, 0, 39,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 74,
			111, 105, 110, 124, 95, 74, 111, 105, 110, 0,
			0, 0, 0, 38, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 74, 111, 105, 110, 65, 119, 97,
			105, 116, 0, 0, 0, 0, 49, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 74, 111, 105, 110,
			65, 119, 97, 105, 116, 124, 95, 74, 111, 105,
			110, 65, 119, 97, 105, 116, 0, 0, 0, 0,
			54, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			74, 111, 105, 110, 65, 119, 97, 105, 116, 87,
			105, 116, 104, 67, 97, 110, 99, 101, 108, 108,
			97, 116, 105, 111, 110, 0, 0, 0, 0, 81,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 74,
			111, 105, 110, 65, 119, 97, 105, 116, 87, 105,
			116, 104, 67, 97, 110, 99, 101, 108, 108, 97,
			116, 105, 111, 110, 124, 95, 74, 111, 105, 110,
			65, 119, 97, 105, 116, 87, 105, 116, 104, 67,
			97, 110, 99, 101, 108, 108, 97, 116, 105, 111,
			110, 1, 0, 0, 0, 51, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 0, 0, 0,
			0, 33, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 76, 97, 115, 116, 1, 0, 0, 0, 51,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 85,
			110, 105, 84, 97, 115, 107, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 0, 0, 0, 0, 38, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 76, 111, 110, 103, 67,
			111, 117, 110, 116, 1, 0, 0, 0, 51, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 85, 110,
			105, 84, 97, 115, 107, 65, 115, 121, 110, 99,
			69, 110, 117, 109, 101, 114, 97, 98, 108, 101,
			1, 0, 0, 0, 32, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 77, 97, 120, 1, 0, 0,
			0, 51, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 85, 110, 105, 84, 97, 115, 107, 65, 115,
			121, 110, 99, 69, 110, 117, 109, 101, 114, 97,
			98, 108, 101, 0, 0, 0, 0, 34, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 77, 101, 114,
			103, 101, 0, 0, 0, 0, 41, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 77, 101, 114, 103,
			101, 124, 95, 77, 101, 114, 103, 101, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 1, 0, 0, 0, 32, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 77, 105,
			110, 1, 0, 0, 0, 51, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 1, 0, 0,
			0, 32, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 77, 105, 110, 1, 0, 0, 0, 51, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 85, 110,
			105, 84, 97, 115, 107, 65, 115, 121, 110, 99,
			69, 110, 117, 109, 101, 114, 97, 98, 108, 101,
			1, 0, 0, 0, 32, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 77, 97, 120, 1, 0, 0,
			0, 51, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 85, 110, 105, 84, 97, 115, 107, 65, 115,
			121, 110, 99, 69, 110, 117, 109, 101, 114, 97,
			98, 108, 101, 0, 0, 0, 0, 34, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 78, 101, 118,
			101, 114, 0, 0, 0, 0, 41, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 78, 101, 118, 101,
			114, 124, 95, 78, 101, 118, 101, 114, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 35, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 79, 102,
			84, 121, 112, 101, 0, 0, 0, 0, 43, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 79, 102,
			84, 121, 112, 101, 124, 95, 79, 102, 84, 121,
			112, 101, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 50, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 83, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 62, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 83, 121, 110,
			99, 83, 101, 108, 101, 99, 116, 111, 114, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 83, 111, 114, 116, 101, 114,
			0, 0, 0, 0, 58, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 65, 115, 121, 110, 99, 83,
			101, 108, 101, 99, 116, 111, 114, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 83, 111, 114,
			116, 101, 114, 0, 0, 0, 0, 74, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 65, 115, 121,
			110, 99, 83, 101, 108, 101, 99, 116, 111, 114,
			87, 105, 116, 104, 67, 97, 110, 99, 101, 108,
			108, 97, 116, 105, 111, 110, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 83, 111, 114, 116,
			101, 114, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 79, 114, 100, 101,
			114, 101, 100, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 75, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 79, 114, 100, 101, 114, 101, 100, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 124, 95, 79, 114, 100, 101,
			114, 101, 100, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 116, 111, 114, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 79, 114, 100, 101, 114, 101, 100, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 56, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 79, 114,
			100, 101, 114, 101, 100, 65, 115, 121, 110, 99,
			69, 110, 117, 109, 101, 114, 97, 98, 108, 101,
			65, 119, 97, 105, 116, 0, 0, 0, 0, 72,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 79,
			114, 100, 101, 114, 101, 100, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 65, 119, 97, 105, 116, 87, 105, 116, 104,
			67, 97, 110, 99, 101, 108, 108, 97, 116, 105,
			111, 110, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 37, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 80, 97, 105, 114, 119, 105, 115, 101,
			0, 0, 0, 0, 47, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 80, 97, 105, 114, 119, 105,
			115, 101, 124, 95, 80, 97, 105, 114, 119, 105,
			115, 101, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 36, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 80, 117, 98, 108, 105, 115, 104, 0,
			0, 0, 0, 54, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 80, 117, 98, 108, 105, 115, 104,
			124, 67, 111, 110, 110, 101, 99, 116, 68, 105,
			115, 112, 111, 115, 97, 98, 108, 101, 0, 0,
			0, 0, 45, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 80, 117, 98, 108, 105, 115, 104, 124,
			95, 80, 117, 98, 108, 105, 115, 104, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 42, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 81, 117,
			101, 117, 101, 79, 112, 101, 114, 97, 116, 111,
			114, 0, 0, 0, 0, 49, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 46, 81, 117, 101, 117, 101,
			79, 112, 101, 114, 97, 116, 111, 114, 124, 95,
			81, 117, 101, 117, 101, 1, 0, 0, 0, 51,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 85,
			110, 105, 84, 97, 115, 107, 65, 115, 121, 110,
			99, 69, 110, 117, 109, 101, 114, 97, 98, 108,
			101, 0, 0, 0, 0, 34, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 82, 97, 110, 103, 101,
			0, 0, 0, 0, 41, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 82, 97, 110, 103, 101, 124,
			95, 82, 97, 110, 103, 101, 1, 0, 0, 0,
			51, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			85, 110, 105, 84, 97, 115, 107, 65, 115, 121,
			110, 99, 69, 110, 117, 109, 101, 114, 97, 98,
			108, 101, 0, 0, 0, 0, 35, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 82, 101, 112, 101,
			97, 116, 0, 0, 0, 0, 43, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 82, 101, 112, 101,
			97, 116, 124, 95, 82, 101, 112, 101, 97, 116,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			35, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			82, 101, 116, 117, 114, 110, 0, 0, 0, 0,
			43, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			82, 101, 116, 117, 114, 110, 124, 95, 82, 101,
			116, 117, 114, 110, 1, 0, 0, 0, 51, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 85, 110,
			105, 84, 97, 115, 107, 65, 115, 121, 110, 99,
			69, 110, 117, 109, 101, 114, 97, 98, 108, 101,
			0, 0, 0, 0, 36, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 82, 101, 118, 101, 114, 115,
			101, 0, 0, 0, 0, 45, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 46, 82, 101, 118, 101, 114,
			115, 101, 124, 95, 82, 101, 118, 101, 114, 115,
			101, 1, 0, 0, 0, 51, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 0, 0, 0,
			0, 35, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 83, 101, 108, 101, 99, 116, 0, 0, 0,
			0, 43, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 83, 101, 108, 101, 99, 116, 124, 95, 83,
			101, 108, 101, 99, 116, 0, 0, 0, 0, 38,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 83,
			101, 108, 101, 99, 116, 73, 110, 116, 0, 0,
			0, 0, 46, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 83, 101, 108, 101, 99, 116, 73, 110,
			116, 124, 95, 83, 101, 108, 101, 99, 116, 0,
			0, 0, 0, 40, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 83, 101, 108, 101, 99, 116, 65,
			119, 97, 105, 116, 0, 0, 0, 0, 53, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 83, 101,
			108, 101, 99, 116, 65, 119, 97, 105, 116, 124,
			95, 83, 101, 108, 101, 99, 116, 65, 119, 97,
			105, 116, 0, 0, 0, 0, 43, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 83, 101, 108, 101,
			99, 116, 73, 110, 116, 65, 119, 97, 105, 116,
			0, 0, 0, 0, 56, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 83, 101, 108, 101, 99, 116,
			73, 110, 116, 65, 119, 97, 105, 116, 124, 95,
			83, 101, 108, 101, 99, 116, 65, 119, 97, 105,
			116, 0, 0, 0, 0, 56, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 83, 101, 108, 101, 99,
			116, 65, 119, 97, 105, 116, 87, 105, 116, 104,
			67, 97, 110, 99, 101, 108, 108, 97, 116, 105,
			111, 110, 0, 0, 0, 0, 85, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 83, 101, 108, 101,
			99, 116, 65, 119, 97, 105, 116, 87, 105, 116,
			104, 67, 97, 110, 99, 101, 108, 108, 97, 116,
			105, 111, 110, 124, 95, 83, 101, 108, 101, 99,
			116, 65, 119, 97, 105, 116, 87, 105, 116, 104,
			67, 97, 110, 99, 101, 108, 108, 97, 116, 105,
			111, 110, 0, 0, 0, 0, 59, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 83, 101, 108, 101,
			99, 116, 73, 110, 116, 65, 119, 97, 105, 116,
			87, 105, 116, 104, 67, 97, 110, 99, 101, 108,
			108, 97, 116, 105, 111, 110, 0, 0, 0, 0,
			88, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			83, 101, 108, 101, 99, 116, 73, 110, 116, 65,
			119, 97, 105, 116, 87, 105, 116, 104, 67, 97,
			110, 99, 101, 108, 108, 97, 116, 105, 111, 110,
			124, 95, 83, 101, 108, 101, 99, 116, 65, 119,
			97, 105, 116, 87, 105, 116, 104, 67, 97, 110,
			99, 101, 108, 108, 97, 116, 105, 111, 110, 1,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 98, 108, 101, 0, 0, 0, 0, 39,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 83,
			101, 108, 101, 99, 116, 77, 97, 110, 121, 0,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 83, 101, 108, 101, 99, 116, 77,
			97, 110, 121, 124, 95, 83, 101, 108, 101, 99,
			116, 77, 97, 110, 121, 0, 0, 0, 0, 44,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 83,
			101, 108, 101, 99, 116, 77, 97, 110, 121, 65,
			119, 97, 105, 116, 0, 0, 0, 0, 61, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 83, 101,
			108, 101, 99, 116, 77, 97, 110, 121, 65, 119,
			97, 105, 116, 124, 95, 83, 101, 108, 101, 99,
			116, 77, 97, 110, 121, 65, 119, 97, 105, 116,
			0, 0, 0, 0, 60, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 83, 101, 108, 101, 99, 116,
			77, 97, 110, 121, 65, 119, 97, 105, 116, 87,
			105, 116, 104, 67, 97, 110, 99, 101, 108, 108,
			97, 116, 105, 111, 110, 0, 0, 0, 0, 93,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 83,
			101, 108, 101, 99, 116, 77, 97, 110, 121, 65,
			119, 97, 105, 116, 87, 105, 116, 104, 67, 97,
			110, 99, 101, 108, 108, 97, 116, 105, 111, 110,
			124, 95, 83, 101, 108, 101, 99, 116, 77, 97,
			110, 121, 65, 119, 97, 105, 116, 87, 105, 116,
			104, 67, 97, 110, 99, 101, 108, 108, 97, 116,
			105, 111, 110, 1, 0, 0, 0, 51, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 0,
			0, 0, 0, 42, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 83, 101, 113, 117, 101, 110, 99,
			101, 69, 113, 117, 97, 108, 1, 0, 0, 0,
			51, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			85, 110, 105, 84, 97, 115, 107, 65, 115, 121,
			110, 99, 69, 110, 117, 109, 101, 114, 97, 98,
			108, 101, 0, 0, 0, 0, 43, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 83, 105, 110, 103,
			108, 101, 79, 112, 101, 114, 97, 116, 111, 114,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			33, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			83, 107, 105, 112, 0, 0, 0, 0, 39, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 83, 107,
			105, 112, 124, 95, 83, 107, 105, 112, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 37, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 83, 107,
			105, 112, 76, 97, 115, 116, 0, 0, 0, 0,
			47, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			83, 107, 105, 112, 76, 97, 115, 116, 124, 95,
			83, 107, 105, 112, 76, 97, 115, 116, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 38, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 83, 107,
			105, 112, 85, 110, 116, 105, 108, 0, 0, 0,
			0, 49, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 83, 107, 105, 112, 85, 110, 116, 105, 108,
			124, 95, 83, 107, 105, 112, 85, 110, 116, 105,
			108, 1, 0, 0, 0, 51, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 0, 0, 0,
			0, 46, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 83, 107, 105, 112, 85, 110, 116, 105, 108,
			67, 97, 110, 99, 101, 108, 101, 100, 0, 0,
			0, 0, 65, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 83, 107, 105, 112, 85, 110, 116, 105,
			108, 67, 97, 110, 99, 101, 108, 101, 100, 124,
			95, 83, 107, 105, 112, 85, 110, 116, 105, 108,
			67, 97, 110, 99, 101, 108, 101, 100, 1, 0,
			0, 0, 51, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 85, 110, 105, 84, 97, 115, 107, 65,
			115, 121, 110, 99, 69, 110, 117, 109, 101, 114,
			97, 98, 108, 101, 0, 0, 0, 0, 38, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 83, 107,
			105, 112, 87, 104, 105, 108, 101, 0, 0, 0,
			0, 49, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 83, 107, 105, 112, 87, 104, 105, 108, 101,
			124, 95, 83, 107, 105, 112, 87, 104, 105, 108,
			101, 0, 0, 0, 0, 41, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 83, 107, 105, 112, 87,
			104, 105, 108, 101, 73, 110, 116, 0, 0, 0,
			0, 55, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 83, 107, 105, 112, 87, 104, 105, 108, 101,
			73, 110, 116, 124, 95, 83, 107, 105, 112, 87,
			104, 105, 108, 101, 73, 110, 116, 0, 0, 0,
			0, 43, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 83, 107, 105, 112, 87, 104, 105, 108, 101,
			65, 119, 97, 105, 116, 0, 0, 0, 0, 59,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 46, 83,
			107, 105, 112, 87, 104, 105, 108, 101, 65, 119,
			97, 105, 116, 124, 95, 83, 107, 105, 112, 87,
			104, 105, 108, 101, 65, 119, 97, 105, 116, 0,
			0, 0, 0, 46, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 83, 107, 105, 112, 87, 104, 105,
			108, 101, 73, 110, 116, 65, 119, 97, 105, 116,
			0, 0, 0, 0, 65, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 83, 107, 105, 112, 87, 104,
			105, 108, 101, 73, 110, 116, 65, 119, 97, 105,
			116, 124, 95, 83, 107, 105, 112, 87, 104, 105,
			108, 101, 73, 110, 116, 65, 119, 97, 105, 116,
			0, 0, 0, 0, 59, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 83, 107, 105, 112, 87, 104,
			105, 108, 101, 65, 119, 97, 105, 116, 87, 105,
			116, 104, 67, 97, 110, 99, 101, 108, 108, 97,
			116, 105, 111, 110, 0, 0, 0, 0, 91, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 83, 107,
			105, 112, 87, 104, 105, 108, 101, 65, 119, 97,
			105, 116, 87, 105, 116, 104, 67, 97, 110, 99,
			101, 108, 108, 97, 116, 105, 111, 110, 124, 95,
			83, 107, 105, 112, 87, 104, 105, 108, 101, 65,
			119, 97, 105, 116, 87, 105, 116, 104, 67, 97,
			110, 99, 101, 108, 108, 97, 116, 105, 111, 110,
			0, 0, 0, 0, 62, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 83, 107, 105, 112, 87, 104,
			105, 108, 101, 73, 110, 116, 65, 119, 97, 105,
			116, 87, 105, 116, 104, 67, 97, 110, 99, 101,
			108, 108, 97, 116, 105, 111, 110, 0, 0, 0,
			0, 97, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 83, 107, 105, 112, 87, 104, 105, 108, 101,
			73, 110, 116, 65, 119, 97, 105, 116, 87, 105,
			116, 104, 67, 97, 110, 99, 101, 108, 108, 97,
			116, 105, 111, 110, 124, 95, 83, 107, 105, 112,
			87, 104, 105, 108, 101, 73, 110, 116, 65, 119,
			97, 105, 116, 87, 105, 116, 104, 67, 97, 110,
			99, 101, 108, 108, 97, 116, 105, 111, 110, 1,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 98, 108, 101, 0, 0, 0, 0, 56,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 67,
			97, 110, 99, 101, 108, 108, 97, 116, 105, 111,
			110, 84, 111, 107, 101, 110, 68, 105, 115, 112,
			111, 115, 97, 98, 108, 101, 0, 0, 0, 0,
			38, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			83, 117, 98, 115, 99, 114, 105, 98, 101, 1,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 98, 108, 101, 0, 0, 0, 0, 32,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 83,
			117, 109, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 33, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 84, 97, 107, 101, 0, 0, 0, 0,
			39, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			84, 97, 107, 101, 124, 95, 84, 97, 107, 101,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			37, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			84, 97, 107, 101, 76, 97, 115, 116, 0, 0,
			0, 0, 47, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 46, 84, 97, 107, 101, 76, 97, 115, 116,
			124, 95, 84, 97, 107, 101, 76, 97, 115, 116,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			38, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			84, 97, 107, 101, 85, 110, 116, 105, 108, 0,
			0, 0, 0, 49, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 84, 97, 107, 101, 85, 110, 116,
			105, 108, 124, 95, 84, 97, 107, 101, 85, 110,
			116, 105, 108, 1, 0, 0, 0, 51, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 85, 110, 105,
			84, 97, 115, 107, 65, 115, 121, 110, 99, 69,
			110, 117, 109, 101, 114, 97, 98, 108, 101, 0,
			0, 0, 0, 46, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 84, 97, 107, 101, 85, 110, 116,
			105, 108, 67, 97, 110, 99, 101, 108, 101, 100,
			0, 0, 0, 0, 65, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 46, 84, 97, 107, 101, 85, 110,
			116, 105, 108, 67, 97, 110, 99, 101, 108, 101,
			100, 124, 95, 84, 97, 107, 101, 85, 110, 116,
			105, 108, 67, 97, 110, 99, 101, 108, 101, 100,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			38, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			84, 97, 107, 101, 87, 104, 105, 108, 101, 0,
			0, 0, 0, 49, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 84, 97, 107, 101, 87, 104, 105,
			108, 101, 124, 95, 84, 97, 107, 101, 87, 104,
			105, 108, 101, 0, 0, 0, 0, 41, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 124, 84, 97, 107,
			101, 87, 104, 105, 108, 101, 73, 110, 116, 0,
			0, 0, 0, 55, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 84, 97, 107, 101, 87, 104, 105,
			108, 101, 73, 110, 116, 124, 95, 84, 97, 107,
			101, 87, 104, 105, 108, 101, 73, 110, 116, 0,
			0, 0, 0, 43, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 84, 97, 107, 101, 87, 104, 105,
			108, 101, 65, 119, 97, 105, 116, 0, 0, 0,
			0, 59, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			46, 84, 97, 107, 101, 87, 104, 105, 108, 101,
			65, 119, 97, 105, 116, 124, 95, 84, 97, 107,
			101, 87, 104, 105, 108, 101, 65, 119, 97, 105,
			116, 0, 0, 0, 0, 46, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 84, 97, 107, 101, 87,
			104, 105, 108, 101, 73, 110, 116, 65, 119, 97,
			105, 116, 0, 0, 0, 0, 65, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 46, 84, 97, 107, 101,
			87, 104, 105, 108, 101, 73, 110, 116, 65, 119,
			97, 105, 116, 124, 95, 84, 97, 107, 101, 87,
			104, 105, 108, 101, 73, 110, 116, 65, 119, 97,
			105, 116, 0, 0, 0, 0, 59, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 84, 97, 107, 101,
			87, 104, 105, 108, 101, 65, 119, 97, 105, 116,
			87, 105, 116, 104, 67, 97, 110, 99, 101, 108,
			108, 97, 116, 105, 111, 110, 0, 0, 0, 0,
			91, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			84, 97, 107, 101, 87, 104, 105, 108, 101, 65,
			119, 97, 105, 116, 87, 105, 116, 104, 67, 97,
			110, 99, 101, 108, 108, 97, 116, 105, 111, 110,
			124, 95, 84, 97, 107, 101, 87, 104, 105, 108,
			101, 65, 119, 97, 105, 116, 87, 105, 116, 104,
			67, 97, 110, 99, 101, 108, 108, 97, 116, 105,
			111, 110, 0, 0, 0, 0, 62, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 84, 97, 107, 101,
			87, 104, 105, 108, 101, 73, 110, 116, 65, 119,
			97, 105, 116, 87, 105, 116, 104, 67, 97, 110,
			99, 101, 108, 108, 97, 116, 105, 111, 110, 0,
			0, 0, 0, 97, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 46, 84, 97, 107, 101, 87, 104, 105,
			108, 101, 73, 110, 116, 65, 119, 97, 105, 116,
			87, 105, 116, 104, 67, 97, 110, 99, 101, 108,
			108, 97, 116, 105, 111, 110, 124, 95, 84, 97,
			107, 101, 87, 104, 105, 108, 101, 73, 110, 116,
			65, 119, 97, 105, 116, 87, 105, 116, 104, 67,
			97, 110, 99, 101, 108, 108, 97, 116, 105, 111,
			110, 1, 0, 0, 0, 51, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 0, 0, 0,
			0, 34, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 84, 104, 114, 111, 119, 0, 0, 0, 0,
			41, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			84, 104, 114, 111, 119, 124, 95, 84, 104, 114,
			111, 119, 1, 0, 0, 0, 51, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 85, 110, 105, 84,
			97, 115, 107, 65, 115, 121, 110, 99, 69, 110,
			117, 109, 101, 114, 97, 98, 108, 101, 0, 0,
			0, 0, 36, 67, 121, 115, 104, 97, 114, 112,
			46, 84, 104, 114, 101, 97, 100, 105, 110, 103,
			46, 84, 97, 115, 107, 115, 46, 76, 105, 110,
			113, 124, 84, 111, 65, 114, 114, 97, 121, 1,
			0, 0, 0, 51, 67, 121, 115, 104, 97, 114,
			112, 46, 84, 104, 114, 101, 97, 100, 105, 110,
			103, 46, 84, 97, 115, 107, 115, 46, 76, 105,
			110, 113, 124, 85, 110, 105, 84, 97, 115, 107,
			65, 115, 121, 110, 99, 69, 110, 117, 109, 101,
			114, 97, 98, 108, 101, 0, 0, 0, 0, 41,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 46, 76, 105, 110, 113, 124, 84,
			111, 68, 105, 99, 116, 105, 111, 110, 97, 114,
			121, 1, 0, 0, 0, 51, 67, 121, 115, 104,
			97, 114, 112, 46, 84, 104, 114, 101, 97, 100,
			105, 110, 103, 46, 84, 97, 115, 107, 115, 46,
			76, 105, 110, 113, 124, 85, 110, 105, 84, 97,
			115, 107, 65, 115, 121, 110, 99, 69, 110, 117,
			109, 101, 114, 97, 98, 108, 101, 0, 0, 0,
			0, 38, 67, 121, 115, 104, 97, 114, 112, 46,
			84, 104, 114, 101, 97, 100, 105, 110, 103, 46,
			84, 97, 115, 107, 115, 46, 76, 105, 110, 113,
			124, 84, 111, 72, 97, 115, 104, 83, 101, 116,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105, 84, 97, 115,
			107, 65, 115, 121, 110, 99, 69, 110, 117, 109,
			101, 114, 97, 98, 108, 101, 0, 0, 0, 0,
			35, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			84, 111, 76, 105, 115, 116, 1, 0, 0, 0,
			51, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 124,
			85, 110, 105, 84, 97, 115, 107, 65, 115, 121,
			110, 99, 69, 110, 117, 109, 101, 114, 97, 98,
			108, 101, 0, 0, 0, 0, 37, 67, 121, 115,
			104, 97, 114, 112, 46, 84, 104, 114, 101, 97,
			100, 105, 110, 103, 46, 84, 97, 115, 107, 115,
			46, 76, 105, 110, 113, 124, 84, 111, 76, 111,
			111, 107, 117, 112, 0, 0, 0, 0, 44, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 46, 84, 111,
			76, 111, 111, 107, 117, 112, 124, 76, 111, 111,
			107, 117, 112, 0, 0, 0, 0, 46, 67, 121,
			115, 104, 97, 114, 112, 46, 84, 104, 114, 101,
			97, 100, 105, 110, 103, 46, 84, 97, 115, 107,
			115, 46, 76, 105, 110, 113, 46, 84, 111, 76,
			111, 111, 107, 117, 112, 124, 71, 114, 111, 117,
			112, 105, 110, 103, 1, 0, 0, 0, 51, 67,
			121, 115, 104, 97, 114, 112, 46, 84, 104, 114,
			101, 97, 100, 105, 110, 103, 46, 84, 97, 115,
			107, 115, 46, 76, 105, 110, 113, 124, 85, 110,
			105, 84, 97, 115, 107, 65, 115, 121, 110, 99,
			69, 110, 117, 109, 101, 114, 97, 98, 108, 101,
			0, 0, 0, 0, 41, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 84, 111, 79, 98, 115, 101,
			114, 118, 97, 98, 108, 101, 0, 0, 0, 0,
			69, 67, 121, 115, 104, 97, 114, 112, 46, 84,
			104, 114, 101, 97, 100, 105, 110, 103, 46, 84,
			97, 115, 107, 115, 46, 76, 105, 110, 113, 46,
			84, 111, 79, 98, 115, 101, 114, 118, 97, 98,
			108, 101, 124, 67, 97, 110, 99, 101, 108, 108,
			97, 116, 105, 111, 110, 84, 111, 107, 101, 110,
			68, 105, 115, 112, 111, 115, 97, 98, 108, 101,
			1, 0, 0, 0, 51, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 46, 76,
			105, 110, 113, 124, 85, 110, 105

plugins/Lib/UniTask.TextMeshPro.dll

Decompiled 10 months ago
using System;
using System.CodeDom.Compiler;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Threading;
using Cysharp.Threading.Tasks.CompilerServices;
using TMPro;
using UnityEngine;
using UnityEngine.Events;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[CompilerGenerated]
[EditorBrowsable(EditorBrowsableState.Never)]
[GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)]
internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1
{
	private struct MonoScriptData
	{
		public byte[] FilePathsData;

		public byte[] TypesData;

		public int TotalTypes;

		public int TotalFiles;

		public bool IsEditorOnly;
	}

	[MethodImpl(MethodImplOptions.AggressiveInlining)]
	private static MonoScriptData Get()
	{
		MonoScriptData result = default(MonoScriptData);
		result.FilePathsData = new byte[239]
		{
			0, 0, 0, 1, 0, 0, 0, 106, 92, 76,
			105, 98, 114, 97, 114, 121, 92, 80, 97, 99,
			107, 97, 103, 101, 67, 97, 99, 104, 101, 92,
			99, 111, 109, 46, 99, 121, 115, 104, 97, 114,
			112, 46, 117, 110, 105, 116, 97, 115, 107, 64,
			50, 46, 53, 46, 48, 92, 82, 117, 110, 116,
			105, 109, 101, 92, 69, 120, 116, 101, 114, 110,
			97, 108, 92, 84, 101, 120, 116, 77, 101, 115,
			104, 80, 114, 111, 92, 84, 101, 120, 116, 77,
			101, 115, 104, 80, 114, 111, 65, 115, 121, 110,
			99, 69, 120, 116, 101, 110, 115, 105, 111, 110,
			115, 46, 99, 115, 0, 0, 0, 1, 0, 0,
			0, 117, 92, 76, 105, 98, 114, 97, 114, 121,
			92, 80, 97, 99, 107, 97, 103, 101, 67, 97,
			99, 104, 101, 92, 99, 111, 109, 46, 99, 121,
			115, 104, 97, 114, 112, 46, 117, 110, 105, 116,
			97, 115, 107, 64, 50, 46, 53, 46, 48, 92,
			82, 117, 110, 116, 105, 109, 101, 92, 69, 120,
			116, 101, 114, 110, 97, 108, 92, 84, 101, 120,
			116, 77, 101, 115, 104, 80, 114, 111, 92, 84,
			101, 120, 116, 77, 101, 115, 104, 80, 114, 111,
			65, 115, 121, 110, 99, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 46, 73, 110, 112, 117,
			116, 70, 105, 101, 108, 100, 46, 99, 115
		};
		result.TypesData = new byte[110]
		{
			1, 0, 0, 0, 50, 67, 121, 115, 104, 97,
			114, 112, 46, 84, 104, 114, 101, 97, 100, 105,
			110, 103, 46, 84, 97, 115, 107, 115, 124, 84,
			101, 120, 116, 77, 101, 115, 104, 80, 114, 111,
			65, 115, 121, 110, 99, 69, 120, 116, 101, 110,
			115, 105, 111, 110, 115, 1, 0, 0, 0, 50,
			67, 121, 115, 104, 97, 114, 112, 46, 84, 104,
			114, 101, 97, 100, 105, 110, 103, 46, 84, 97,
			115, 107, 115, 124, 84, 101, 120, 116, 77, 101,
			115, 104, 80, 114, 111, 65, 115, 121, 110, 99,
			69, 120, 116, 101, 110, 115, 105, 111, 110, 115
		};
		result.TotalFiles = 2;
		result.TotalTypes = 2;
		result.IsEditorOnly = false;
		return result;
	}
}
namespace Cysharp.Threading.Tasks;

public static class TextMeshProAsyncExtensions
{
	[StructLayout(LayoutKind.Auto)]
	[CompilerGenerated]
	private struct <BindToCore>d__2 : IAsyncStateMachine
	{
		public int <>1__state;

		public AsyncUniTaskVoidMethodBuilder <>t__builder;

		public IUniTaskAsyncEnumerable<string> source;

		public CancellationToken cancellationToken;

		public bool rebindOnError;

		public TMP_Text text;

		private bool <repeat>5__2;

		private IUniTaskAsyncEnumerator<string> <e>5__3;

		private object <>7__wrap3;

		private int <>7__wrap4;

		private Awaiter<bool> <>u__1;

		private Awaiter <>u__2;

		private void MoveNext()
		{
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0124: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			//IL_015d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0162: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			int num = <>1__state;
			try
			{
				if (num == 0)
				{
					goto IL_003e;
				}
				if (num != 1)
				{
					<repeat>5__2 = false;
					goto IL_0018;
				}
				Awaiter awaiter = <>u__2;
				<>u__2 = default(Awaiter);
				num = (<>1__state = -1);
				goto IL_0179;
				IL_0179:
				((Awaiter)(ref awaiter)).GetResult();
				goto IL_0180;
				IL_0180:
				object obj = <>7__wrap3;
				if (obj != null)
				{
					ExceptionDispatchInfo.Capture((obj as Exception) ?? throw obj).Throw();
				}
				switch (<>7__wrap4)
				{
				case 1:
					break;
				case 2:
					goto end_IL_0007;
				default:
					<>7__wrap3 = null;
					<e>5__3 = null;
					goto end_IL_0007;
				}
				goto IL_0018;
				IL_0018:
				<e>5__3 = source.GetAsyncEnumerator(cancellationToken);
				<>7__wrap3 = null;
				<>7__wrap4 = 0;
				goto IL_003e;
				IL_003e:
				try
				{
					while (true)
					{
						bool result;
						try
						{
							Awaiter<bool> awaiter2;
							if (num != 0)
							{
								awaiter2 = <e>5__3.MoveNextAsync().GetAwaiter();
								if (!awaiter2.IsCompleted)
								{
									num = (<>1__state = 0);
									<>u__1 = awaiter2;
									((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).AwaitUnsafeOnCompleted<Awaiter<bool>, <BindToCore>d__2>(ref awaiter2, ref this);
									return;
								}
							}
							else
							{
								awaiter2 = <>u__1;
								<>u__1 = default(Awaiter<bool>);
								num = (<>1__state = -1);
							}
							result = awaiter2.GetResult();
							<repeat>5__2 = false;
						}
						catch (Exception ex)
						{
							if (ex is OperationCanceledException)
							{
								goto IL_00fc;
							}
							if (rebindOnError && !<repeat>5__2)
							{
								<repeat>5__2 = true;
								goto IL_00f3;
							}
							throw;
						}
						if (result)
						{
							text.text = <e>5__3.Current;
							continue;
						}
						goto IL_00fc;
						IL_00f3:
						<>7__wrap4 = 1;
						break;
						IL_00fc:
						<>7__wrap4 = 2;
						break;
					}
				}
				catch (object obj2)
				{
					<>7__wrap3 = obj2;
				}
				if (<e>5__3 != null)
				{
					UniTask val = ((IUniTaskAsyncDisposable)<e>5__3).DisposeAsync();
					awaiter = ((UniTask)(ref val)).GetAwaiter();
					if (!((Awaiter)(ref awaiter)).IsCompleted)
					{
						num = (<>1__state = 1);
						<>u__2 = awaiter;
						((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).AwaitUnsafeOnCompleted<Awaiter, <BindToCore>d__2>(ref awaiter, ref this);
						return;
					}
					goto IL_0179;
				}
				goto IL_0180;
				end_IL_0007:;
			}
			catch (Exception exception)
			{
				<>1__state = -2;
				<e>5__3 = null;
				((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetException(exception);
				return;
			}
			<>1__state = -2;
			<e>5__3 = null;
			((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetResult();
		}

		void IAsyncStateMachine.MoveNext()
		{
			//ILSpy generated this explicit interface implementation from .override directive in MoveNext
			this.MoveNext();
		}

		[DebuggerHidden]
		private void SetStateMachine(IAsyncStateMachine stateMachine)
		{
			((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetStateMachine(stateMachine);
		}

		void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine stateMachine)
		{
			//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
			this.SetStateMachine(stateMachine);
		}
	}

	[StructLayout(LayoutKind.Auto)]
	[CompilerGenerated]
	private struct <BindToCore>d__6<T> : IAsyncStateMachine
	{
		public int <>1__state;

		public AsyncUniTaskVoidMethodBuilder <>t__builder;

		public IUniTaskAsyncEnumerable<T> source;

		public CancellationToken cancellationToken;

		public bool rebindOnError;

		public TMP_Text text;

		private bool <repeat>5__2;

		private IUniTaskAsyncEnumerator<T> <e>5__3;

		private object <>7__wrap3;

		private int <>7__wrap4;

		private Awaiter<bool> <>u__1;

		private Awaiter <>u__2;

		private void MoveNext()
		{
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_0137: Unknown result type (might be due to invalid IL or missing references)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_0151: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_006b: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			int num = <>1__state;
			try
			{
				if (num == 0)
				{
					goto IL_003e;
				}
				if (num != 1)
				{
					<repeat>5__2 = false;
					goto IL_0018;
				}
				Awaiter awaiter = <>u__2;
				<>u__2 = default(Awaiter);
				num = (<>1__state = -1);
				goto IL_0188;
				IL_0188:
				((Awaiter)(ref awaiter)).GetResult();
				goto IL_018f;
				IL_018f:
				object obj = <>7__wrap3;
				if (obj != null)
				{
					ExceptionDispatchInfo.Capture((obj as Exception) ?? throw obj).Throw();
				}
				switch (<>7__wrap4)
				{
				case 1:
					break;
				case 2:
					goto end_IL_0007;
				default:
					<>7__wrap3 = null;
					<e>5__3 = null;
					goto end_IL_0007;
				}
				goto IL_0018;
				IL_0018:
				<e>5__3 = source.GetAsyncEnumerator(cancellationToken);
				<>7__wrap3 = null;
				<>7__wrap4 = 0;
				goto IL_003e;
				IL_003e:
				try
				{
					while (true)
					{
						bool result;
						try
						{
							Awaiter<bool> awaiter2;
							if (num != 0)
							{
								awaiter2 = <e>5__3.MoveNextAsync().GetAwaiter();
								if (!awaiter2.IsCompleted)
								{
									num = (<>1__state = 0);
									<>u__1 = awaiter2;
									((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).AwaitUnsafeOnCompleted<Awaiter<bool>, <BindToCore>d__6<T>>(ref awaiter2, ref this);
									return;
								}
							}
							else
							{
								awaiter2 = <>u__1;
								<>u__1 = default(Awaiter<bool>);
								num = (<>1__state = -1);
							}
							result = awaiter2.GetResult();
							<repeat>5__2 = false;
						}
						catch (Exception ex)
						{
							if (ex is OperationCanceledException)
							{
								goto IL_010b;
							}
							if (rebindOnError && !<repeat>5__2)
							{
								<repeat>5__2 = true;
								goto IL_0102;
							}
							throw;
						}
						if (result)
						{
							text.text = <e>5__3.Current.ToString();
							continue;
						}
						goto IL_010b;
						IL_0102:
						<>7__wrap4 = 1;
						break;
						IL_010b:
						<>7__wrap4 = 2;
						break;
					}
				}
				catch (object obj2)
				{
					<>7__wrap3 = obj2;
				}
				if (<e>5__3 != null)
				{
					UniTask val = ((IUniTaskAsyncDisposable)<e>5__3).DisposeAsync();
					awaiter = ((UniTask)(ref val)).GetAwaiter();
					if (!((Awaiter)(ref awaiter)).IsCompleted)
					{
						num = (<>1__state = 1);
						<>u__2 = awaiter;
						((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).AwaitUnsafeOnCompleted<Awaiter, <BindToCore>d__6<T>>(ref awaiter, ref this);
						return;
					}
					goto IL_0188;
				}
				goto IL_018f;
				end_IL_0007:;
			}
			catch (Exception exception)
			{
				<>1__state = -2;
				<e>5__3 = null;
				((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetException(exception);
				return;
			}
			<>1__state = -2;
			<e>5__3 = null;
			((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetResult();
		}

		void IAsyncStateMachine.MoveNext()
		{
			//ILSpy generated this explicit interface implementation from .override directive in MoveNext
			this.MoveNext();
		}

		[DebuggerHidden]
		private void SetStateMachine(IAsyncStateMachine stateMachine)
		{
			((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetStateMachine(stateMachine);
		}

		void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine stateMachine)
		{
			//ILSpy generated this explicit interface implementation from .override directive in SetStateMachine
			this.SetStateMachine(stateMachine);
		}
	}

	public static void BindTo(this IUniTaskAsyncEnumerable<string> source, TMP_Text text, bool rebindOnError = true)
	{
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		UniTaskVoid val = BindToCore(source, text, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)text), rebindOnError);
		((UniTaskVoid)(ref val)).Forget();
	}

	public static void BindTo(this IUniTaskAsyncEnumerable<string> source, TMP_Text text, CancellationToken cancellationToken, bool rebindOnError = true)
	{
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		UniTaskVoid val = BindToCore(source, text, cancellationToken, rebindOnError);
		((UniTaskVoid)(ref val)).Forget();
	}

	[AsyncStateMachine(typeof(<BindToCore>d__2))]
	private static UniTaskVoid BindToCore(IUniTaskAsyncEnumerable<string> source, TMP_Text text, CancellationToken cancellationToken, bool rebindOnError)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		<BindToCore>d__2 <BindToCore>d__ = default(<BindToCore>d__2);
		<BindToCore>d__.<>t__builder = AsyncUniTaskVoidMethodBuilder.Create();
		<BindToCore>d__.source = source;
		<BindToCore>d__.text = text;
		<BindToCore>d__.cancellationToken = cancellationToken;
		<BindToCore>d__.rebindOnError = rebindOnError;
		<BindToCore>d__.<>1__state = -1;
		((AsyncUniTaskVoidMethodBuilder)(ref <BindToCore>d__.<>t__builder)).Start<<BindToCore>d__2>(ref <BindToCore>d__);
		return ((AsyncUniTaskVoidMethodBuilder)(ref <BindToCore>d__.<>t__builder)).Task;
	}

	public static void BindTo<T>(this IUniTaskAsyncEnumerable<T> source, TMP_Text text, bool rebindOnError = true)
	{
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		UniTaskVoid val = BindToCore<T>(source, text, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)text), rebindOnError);
		((UniTaskVoid)(ref val)).Forget();
	}

	public static void BindTo<T>(this IUniTaskAsyncEnumerable<T> source, TMP_Text text, CancellationToken cancellationToken, bool rebindOnError = true)
	{
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		UniTaskVoid val = BindToCore<T>(source, text, cancellationToken, rebindOnError);
		((UniTaskVoid)(ref val)).Forget();
	}

	public static void BindTo<T>(this AsyncReactiveProperty<T> source, TMP_Text text, bool rebindOnError = true)
	{
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		UniTaskVoid val = BindToCore<T>((IUniTaskAsyncEnumerable<T>)(object)source, text, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)text), rebindOnError);
		((UniTaskVoid)(ref val)).Forget();
	}

	[AsyncStateMachine(typeof(<BindToCore>d__6<>))]
	private static UniTaskVoid BindToCore<T>(IUniTaskAsyncEnumerable<T> source, TMP_Text text, CancellationToken cancellationToken, bool rebindOnError)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		<BindToCore>d__6<T> <BindToCore>d__ = default(<BindToCore>d__6<T>);
		<BindToCore>d__.<>t__builder = AsyncUniTaskVoidMethodBuilder.Create();
		<BindToCore>d__.source = source;
		<BindToCore>d__.text = text;
		<BindToCore>d__.cancellationToken = cancellationToken;
		<BindToCore>d__.rebindOnError = rebindOnError;
		<BindToCore>d__.<>1__state = -1;
		((AsyncUniTaskVoidMethodBuilder)(ref <BindToCore>d__.<>t__builder)).Start<<BindToCore>d__6<T>>(ref <BindToCore>d__);
		return ((AsyncUniTaskVoidMethodBuilder)(ref <BindToCore>d__.<>t__builder)).Task;
	}

	public static IAsyncValueChangedEventHandler<string> GetAsyncValueChangedEventHandler(this TMP_InputField inputField)
	{
		return (IAsyncValueChangedEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onValueChanged, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false);
	}

	public static IAsyncValueChangedEventHandler<string> GetAsyncValueChangedEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IAsyncValueChangedEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onValueChanged, cancellationToken, false);
	}

	public static UniTask<string> OnValueChangedAsync(this TMP_InputField inputField)
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onValueChanged, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync();
	}

	public static UniTask<string> OnValueChangedAsync(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onValueChanged, cancellationToken, true).OnInvokeAsync();
	}

	public static IUniTaskAsyncEnumerable<string> OnValueChangedAsAsyncEnumerable(this TMP_InputField inputField)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onValueChanged, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField));
	}

	public static IUniTaskAsyncEnumerable<string> OnValueChangedAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onValueChanged, cancellationToken);
	}

	public static IAsyncEndEditEventHandler<string> GetAsyncEndEditEventHandler(this TMP_InputField inputField)
	{
		return (IAsyncEndEditEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onEndEdit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false);
	}

	public static IAsyncEndEditEventHandler<string> GetAsyncEndEditEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IAsyncEndEditEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onEndEdit, cancellationToken, false);
	}

	public static UniTask<string> OnEndEditAsync(this TMP_InputField inputField)
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onEndEdit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync();
	}

	public static UniTask<string> OnEndEditAsync(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onEndEdit, cancellationToken, true).OnInvokeAsync();
	}

	public static IUniTaskAsyncEnumerable<string> OnEndEditAsAsyncEnumerable(this TMP_InputField inputField)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onEndEdit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField));
	}

	public static IUniTaskAsyncEnumerable<string> OnEndEditAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onEndEdit, cancellationToken);
	}

	public static IAsyncEndTextSelectionEventHandler<(string, int, int)> GetAsyncEndTextSelectionEventHandler(this TMP_InputField inputField)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Expected O, but got Unknown
		return (IAsyncEndTextSelectionEventHandler<(string, int, int)>)(object)new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false);
	}

	public static IAsyncEndTextSelectionEventHandler<(string, int, int)> GetAsyncEndTextSelectionEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		return (IAsyncEndTextSelectionEventHandler<(string, int, int)>)(object)new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), cancellationToken, false);
	}

	public static UniTask<(string, int, int)> OnEndTextSelectionAsync(this TMP_InputField inputField)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Expected O, but got Unknown
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync();
	}

	public static UniTask<(string, int, int)> OnEndTextSelectionAsync(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), cancellationToken, true).OnInvokeAsync();
	}

	public static IUniTaskAsyncEnumerable<(string, int, int)> OnEndTextSelectionAsAsyncEnumerable(this TMP_InputField inputField)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Expected O, but got Unknown
		return (IUniTaskAsyncEnumerable<(string, int, int)>)(object)new UnityEventHandlerAsyncEnumerable<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField));
	}

	public static IUniTaskAsyncEnumerable<(string, int, int)> OnEndTextSelectionAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Expected O, but got Unknown
		return (IUniTaskAsyncEnumerable<(string, int, int)>)(object)new UnityEventHandlerAsyncEnumerable<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), cancellationToken);
	}

	public static IAsyncTextSelectionEventHandler<(string, int, int)> GetAsyncTextSelectionEventHandler(this TMP_InputField inputField)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Expected O, but got Unknown
		return (IAsyncTextSelectionEventHandler<(string, int, int)>)(object)new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false);
	}

	public static IAsyncTextSelectionEventHandler<(string, int, int)> GetAsyncTextSelectionEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		return (IAsyncTextSelectionEventHandler<(string, int, int)>)(object)new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), cancellationToken, false);
	}

	public static UniTask<(string, int, int)> OnTextSelectionAsync(this TMP_InputField inputField)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0017: Expected O, but got Unknown
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync();
	}

	public static UniTask<(string, int, int)> OnTextSelectionAsync(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0012: Expected O, but got Unknown
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), cancellationToken, true).OnInvokeAsync();
	}

	public static IUniTaskAsyncEnumerable<(string, int, int)> OnTextSelectionAsAsyncEnumerable(this TMP_InputField inputField)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Expected O, but got Unknown
		return (IUniTaskAsyncEnumerable<(string, int, int)>)(object)new UnityEventHandlerAsyncEnumerable<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField));
	}

	public static IUniTaskAsyncEnumerable<(string, int, int)> OnTextSelectionAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0011: Expected O, but got Unknown
		return (IUniTaskAsyncEnumerable<(string, int, int)>)(object)new UnityEventHandlerAsyncEnumerable<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), cancellationToken);
	}

	public static IAsyncDeselectEventHandler<string> GetAsyncDeselectEventHandler(this TMP_InputField inputField)
	{
		return (IAsyncDeselectEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onDeselect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false);
	}

	public static IAsyncDeselectEventHandler<string> GetAsyncDeselectEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IAsyncDeselectEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onDeselect, cancellationToken, false);
	}

	public static UniTask<string> OnDeselectAsync(this TMP_InputField inputField)
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onDeselect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync();
	}

	public static UniTask<string> OnDeselectAsync(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onDeselect, cancellationToken, true).OnInvokeAsync();
	}

	public static IUniTaskAsyncEnumerable<string> OnDeselectAsAsyncEnumerable(this TMP_InputField inputField)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onDeselect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField));
	}

	public static IUniTaskAsyncEnumerable<string> OnDeselectAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onDeselect, cancellationToken);
	}

	public static IAsyncSelectEventHandler<string> GetAsyncSelectEventHandler(this TMP_InputField inputField)
	{
		return (IAsyncSelectEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSelect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false);
	}

	public static IAsyncSelectEventHandler<string> GetAsyncSelectEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IAsyncSelectEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSelect, cancellationToken, false);
	}

	public static UniTask<string> OnSelectAsync(this TMP_InputField inputField)
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSelect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync();
	}

	public static UniTask<string> OnSelectAsync(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSelect, cancellationToken, true).OnInvokeAsync();
	}

	public static IUniTaskAsyncEnumerable<string> OnSelectAsAsyncEnumerable(this TMP_InputField inputField)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onSelect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField));
	}

	public static IUniTaskAsyncEnumerable<string> OnSelectAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onSelect, cancellationToken);
	}

	public static IAsyncSubmitEventHandler<string> GetAsyncSubmitEventHandler(this TMP_InputField inputField)
	{
		return (IAsyncSubmitEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSubmit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false);
	}

	public static IAsyncSubmitEventHandler<string> GetAsyncSubmitEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IAsyncSubmitEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSubmit, cancellationToken, false);
	}

	public static UniTask<string> OnSubmitAsync(this TMP_InputField inputField)
	{
		//IL_0012: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSubmit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync();
	}

	public static UniTask<string> OnSubmitAsync(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSubmit, cancellationToken, true).OnInvokeAsync();
	}

	public static IUniTaskAsyncEnumerable<string> OnSubmitAsAsyncEnumerable(this TMP_InputField inputField)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onSubmit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField));
	}

	public static IUniTaskAsyncEnumerable<string> OnSubmitAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken)
	{
		return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onSubmit, cancellationToken);
	}
}