Application

Chose application
.NET Native Web Flutter
Chose version
ver. 14.0 ver. 13.0 ver. 12.0 ver. 11.0 ver. 10.0 ver. 9.0 ver. 8.0 ver. 7.0 ver. 6.0 ver. 5.0 ver. 4.0
Choose device
Tizen.Multimedia.AudioPlayback class enables your application to play uncompressed audio. You can <a href=https://samsungtizenos.com/"#simple_playback\">play audio synchronously<\/a>, or <a href=https://samsungtizenos.com/"#async_playback\">do it asynchronously<\/a>.<\/p>\n<p>Your application must define the following PCM data settings:<\/p>\n<ul>\n<li>Audio channels:\n<ul>\n<li><code>Mono<\/code> : Mono (1 channel)<\/li>\n<li><code>Stereo<\/code> : Stereo (2 channels)<\/li>\n<li><code>MultiChannel3<\/code> : Multi channel (3 channels)<\/li>\n<li><code>MultiChannel4<\/code> : Multi channel (4 channels)<\/li>\n<li><code>MultiChannel5<\/code> : Multi channel (5 channels)<\/li>\n<li><code>MultiChannel6<\/code> : Multi channel (6 channels)<\/li>\n<li><code>MultiChannel7<\/code> : Multi channel (7 channels)<\/li>\n<li><code>MultiChannel8<\/code> : Multi channel (8 channels)<\/li>\n<\/ul>\n<\/li>\n<li>Audio sample type:\n<ul>\n<li><code>U8<\/code> : Unsigned 8-bit PCM<\/li>\n<li><code>S16LE<\/code> : Signed 16-bit PCM, little endian<\/li>\n<li><code>S24LE<\/code> : Signed 24-bit PCM, little endian<\/li>\n<li><code>S24Packed<\/code> : Signed 24 bit PCM in LSB of 32 bit words, little endian<\/li>\n<li><code>S32LE<\/code> : Signed 32 bit PCM, little endian<\/li>\n<\/ul>\n<\/li>\n<li>Audio sample rate:\n<ul>\n<li>8000 ~ 192000 Hz<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>To support various low-end Tizen devices, the application must follow certain guidelines which are described below:<\/p>\n<ul>\n<li>\n<p>Do not use excessive instances of the <code>Tizen.Multimedia.AudioPlayback<\/code> class.<\/p>\n<p>Using many <code>Tizen.Multimedia.AudioPlayback<\/code> class instances decrease application performance because processing audio data for re-sampling and mixing imposes a heavy burden on the system.<\/p>\n<\/li>\n<li>\n<p>Use the device-preferred PCM format.<\/p>\n<p>To reduce the processing overhead, select the PCM format based on the target device preference (for example, signed 16-bit little endian, stereo, 44100 Hz).<\/p>\n<p>Using the preferred format reduces internal operations, such as converting audio samples from mono to stereo or re-sampling audio frequency to fit the target device's input sample rate.<\/p>\n<\/li>\n<li>\n<p>Reduce event delay and remove glitches.<\/p>\n<p>The <code>Tizen.Multimedia.AudioPlayback<\/code> class instance works recursively, using events. The smaller the buffer size, the more often events are generated. If you use a small buffer in addition to other resources (for example, a timer or sensor), application performance decreases because the events cause delays. To prevent problems, set an appropriate write buffer size.<\/p>\n<p>To guarantee that the events of the <code>Tizen.Multimedia.AudioPlayback<\/code> class work independently, create a <code>Tizen.Multimedia.AudioPlayback<\/code> class instance in the event thread.<\/p>\n<\/li>\n<li>\n<p>Use double buffering.<\/p>\n<p>Use the double-buffering mechanism to reduce latency. It works by first writing the data twice before starting playback. After starting, whenever the event handler is called, you can write additional data.<\/p>\n<\/li>\n<li>\n<p>Save power.<\/p>\n<p>If audio playback has stopped for a long time, such as because the screen has switched off or there is no audio data, call the <code>Unprepare()<\/code> method of the <code>Tizen.Multimedia.AudioPlayback<\/code> class to pause the stream and save power. The device cannot go into sleep mode while the <code>Tizen.Multimedia.AudioPlayback<\/code> instance is in the <code>Running<\/code> state.<\/p>\n<\/li>\n<\/ul>\n<p><a name=\"record_pcm\"><\/a><\/p>\n<h2 id=\"content-audio-input\"><a href=https://samsungtizenos.com/"#content-audio-input\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Audio input<\/h2>\n<p>You can enable your application to record uncompressed audio from a microphone-type input device. You can <a href=https://samsungtizenos.com/"#simple_recording\">record audio synchronously<\/a> with the <a href=https://samsungtizenos.com/"//application//dotnet//api//TizenFX//latest//api//Tizen.Multimedia.AudioCapture.md/">Tizen.Multimedia.AudioCapture class, or <a href=https://samsungtizenos.com/"#async_recording\">do it asynchronously<\/a> with the <a href=https://samsungtizenos.com/"//application//dotnet//api//TizenFX//latest//api//Tizen.Multimedia.AsyncAudioCapture.md/">Tizen.Multimedia.AsyncAudioCapture class.<\/p>\n<p>Audio data is captured periodically. To receive the audio PCM data from the input device, you must implement the audio capture interface to notify the application of audio data events, such as when the audio data buffer is full.<\/p>\n<p>Before recording audio, you must define the PCM data settings. For more information, see <a href=https://samsungtizenos.com/"#play_pcm\">audio output<\/a>.<\/p>\n<h2 id=\"content-prerequisites\"><a href=https://samsungtizenos.com/"#content-prerequisites\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Prerequisites<\/h2>\n<p>To make your application visible in the official site for Tizen applications only for devices that support a microphone, the application must specify the following feature in the <code>tizen-manifest.xml<\/code> file:<\/p>\n<code class=\"language-XML\">&lt;feature name=&quot;http:\/\/tizen.org\/feature\/microphone&quot;\/&gt;\n<\/code>\n<p><a name=\"simple_playback\"><\/a><\/p>\n<h2 id=\"content-manage-synchronous-playback\"><a href=https://samsungtizenos.com/"#content-manage-synchronous-playback\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Manage synchronous playback<\/h2>\n<p>Because the synchronous playback process blocks other processes running in the same thread, launching a playback process from the application main thread can make the application unresponsive. To prevent this, launch the playback process from its own thread.<\/p>\n<p>To play audio, follow these steps:<\/p>\n<ol>\n<li>\n<p>Prepare the audio output device and start the playback process using the <code>Prepare()<\/code> method of the <a href=https://samsungtizenos.com/"//application//dotnet//api//TizenFX//latest//api//Tizen.Multimedia.AudioPlayback.md/">Tizen.Multimedia.AudioPlayback class:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">var<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">audioPlayback<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">=<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">new<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#B392F0\">AudioPlayback<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(<\/span><span style=\"color:#24292E;--shiki-dark:#79B8FF\">44100<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">, AudioChannel.Mono, AudioSampleType.S16Le);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D;--shiki-dark:#6A737D\">\/\/\/ Prepare the audio output device (start the hardware playback process)<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6F42C1;--shiki-dark:#E1E4E8\">audioPlayback<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">.<\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">Prepare<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">();<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<p>The hardware device prepares its internal output buffer for playback. Playback begins when the internal output buffer starts receiving audio data.<\/p>\n<\/li>\n<li>\n<p>To start playing the recorded audio, copy the audio data from the local buffer to the internal output buffer using the <code>Write()<\/code> method of the <code>Tizen.Multimedia.AudioPlayback<\/code> class:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">int<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">bytesWritten<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">=<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> audioPlayback.<\/span><span style=\"color:#24292E;--shiki-dark:#B392F0\">Write<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(buffer);<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<p>The returned value represents the number of bytes written to the internal output buffer.<\/p>\n<\/li>\n<li>\n<p>Stop the playback process using the <code>Unprepare()<\/code> method of the <code>Tizen.Multimedia.AudioPlayback<\/code> class:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">audioPlayback.<\/span><span style=\"color:#24292E;--shiki-dark:#B392F0\">Unprepare<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">();<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<\/li>\n<\/ol>\n<p><a name=\"async_playback\"><\/a><\/p>\n<h2 id=\"content-manage-asynchronous-playback\"><a href=https://samsungtizenos.com/"#content-manage-asynchronous-playback\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Manage asynchronous playback<\/h2>\n<p>The asynchronous playback process uses the <code>BufferAvailable<\/code> event of the <a href=https://samsungtizenos.com/"//application//dotnet//api//TizenFX//latest//api//Tizen.Multimedia.AudioPlayback.md/">Tizen.Multimedia.AudioPlayback class to play the recorded audio. The event is raised for each recorded audio chunk. In the following example, the audio data is read from a stream.<\/p>\n<p>To start playing the recorded audio, follow these steps:<\/p>\n<ol>\n<li>\n<p>Add an event handler for the <code>BufferAvailable<\/code> event:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">audioPlayback.BufferAvailable <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">+=<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> OnBufferAvailable;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<\/li>\n<li>\n<p>Prepare the audio output device and start the playback process using the <code>Prepare()<\/code> method of the <code>Tizen.Multimedia.AudioPlayback<\/code> class:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">audioPlayback.<\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">Prepare<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">();<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<p>The hardware device prepares its internal output buffer for playback.<\/p>\n<\/li>\n<li>\n<p>Play audio from a stream.<\/p>\n<p>Read audio data from the stream and write it to the internal output buffer using the <code>Write()<\/code> method of the <code>Tizen.Multimedia.AudioPlayback<\/code> class. Playback begins when the internal output buffer starts receiving the audio data:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">Stream<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">stream<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">void<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">OnBufferAvailable<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(<\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">object<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">sender<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">, <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">AudioPlaybackBufferAvailableEventArgs<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">args<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">if<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> (args.Length <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">&gt;<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\">0<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">try<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D;--shiki-dark:#6A737D\"> \/\/\/ Allocate a local buffer for reading the audio data from the stream<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">byte<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">[] <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">buffer<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">=<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">new<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">byte<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">[args.Length];<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D;--shiki-dark:#6A737D\"> \/\/\/ Read audio data from the stream and store it in the local buffer<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> stream.<\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">Read<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(buffer, <\/span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\">0<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">, args.Length);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D;--shiki-dark:#6A737D\"> \/\/\/ Copy the audio data from the local buffer<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D;--shiki-dark:#6A737D\"> \/\/\/ to the internal output buffer (starts playback)<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> audioPlayback.<\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">Write<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(buffer);<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">catch<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(<\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">Exception<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">e<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> Tizen.Log.<\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">Error<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(LOG_TAG, <\/span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">&quot;Failed to write. &quot;<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">+<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> e);<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<\/li>\n<li>\n<p>Stop the playback process using the <code>Unprepare()<\/code> method of the <code>Tizen.Multimedia.AudioPlayback<\/code> class:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#6A737D;--shiki-dark:#6A737D\">\/\/\/ Stop the hardware playback process<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">audioPlayback.<\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">Unprepare<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">();<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<p>The device no longer raises the event.<\/p>\n<\/li>\n<\/ol>\n<p><a name=\"simple_recording\"><\/a><\/p>\n<h2 id=\"content-manage-synchronous-recording\"><a href=https://samsungtizenos.com/"#content-manage-synchronous-recording\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Manage synchronous recording<\/h2>\n<p>Before starting the synchronous recording process, you need to know the size of the buffer where the recorded audio data is to be saved, based on the expected recording duration. The recording process ends once it has read the specified number of bytes.<\/p>\n<p>To calculate and set the required buffer size, use one of the following options:<\/p>\n<ol>\n<li>\n<p>Calculate the buffer size based on the recommendation of the sound server, such as PulseAudio:<\/p>\n<ul>\n<li>\n<p>Retrieve the recommended buffer size using the <code>GetBufferSize()<\/code> method of the <a href=https://samsungtizenos.com/"//application//dotnet//api//TizenFX//latest//api//Tizen.Multimedia.AudioCapture.md/">Tizen.Multimedia.AudioCapture class:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">var<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">audioCapture<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">=<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">new<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">AudioCapture<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(<\/span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\">44100<\/span><span style=\"color:#005CC5;--shiki-dark:#E1E4E8\">, AudioChannel.Mono, AudioSampleType.S16Le);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">int<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#B392F0\">bufferSize<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">=<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> audioCapture.<\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">GetBufferSize<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">();<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<p>If no exception is thrown, the method returns the preferred size in bytes, based on the specified audio parameters.<\/p>\n<p>The recommended buffer size depends on the device. The size can be different for mobile, wearable, and TV devices.<\/p>\n<\/li>\n<li>\n<p>Set the buffer size to correspond to the desired recording duration.<\/p>\n<p>For the device in this example, the <code>GetBufferSize()<\/code> method returns the recommended buffer size for 100 milliseconds of recording time. To determine the total recommended buffer size, multiply the recommended buffer size by 10 (to get the buffer size per second) and by the length of the recording in seconds:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">const<\/span><span style=\"color:#D73A49;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">int<\/span><span style=\"color:#D73A49;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#B392F0\">RecordingSec<\/span><span style=\"color:#D73A49;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">=<\/span><span style=\"color:#D73A49;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#79B8FF\">5<\/span><span style=\"color:#D73A49;--shiki-dark:#E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">bufferSize <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">*=<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\">10<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">*<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> RecordingSec;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Calculate the required buffer size explicitly:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">int<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">bufferSize<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">=<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> AudioCapture.SampleRate <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">*<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> (audioCapture.Channel <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">==<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> AudioChannel.Stereo <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">?<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#79B8FF\">2<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">:<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#79B8FF\">1<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">) <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">*<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> (<\/span><span style=\"color:#6F42C1;--shiki-dark:#E1E4E8\">audioCapture<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">.<\/span><span style=\"color:#6F42C1;--shiki-dark:#E1E4E8\">SampleType<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">==<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#E1E4E8\">AudioSampleType<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">.<\/span><span style=\"color:#6F42C1;--shiki-dark:#E1E4E8\">S16Le<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">?<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#79B8FF\">2<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">:<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#79B8FF\">1<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">bufferSize <\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">*=<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> RecordingSec;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<\/li>\n<\/ol>\n<p>The synchronous recording process blocks other processes running in the same thread. Launching a recording process from the application main thread can make the application unresponsive. To prevent this, launch the recording process from its own thread.<\/p>\n<p>To record audio, follow these steps:<\/p>\n<ol>\n<li>\n<p>Prepare the audio input device and start the recording process using the <code>Prepare()<\/code> method of the <code>Tizen.Multimedia.AudioCapture<\/code> class:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">audioCapture.<\/span><span style=\"color:#24292E;--shiki-dark:#B392F0\">Prepare<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">();<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<p>The hardware device starts buffering the audio recorded by the audio input device. The audio data is buffered to the internal input buffer.<\/p>\n<\/li>\n<li>\n<p>Read the audio data from the internal input buffer using the <code>Read()<\/code> method:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">byte<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">[] <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">buffer<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">=<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> audioCapture.<\/span><span style=\"color:#24292E;--shiki-dark:#B392F0\">Read<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(bufferSize);<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<p>The <code>Read()<\/code> method can behave in the following ways:<\/p>\n<ul>\n<li>If the method is called immediately after preparing the audio input device, it blocks the thread that it was launched from until it reads bytes specified.<\/li>\n<li>If the method is called with a delay long enough to allow the internal input buffer to store more audio data than the specified size, the method returns immediately without blocking its thread.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Stop the recording process using the <code>Unprepare()<\/code> method:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">audioCapture.<\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">Unprepare<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">();<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<\/li>\n<\/ol>\n<p><a name=\"async_recording\"><\/a><\/p>\n<h2 id=\"content-manage-asynchronous-recording\"><a href=https://samsungtizenos.com/"#content-manage-asynchronous-recording\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Manage asynchronous recording<\/h2>\n<p>The asynchronous recording process uses an event to store the audio recorded by the audio input device. The event is raised for each recorded audio chunk. In this use case, the audio data is stored in a stream.<\/p>\n<p>To start recording audio, follow these steps:<\/p>\n<ol>\n<li>\n<p>Add an event handler for the <code>DataAvailable<\/code> event of the <a href=https://samsungtizenos.com/"//application//dotnet//api//TizenFX//latest//api//Tizen.Multimedia.AsyncAudioCapture.md/">Tizen.Multimedia.AsyncAudioCapture class:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">var<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">asyncAudioCapture<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">=<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">new<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#B392F0\">AsyncAudioCapture<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(<\/span><span style=\"color:#24292E;--shiki-dark:#79B8FF\">44100<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">, AudioChannel.Mono, AudioSampleType.S16Le);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D;--shiki-dark:#6A737D\">\/\/\/ Add an event handler invoked asynchronously for each recorded audio chunk<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6F42C1;--shiki-dark:#E1E4E8\">asyncAudioCapture<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">.<\/span><span style=\"color:#6F42C1;--shiki-dark:#E1E4E8\">DataAvailable<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#24292E;--shiki-dark:#F97583\">+<\/span><span style=\"color:#D73A49;--shiki-dark:#F97583\">=<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> OnDataAvailable;<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<\/li>\n<li>\n<p>Prepare the audio input device and start the recording process using the <code>Prepare()<\/code> method of the <code>Tizen.Multimedia.AsyncAudioCapture<\/code> class:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">asyncAudioCapture.<\/span><span style=\"color:#24292E;--shiki-dark:#B392F0\">Prepare<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">();<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<p>The hardware device starts buffering the audio recorded by the audio input device. The audio data is buffered to the internal input buffer. The event is raised for each audio data chunk.<\/p>\n<\/li>\n<li>\n<p>To store the recorded audio data:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">Stream<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">stream<\/span><span style=\"color:#6F42C1;--shiki-dark:#E1E4E8\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color:#6A737D;--shiki-dark:#6A737D\">\/\/\/ Event handler invoked for each recorded audio chunk<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6F42C1;--shiki-dark:#F97583\">void<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">OnDataAvailable<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(<\/span><span style=\"color:#6F42C1;--shiki-dark:#F97583\">object<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">sender<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">, <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">AudioDataAvailableEventArgs<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> <\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">args<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color:#6A737D;--shiki-dark:#6A737D\"> \/\/\/ Write the recorded audio data to the stream<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> stream.<\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">Write<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(args.Data, <\/span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\">0<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">, args.Data.Length);<\/span><\/span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<\/li>\n<li>\n<p>Stop the recording process using the <code>Unprepare()<\/code> method:<\/p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8;\"><code><span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">asyncAudioCapture.<\/span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">Unprepare<\/span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">();<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre>\n<p>The device no longer raises the event.<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"content-related-information\"><a href=https://samsungtizenos.com/"#content-related-information\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">\u00b6<\/a>Related information<\/h2>\n<ul>\n<li>Dependencies\n<ul>\n<li>Tizen 4.0 and Higher<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n","table_of_content":"<ul class=\"table-of-contents\">\n<li><a href=https://samsungtizenos.com/"#content-audio-output\">Audio output<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-audio-input\">Audio input<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-prerequisites\">Prerequisites<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-manage-synchronous-playback\">Manage synchronous playback<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-manage-asynchronous-playback\">Manage asynchronous playback<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-manage-synchronous-recording\">Manage synchronous recording<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-manage-asynchronous-recording\">Manage asynchronous recording<\/a><\/li>\n<li><a href=https://samsungtizenos.com/"#content-related-information\">Related information<\/a><\/li>\n<\/ul>\n","title":"Raw Audio Playback and Recording","raw":null},{"class":"App\\Services\\Documentation\\Data\\RenderedMarkdown","s":"wrbl"}]},"memo":{"id":"Snxcmvz2oGrS1UllciF7","name":"documentation::article","path":"docs\/application\/dotnet\/guides\/multimedia\/raw-audio","method":"GET","release":"a-a-a","children":[],"scripts":[],"assets":[],"lazyLoaded":false,"lazyIsolated":true,"errors":[],"locale":"en","islands":[]},"checksum":"401f1eb048e65d8828f79fc72b23b6f8b5e23901f6119e280af79e6b781010d5"}" wire:effects="[]" wire:id="Snxcmvz2oGrS1UllciF7" wire:name="documentation::article" x-init="$wire.__lazyLoad('eyJkYXRhIjp7ImZvck1vdW50IjpbeyJtYXJrZG93biI6W3siYm9keSI6IjxoMSBpZD1cImNvbnRlbnQtcmF3LWF1ZGlvLXBsYXliYWNrLWFuZC1yZWNvcmRpbmdcIj48YSBocmVmPVwiI2NvbnRlbnQtcmF3LWF1ZGlvLXBsYXliYWNrLWFuZC1yZWNvcmRpbmdcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPlJhdyBBdWRpbyBQbGF5YmFjayBhbmQgUmVjb3JkaW5nPFwvaDE+PGRpdiBkYXRhLWtub3dsZWRnZS1iYXNlLW1ldGFkYXRhPjxcL2Rpdj5cbjxwPlB1bHNlIENvZGUgTW9kdWxhdGVkIChQQ00pIGRhdGEgY29udGFpbnMgdW5jb21wcmVzc2VkIGF1ZGlvLiBZb3UgY2FuIHBsYXkgYW5kIHJlY29yZCB1bmNvbXByZXNzZWQgYXVkaW8gZGF0YSBib3RoIHN5bmNocm9ub3VzbHkgYW5kIGFzeW5jaHJvbm91c2x5LjxcL3A+XG48cD5UaGUgbWFpbiB1bmNvbXByZXNzZWQgYXVkaW8gbWFuYWdlbWVudCBmZWF0dXJlcyBhcmUgZGVzY3JpYmVkIGJlbG93OjxcL3A+XG48dWw+XG48bGk+XG48cD5QbGF5aW5nIHVuY29tcHJlc3NlZCBhdWRpbzxcL3A+XG48cD5Zb3UgY2FuIDxhIGhyZWY9XCIjcGxheV9wY21cIj5wbGF5IHVuY29tcHJlc3NlZCBhdWRpbzxcL2E+IGluIHlvdXIgYXBwbGljYXRpb24uPFwvcD5cbjxcL2xpPlxuPGxpPlxuPHA+UmVjb3JkaW5nIHVuY29tcHJlc3NlZCBhdWRpbzxcL3A+XG48cD5Zb3UgY2FuIDxhIGhyZWY9XCIjcmVjb3JkX3BjbVwiPnJlY29yZCB1bmNvbXByZXNzZWQgYXVkaW88XC9hPiBzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5LjxcL3A+XG48XC9saT5cbjxcL3VsPlxuPHA+PGEgbmFtZT1cInBsYXlfcGNtXCI+PFwvYT48XC9wPlxuPGgyIGlkPVwiY29udGVudC1hdWRpby1vdXRwdXRcIj48YSBocmVmPVwiI2NvbnRlbnQtYXVkaW8tb3V0cHV0XCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5BdWRpbyBvdXRwdXQ8XC9oMj5cbjxwPlRoZSA8YSBocmVmPVwiXC9hcHBsaWNhdGlvblwvZG90bmV0XC9hcGlcL1RpemVuRlhcL2xhdGVzdFwvYXBpXC9UaXplbi5NdWx0aW1lZGlhLkF1ZGlvUGxheWJhY2subWRcIj5UaXplbi5NdWx0aW1lZGlhLkF1ZGlvUGxheWJhY2s8XC9hPiBjbGFzcyBlbmFibGVzIHlvdXIgYXBwbGljYXRpb24gdG8gcGxheSB1bmNvbXByZXNzZWQgYXVkaW8uIFlvdSBjYW4gPGEgaHJlZj1cIiNzaW1wbGVfcGxheWJhY2tcIj5wbGF5IGF1ZGlvIHN5bmNocm9ub3VzbHk8XC9hPiwgb3IgPGEgaHJlZj1cIiNhc3luY19wbGF5YmFja1wiPmRvIGl0IGFzeW5jaHJvbm91c2x5PFwvYT4uPFwvcD5cbjxwPllvdXIgYXBwbGljYXRpb24gbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyBQQ00gZGF0YSBzZXR0aW5nczo8XC9wPlxuPHVsPlxuPGxpPkF1ZGlvIGNoYW5uZWxzOlxuPHVsPlxuPGxpPjxjb2RlPk1vbm88XC9jb2RlPiA6IE1vbm8gKDEgY2hhbm5lbCk8XC9saT5cbjxsaT48Y29kZT5TdGVyZW88XC9jb2RlPiA6IFN0ZXJlbyAoMiBjaGFubmVscyk8XC9saT5cbjxsaT48Y29kZT5NdWx0aUNoYW5uZWwzPFwvY29kZT4gOiBNdWx0aSBjaGFubmVsICgzIGNoYW5uZWxzKTxcL2xpPlxuPGxpPjxjb2RlPk11bHRpQ2hhbm5lbDQ8XC9jb2RlPiA6IE11bHRpIGNoYW5uZWwgKDQgY2hhbm5lbHMpPFwvbGk+XG48bGk+PGNvZGU+TXVsdGlDaGFubmVsNTxcL2NvZGU+IDogTXVsdGkgY2hhbm5lbCAoNSBjaGFubmVscyk8XC9saT5cbjxsaT48Y29kZT5NdWx0aUNoYW5uZWw2PFwvY29kZT4gOiBNdWx0aSBjaGFubmVsICg2IGNoYW5uZWxzKTxcL2xpPlxuPGxpPjxjb2RlPk11bHRpQ2hhbm5lbDc8XC9jb2RlPiA6IE11bHRpIGNoYW5uZWwgKDcgY2hhbm5lbHMpPFwvbGk+XG48bGk+PGNvZGU+TXVsdGlDaGFubmVsODxcL2NvZGU+IDogTXVsdGkgY2hhbm5lbCAoOCBjaGFubmVscyk8XC9saT5cbjxcL3VsPlxuPFwvbGk+XG48bGk+QXVkaW8gc2FtcGxlIHR5cGU6XG48dWw+XG48bGk+PGNvZGU+VTg8XC9jb2RlPiA6IFVuc2lnbmVkIDgtYml0IFBDTTxcL2xpPlxuPGxpPjxjb2RlPlMxNkxFPFwvY29kZT4gOiBTaWduZWQgMTYtYml0IFBDTSwgbGl0dGxlIGVuZGlhbjxcL2xpPlxuPGxpPjxjb2RlPlMyNExFPFwvY29kZT4gOiBTaWduZWQgMjQtYml0IFBDTSwgbGl0dGxlIGVuZGlhbjxcL2xpPlxuPGxpPjxjb2RlPlMyNFBhY2tlZDxcL2NvZGU+IDogU2lnbmVkIDI0IGJpdCBQQ00gaW4gTFNCIG9mIDMyIGJpdCB3b3JkcywgbGl0dGxlIGVuZGlhbjxcL2xpPlxuPGxpPjxjb2RlPlMzMkxFPFwvY29kZT4gOiBTaWduZWQgMzIgYml0IFBDTSwgbGl0dGxlIGVuZGlhbjxcL2xpPlxuPFwvdWw+XG48XC9saT5cbjxsaT5BdWRpbyBzYW1wbGUgcmF0ZTpcbjx1bD5cbjxsaT44MDAwIH4gMTkyMDAwIEh6PFwvbGk+XG48XC91bD5cbjxcL2xpPlxuPFwvdWw+XG48cD5UbyBzdXBwb3J0IHZhcmlvdXMgbG93LWVuZCBUaXplbiBkZXZpY2VzLCB0aGUgYXBwbGljYXRpb24gbXVzdCBmb2xsb3cgY2VydGFpbiBndWlkZWxpbmVzIHdoaWNoIGFyZSBkZXNjcmliZWQgYmVsb3c6PFwvcD5cbjx1bD5cbjxsaT5cbjxwPkRvIG5vdCB1c2UgZXhjZXNzaXZlIGluc3RhbmNlcyBvZiB0aGUgPGNvZGU+VGl6ZW4uTXVsdGltZWRpYS5BdWRpb1BsYXliYWNrPFwvY29kZT4gY2xhc3MuPFwvcD5cbjxwPlVzaW5nIG1hbnkgPGNvZGU+VGl6ZW4uTXVsdGltZWRpYS5BdWRpb1BsYXliYWNrPFwvY29kZT4gY2xhc3MgaW5zdGFuY2VzIGRlY3JlYXNlIGFwcGxpY2F0aW9uIHBlcmZvcm1hbmNlIGJlY2F1c2UgcHJvY2Vzc2luZyBhdWRpbyBkYXRhIGZvciByZS1zYW1wbGluZyBhbmQgbWl4aW5nIGltcG9zZXMgYSBoZWF2eSBidXJkZW4gb24gdGhlIHN5c3RlbS48XC9wPlxuPFwvbGk+XG48bGk+XG48cD5Vc2UgdGhlIGRldmljZS1wcmVmZXJyZWQgUENNIGZvcm1hdC48XC9wPlxuPHA+VG8gcmVkdWNlIHRoZSBwcm9jZXNzaW5nIG92ZXJoZWFkLCBzZWxlY3QgdGhlIFBDTSBmb3JtYXQgYmFzZWQgb24gdGhlIHRhcmdldCBkZXZpY2UgcHJlZmVyZW5jZSAoZm9yIGV4YW1wbGUsIHNpZ25lZCAxNi1iaXQgbGl0dGxlIGVuZGlhbiwgc3RlcmVvLCA0NDEwMCBIeikuPFwvcD5cbjxwPlVzaW5nIHRoZSBwcmVmZXJyZWQgZm9ybWF0IHJlZHVjZXMgaW50ZXJuYWwgb3BlcmF0aW9ucywgc3VjaCBhcyBjb252ZXJ0aW5nIGF1ZGlvIHNhbXBsZXMgZnJvbSBtb25vIHRvIHN0ZXJlbyBvciByZS1zYW1wbGluZyBhdWRpbyBmcmVxdWVuY3kgdG8gZml0IHRoZSB0YXJnZXQgZGV2aWNlJ3MgaW5wdXQgc2FtcGxlIHJhdGUuPFwvcD5cbjxcL2xpPlxuPGxpPlxuPHA+UmVkdWNlIGV2ZW50IGRlbGF5IGFuZCByZW1vdmUgZ2xpdGNoZXMuPFwvcD5cbjxwPlRoZSA8Y29kZT5UaXplbi5NdWx0aW1lZGlhLkF1ZGlvUGxheWJhY2s8XC9jb2RlPiBjbGFzcyBpbnN0YW5jZSB3b3JrcyByZWN1cnNpdmVseSwgdXNpbmcgZXZlbnRzLiBUaGUgc21hbGxlciB0aGUgYnVmZmVyIHNpemUsIHRoZSBtb3JlIG9mdGVuIGV2ZW50cyBhcmUgZ2VuZXJhdGVkLiBJZiB5b3UgdXNlIGEgc21hbGwgYnVmZmVyIGluIGFkZGl0aW9uIHRvIG90aGVyIHJlc291cmNlcyAoZm9yIGV4YW1wbGUsIGEgdGltZXIgb3Igc2Vuc29yKSwgYXBwbGljYXRpb24gcGVyZm9ybWFuY2UgZGVjcmVhc2VzIGJlY2F1c2UgdGhlIGV2ZW50cyBjYXVzZSBkZWxheXMuIFRvIHByZXZlbnQgcHJvYmxlbXMsIHNldCBhbiBhcHByb3ByaWF0ZSB3cml0ZSBidWZmZXIgc2l6ZS48XC9wPlxuPHA+VG8gZ3VhcmFudGVlIHRoYXQgdGhlIGV2ZW50cyBvZiB0aGUgPGNvZGU+VGl6ZW4uTXVsdGltZWRpYS5BdWRpb1BsYXliYWNrPFwvY29kZT4gY2xhc3Mgd29yayBpbmRlcGVuZGVudGx5LCBjcmVhdGUgYSA8Y29kZT5UaXplbi5NdWx0aW1lZGlhLkF1ZGlvUGxheWJhY2s8XC9jb2RlPiBjbGFzcyBpbnN0YW5jZSBpbiB0aGUgZXZlbnQgdGhyZWFkLjxcL3A+XG48XC9saT5cbjxsaT5cbjxwPlVzZSBkb3VibGUgYnVmZmVyaW5nLjxcL3A+XG48cD5Vc2UgdGhlIGRvdWJsZS1idWZmZXJpbmcgbWVjaGFuaXNtIHRvIHJlZHVjZSBsYXRlbmN5LiBJdCB3b3JrcyBieSBmaXJzdCB3cml0aW5nIHRoZSBkYXRhIHR3aWNlIGJlZm9yZSBzdGFydGluZyBwbGF5YmFjay4gQWZ0ZXIgc3RhcnRpbmcsIHdoZW5ldmVyIHRoZSBldmVudCBoYW5kbGVyIGlzIGNhbGxlZCwgeW91IGNhbiB3cml0ZSBhZGRpdGlvbmFsIGRhdGEuPFwvcD5cbjxcL2xpPlxuPGxpPlxuPHA+U2F2ZSBwb3dlci48XC9wPlxuPHA+SWYgYXVkaW8gcGxheWJhY2sgaGFzIHN0b3BwZWQgZm9yIGEgbG9uZyB0aW1lLCBzdWNoIGFzIGJlY2F1c2UgdGhlIHNjcmVlbiBoYXMgc3dpdGNoZWQgb2ZmIG9yIHRoZXJlIGlzIG5vIGF1ZGlvIGRhdGEsIGNhbGwgdGhlIDxjb2RlPlVucHJlcGFyZSgpPFwvY29kZT4gbWV0aG9kIG9mIHRoZSA8Y29kZT5UaXplbi5NdWx0aW1lZGlhLkF1ZGlvUGxheWJhY2s8XC9jb2RlPiBjbGFzcyB0byBwYXVzZSB0aGUgc3RyZWFtIGFuZCBzYXZlIHBvd2VyLiBUaGUgZGV2aWNlIGNhbm5vdCBnbyBpbnRvIHNsZWVwIG1vZGUgd2hpbGUgdGhlIDxjb2RlPlRpemVuLk11bHRpbWVkaWEuQXVkaW9QbGF5YmFjazxcL2NvZGU+IGluc3RhbmNlIGlzIGluIHRoZSA8Y29kZT5SdW5uaW5nPFwvY29kZT4gc3RhdGUuPFwvcD5cbjxcL2xpPlxuPFwvdWw+XG48cD48YSBuYW1lPVwicmVjb3JkX3BjbVwiPjxcL2E+PFwvcD5cbjxoMiBpZD1cImNvbnRlbnQtYXVkaW8taW5wdXRcIj48YSBocmVmPVwiI2NvbnRlbnQtYXVkaW8taW5wdXRcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPkF1ZGlvIGlucHV0PFwvaDI+XG48cD5Zb3UgY2FuIGVuYWJsZSB5b3VyIGFwcGxpY2F0aW9uIHRvIHJlY29yZCB1bmNvbXByZXNzZWQgYXVkaW8gZnJvbSBhIG1pY3JvcGhvbmUtdHlwZSBpbnB1dCBkZXZpY2UuIFlvdSBjYW4gPGEgaHJlZj1cIiNzaW1wbGVfcmVjb3JkaW5nXCI+cmVjb3JkIGF1ZGlvIHN5bmNocm9ub3VzbHk8XC9hPiB3aXRoIHRoZSA8YSBocmVmPVwiXC9hcHBsaWNhdGlvblwvZG90bmV0XC9hcGlcL1RpemVuRlhcL2xhdGVzdFwvYXBpXC9UaXplbi5NdWx0aW1lZGlhLkF1ZGlvQ2FwdHVyZS5tZFwiPlRpemVuLk11bHRpbWVkaWEuQXVkaW9DYXB0dXJlPFwvYT4gY2xhc3MsIG9yIDxhIGhyZWY9XCIjYXN5bmNfcmVjb3JkaW5nXCI+ZG8gaXQgYXN5bmNocm9ub3VzbHk8XC9hPiB3aXRoIHRoZSA8YSBocmVmPVwiXC9hcHBsaWNhdGlvblwvZG90bmV0XC9hcGlcL1RpemVuRlhcL2xhdGVzdFwvYXBpXC9UaXplbi5NdWx0aW1lZGlhLkFzeW5jQXVkaW9DYXB0dXJlLm1kXCI+VGl6ZW4uTXVsdGltZWRpYS5Bc3luY0F1ZGlvQ2FwdHVyZTxcL2E+IGNsYXNzLjxcL3A+XG48cD5BdWRpbyBkYXRhIGlzIGNhcHR1cmVkIHBlcmlvZGljYWxseS4gVG8gcmVjZWl2ZSB0aGUgYXVkaW8gUENNIGRhdGEgZnJvbSB0aGUgaW5wdXQgZGV2aWNlLCB5b3UgbXVzdCBpbXBsZW1lbnQgdGhlIGF1ZGlvIGNhcHR1cmUgaW50ZXJmYWNlIHRvIG5vdGlmeSB0aGUgYXBwbGljYXRpb24gb2YgYXVkaW8gZGF0YSBldmVudHMsIHN1Y2ggYXMgd2hlbiB0aGUgYXVkaW8gZGF0YSBidWZmZXIgaXMgZnVsbC48XC9wPlxuPHA+QmVmb3JlIHJlY29yZGluZyBhdWRpbywgeW91IG11c3QgZGVmaW5lIHRoZSBQQ00gZGF0YSBzZXR0aW5ncy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPVwiI3BsYXlfcGNtXCI+YXVkaW8gb3V0cHV0PFwvYT4uPFwvcD5cbjxoMiBpZD1cImNvbnRlbnQtcHJlcmVxdWlzaXRlc1wiPjxhIGhyZWY9XCIjY29udGVudC1wcmVyZXF1aXNpdGVzXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5QcmVyZXF1aXNpdGVzPFwvaDI+XG48cD5UbyBtYWtlIHlvdXIgYXBwbGljYXRpb24gdmlzaWJsZSBpbiB0aGUgb2ZmaWNpYWwgc2l0ZSBmb3IgVGl6ZW4gYXBwbGljYXRpb25zIG9ubHkgZm9yIGRldmljZXMgdGhhdCBzdXBwb3J0IGEgbWljcm9waG9uZSwgdGhlIGFwcGxpY2F0aW9uIG11c3Qgc3BlY2lmeSB0aGUgZm9sbG93aW5nIGZlYXR1cmUgaW4gdGhlIDxjb2RlPnRpemVuLW1hbmlmZXN0LnhtbDxcL2NvZGU+IGZpbGU6PFwvcD5cbjxjb2RlIGNsYXNzPVwibGFuZ3VhZ2UtWE1MXCI+Jmx0O2ZlYXR1cmUgbmFtZT0mcXVvdDtodHRwOlwvXC90aXplbi5vcmdcL2ZlYXR1cmVcL21pY3JvcGhvbmUmcXVvdDtcLyZndDtcbjxcL2NvZGU+XG48cD48YSBuYW1lPVwic2ltcGxlX3BsYXliYWNrXCI+PFwvYT48XC9wPlxuPGgyIGlkPVwiY29udGVudC1tYW5hZ2Utc3luY2hyb25vdXMtcGxheWJhY2tcIj48YSBocmVmPVwiI2NvbnRlbnQtbWFuYWdlLXN5bmNocm9ub3VzLXBsYXliYWNrXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5NYW5hZ2Ugc3luY2hyb25vdXMgcGxheWJhY2s8XC9oMj5cbjxwPkJlY2F1c2UgdGhlIHN5bmNocm9ub3VzIHBsYXliYWNrIHByb2Nlc3MgYmxvY2tzIG90aGVyIHByb2Nlc3NlcyBydW5uaW5nIGluIHRoZSBzYW1lIHRocmVhZCwgbGF1bmNoaW5nIGEgcGxheWJhY2sgcHJvY2VzcyBmcm9tIHRoZSBhcHBsaWNhdGlvbiBtYWluIHRocmVhZCBjYW4gbWFrZSB0aGUgYXBwbGljYXRpb24gdW5yZXNwb25zaXZlLiBUbyBwcmV2ZW50IHRoaXMsIGxhdW5jaCB0aGUgcGxheWJhY2sgcHJvY2VzcyBmcm9tIGl0cyBvd24gdGhyZWFkLjxcL3A+XG48cD5UbyBwbGF5IGF1ZGlvLCBmb2xsb3cgdGhlc2Ugc3RlcHM6PFwvcD5cbjxvbD5cbjxsaT5cbjxwPlByZXBhcmUgdGhlIGF1ZGlvIG91dHB1dCBkZXZpY2UgYW5kIHN0YXJ0IHRoZSBwbGF5YmFjayBwcm9jZXNzIHVzaW5nIHRoZSA8Y29kZT5QcmVwYXJlKCk8XC9jb2RlPiBtZXRob2Qgb2YgdGhlIDxhIGhyZWY9XCJcL2FwcGxpY2F0aW9uXC9kb3RuZXRcL2FwaVwvVGl6ZW5GWFwvbGF0ZXN0XC9hcGlcL1RpemVuLk11bHRpbWVkaWEuQXVkaW9QbGF5YmFjay5tZFwiPlRpemVuLk11bHRpbWVkaWEuQXVkaW9QbGF5YmFjazxcL2E+IGNsYXNzOjxcL3A+XG48cHJlIGNsYXNzPVwic2hpa2kgc2hpa2ktdGhlbWVzIGdpdGh1Yi1saWdodCBnaXRodWItZGFya1wiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjojZmZmOy0tc2hpa2ktZGFyay1iZzojMjQyOTJlO2NvbG9yOiMyNDI5MmU7LS1zaGlraS1kYXJrOiNlMWU0ZTg7XCI+PGNvZGU+PHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojRDczQTQ5Oy0tc2hpa2ktZGFyazojRjk3NTgzXCI+dmFyPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiM2RjQyQzE7LS1zaGlraS1kYXJrOiNCMzkyRjBcIj5hdWRpb1BsYXliYWNrPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj49PFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj5uZXc8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0IzOTJGMFwiPkF1ZGlvUGxheWJhY2s8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPig8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6Izc5QjhGRlwiPjQ0MTAwPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4sIEF1ZGlvQ2hhbm5lbC5Nb25vLCBBdWRpb1NhbXBsZVR5cGUuUzE2TGUpOzxcL3NwYW4+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48c3BhbiBzdHlsZT1cImNvbG9yOiM2QTczN0Q7LS1zaGlraS1kYXJrOiM2QTczN0RcIj5cL1wvXC8gUHJlcGFyZSB0aGUgYXVkaW8gb3V0cHV0IGRldmljZSAoc3RhcnQgdGhlIGhhcmR3YXJlIHBsYXliYWNrIHByb2Nlc3MpPFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+YXVkaW9QbGF5YmFjazxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+LjxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+UHJlcGFyZTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+KCk7PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PFwvc3Bhbj48XC9jb2RlPjxcL3ByZT5cbjxwPlRoZSBoYXJkd2FyZSBkZXZpY2UgcHJlcGFyZXMgaXRzIGludGVybmFsIG91dHB1dCBidWZmZXIgZm9yIHBsYXliYWNrLiBQbGF5YmFjayBiZWdpbnMgd2hlbiB0aGUgaW50ZXJuYWwgb3V0cHV0IGJ1ZmZlciBzdGFydHMgcmVjZWl2aW5nIGF1ZGlvIGRhdGEuPFwvcD5cbjxcL2xpPlxuPGxpPlxuPHA+VG8gc3RhcnQgcGxheWluZyB0aGUgcmVjb3JkZWQgYXVkaW8sIGNvcHkgdGhlIGF1ZGlvIGRhdGEgZnJvbSB0aGUgbG9jYWwgYnVmZmVyIHRvIHRoZSBpbnRlcm5hbCBvdXRwdXQgYnVmZmVyIHVzaW5nIHRoZSA8Y29kZT5Xcml0ZSgpPFwvY29kZT4gbWV0aG9kIG9mIHRoZSA8Y29kZT5UaXplbi5NdWx0aW1lZGlhLkF1ZGlvUGxheWJhY2s8XC9jb2RlPiBjbGFzczo8XC9wPlxuPHByZSBjbGFzcz1cInNoaWtpIHNoaWtpLXRoZW1lcyBnaXRodWItbGlnaHQgZ2l0aHViLWRhcmtcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6I2ZmZjstLXNoaWtpLWRhcmstYmc6IzI0MjkyZTtjb2xvcjojMjQyOTJlOy0tc2hpa2ktZGFyazojZTFlNGU4O1wiPjxjb2RlPjxzcGFuIGNsYXNzPVwibGluZVwiPjxzcGFuIHN0eWxlPVwiY29sb3I6I0Q3M0E0OTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPmludDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+Ynl0ZXNXcml0dGVuPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj49PFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gYXVkaW9QbGF5YmFjay48XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0IzOTJGMFwiPldyaXRlPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4oYnVmZmVyKTs8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48XC9zcGFuPjxcL2NvZGU+PFwvcHJlPlxuPHA+VGhlIHJldHVybmVkIHZhbHVlIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHRoZSBpbnRlcm5hbCBvdXRwdXQgYnVmZmVyLjxcL3A+XG48XC9saT5cbjxsaT5cbjxwPlN0b3AgdGhlIHBsYXliYWNrIHByb2Nlc3MgdXNpbmcgdGhlIDxjb2RlPlVucHJlcGFyZSgpPFwvY29kZT4gbWV0aG9kIG9mIHRoZSA8Y29kZT5UaXplbi5NdWx0aW1lZGlhLkF1ZGlvUGxheWJhY2s8XC9jb2RlPiBjbGFzczo8XC9wPlxuPHByZSBjbGFzcz1cInNoaWtpIHNoaWtpLXRoZW1lcyBnaXRodWItbGlnaHQgZ2l0aHViLWRhcmtcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6I2ZmZjstLXNoaWtpLWRhcmstYmc6IzI0MjkyZTtjb2xvcjojMjQyOTJlOy0tc2hpa2ktZGFyazojZTFlNGU4O1wiPjxjb2RlPjxzcGFuIGNsYXNzPVwibGluZVwiPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPmF1ZGlvUGxheWJhY2suPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNCMzkyRjBcIj5VbnByZXBhcmU8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPigpOzxcL3NwYW4+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxcL3NwYW4+PFwvY29kZT48XC9wcmU+XG48XC9saT5cbjxcL29sPlxuPHA+PGEgbmFtZT1cImFzeW5jX3BsYXliYWNrXCI+PFwvYT48XC9wPlxuPGgyIGlkPVwiY29udGVudC1tYW5hZ2UtYXN5bmNocm9ub3VzLXBsYXliYWNrXCI+PGEgaHJlZj1cIiNjb250ZW50LW1hbmFnZS1hc3luY2hyb25vdXMtcGxheWJhY2tcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPk1hbmFnZSBhc3luY2hyb25vdXMgcGxheWJhY2s8XC9oMj5cbjxwPlRoZSBhc3luY2hyb25vdXMgcGxheWJhY2sgcHJvY2VzcyB1c2VzIHRoZSA8Y29kZT5CdWZmZXJBdmFpbGFibGU8XC9jb2RlPiBldmVudCBvZiB0aGUgPGEgaHJlZj1cIlwvYXBwbGljYXRpb25cL2RvdG5ldFwvYXBpXC9UaXplbkZYXC9sYXRlc3RcL2FwaVwvVGl6ZW4uTXVsdGltZWRpYS5BdWRpb1BsYXliYWNrLm1kXCI+VGl6ZW4uTXVsdGltZWRpYS5BdWRpb1BsYXliYWNrPFwvYT4gY2xhc3MgdG8gcGxheSB0aGUgcmVjb3JkZWQgYXVkaW8uIFRoZSBldmVudCBpcyByYWlzZWQgZm9yIGVhY2ggcmVjb3JkZWQgYXVkaW8gY2h1bmsuIEluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgdGhlIGF1ZGlvIGRhdGEgaXMgcmVhZCBmcm9tIGEgc3RyZWFtLjxcL3A+XG48cD5UbyBzdGFydCBwbGF5aW5nIHRoZSByZWNvcmRlZCBhdWRpbywgZm9sbG93IHRoZXNlIHN0ZXBzOjxcL3A+XG48b2w+XG48bGk+XG48cD5BZGQgYW4gZXZlbnQgaGFuZGxlciBmb3IgdGhlIDxjb2RlPkJ1ZmZlckF2YWlsYWJsZTxcL2NvZGU+IGV2ZW50OjxcL3A+XG48cHJlIGNsYXNzPVwic2hpa2kgc2hpa2ktdGhlbWVzIGdpdGh1Yi1saWdodCBnaXRodWItZGFya1wiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjojZmZmOy0tc2hpa2ktZGFyay1iZzojMjQyOTJlO2NvbG9yOiMyNDI5MmU7LS1zaGlraS1kYXJrOiNlMWU0ZTg7XCI+PGNvZGU+PHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+YXVkaW9QbGF5YmFjay5CdWZmZXJBdmFpbGFibGUgPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiNENzNBNDk7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj4rPTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IE9uQnVmZmVyQXZhaWxhYmxlOzxcL3NwYW4+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxcL3NwYW4+PFwvY29kZT48XC9wcmU+XG48XC9saT5cbjxsaT5cbjxwPlByZXBhcmUgdGhlIGF1ZGlvIG91dHB1dCBkZXZpY2UgYW5kIHN0YXJ0IHRoZSBwbGF5YmFjayBwcm9jZXNzIHVzaW5nIHRoZSA8Y29kZT5QcmVwYXJlKCk8XC9jb2RlPiBtZXRob2Qgb2YgdGhlIDxjb2RlPlRpemVuLk11bHRpbWVkaWEuQXVkaW9QbGF5YmFjazxcL2NvZGU+IGNsYXNzOjxcL3A+XG48cHJlIGNsYXNzPVwic2hpa2kgc2hpa2ktdGhlbWVzIGdpdGh1Yi1saWdodCBnaXRodWItZGFya1wiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjojZmZmOy0tc2hpa2ktZGFyay1iZzojMjQyOTJlO2NvbG9yOiMyNDI5MmU7LS1zaGlraS1kYXJrOiNlMWU0ZTg7XCI+PGNvZGU+PHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+YXVkaW9QbGF5YmFjay48XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzZGNDJDMTstLXNoaWtpLWRhcms6I0IzOTJGMFwiPlByZXBhcmU8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPigpOzxcL3NwYW4+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxcL3NwYW4+PFwvY29kZT48XC9wcmU+XG48cD5UaGUgaGFyZHdhcmUgZGV2aWNlIHByZXBhcmVzIGl0cyBpbnRlcm5hbCBvdXRwdXQgYnVmZmVyIGZvciBwbGF5YmFjay48XC9wPlxuPFwvbGk+XG48bGk+XG48cD5QbGF5IGF1ZGlvIGZyb20gYSBzdHJlYW0uPFwvcD5cbjxwPlJlYWQgYXVkaW8gZGF0YSBmcm9tIHRoZSBzdHJlYW0gYW5kIHdyaXRlIGl0IHRvIHRoZSBpbnRlcm5hbCBvdXRwdXQgYnVmZmVyIHVzaW5nIHRoZSA8Y29kZT5Xcml0ZSgpPFwvY29kZT4gbWV0aG9kIG9mIHRoZSA8Y29kZT5UaXplbi5NdWx0aW1lZGlhLkF1ZGlvUGxheWJhY2s8XC9jb2RlPiBjbGFzcy4gUGxheWJhY2sgYmVnaW5zIHdoZW4gdGhlIGludGVybmFsIG91dHB1dCBidWZmZXIgc3RhcnRzIHJlY2VpdmluZyB0aGUgYXVkaW8gZGF0YTo8XC9wPlxuPHByZSBjbGFzcz1cInNoaWtpIHNoaWtpLXRoZW1lcyBnaXRodWItbGlnaHQgZ2l0aHViLWRhcmtcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6I2ZmZjstLXNoaWtpLWRhcmstYmc6IzI0MjkyZTtjb2xvcjojMjQyOTJlOy0tc2hpa2ktZGFyazojZTFlNGU4O1wiPjxjb2RlPjxzcGFuIGNsYXNzPVwibGluZVwiPjxzcGFuIHN0eWxlPVwiY29sb3I6IzZGNDJDMTstLXNoaWtpLWRhcms6I0IzOTJGMFwiPlN0cmVhbTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+c3RyZWFtPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj47PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxzcGFuIHN0eWxlPVwiY29sb3I6I0Q3M0E0OTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPnZvaWQ8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzZGNDJDMTstLXNoaWtpLWRhcms6I0IzOTJGMFwiPk9uQnVmZmVyQXZhaWxhYmxlPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4oPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiNENzNBNDk7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj5vYmplY3Q8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzZGNDJDMTstLXNoaWtpLWRhcms6I0IzOTJGMFwiPnNlbmRlcjxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+LCA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzZGNDJDMTstLXNoaWtpLWRhcms6I0IzOTJGMFwiPkF1ZGlvUGxheWJhY2tCdWZmZXJBdmFpbGFibGVFdmVudEFyZ3M8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzZGNDJDMTstLXNoaWtpLWRhcms6I0IzOTJGMFwiPmFyZ3M8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPik8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj57PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+ICAgIDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojRDczQTQ5Oy0tc2hpa2ktZGFyazojRjk3NTgzXCI+aWY8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiAoYXJncy5MZW5ndGggPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiNENzNBNDk7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj4mZ3Q7PFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMwMDVDQzU7LS1zaGlraS1kYXJrOiM3OUI4RkZcIj4wPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4pPFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+ICAgIHs8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gICAgICAgIDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojRDczQTQ5Oy0tc2hpa2ktZGFyazojRjk3NTgzXCI+dHJ5PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+ICAgICAgICB7PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkE3MzdEOy0tc2hpa2ktZGFyazojNkE3MzdEXCI+ICAgICAgICAgICAgXC9cL1wvIEFsbG9jYXRlIGEgbG9jYWwgYnVmZmVyIGZvciByZWFkaW5nIHRoZSBhdWRpbyBkYXRhIGZyb20gdGhlIHN0cmVhbTxcL3NwYW4+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiAgICAgICAgICAgIDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojRDczQTQ5Oy0tc2hpa2ktZGFyazojRjk3NTgzXCI+Ynl0ZTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+W10gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiM2RjQyQzE7LS1zaGlraS1kYXJrOiNCMzkyRjBcIj5idWZmZXI8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6I0Q3M0E0OTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPj08XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6I0Q3M0E0OTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPm5ldzxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojRDczQTQ5Oy0tc2hpa2ktZGFyazojRjk3NTgzXCI+Ynl0ZTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+W2FyZ3MuTGVuZ3RoXTs8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkE3MzdEOy0tc2hpa2ktZGFyazojNkE3MzdEXCI+ICAgICAgICAgICAgXC9cL1wvIFJlYWQgYXVkaW8gZGF0YSBmcm9tIHRoZSBzdHJlYW0gYW5kIHN0b3JlIGl0IGluIHRoZSBsb2NhbCBidWZmZXI8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gICAgICAgICAgICBzdHJlYW0uPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiM2RjQyQzE7LS1zaGlraS1kYXJrOiNCMzkyRjBcIj5SZWFkPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4oYnVmZmVyLCA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzAwNUNDNTstLXNoaWtpLWRhcms6Izc5QjhGRlwiPjA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiwgYXJncy5MZW5ndGgpOzxcL3NwYW4+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48c3BhbiBzdHlsZT1cImNvbG9yOiM2QTczN0Q7LS1zaGlraS1kYXJrOiM2QTczN0RcIj4gICAgICAgICAgICBcL1wvXC8gQ29weSB0aGUgYXVkaW8gZGF0YSBmcm9tIHRoZSBsb2NhbCBidWZmZXI8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48c3BhbiBzdHlsZT1cImNvbG9yOiM2QTczN0Q7LS1zaGlraS1kYXJrOiM2QTczN0RcIj4gICAgICAgICAgICBcL1wvXC8gdG8gdGhlIGludGVybmFsIG91dHB1dCBidWZmZXIgKHN0YXJ0cyBwbGF5YmFjayk8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gICAgICAgICAgICBhdWRpb1BsYXliYWNrLjxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+V3JpdGU8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPihidWZmZXIpOzxcL3NwYW4+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiAgICAgICAgfTxcL3NwYW4+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiAgICAgICAgPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiNENzNBNDk7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj5jYXRjaDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+KDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+RXhjZXB0aW9uPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiM2RjQyQzE7LS1zaGlraS1kYXJrOiNCMzkyRjBcIj5lPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4pPFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+ICAgICAgICB7PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+ICAgICAgICAgICAgVGl6ZW4uTG9nLjxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+RXJyb3I8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPihMT0dfVEFHLCA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzAzMkY2MjstLXNoaWtpLWRhcms6IzlFQ0JGRlwiPiZxdW90O0ZhaWxlZCB0byB3cml0ZS4gJnF1b3Q7PFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiNENzNBNDk7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj4rPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gZSk7PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+ICAgICAgICB9PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+ICAgIH08XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj59PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PFwvc3Bhbj48XC9jb2RlPjxcL3ByZT5cbjxcL2xpPlxuPGxpPlxuPHA+U3RvcCB0aGUgcGxheWJhY2sgcHJvY2VzcyB1c2luZyB0aGUgPGNvZGU+VW5wcmVwYXJlKCk8XC9jb2RlPiBtZXRob2Qgb2YgdGhlIDxjb2RlPlRpemVuLk11bHRpbWVkaWEuQXVkaW9QbGF5YmFjazxcL2NvZGU+IGNsYXNzOjxcL3A+XG48cHJlIGNsYXNzPVwic2hpa2kgc2hpa2ktdGhlbWVzIGdpdGh1Yi1saWdodCBnaXRodWItZGFya1wiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjojZmZmOy0tc2hpa2ktZGFyay1iZzojMjQyOTJlO2NvbG9yOiMyNDI5MmU7LS1zaGlraS1kYXJrOiNlMWU0ZTg7XCI+PGNvZGU+PHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkE3MzdEOy0tc2hpa2ktZGFyazojNkE3MzdEXCI+XC9cL1wvIFN0b3AgdGhlIGhhcmR3YXJlIHBsYXliYWNrIHByb2Nlc3M8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj5hdWRpb1BsYXliYWNrLjxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+VW5wcmVwYXJlPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4oKTs8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48XC9zcGFuPjxcL2NvZGU+PFwvcHJlPlxuPHA+VGhlIGRldmljZSBubyBsb25nZXIgcmFpc2VzIHRoZSBldmVudC48XC9wPlxuPFwvbGk+XG48XC9vbD5cbjxwPjxhIG5hbWU9XCJzaW1wbGVfcmVjb3JkaW5nXCI+PFwvYT48XC9wPlxuPGgyIGlkPVwiY29udGVudC1tYW5hZ2Utc3luY2hyb25vdXMtcmVjb3JkaW5nXCI+PGEgaHJlZj1cIiNjb250ZW50LW1hbmFnZS1zeW5jaHJvbm91cy1yZWNvcmRpbmdcIiBjbGFzcz1cImhlYWRpbmctcGVybWFsaW5rXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJQZXJtYWxpbmtcIj5cdTAwYjY8XC9hPk1hbmFnZSBzeW5jaHJvbm91cyByZWNvcmRpbmc8XC9oMj5cbjxwPkJlZm9yZSBzdGFydGluZyB0aGUgc3luY2hyb25vdXMgcmVjb3JkaW5nIHByb2Nlc3MsIHlvdSBuZWVkIHRvIGtub3cgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB3aGVyZSB0aGUgcmVjb3JkZWQgYXVkaW8gZGF0YSBpcyB0byBiZSBzYXZlZCwgYmFzZWQgb24gdGhlIGV4cGVjdGVkIHJlY29yZGluZyBkdXJhdGlvbi4gVGhlIHJlY29yZGluZyBwcm9jZXNzIGVuZHMgb25jZSBpdCBoYXMgcmVhZCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBieXRlcy48XC9wPlxuPHA+VG8gY2FsY3VsYXRlIGFuZCBzZXQgdGhlIHJlcXVpcmVkIGJ1ZmZlciBzaXplLCB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczo8XC9wPlxuPG9sPlxuPGxpPlxuPHA+Q2FsY3VsYXRlIHRoZSBidWZmZXIgc2l6ZSBiYXNlZCBvbiB0aGUgcmVjb21tZW5kYXRpb24gb2YgdGhlIHNvdW5kIHNlcnZlciwgc3VjaCBhcyBQdWxzZUF1ZGlvOjxcL3A+XG48dWw+XG48bGk+XG48cD5SZXRyaWV2ZSB0aGUgcmVjb21tZW5kZWQgYnVmZmVyIHNpemUgdXNpbmcgdGhlIDxjb2RlPkdldEJ1ZmZlclNpemUoKTxcL2NvZGU+IG1ldGhvZCBvZiB0aGUgPGEgaHJlZj1cIlwvYXBwbGljYXRpb25cL2RvdG5ldFwvYXBpXC9UaXplbkZYXC9sYXRlc3RcL2FwaVwvVGl6ZW4uTXVsdGltZWRpYS5BdWRpb0NhcHR1cmUubWRcIj5UaXplbi5NdWx0aW1lZGlhLkF1ZGlvQ2FwdHVyZTxcL2E+IGNsYXNzOjxcL3A+XG48cHJlIGNsYXNzPVwic2hpa2kgc2hpa2ktdGhlbWVzIGdpdGh1Yi1saWdodCBnaXRodWItZGFya1wiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjojZmZmOy0tc2hpa2ktZGFyay1iZzojMjQyOTJlO2NvbG9yOiMyNDI5MmU7LS1zaGlraS1kYXJrOiNlMWU0ZTg7XCI+PGNvZGU+PHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojRDczQTQ5Oy0tc2hpa2ktZGFyazojRjk3NTgzXCI+dmFyPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiM2RjQyQzE7LS1zaGlraS1kYXJrOiNCMzkyRjBcIj5hdWRpb0NhcHR1cmU8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6I0Q3M0E0OTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPj08XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6I0Q3M0E0OTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPm5ldzxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+QXVkaW9DYXB0dXJlPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4oPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMwMDVDQzU7LS1zaGlraS1kYXJrOiM3OUI4RkZcIj40NDEwMDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMDA1Q0M1Oy0tc2hpa2ktZGFyazojRTFFNEU4XCI+LCBBdWRpb0NoYW5uZWwuTW9ubywgQXVkaW9TYW1wbGVUeXBlLlMxNkxlKTs8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojRDczQTQ5Oy0tc2hpa2ktZGFyazojRjk3NTgzXCI+aW50PFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNCMzkyRjBcIj5idWZmZXJTaXplPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiNENzNBNDk7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj49PFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gYXVkaW9DYXB0dXJlLjxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+R2V0QnVmZmVyU2l6ZTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+KCk7PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PFwvc3Bhbj48XC9jb2RlPjxcL3ByZT5cbjxwPklmIG5vIGV4Y2VwdGlvbiBpcyB0aHJvd24sIHRoZSBtZXRob2QgcmV0dXJucyB0aGUgcHJlZmVycmVkIHNpemUgaW4gYnl0ZXMsIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgYXVkaW8gcGFyYW1ldGVycy48XC9wPlxuPHA+VGhlIHJlY29tbWVuZGVkIGJ1ZmZlciBzaXplIGRlcGVuZHMgb24gdGhlIGRldmljZS4gVGhlIHNpemUgY2FuIGJlIGRpZmZlcmVudCBmb3IgbW9iaWxlLCB3ZWFyYWJsZSwgYW5kIFRWIGRldmljZXMuPFwvcD5cbjxcL2xpPlxuPGxpPlxuPHA+U2V0IHRoZSBidWZmZXIgc2l6ZSB0byBjb3JyZXNwb25kIHRvIHRoZSBkZXNpcmVkIHJlY29yZGluZyBkdXJhdGlvbi48XC9wPlxuPHA+Rm9yIHRoZSBkZXZpY2UgaW4gdGhpcyBleGFtcGxlLCB0aGUgPGNvZGU+R2V0QnVmZmVyU2l6ZSgpPFwvY29kZT4gbWV0aG9kIHJldHVybnMgdGhlIHJlY29tbWVuZGVkIGJ1ZmZlciBzaXplIGZvciAxMDAgbWlsbGlzZWNvbmRzIG9mIHJlY29yZGluZyB0aW1lLiBUbyBkZXRlcm1pbmUgdGhlIHRvdGFsIHJlY29tbWVuZGVkIGJ1ZmZlciBzaXplLCBtdWx0aXBseSB0aGUgcmVjb21tZW5kZWQgYnVmZmVyIHNpemUgYnkgMTAgKHRvIGdldCB0aGUgYnVmZmVyIHNpemUgcGVyIHNlY29uZCkgYW5kIGJ5IHRoZSBsZW5ndGggb2YgdGhlIHJlY29yZGluZyBpbiBzZWNvbmRzOjxcL3A+XG48cHJlIGNsYXNzPVwic2hpa2kgc2hpa2ktdGhlbWVzIGdpdGh1Yi1saWdodCBnaXRodWItZGFya1wiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjojZmZmOy0tc2hpa2ktZGFyay1iZzojMjQyOTJlO2NvbG9yOiMyNDI5MmU7LS1zaGlraS1kYXJrOiNlMWU0ZTg7XCI+PGNvZGU+PHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojRDczQTQ5Oy0tc2hpa2ktZGFyazojRjk3NTgzXCI+Y29uc3Q8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6I0Q3M0E0OTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6I0Q3M0E0OTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPmludDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojRDczQTQ5Oy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojRDczQTQ5Oy0tc2hpa2ktZGFyazojQjM5MkYwXCI+UmVjb3JkaW5nU2VjPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiNENzNBNDk7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiNENzNBNDk7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj49PFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiNENzNBNDk7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiNENzNBNDk7LS1zaGlraS1kYXJrOiM3OUI4RkZcIj41PFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiNENzNBNDk7LS1zaGlraS1kYXJrOiNFMUU0RThcIj47PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPmJ1ZmZlclNpemUgPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiNENzNBNDk7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj4qPTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMDA1Q0M1Oy0tc2hpa2ktZGFyazojNzlCOEZGXCI+MTA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6I0Q3M0E0OTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPio8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiBSZWNvcmRpbmdTZWM7PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PFwvc3Bhbj48XC9jb2RlPjxcL3ByZT5cbjxcL2xpPlxuPFwvdWw+XG48XC9saT5cbjxsaT5cbjxwPkNhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUgZXhwbGljaXRseTo8XC9wPlxuPHByZSBjbGFzcz1cInNoaWtpIHNoaWtpLXRoZW1lcyBnaXRodWItbGlnaHQgZ2l0aHViLWRhcmtcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6I2ZmZjstLXNoaWtpLWRhcmstYmc6IzI0MjkyZTtjb2xvcjojMjQyOTJlOy0tc2hpa2ktZGFyazojZTFlNGU4O1wiPjxjb2RlPjxzcGFuIGNsYXNzPVwibGluZVwiPjxzcGFuIHN0eWxlPVwiY29sb3I6I0Q3M0E0OTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPmludDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+YnVmZmVyU2l6ZTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRjk3NTgzXCI+PTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IEF1ZGlvQ2FwdHVyZS5TYW1wbGVSYXRlIDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRjk3NTgzXCI+KjxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IChhdWRpb0NhcHR1cmUuQ2hhbm5lbCA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPj09PFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gQXVkaW9DaGFubmVsLlN0ZXJlbyA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPj88XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6Izc5QjhGRlwiPjI8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPjo8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6Izc5QjhGRlwiPjE8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPikgPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj4qPFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+ICAgICg8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzZGNDJDMTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPmF1ZGlvQ2FwdHVyZTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+LjxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+U2FtcGxlVHlwZTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRjk3NTgzXCI+PT08XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzZGNDJDMTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPkF1ZGlvU2FtcGxlVHlwZTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+LjxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+UzE2TGU8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPj88XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6Izc5QjhGRlwiPjI8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPjo8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6Izc5QjhGRlwiPjE8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPik7PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPmJ1ZmZlclNpemUgPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiNENzNBNDk7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj4qPTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IFJlY29yZGluZ1NlYzs8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48XC9zcGFuPjxcL2NvZGU+PFwvcHJlPlxuPFwvbGk+XG48XC9vbD5cbjxwPlRoZSBzeW5jaHJvbm91cyByZWNvcmRpbmcgcHJvY2VzcyBibG9ja3Mgb3RoZXIgcHJvY2Vzc2VzIHJ1bm5pbmcgaW4gdGhlIHNhbWUgdGhyZWFkLiBMYXVuY2hpbmcgYSByZWNvcmRpbmcgcHJvY2VzcyBmcm9tIHRoZSBhcHBsaWNhdGlvbiBtYWluIHRocmVhZCBjYW4gbWFrZSB0aGUgYXBwbGljYXRpb24gdW5yZXNwb25zaXZlLiBUbyBwcmV2ZW50IHRoaXMsIGxhdW5jaCB0aGUgcmVjb3JkaW5nIHByb2Nlc3MgZnJvbSBpdHMgb3duIHRocmVhZC48XC9wPlxuPHA+VG8gcmVjb3JkIGF1ZGlvLCBmb2xsb3cgdGhlc2Ugc3RlcHM6PFwvcD5cbjxvbD5cbjxsaT5cbjxwPlByZXBhcmUgdGhlIGF1ZGlvIGlucHV0IGRldmljZSBhbmQgc3RhcnQgdGhlIHJlY29yZGluZyBwcm9jZXNzIHVzaW5nIHRoZSA8Y29kZT5QcmVwYXJlKCk8XC9jb2RlPiBtZXRob2Qgb2YgdGhlIDxjb2RlPlRpemVuLk11bHRpbWVkaWEuQXVkaW9DYXB0dXJlPFwvY29kZT4gY2xhc3M6PFwvcD5cbjxwcmUgY2xhc3M9XCJzaGlraSBzaGlraS10aGVtZXMgZ2l0aHViLWxpZ2h0IGdpdGh1Yi1kYXJrXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7LS1zaGlraS1kYXJrLWJnOiMyNDI5MmU7Y29sb3I6IzI0MjkyZTstLXNoaWtpLWRhcms6I2UxZTRlODtcIj48Y29kZT48c3BhbiBjbGFzcz1cImxpbmVcIj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj5hdWRpb0NhcHR1cmUuPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNCMzkyRjBcIj5QcmVwYXJlPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4oKTs8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48XC9zcGFuPjxcL2NvZGU+PFwvcHJlPlxuPHA+VGhlIGhhcmR3YXJlIGRldmljZSBzdGFydHMgYnVmZmVyaW5nIHRoZSBhdWRpbyByZWNvcmRlZCBieSB0aGUgYXVkaW8gaW5wdXQgZGV2aWNlLiBUaGUgYXVkaW8gZGF0YSBpcyBidWZmZXJlZCB0byB0aGUgaW50ZXJuYWwgaW5wdXQgYnVmZmVyLjxcL3A+XG48XC9saT5cbjxsaT5cbjxwPlJlYWQgdGhlIGF1ZGlvIGRhdGEgZnJvbSB0aGUgaW50ZXJuYWwgaW5wdXQgYnVmZmVyIHVzaW5nIHRoZSA8Y29kZT5SZWFkKCk8XC9jb2RlPiBtZXRob2Q6PFwvcD5cbjxwcmUgY2xhc3M9XCJzaGlraSBzaGlraS10aGVtZXMgZ2l0aHViLWxpZ2h0IGdpdGh1Yi1kYXJrXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7LS1zaGlraS1kYXJrLWJnOiMyNDI5MmU7Y29sb3I6IzI0MjkyZTstLXNoaWtpLWRhcms6I2UxZTRlODtcIj48Y29kZT48c3BhbiBjbGFzcz1cImxpbmVcIj48c3BhbiBzdHlsZT1cImNvbG9yOiNENzNBNDk7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj5ieXRlPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj5bXSA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzZGNDJDMTstLXNoaWtpLWRhcms6I0IzOTJGMFwiPmJ1ZmZlcjxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRjk3NTgzXCI+PTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IGF1ZGlvQ2FwdHVyZS48XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0IzOTJGMFwiPlJlYWQ8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPihidWZmZXJTaXplKTs8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48XC9zcGFuPjxcL2NvZGU+PFwvcHJlPlxuPHA+VGhlIDxjb2RlPlJlYWQoKTxcL2NvZGU+IG1ldGhvZCBjYW4gYmVoYXZlIGluIHRoZSBmb2xsb3dpbmcgd2F5czo8XC9wPlxuPHVsPlxuPGxpPklmIHRoZSBtZXRob2QgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIHByZXBhcmluZyB0aGUgYXVkaW8gaW5wdXQgZGV2aWNlLCBpdCBibG9ja3MgdGhlIHRocmVhZCB0aGF0IGl0IHdhcyBsYXVuY2hlZCBmcm9tIHVudGlsIGl0IHJlYWRzIGJ5dGVzIHNwZWNpZmllZC48XC9saT5cbjxsaT5JZiB0aGUgbWV0aG9kIGlzIGNhbGxlZCB3aXRoIGEgZGVsYXkgbG9uZyBlbm91Z2ggdG8gYWxsb3cgdGhlIGludGVybmFsIGlucHV0IGJ1ZmZlciB0byBzdG9yZSBtb3JlIGF1ZGlvIGRhdGEgdGhhbiB0aGUgc3BlY2lmaWVkIHNpemUsIHRoZSBtZXRob2QgcmV0dXJucyBpbW1lZGlhdGVseSB3aXRob3V0IGJsb2NraW5nIGl0cyB0aHJlYWQuPFwvbGk+XG48XC91bD5cbjxcL2xpPlxuPGxpPlxuPHA+U3RvcCB0aGUgcmVjb3JkaW5nIHByb2Nlc3MgdXNpbmcgdGhlIDxjb2RlPlVucHJlcGFyZSgpPFwvY29kZT4gbWV0aG9kOjxcL3A+XG48cHJlIGNsYXNzPVwic2hpa2kgc2hpa2ktdGhlbWVzIGdpdGh1Yi1saWdodCBnaXRodWItZGFya1wiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjojZmZmOy0tc2hpa2ktZGFyay1iZzojMjQyOTJlO2NvbG9yOiMyNDI5MmU7LS1zaGlraS1kYXJrOiNlMWU0ZTg7XCI+PGNvZGU+PHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+YXVkaW9DYXB0dXJlLjxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+VW5wcmVwYXJlPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4oKTs8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48XC9zcGFuPjxcL2NvZGU+PFwvcHJlPlxuPFwvbGk+XG48XC9vbD5cbjxwPjxhIG5hbWU9XCJhc3luY19yZWNvcmRpbmdcIj48XC9hPjxcL3A+XG48aDIgaWQ9XCJjb250ZW50LW1hbmFnZS1hc3luY2hyb25vdXMtcmVjb3JkaW5nXCI+PGEgaHJlZj1cIiNjb250ZW50LW1hbmFnZS1hc3luY2hyb25vdXMtcmVjb3JkaW5nXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5NYW5hZ2UgYXN5bmNocm9ub3VzIHJlY29yZGluZzxcL2gyPlxuPHA+VGhlIGFzeW5jaHJvbm91cyByZWNvcmRpbmcgcHJvY2VzcyB1c2VzIGFuIGV2ZW50IHRvIHN0b3JlIHRoZSBhdWRpbyByZWNvcmRlZCBieSB0aGUgYXVkaW8gaW5wdXQgZGV2aWNlLiBUaGUgZXZlbnQgaXMgcmFpc2VkIGZvciBlYWNoIHJlY29yZGVkIGF1ZGlvIGNodW5rLiBJbiB0aGlzIHVzZSBjYXNlLCB0aGUgYXVkaW8gZGF0YSBpcyBzdG9yZWQgaW4gYSBzdHJlYW0uPFwvcD5cbjxwPlRvIHN0YXJ0IHJlY29yZGluZyBhdWRpbywgZm9sbG93IHRoZXNlIHN0ZXBzOjxcL3A+XG48b2w+XG48bGk+XG48cD5BZGQgYW4gZXZlbnQgaGFuZGxlciBmb3IgdGhlIDxjb2RlPkRhdGFBdmFpbGFibGU8XC9jb2RlPiBldmVudCBvZiB0aGUgPGEgaHJlZj1cIlwvYXBwbGljYXRpb25cL2RvdG5ldFwvYXBpXC9UaXplbkZYXC9sYXRlc3RcL2FwaVwvVGl6ZW4uTXVsdGltZWRpYS5Bc3luY0F1ZGlvQ2FwdHVyZS5tZFwiPlRpemVuLk11bHRpbWVkaWEuQXN5bmNBdWRpb0NhcHR1cmU8XC9hPiBjbGFzczo8XC9wPlxuPHByZSBjbGFzcz1cInNoaWtpIHNoaWtpLXRoZW1lcyBnaXRodWItbGlnaHQgZ2l0aHViLWRhcmtcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6I2ZmZjstLXNoaWtpLWRhcmstYmc6IzI0MjkyZTtjb2xvcjojMjQyOTJlOy0tc2hpa2ktZGFyazojZTFlNGU4O1wiPjxjb2RlPjxzcGFuIGNsYXNzPVwibGluZVwiPjxzcGFuIHN0eWxlPVwiY29sb3I6I0Q3M0E0OTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPnZhcjxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+YXN5bmNBdWRpb0NhcHR1cmU8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPj08XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPm5ldzxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+IDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+QXN5bmNBdWRpb0NhcHR1cmU8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPig8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6Izc5QjhGRlwiPjQ0MTAwPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4sIEF1ZGlvQ2hhbm5lbC5Nb25vLCBBdWRpb1NhbXBsZVR5cGUuUzE2TGUpOzxcL3NwYW4+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48c3BhbiBzdHlsZT1cImNvbG9yOiM2QTczN0Q7LS1zaGlraS1kYXJrOiM2QTczN0RcIj5cL1wvXC8gQWRkIGFuIGV2ZW50IGhhbmRsZXIgaW52b2tlZCBhc3luY2hyb25vdXNseSBmb3IgZWFjaCByZWNvcmRlZCBhdWRpbyBjaHVuazxcL3NwYW4+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxzcGFuIHN0eWxlPVwiY29sb3I6IzZGNDJDMTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPmFzeW5jQXVkaW9DYXB0dXJlPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4uPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiM2RjQyQzE7LS1zaGlraS1kYXJrOiNFMUU0RThcIj5EYXRhQXZhaWxhYmxlPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj4rPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiNENzNBNDk7LS1zaGlraS1kYXJrOiNGOTc1ODNcIj49PFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gT25EYXRhQXZhaWxhYmxlOzxcL3NwYW4+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxcL3NwYW4+PFwvY29kZT48XC9wcmU+XG48XC9saT5cbjxsaT5cbjxwPlByZXBhcmUgdGhlIGF1ZGlvIGlucHV0IGRldmljZSBhbmQgc3RhcnQgdGhlIHJlY29yZGluZyBwcm9jZXNzIHVzaW5nIHRoZSA8Y29kZT5QcmVwYXJlKCk8XC9jb2RlPiBtZXRob2Qgb2YgdGhlIDxjb2RlPlRpemVuLk11bHRpbWVkaWEuQXN5bmNBdWRpb0NhcHR1cmU8XC9jb2RlPiBjbGFzczo8XC9wPlxuPHByZSBjbGFzcz1cInNoaWtpIHNoaWtpLXRoZW1lcyBnaXRodWItbGlnaHQgZ2l0aHViLWRhcmtcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6I2ZmZjstLXNoaWtpLWRhcmstYmc6IzI0MjkyZTtjb2xvcjojMjQyOTJlOy0tc2hpa2ktZGFyazojZTFlNGU4O1wiPjxjb2RlPjxzcGFuIGNsYXNzPVwibGluZVwiPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPmFzeW5jQXVkaW9DYXB0dXJlLjxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+UHJlcGFyZTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+KCk7PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PFwvc3Bhbj48XC9jb2RlPjxcL3ByZT5cbjxwPlRoZSBoYXJkd2FyZSBkZXZpY2Ugc3RhcnRzIGJ1ZmZlcmluZyB0aGUgYXVkaW8gcmVjb3JkZWQgYnkgdGhlIGF1ZGlvIGlucHV0IGRldmljZS4gVGhlIGF1ZGlvIGRhdGEgaXMgYnVmZmVyZWQgdG8gdGhlIGludGVybmFsIGlucHV0IGJ1ZmZlci4gVGhlIGV2ZW50IGlzIHJhaXNlZCBmb3IgZWFjaCBhdWRpbyBkYXRhIGNodW5rLjxcL3A+XG48XC9saT5cbjxsaT5cbjxwPlRvIHN0b3JlIHRoZSByZWNvcmRlZCBhdWRpbyBkYXRhOjxcL3A+XG48cHJlIGNsYXNzPVwic2hpa2kgc2hpa2ktdGhlbWVzIGdpdGh1Yi1saWdodCBnaXRodWItZGFya1wiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjojZmZmOy0tc2hpa2ktZGFyay1iZzojMjQyOTJlO2NvbG9yOiMyNDI5MmU7LS1zaGlraS1kYXJrOiNlMWU0ZTg7XCI+PGNvZGU+PHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+U3RyZWFtPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiM2RjQyQzE7LS1zaGlraS1kYXJrOiNCMzkyRjBcIj5zdHJlYW08XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzZGNDJDMTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPjs8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkE3MzdEOy0tc2hpa2ktZGFyazojNkE3MzdEXCI+XC9cL1wvIEV2ZW50IGhhbmRsZXIgaW52b2tlZCBmb3IgZWFjaCByZWNvcmRlZCBhdWRpbyBjaHVuazxcL3NwYW4+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxzcGFuIHN0eWxlPVwiY29sb3I6IzZGNDJDMTstLXNoaWtpLWRhcms6I0Y5NzU4M1wiPnZvaWQ8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzZGNDJDMTstLXNoaWtpLWRhcms6I0IzOTJGMFwiPk9uRGF0YUF2YWlsYWJsZTxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+KDxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojRjk3NTgzXCI+b2JqZWN0PFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4gPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiM2RjQyQzE7LS1zaGlraS1kYXJrOiNCMzkyRjBcIj5zZW5kZXI8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiwgPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiM2RjQyQzE7LS1zaGlraS1kYXJrOiNCMzkyRjBcIj5BdWRpb0RhdGFBdmFpbGFibGVFdmVudEFyZ3M8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzZGNDJDMTstLXNoaWtpLWRhcms6I0IzOTJGMFwiPmFyZ3M8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPik8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj57PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkE3MzdEOy0tc2hpa2ktZGFyazojNkE3MzdEXCI+ICAgIFwvXC9cLyBXcml0ZSB0aGUgcmVjb3JkZWQgYXVkaW8gZGF0YSB0byB0aGUgc3RyZWFtPFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+ICAgIHN0cmVhbS48XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzZGNDJDMTstLXNoaWtpLWRhcms6I0IzOTJGMFwiPldyaXRlPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4oYXJncy5EYXRhLCA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzAwNUNDNTstLXNoaWtpLWRhcms6Izc5QjhGRlwiPjA8XC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPiwgYXJncy5EYXRhLkxlbmd0aCk7PFwvc3Bhbj48XC9zcGFuPlxuPHNwYW4gY2xhc3M9XCJsaW5lXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjojMjQyOTJFOy0tc2hpa2ktZGFyazojRTFFNEU4XCI+fTxcL3NwYW4+PFwvc3Bhbj5cbjxzcGFuIGNsYXNzPVwibGluZVwiPjxcL3NwYW4+PFwvY29kZT48XC9wcmU+XG48XC9saT5cbjxsaT5cbjxwPlN0b3AgdGhlIHJlY29yZGluZyBwcm9jZXNzIHVzaW5nIHRoZSA8Y29kZT5VbnByZXBhcmUoKTxcL2NvZGU+IG1ldGhvZDo8XC9wPlxuPHByZSBjbGFzcz1cInNoaWtpIHNoaWtpLXRoZW1lcyBnaXRodWItbGlnaHQgZ2l0aHViLWRhcmtcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6I2ZmZjstLXNoaWtpLWRhcmstYmc6IzI0MjkyZTtjb2xvcjojMjQyOTJlOy0tc2hpa2ktZGFyazojZTFlNGU4O1wiPjxjb2RlPjxzcGFuIGNsYXNzPVwibGluZVwiPjxzcGFuIHN0eWxlPVwiY29sb3I6IzI0MjkyRTstLXNoaWtpLWRhcms6I0UxRTRFOFwiPmFzeW5jQXVkaW9DYXB0dXJlLjxcL3NwYW4+PHNwYW4gc3R5bGU9XCJjb2xvcjojNkY0MkMxOy0tc2hpa2ktZGFyazojQjM5MkYwXCI+VW5wcmVwYXJlPFwvc3Bhbj48c3BhbiBzdHlsZT1cImNvbG9yOiMyNDI5MkU7LS1zaGlraS1kYXJrOiNFMUU0RThcIj4oKTs8XC9zcGFuPjxcL3NwYW4+XG48c3BhbiBjbGFzcz1cImxpbmVcIj48XC9zcGFuPjxcL2NvZGU+PFwvcHJlPlxuPHA+VGhlIGRldmljZSBubyBsb25nZXIgcmFpc2VzIHRoZSBldmVudC48XC9wPlxuPFwvbGk+XG48XC9vbD5cbjxoMiBpZD1cImNvbnRlbnQtcmVsYXRlZC1pbmZvcm1hdGlvblwiPjxhIGhyZWY9XCIjY29udGVudC1yZWxhdGVkLWluZm9ybWF0aW9uXCIgY2xhc3M9XCJoZWFkaW5nLXBlcm1hbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiUGVybWFsaW5rXCI+XHUwMGI2PFwvYT5SZWxhdGVkIGluZm9ybWF0aW9uPFwvaDI+XG48dWw+XG48bGk+RGVwZW5kZW5jaWVzXG48dWw+XG48bGk+VGl6ZW4gNC4wIGFuZCBIaWdoZXI8XC9saT5cbjxcL3VsPlxuPFwvbGk+XG48XC91bD5cbiIsInRhYmxlX29mX2NvbnRlbnQiOiI8dWwgY2xhc3M9XCJ0YWJsZS1vZi1jb250ZW50c1wiPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1hdWRpby1vdXRwdXRcIj5BdWRpbyBvdXRwdXQ8XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1hdWRpby1pbnB1dFwiPkF1ZGlvIGlucHV0PFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtcHJlcmVxdWlzaXRlc1wiPlByZXJlcXVpc2l0ZXM8XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1tYW5hZ2Utc3luY2hyb25vdXMtcGxheWJhY2tcIj5NYW5hZ2Ugc3luY2hyb25vdXMgcGxheWJhY2s8XC9hPjxcL2xpPlxuPGxpPjxhIGhyZWY9XCIjY29udGVudC1tYW5hZ2UtYXN5bmNocm9ub3VzLXBsYXliYWNrXCI+TWFuYWdlIGFzeW5jaHJvbm91cyBwbGF5YmFjazxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LW1hbmFnZS1zeW5jaHJvbm91cy1yZWNvcmRpbmdcIj5NYW5hZ2Ugc3luY2hyb25vdXMgcmVjb3JkaW5nPFwvYT48XC9saT5cbjxsaT48YSBocmVmPVwiI2NvbnRlbnQtbWFuYWdlLWFzeW5jaHJvbm91cy1yZWNvcmRpbmdcIj5NYW5hZ2UgYXN5bmNocm9ub3VzIHJlY29yZGluZzxcL2E+PFwvbGk+XG48bGk+PGEgaHJlZj1cIiNjb250ZW50LXJlbGF0ZWQtaW5mb3JtYXRpb25cIj5SZWxhdGVkIGluZm9ybWF0aW9uPFwvYT48XC9saT5cbjxcL3VsPlxuIiwidGl0bGUiOiJSYXcgQXVkaW8gUGxheWJhY2sgYW5kIFJlY29yZGluZyIsInJhdyI6bnVsbH0seyJjbGFzcyI6IkFwcFxcU2VydmljZXNcXERvY3VtZW50YXRpb25cXERhdGFcXFJlbmRlcmVkTWFya2Rvd24iLCJzIjoid3JibCJ9XX0seyJzIjoiYXJyIn1dfSwibWVtbyI6eyJpZCI6ImRHWEhnSVFNejBHekJ3NGhJcVpHIiwibmFtZSI6Il9fbW91bnRQYXJhbXNDb250YWluZXIiLCJwYXRoIjoiZG9jc1wvYXBwbGljYXRpb25cL2RvdG5ldFwvZ3VpZGVzXC9tdWx0aW1lZGlhXC9yYXctYXVkaW8iLCJtZXRob2QiOiJHRVQiLCJyZWxlYXNlIjoiYS1hLWEifSwiY2hlY2tzdW0iOiJiYmQ5MDRlY2QxZjY2NTI4NmY5NTMzZDlmY2Q4OThmYzlkNDZjODM4MmQxMjg1M2Q5ZmRiNTJjZDVhZjdjOTUwIn0=')" >

For the best experience,
Please visit us from a computer

Copyright © 2026 SAMSUNG. All rights reserved.

Customize your cookie preferences

You can enable or disable non-essential cookies. Essential cookies are always on to ensure the site works properly and to keep you signed in.

Necessary

These cookies are necessary for the website to function properly and cannot be switched off. They help with things like logging in and setting your privacy preferences.

Always on

Analytics

These cookies help us improve the site by tracking which pages are most popular and how visitors move around the site.

Enable analytics cookies
Public Forum Public Forum
Employees only. Please sign in with your company account.