diff --git a/tools/cdata.js b/tools/cdata.js
index d01c3e35f..bf5a65e84 100644
--- a/tools/cdata.js
+++ b/tools/cdata.js
@@ -220,6 +220,7 @@ function writeChunks(srcDir, specs, resultFile) {
writeHtmlGzipped("wled00/data/index.htm", "wled00/html_ui.h", 'index');
writeHtmlGzipped("wled00/data/simple.htm", "wled00/html_simple.h", 'simple');
+writeHtmlGzipped("wled00/data/pixart/pixart.htm", "wled00/html_pixart.h", 'pixart');
/*
writeChunks(
"wled00/data",
diff --git a/wled00/data/pixart/boxdraw.js b/wled00/data/pixart/boxdraw.js
new file mode 100644
index 000000000..75f8f9430
--- /dev/null
+++ b/wled00/data/pixart/boxdraw.js
@@ -0,0 +1,91 @@
+function drawBoxes(inputPixelArray, widthPixels, heightPixels) {
+
+ // Get a reference to the canvas element
+ var canvas = document.getElementById('pixelCanvas');
+
+ // Get the canvas context
+ var ctx = canvas.getContext('2d');
+
+ // Set the width and height of the canvas
+ if (window.innerHeight < window.innerWidth) {
+ canvas.width = Math.floor(window.innerHeight * 0.98);
+ }
+ else{
+ canvas.width = Math.floor(window.innerWidth * 0.98);
+ }
+ //canvas.height = window.innerWidth;
+
+ let pixelSize = Math.floor(canvas.width/widthPixels);
+
+ //Set the canvas height to fit the right number of pixelrows
+ canvas.height = (pixelSize * heightPixels) + 10
+
+ //Iterate through the matrix
+ for (let y = 0; y < heightPixels; y++) {
+ for (let x = 0; x < widthPixels; x++) {
+
+ // Calculate the index of the current pixel
+ let i = (y*widthPixels) + x;
+
+ //Gets the RGB of the current pixel
+ let pixel = inputPixelArray[i];
+
+ let pixelColor = 'rgb(' + pixel[0] + ', ' + pixel[1] + ', ' + pixel[2] + ')';
+ let r = pixel[0];
+ let g = pixel[1];
+ let b = pixel[2];
+ let pos = pixel[4];
+
+ let textColor = 'rgb(128,128,128)';
+
+ // Set the fill style to the pixel color
+ ctx.fillStyle = pixelColor;
+
+ //Draw the rectangle
+ ctx.fillRect(x * pixelSize, y * pixelSize, pixelSize, pixelSize);
+
+ // Draw a border on the box
+ ctx.strokeStyle = '#888888';
+ ctx.lineWidth = 1;
+ ctx.strokeRect(x * pixelSize, y * pixelSize, pixelSize, pixelSize);
+
+ //Write text to box
+ ctx.font = "10px Arial";
+ ctx.fillStyle = textColor;
+ ctx.textAlign = "center";
+ ctx.textBaseline = 'middle';
+ ctx.fillText((pos + 1), (x * pixelSize) + (pixelSize /2), (y * pixelSize) + (pixelSize /2));
+ }
+ }
+}
+
+function drawBackground() {
+ const grid = document.createElement("div");
+ grid.id = "grid";
+ grid.classList.add("grid-class");
+ grid.style.cssText = "";
+
+ const boxSize = 20;
+ const boxCount = Math.ceil(window.innerWidth / boxSize) * Math.ceil(window.innerHeight / boxSize);;
+
+ for (let i = 0; i < boxCount; i++) {
+ const box = document.createElement("div");
+ box.classList.add("box");
+ box.style.backgroundColor = getRandomColor();
+ grid.appendChild(box);
+ }
+ grid.style.zIndex = -1;
+ document.body.appendChild(grid);
+}
+
+function getRandomColor() {
+ const letters = "0123456789ABCDEF";
+ let color = "rgba(";
+ for (let i = 0; i < 3; i++) {
+ color += Math.floor(Math.random() * 256) + ",";
+ }
+ color += "0.05)";
+ return color;
+}
+
+ window.drawBackground = drawBackground;
diff --git a/wled00/data/pixart/favicon-16x16.png b/wled00/data/pixart/favicon-16x16.png
new file mode 100644
index 000000000..feb51ca09
Binary files /dev/null and b/wled00/data/pixart/favicon-16x16.png differ
diff --git a/wled00/data/pixart/favicon-32x32.png b/wled00/data/pixart/favicon-32x32.png
new file mode 100644
index 000000000..a3b5cceb1
Binary files /dev/null and b/wled00/data/pixart/favicon-32x32.png differ
diff --git a/wled00/data/pixart/favicon.ico b/wled00/data/pixart/favicon.ico
new file mode 100644
index 000000000..bde8945e5
Binary files /dev/null and b/wled00/data/pixart/favicon.ico differ
diff --git a/wled00/data/pixart/getPixelValues.js b/wled00/data/pixart/getPixelValues.js
new file mode 100644
index 000000000..76ded2e5d
--- /dev/null
+++ b/wled00/data/pixart/getPixelValues.js
@@ -0,0 +1,303 @@
+function getPixelRGBValues(base64Image) {
+ httpArray = [];
+ fileJSON = JSONledStringStart + document.getElementById('brightnessNumber').value + JSONledStringMid1 + document.getElementById('targetSegment').value + JSONledStringMid2;
+
+ //const copyJSONledbutton = document.getElementById('copyJSONledbutton');
+ const JSONled = document.getElementById('JSONled');
+ const maxNoOfColorsInCommandSting = document.getElementById('colorLimitNumber').value;
+
+ let hybridAddressing = false;
+ let selectedIndex = -1;
+
+ let selector = document.getElementById("formatSelector");
+ selectedIndex = selector.selectedIndex;
+ const formatSelection = selector.options[selectedIndex].value;
+
+ selector = document.getElementById("ledSetupSelector");
+ selectedIndex = selector.selectedIndex;
+ const ledSetupSelection = selector.options[selectedIndex].value;
+
+ selector = document.getElementById("colorFormatSelector");
+ selectedIndex = selector.selectedIndex;
+ let hexValueCheck = true;
+ if (selector.options[selectedIndex].value == 'dec'){
+ hexValueCheck = false
+ }
+
+ selector = document.getElementById("addressingSelector");
+ selectedIndex = selector.selectedIndex;
+ let segmentValueCheck = true; //If Range or Hybrid
+ if (selector.options[selectedIndex].value == 'single'){
+ segmentValueCheck = false
+ } else if (selector.options[selectedIndex].value == 'hybrid'){
+ hybridAddressing = true;
+ }
+
+ let segmentString = ''
+ let curlString = ''
+ let haString = ''
+ let haCommandCurlString = '';
+
+
+ let colorSeparatorStart = '\'';
+ let colorSeparatorEnd = '\'';
+ if (!hexValueCheck){
+ colorSeparatorStart = '[';
+ colorSeparatorEnd = ']';
+ }
+ // Warnings
+ let hasTransparency = false; //If alpha < 255 is detected on any pixel, this is set to true in code below
+ let imageInfo = '';
+
+ // Create an off-screen canvas
+ var canvas = document.createElement('canvas');
+ var context = canvas.getContext('2d');
+
+ // Create an image element and set its src to the base64 image
+ var image = new Image();
+ image.src = base64Image;
+
+ // Wait for the image to load before drawing it onto the canvas
+ image.onload = function() {
+
+ let scalePath = document.getElementById("scalePath");
+ let color = scalePath.getAttribute("fill");
+ let sizeX = document.getElementById("sizeX").value;
+ let sizeY = document.getElementById("sizeY").value;
+
+ if (color != accentColor || sizeX < 1 || sizeY < 1){
+ //image will not be rezised Set desitred size to original size
+ sizeX = image.width;
+ sizeY = image.height;
+ }
+
+ // Set the canvas size to the same as the desired image size
+ canvas.width = sizeX;
+ canvas.height = sizeY;
+
+ imageInfo = '
Width: ' + sizeX + ', Height: ' + sizeY + ' (make sure this matches your led matrix setup)
'
+
+ // Draw the image onto the canvas
+ context.drawImage(image, 0, 0, sizeX, sizeY);
+
+ // Get the pixel data from the canvas
+ var pixelData = context.getImageData(0, 0, sizeX, sizeY).data;
+
+ // Create an array to hold the RGB values of each pixel
+ var pixelRGBValues = [];
+
+ // If the first row of the led matrix is right -> left
+ let right2leftAdjust = 1;
+
+ if (ledSetupSelection == 'l2r'){
+ right2leftAdjust = 0;
+ }
+
+ // Loop through the pixel data and get the RGB values of each pixel
+ for (var i = 0; i < pixelData.length; i += 4) {
+ var r = pixelData[i];
+ var g = pixelData[i + 1];
+ var b = pixelData[i + 2];
+ var a = pixelData[i + 3];
+
+ let pixel = i/4
+ let row = Math.floor(pixel/sizeX);
+ let led = pixel;
+ if (ledSetupSelection == 'matrix'){
+ //Do nothing, the matrix is set upp like the index in the image
+ //Every row starts from the left, i.e. no zigzagging
+ }
+ else if ((row + right2leftAdjust) % 2 === 0) {
+ //Setup is traditional zigzag
+ //right2leftAdjust basically flips the row order if = 1
+ //Row is left to right
+ //Leave led index as pixel index
+
+ } else {
+ //Setup is traditional zigzag
+ //Row is right to left
+ //Invert index of row for led
+ let indexOnRow = led - (row * sizeX);
+ let maxIndexOnRow = sizeX - 1;
+ let reversedIndexOnRow = maxIndexOnRow - indexOnRow;
+ led = (row * sizeX) + reversedIndexOnRow;
+ }
+
+ // Add the RGB values to the pixel RGB values array
+ pixelRGBValues.push([r, g, b, a, led, pixel, row]);
+ }
+
+ pixelRGBValues.sort((a, b) => a[5] - b[5]);
+
+ //Copy the values to a new array for resorting
+ let ledRGBValues = [... pixelRGBValues];
+
+ //Sort the array based on led index
+ ledRGBValues.sort((a, b) => a[4] - b[4]);
+
+ //Generate JSON in WLED format
+ let JSONledString = '';
+ let JSONledStringShort = '';
+
+ //Set starting values for the segment check to something that is no color
+ let segmentStart = -1;
+ let maxi = ledRGBValues.length;
+ let curentColorIndex = 0
+ let commandArray = [];
+
+ //For evry pixel in the LED array
+ for (let i = 0; i < maxi; i++) {
+ let pixel = ledRGBValues[i];
+ let r = pixel[0];
+ let g = pixel[1];
+ let b = pixel[2];
+ let a = pixel[3];
+ let segmentString = '';
+ let segmentEnd = -1;
+
+ if(segmentValueCheck){
+ if (segmentStart < 0){
+ //This is the first led of a new segment
+ segmentStart = i;
+ } //Else we allready have a start index
+
+ if (i < maxi - 1){
+
+ let iNext = i + 1;
+ let nextPixel = ledRGBValues[iNext];
+
+ if (nextPixel[0] != r || nextPixel[1] != g || nextPixel[2] != b ){
+ //Next pixel has new color
+ //The current segment ends with this pixel
+ segmentEnd = i + 1 //WLED wants the NEXT LED as the stop led...
+ if (segmentStart == i && hybridAddressing){
+ //If only one led/pixel, no segment info needed
+ if (JSONledString == ''){
+ //If addressing is single, we need to start every command with a starting possition
+ segmentString = '' + i + ',';
+ //Fixed to b2
+ } else{
+ segmentString = ''
+ }
+ }
+ else {
+ segmentString = segmentStart + ',' + segmentEnd + ',';
+ }
+ }
+
+ } else {
+ //This is the last pixel, so the segment must end
+ segmentEnd = i + 1;
+
+ if (segmentStart + 1 == segmentEnd && hybridAddressing){
+ //If only one led/pixel, no segment info needed
+ if (JSONledString == ''){
+ //If addressing is single, we need to start every command with a starting possition
+ segmentString = '' + i + ',';
+ //Fixed to b2
+ } else{
+ segmentString = ''
+ }
+ }
+ else {
+ segmentString = segmentStart + ',' + segmentEnd + ',';
+ }
+ }
+ } else{
+ //Write every pixel
+ if (JSONledString == ''){
+ //If addressing is single, we need to start every command with a starting possition
+ JSONledString = i
+ //Fixed to b2
+ }
+
+ segmentStart = i
+ segmentEnd = i
+ //Segment string should be empty for when addressing single. So no need to set it again.
+ }
+
+ if (a < 255){
+ hasTransparency = true; //If ANY pixel has alpha < 255 then this is set to true to warn the user
+ }
+
+ if (segmentEnd > -1){
+ //This is the last pixel in the segment, write to the JSONledString
+ //Return color value in selected format
+ let colorValueString = r + ',' + g + ',' + b ;
+
+ if (hexValueCheck){
+ const [red, green, blue] = [r, g, b];
+ colorValueString = `${[red, green, blue].map(x => x.toString(16).padStart(2, '0')).join('')}`;
+ } else{
+ //do nothing, allready set
+ }
+
+ // Check if start and end is the same, in which case remove
+
+ JSONledString = JSONledString + segmentString + colorSeparatorStart + colorValueString + colorSeparatorEnd;
+ fileJSON = JSONledString + segmentString + colorSeparatorStart + colorValueString + colorSeparatorEnd;
+
+ curentColorIndex = curentColorIndex + 1; // We've just added a new color to the string so up the count with one
+
+ if (curentColorIndex % maxNoOfColorsInCommandSting === 0 || i == maxi - 1) {
+
+ //If we have accumulated the max number of colors to send in a single command or if this is the last pixel, we should write the current colorstring to the array
+ commandArray.push(JSONledString);
+ JSONledString = ''; //Start on an new command string
+ } else
+ {
+ //Add a comma to continue the command string
+ JSONledString = JSONledString + ','
+ }
+ //Reset segment values
+ segmentStart = - 1;
+ }
+ }
+
+ JSONledString = ''
+
+ //For evry commandString in the array
+ for (let i = 0; i < commandArray.length; i++) {
+ let thisJSONledString = JSONledStringStart + document.getElementById('brightnessNumber').value + JSONledStringMid1 + document.getElementById('targetSegment').value + JSONledStringMid2 + commandArray[i] + JSONledStringEnd;
+ httpArray.push(thisJSONledString);
+
+ let thiscurlString = curlStart + document.getElementById('curlUrl').value + curlMid1 + thisJSONledString + curlEnd;
+
+ //Aggregated Strings That should be returned to the user
+ if (i > 0){
+ JSONledString = JSONledString + '\n';
+ curlString = curlString + ' && ';
+ }
+ JSONledString = JSONledString + thisJSONledString;
+ curlString = curlString + thiscurlString;
+ }
+
+
+ haString = haStart + document.getElementById('haID').value + haMid1 + document.getElementById('haName').value + haMid2 + document.getElementById('haUID').value + haMid3 +curlString + haMid3 + document.getElementById('curlUrl').value + haEnd;
+
+ if (formatSelection == 'wled'){
+ JSONled.value = JSONledString;
+ } else if (formatSelection == 'curl'){
+ JSONled.value = curlString;
+ } else if (formatSelection == 'ha'){
+ JSONled.value = haString;
+ } else {
+ JSONled.value = 'ERROR!/n' + formatSelection + ' is an unknown format.'
+ }
+
+ fileJSON = fileJSON + JSONledStringEnd;
+
+ let infoDiv = document.getElementById('image-info');
+ let canvasDiv = document.getElementById('image-info');
+ if (hasTransparency){
+ imageInfo = imageInfo + 'WARNING! Transparency info detected in image. Transparency (alpha) has been ignored. To ensure you get the result you desire, use only solid colors in your image.
'
+ }
+
+ infoDiv.innerHTML = imageInfo;
+ canvasDiv.style.display = "block"
+
+
+ //Drawing the image
+ drawBoxes(pixelRGBValues, sizeX, sizeY);
+ }
+}
\ No newline at end of file
diff --git a/wled00/data/pixart/pixart.css b/wled00/data/pixart/pixart.css
new file mode 100644
index 000000000..e2fd330b8
--- /dev/null
+++ b/wled00/data/pixart/pixart.css
@@ -0,0 +1,266 @@
+
+.box {
+ border: 2px solid white;
+}
+body {
+ font-family: 'Arcade', Arial, sans-serif;
+ background-color: #151515;
+}
+
+.top-part {
+ width: 600px;
+ margin: 0 auto;
+}
+.container {
+ max-width: 100% -40px;
+ border-radius: 0px;
+ padding: 20px;
+ text-align: center;
+}
+h1 {
+ font-size: 2.3em;
+ color: rgb(126, 76, 128);
+ margin: 1px 0;
+ font-family: 'Arcade', Arial, sans-serif;
+ line-height: 0.5;
+ /*text-align: center;*/
+}
+h2 {
+ font-size: 1.1em;
+ color: rgba(126, 76, 128, 0.61);
+ margin: 1px 0;
+ font-family: 'Arcade', Arial, sans-serif;
+ line-height: 0.5;
+ text-align: center;
+}
+h3 {
+ font-size: 0.7em;
+ color: rgba(126, 76, 128, 0.61);
+ margin: 1px 0;
+ font-family: 'Arcade', Arial, sans-serif;
+ line-height: 1.4;
+ text-align: center;
+ align-items: center;
+ justify-content: center;
+ display: flex;
+}
+
+p {
+ font-size: 1.2em;
+ color: rgb(119, 119, 119);
+ line-height: 1.5;
+ font-family: 'Arcade', Arial, sans-serif;
+}
+
+#fieldTable {
+ font-size: 1 em;
+ color: #777;
+ line-height: 1;
+ font-family: 'Arcade', Arial, sans-serif;
+}
+
+#scaleTable {
+ font-size: 1 em;
+ color: #777;
+ line-height: 1;
+ font-family: 'Arcade', Arial, sans-serif;
+}
+
+#drop-zone {
+ display: block;
+ width: 100%-40px;
+ border: 3px dashed #7E4C80;
+ border-radius: 0px;
+ text-align: center;
+ padding: 20px;
+ margin: 0px;
+ cursor: pointer;
+
+ font-family: 'Arcade', Arial, sans-serif;
+ font-size: 15px;
+ color: #777;
+}
+
+#file-picker {
+ display: none;
+}
+
+* select {
+ background-color: #333333;
+ color: #C0C0C0;
+ border: 1px solid #C0C0C0;
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ padding: 0em;
+ width: 100%;
+ height: 27px;
+ font-size: 15px;
+ color: rgb(119, 119, 119);
+ border-radius: 0;
+}
+
+* input[type=range] {
+ -webkit-appearance:none;
+ flex-grow: 1;
+ border-radius: 0px;
+ background: linear-gradient(to right, #333333 0%, #333333 100%);
+ color: #C0C0C0;
+ border: 1px solid #C0C0C0;
+ margin-top: 0.5em;
+ margin-left: 0em;
+}
+
+input[type="range"]::-webkit-slider-thumb{
+ -webkit-appearance:none;
+ width: 25px;
+ height:25px;
+ background:#7E4C80;
+ position:relative;
+ z-index:3;
+}
+
+.rangeNumber{
+ width: 20px;
+ vertical-align: middle;
+}
+
+.fullTextField[type=text] {
+ background-color: #333333;
+ border: 1px solid #C0C0C0;
+ padding-inline-start: 5px;
+ margin-top: 10px;
+ width: 100%;
+ height: 24px;
+ border-radius: 0px;
+ font-family: 'Arcade', Arial, sans-serif;
+ font-size: 15px;
+ color: rgb(119, 119, 119);
+}
+
+* input[type=submit] {
+ background-color: #333333;
+ border: 1px solid #C0C0C0;
+ padding: 0.5em;
+ width: 100%;
+ border-radius: 0px;
+ font-family: 'Arcade', Arial, sans-serif;
+ font-size: 1.3em;
+ color: rgb(119, 119, 119);
+}
+
+* button {
+ background-color: #333333;
+ border: 1px solid #C0C0C0;
+ padding-inline: 5px;
+ width: 100%;
+ border-radius: 0px;
+ font-family: 'Arcade', Arial, sans-serif;
+ font-size: 1em;
+ color: rgb(119, 119, 119);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ cursor: pointer;
+}
+
+textarea {
+ grid-row: 1 / 2;
+ width: 100%;
+ height: 200px;
+ background-color: #333333;
+ border: 1px solid #C0C0C0;
+
+ color: #777;
+}
+.hide {
+ display: none;
+}
+.grids-class{
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 100vh;
+ display: grid;
+ grid-template-columns: repeat(auto-fill, 20px);
+ grid-template-rows: repeat(auto-fill, 20px);
+ grid-gap: 0px;
+}
+.svg-icon {
+ vertical-align: middle;
+}
+.buttondiv-class {
+ flex: 1;
+ display: inline-block;
+}
+
+.buttondivmid-class {
+ width: 10px;
+ display: inline-block;
+}
+#image-container {
+ display: grid;
+ grid-template-rows: 1fr 1fr;
+}
+#button-container {
+ display: flex;
+ padding-bottom: 10px;
+ padding-top: 10px;
+}
+
+.buttonclass {
+ flex: 1;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+.gap {
+ width: 10px;
+}
+
+#submitConvert::before {
+ content: "";
+ display: inline-block;
+ background-image: url('data:image/svg+xml;utf8, ');
+ width: 36px;
+ height: 36px;
+}
+
+#sizeDiv * {
+ display: inline-block;
+}
+.sizeInputFields{
+ width: 50px;
+ background-color: #333333;
+ border: 1px solid #C0C0C0;
+ padding-inline-start: 5px;
+ margin-top: -5px;
+ height: 24px;
+ border-radius: 0px;
+ font-family: 'Arcade', Arial, sans-serif;
+ font-size: 15px;
+ color: rgb(119, 119, 119);
+}
+a:link {
+ color: rgba(126, 76, 128, 0.61);
+ background-color: transparent;
+ text-decoration: none;
+}
+
+a:visited {
+ color: rgba(126, 76, 128, 0.61);
+ background-color: transparent;
+ text-decoration: none;
+}
+
+a:hover {
+ color: rgb(126, 76, 128);
+ background-color: transparent;
+ text-decoration: none;
+}
+
+a:active {
+ color: rgba(126, 76, 128, 0.61);
+ background-color: transparent;
+ text-decoration: none;
+}
\ No newline at end of file
diff --git a/wled00/data/pixart/pixart.htm b/wled00/data/pixart/pixart.htm
new file mode 100644
index 000000000..ea989a324
--- /dev/null
+++ b/wled00/data/pixart/pixart.htm
@@ -0,0 +1,214 @@
+
+
+
+
+
+
+ WLED Pixel Art Converter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WLED Pixel Art Converter
+
+
+
Convert image to WLED JSON (pixel art on WLED matrix)
+
+
+
+
+
+
+
+
+ Drop image here or
+ Click to select a file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wled00/data/pixart/pixart.js b/wled00/data/pixart/pixart.js
new file mode 100644
index 000000000..44415fafc
--- /dev/null
+++ b/wled00/data/pixart/pixart.js
@@ -0,0 +1,320 @@
+//Start up code
+document.getElementById('curlUrl').value = location.host;
+
+let devMode = false;
+const urlParams = new URLSearchParams(window.location.search);
+if(urlParams.has('dev')){
+ devMode = true;
+}
+if(devMode){
+ console.log('Developer mode active. Experimental and unstable functions active.')
+} else{
+console.log('Developer mode inactive. Append "?dev" to the URL.')
+}
+
+if(devMode){
+ document.getElementById("fileJSONledbutton").style.display = 'buttonclass'
+ document.getElementById("gap2").style.display = 'gap'
+} else {
+ document.getElementById("fileJSONledbutton").style.display = 'none'
+ document.getElementById("gap2").style.display = 'none'
+}
+
+
+let httpArray = [];
+let fileJSON = '';
+
+
+//On submit button pressed =======================
+
+
+document.getElementById("convertbutton").addEventListener("click", function() {
+
+ let base64Image = document.getElementById('preview').src;
+ if (isValidBase64Gif(base64Image)) {
+ document.getElementById('image').src = base64Image;
+ getPixelRGBValues(base64Image);
+ document.getElementById('image-container').style.display = "block"
+ document.getElementById("button-container").style.display = "";
+
+ }
+ else {
+ let infoDiv = document.getElementById('image-info');
+ let imageInfo = 'WARNING! File does not appear to be a valid image
'
+ infoDiv.innerHTML = imageInfo;
+ infoDiv.style.display = "block"
+ document.getElementById('image-container').style.display = "none";
+ document.getElementById('JSONled').value = '';
+ console.log("The string '" + base64Image + "' is not a valid base64 image.");
+ }
+
+});
+
+// Code for copying the generated string to clipboard
+
+copyJSONledbutton.addEventListener('click', async () => {
+ let JSONled = document.getElementById('JSONled');
+ JSONled.select();
+ try {
+ await navigator.clipboard.writeText(JSONled.value);
+ } catch (err) {
+ try {
+ await document.execCommand("copy");
+ } catch (err) {
+ console.error('Failed to copy text: ', err);
+ }
+ }
+});
+
+sendJSONledbutton.addEventListener('click', async () => {
+ if (window.location.protocol === "https:") {
+ alert('Will only be available when served over http (or WLED is run over https)');
+ } else {
+ postPixels();
+ }
+});
+
+fileJSONledbutton.addEventListener('click', async () => {
+ if (window.location.protocol === "https:") {
+ alert('Will only be available when served over http (or WLED is run over https)');
+ } else {
+ let JSONFileName = 'TheName.json'
+ let urlString = 'http://'+document.getElementById('curlUrl').value+'/upload'
+
+ sendAsFile(fileJSON, JSONFileName, urlString);
+ }
+});
+
+async function postPixels() {
+ for (let i of httpArray) {
+ try {
+ console.log(i);
+ console.log(i.length);
+ const response = await fetch('http://'+document.getElementById('curlUrl').value+'/json/state', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json'
+ //'Content-Type': 'text/html; charset=UTF-8'
+ },
+ body: i
+ });
+ const data = await response.json();
+ console.log(data);
+ } catch (error) {
+ console.error(error);
+ }
+ }
+}
+//File uploader code
+const dropZone = document.getElementById('drop-zone');
+const filePicker = document.getElementById('file-picker');
+const preview = document.getElementById('preview');
+
+// Listen for dragenter, dragover, and drop events
+dropZone.addEventListener('dragenter', dragEnter);
+dropZone.addEventListener('dragover', dragOver);
+dropZone.addEventListener('drop', dropped);
+dropZone.addEventListener('click', zoneClicked);
+
+// Listen for change event on file picker
+filePicker.addEventListener('change', filePicked);
+
+// Handle zone click
+function zoneClicked(e) {
+ e.preventDefault();
+ //this.classList.add('drag-over');
+ //alert('Hej');
+ filePicker.click();
+}
+
+// Handle dragenter
+function dragEnter(e) {
+ e.preventDefault();
+ this.classList.add('drag-over');
+}
+
+// Handle dragover
+function dragOver(e) {
+ e.preventDefault();
+}
+
+// Handle drop
+function dropped(e) {
+ e.preventDefault();
+ this.classList.remove('drag-over');
+
+ // Get the dropped file
+ const file = e.dataTransfer.files[0];
+ updatePreview(file);
+}
+
+// Handle file picked
+function filePicked(e) {
+ // Get the picked file
+ const file = e.target.files[0];
+ updatePreview(file);
+}
+
+// Update the preview image
+function updatePreview(file) {
+ // Use FileReader to read the file
+ const reader = new FileReader();
+ reader.onload = function() {
+ // Update the preview image
+ preview.src = reader.result;
+ document.getElementById("submitConvertDiv").style.display = "";
+ };
+ reader.readAsDataURL(file);
+}
+
+function isValidBase64Gif(string) {
+ // Use a regular expression to check that the string is a valid base64 string
+ /*
+ const base64gifPattern = /^data:image\/gif;base64,([A-Za-z0-9+/:]{4})*([A-Za-z0-9+/:]{3}=|[A-Za-z0-9+/:]{2}==)?$/;
+ const base64pngPattern = /^data:image\/png;base64,([A-Za-z0-9+/:]{4})*([A-Za-z0-9+/:]{3}=|[A-Za-z0-9+/:]{2}==)?$/;
+ const base64jpgPattern = /^data:image\/jpg;base64,([A-Za-z0-9+/:]{4})*([A-Za-z0-9+/:]{3}=|[A-Za-z0-9+/:]{2}==)?$/;
+ const base64webpPattern = /^data:image\/webp;base64,([A-Za-z0-9+/:]{4})*([A-Za-z0-9+/:]{3}=|[A-Za-z0-9+/:]{2}==)?$/;
+ */
+ //REMOVED, Any image appear to work as long as it can be drawn to the canvas. Leaving code in for future use, possibly
+ if (1==1 || base64gifPattern.test(string) || base64pngPattern.test(string) || base64jpgPattern.test(string) || base64webpPattern.test(string)) {
+ return true;
+ }
+ else {
+ //Not OK
+ return false;
+ }
+}
+
+document.getElementById("brightnessNumber").oninput = function() {
+ document.getElementById("brightnessValue").textContent = this.value;
+}
+
+document.getElementById("colorLimitNumber").oninput = function() {
+ document.getElementById("colorLimitValue").textContent = this.value;
+}
+
+var formatSelector = document.getElementById("formatSelector");
+var hideableRows = document.querySelectorAll(".ha-hide");
+for (var i = 0; i < hideableRows.length; i++) {
+ hideableRows[i].classList.add("hide");
+}
+formatSelector.addEventListener("change", function() {
+ for (var i = 0; i < hideableRows.length; i++) {
+ hideableRows[i].classList.toggle("hide", this.value !== "ha");
+ }
+ });
+
+function switchScale() {
+ let scalePath = document.getElementById("scalePath");
+ let scaleTogglePath = document.getElementById("scaleTogglePath");
+ let color = scalePath.getAttribute("fill");
+ let d = ''
+ if (color === accentColor) {
+ color = accentTextColor;
+ d = scaleToggleOffd
+ document.getElementById("sizeDiv").style.display = "none";
+ // Set values to actual XY of image, if possible
+ } else {
+ color = accentColor;
+ d = scaleToggleOnd
+ document.getElementById("sizeDiv").style.display = "";
+ }
+ scalePath.setAttribute("fill", color);
+ scaleTogglePath.setAttribute("fill", color);
+ scaleTogglePath.setAttribute("d", d);
+}
+
+
+function sendAsFile(jsonStringInput, fileName, urlString) {
+ //var jsonString = JSON.stringify({name: "value"});
+ var file = new Blob([jsonStringInput], {type: 'application/json'});
+ console.log(jsonStringInput)
+ console.log(fileName);
+ console.log(urlString);
+
+ var formData = new FormData();
+ formData.append('file', file, fileName);
+
+ var xhr = new XMLHttpRequest();
+ xhr.open('POST', urlString, true);
+ xhr.onload = function() {
+ if (xhr.status === 200) {
+ console.log('File uploaded successfully!');
+ } else {
+ console.log('File upload failed!');
+ }
+ };
+ xhr.send(formData);
+}
+
+function generateSegmentOptions(array) {
+ //This function is prepared for a name property on each segment for easier selection
+ //Currently the name is generated generically based on index
+ var select = document.getElementById("targetSegment");
+ select.innerHTML = "";
+ for (var i = 0; i < array.length; i++) {
+ var option = document.createElement("option");
+ option.value = array[i].value;
+ option.text = array[i].text;
+ select.appendChild(option);
+ if(i === 0) {
+ option.selected = true;
+ }
+ }
+}
+
+//Initial population of segment selection
+function generateSegmentArray(noOfSegments) {
+ var arr = [];
+ for (var i = 0; i < noOfSegments; i++) {
+ arr.push({
+ value: i,
+ text: "Segment index " + i
+ });
+ }
+ return arr;
+}
+
+
+//Animate matrix
+var matrixcircles = document.querySelectorAll("#logomatrix path");
+var intervalId;
+// Function that changes the color of a random circle to a lighter purple
+function changeColorOfDot() {
+ // Get a random number between 0 and the number of circles
+ var randomIndex = Math.floor(Math.random() * matrixcircles.length);
+ // Get the circle at the random index
+ var randomCircle = matrixcircles[randomIndex];
+
+
+ // Store the current fill color
+ var currentColor = randomCircle.getAttribute("fill");
+ // Change the color of the circle
+ randomCircle.setAttribute("fill", "#bb8fbc");
+ setTimeout(() => {
+ randomCircle.setAttribute("fill", currentColor);
+ clearInterval(intervalId);
+ intervalId = setInterval(changeColorOfDot, randomInterval());
+ }, 500);
+}
+
+function randomInterval() {
+ var interval = Math.floor(Math.random() * (5 - 1 + 1)) + 1;
+ return interval * 1000;
+}
+
+// call the function changeColorOfDot every 10 seconds
+intervalId = setInterval(changeColorOfDot, randomInterval());
+
+var segmentData = generateSegmentArray(10);
+
+generateSegmentOptions(segmentData);
+
+document.getElementById("fileJSONledbutton").innerHTML =
+' File to device'
+ document.getElementById("convertbutton").innerHTML =
+ ' Convert to WLED JSON ';
+ document.getElementById("copyJSONledbutton").innerHTML =
+ ' Copy to clipboard';
+ document.getElementById("sendJSONledbutton").innerHTML =
+' Send to device';
\ No newline at end of file
diff --git a/wled00/data/pixart/site.webmanifest b/wled00/data/pixart/site.webmanifest
new file mode 100644
index 000000000..82452af2e
--- /dev/null
+++ b/wled00/data/pixart/site.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "WLED Pixel Art Convertor",
+ "short_name": "ledconv",
+ "icons": [
+ {
+ "src": "/favicon-32x32.png",
+ "sizes": "32x322",
+ "type": "image/png"
+ },
+ {
+ "src": "/favicon-32x32.png",
+ "sizes": "32x32",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#ffffff",
+ "background_color": "#ffffff",
+ "display": "standalone"
+ }
\ No newline at end of file
diff --git a/wled00/data/pixart/statics.js b/wled00/data/pixart/statics.js
new file mode 100644
index 000000000..15607cb9b
--- /dev/null
+++ b/wled00/data/pixart/statics.js
@@ -0,0 +1,25 @@
+var curlStart = 'curl -X POST "http://';
+var curlMid1 = '/json/state" -d \'';
+var curlEnd = '\' -H "Content-Type: application/json"';
+
+const haStart = '#Uncomment if you don\'t allready have these defined in your switch section of your configuration.yaml\n#- platform: command_line\n #switches:\n ';
+const haMid1 = '\n friendly_name: ';
+const haMid2 = '\n unique_id: ';
+const haMid3= '\n command_on: >\n ';
+const haMid4 = '\n command_off: >\n curl -X POST "http://';
+const haEnd = '/json/state" -d \'{"on":false}\' -H "Content-Type: application/json"';
+const haCommandLeading = ' ';
+
+const JSONledStringStart = '{"on":true,"bri":';
+const JSONledStringMid1 = ',"seg":{"id":';
+const JSONledStringMid2 = ',"i":[';
+// const JSONledShortStringStart = '{';
+// const JSONledShortStringMid1 = '"seg":{"i":[';
+const JSONledStringEnd = ']}}';
+
+var accentColor = '#7E4C80';
+var accentTextColor = '#777';
+
+var scaleToggleOffd = "M17,7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7M7,15A3,3 0 0,1 4,12A3,3 0 0,1 7,9A3,3 0 0,1 10,12A3,3 0 0,1 7,15Z";
+var scaleToggleOnd = "M17,7H7A5,5 0 0,0 2,12A5,5 0 0,0 7,17H17A5,5 0 0,0 22,12A5,5 0 0,0 17,7M17,15A3,3 0 0,1 14,12A3,3 0 0,1 17,9A3,3 0 0,1 20,12A3,3 0 0,1 17,15Z";
+
diff --git a/wled00/data/pixartmin.htm b/wled00/data/pixartmin.htm
deleted file mode 100644
index 3c58a0207..000000000
--- a/wled00/data/pixartmin.htm
+++ /dev/null
@@ -1,233 +0,0 @@
-
-
-
-
-
-
- Led Matrix Pixel Art Converter
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Led Matrix Pixel Art Converter
-
-
-
Convert image to WLED JSON (pixel art on WLED matrix)
-
-
-
-
-
-
-
-
- Drop image here or
- Click to select a file
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/wled00/html_pixart.h b/wled00/html_pixart.h
new file mode 100644
index 000000000..f8f8e35ae
--- /dev/null
+++ b/wled00/html_pixart.h
@@ -0,0 +1,519 @@
+/*
+ * Binary array for the Web UI.
+ * gzip is used for smaller size and improved speeds.
+ *
+ * Please see https://kno.wled.ge/advanced/custom-features/#changing-web-ui
+ * to find out how to easily modify the web UI source!
+ */
+
+// Autogenerated from wled00/data/pixart/pixart.htm, do not edit!!
+const uint16_t PAGE_pixart_L = 8106;
+const uint8_t PAGE_pixart[] PROGMEM = {
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0a, 0xe5, 0x3c, 0xf9, 0x73, 0xda, 0x48,
+ 0xb3, 0xbf, 0xfb, 0xaf, 0x98, 0x28, 0xf5, 0xc5, 0x28, 0x08, 0x21, 0x89, 0xd3, 0x60, 0x39, 0x85,
+ 0x31, 0x36, 0x4e, 0x7c, 0x5f, 0xb1, 0xe3, 0x75, 0x6d, 0x09, 0x34, 0x80, 0x6c, 0x21, 0x11, 0x49,
+ 0x80, 0xb1, 0xc3, 0xff, 0xfe, 0xba, 0x67, 0x24, 0x10, 0x97, 0x8f, 0x6c, 0xf6, 0x7b, 0xaf, 0xea,
+ 0x6d, 0xd6, 0x20, 0x8d, 0x7a, 0x7a, 0xfa, 0x9a, 0x9e, 0xee, 0x9e, 0x11, 0x9b, 0x1f, 0x76, 0x8e,
+ 0xab, 0x17, 0x37, 0x27, 0x35, 0xd2, 0x09, 0xba, 0xf6, 0x16, 0xd9, 0x8c, 0xbe, 0xa8, 0x61, 0xc2,
+ 0x57, 0x97, 0x06, 0x06, 0x3c, 0x09, 0x7a, 0x29, 0xfa, 0xb3, 0x6f, 0x0d, 0x74, 0xa1, 0x6a, 0x34,
+ 0x3b, 0x34, 0x55, 0x75, 0x9d, 0xc0, 0x73, 0x6d, 0x81, 0xac, 0x35, 0xe1, 0x8a, 0x3a, 0x81, 0x2e,
+ 0x38, 0x6e, 0xaa, 0x89, 0xcf, 0x24, 0x02, 0x57, 0x7e, 0xe0, 0x7a, 0x70, 0xd5, 0xed, 0xfb, 0x41,
+ 0xca, 0xa3, 0x03, 0xc3, 0xb6, 0x4c, 0x23, 0xa0, 0xc2, 0x32, 0x84, 0x27, 0x9e, 0xd1, 0xee, 0x1a,
+ 0xcb, 0x30, 0x2d, 0x05, 0xaf, 0x3d, 0xf6, 0x2c, 0x8f, 0xfa, 0x02, 0x99, 0x80, 0x2b, 0x08, 0x17,
+ 0x58, 0x81, 0x4d, 0xb7, 0xd6, 0xbe, 0x1f, 0xd4, 0x76, 0xc8, 0x89, 0xf5, 0x48, 0x6d, 0x52, 0xf1,
+ 0x02, 0x02, 0x64, 0x0e, 0xa8, 0x17, 0x50, 0x6f, 0x33, 0xcd, 0x01, 0xc8, 0xa6, 0x1f, 0x8c, 0x10,
+ 0x50, 0x6e, 0xb8, 0x8f, 0xcf, 0x0d, 0xd7, 0x33, 0xa9, 0x57, 0xd2, 0x7a, 0x8f, 0xc4, 0x77, 0x81,
+ 0x44, 0xf2, 0xb1, 0xd5, 0x6a, 0x8d, 0x1b, 0xae, 0x39, 0x7a, 0x6e, 0x01, 0xf6, 0x54, 0xcb, 0xe8,
+ 0x5a, 0xf6, 0xa8, 0x54, 0xf1, 0x9a, 0x86, 0x49, 0xa5, 0x8a, 0x67, 0x19, 0xb6, 0xe4, 0x1b, 0x8e,
+ 0x9f, 0xf2, 0xa9, 0x67, 0xb5, 0xca, 0x0d, 0xa3, 0xf9, 0xd0, 0xf6, 0xdc, 0xbe, 0x63, 0xa6, 0x9a,
+ 0xae, 0xed, 0x7a, 0xa5, 0x8f, 0x6a, 0x0e, 0xff, 0x8d, 0xe5, 0xc0, 0xed, 0xa5, 0x7a, 0x86, 0x17,
+ 0x3c, 0x0f, 0x2d, 0x33, 0xe8, 0x94, 0xf2, 0x8a, 0xd2, 0x7b, 0x2c, 0x77, 0x0d, 0xaf, 0x6d, 0x39,
+ 0x25, 0x85, 0x18, 0xfd, 0xc0, 0x1d, 0xcb, 0x48, 0xbf, 0x61, 0x39, 0xd4, 0x7b, 0xee, 0x1a, 0x8f,
+ 0x29, 0x0e, 0xa8, 0x2a, 0xca, 0x7f, 0x48, 0x2a, 0x8b, 0xd0, 0x9c, 0xb6, 0x94, 0x67, 0x98, 0x56,
+ 0xdf, 0x2f, 0x29, 0xe5, 0x9e, 0x61, 0x9a, 0x96, 0xd3, 0x2e, 0x69, 0xf8, 0x30, 0xa0, 0x8f, 0x41,
+ 0x0a, 0x84, 0xda, 0x76, 0x4a, 0x4d, 0x90, 0x01, 0xf5, 0xc6, 0x1d, 0x95, 0x93, 0xec, 0x5b, 0x4f,
+ 0xb4, 0xa4, 0xc9, 0x19, 0xda, 0x2d, 0x87, 0x34, 0x15, 0x68, 0xb6, 0x59, 0x54, 0xa2, 0xd1, 0x55,
+ 0xe0, 0x55, 0x29, 0xbf, 0x85, 0x3b, 0x1b, 0x68, 0x4b, 0x75, 0xa8, 0xd5, 0xee, 0x04, 0x25, 0x39,
+ 0x37, 0xee, 0x68, 0xb1, 0x01, 0x54, 0x59, 0x9d, 0x0c, 0xe0, 0xb5, 0x1b, 0x46, 0x42, 0xd5, 0xf2,
+ 0x52, 0x21, 0x2f, 0xa9, 0x5a, 0x51, 0x92, 0xf3, 0xaa, 0xf8, 0x4f, 0x47, 0x5b, 0xc6, 0x60, 0x26,
+ 0x36, 0xbe, 0x5c, 0xf8, 0x17, 0x87, 0x57, 0xe5, 0xec, 0xe2, 0xf8, 0x65, 0x76, 0x93, 0xb2, 0x02,
+ 0xda, 0xf5, 0xa3, 0xa6, 0x7b, 0xb0, 0x6e, 0xab, 0x35, 0x4a, 0x85, 0x96, 0x18, 0x35, 0x9b, 0x96,
+ 0xdf, 0xb3, 0x8d, 0x51, 0xa9, 0x65, 0xd3, 0xc7, 0x71, 0x6f, 0x46, 0x6a, 0x5a, 0x4c, 0x2d, 0x85,
+ 0xc2, 0xdc, 0xa8, 0xb9, 0xb7, 0x50, 0x3a, 0xfe, 0xd8, 0xb2, 0xa8, 0x6d, 0x5e, 0x18, 0x0d, 0x9b,
+ 0xc6, 0x51, 0x93, 0x17, 0x30, 0xbf, 0x0d, 0xaf, 0xdf, 0x34, 0x6c, 0xfa, 0x2f, 0xe0, 0x35, 0x3d,
+ 0x98, 0x0c, 0x4f, 0xae, 0x43, 0x9f, 0x23, 0xc1, 0x34, 0x6c, 0xb7, 0xf9, 0x50, 0x9e, 0x5a, 0x7c,
+ 0xdc, 0xe0, 0x4b, 0x19, 0xd0, 0x99, 0x69, 0xf8, 0x1d, 0x0a, 0xb3, 0x31, 0x34, 0xdd, 0xf9, 0xa9,
+ 0xb0, 0xa8, 0x9c, 0x99, 0xc9, 0x11, 0xcd, 0xb3, 0x72, 0xb3, 0xef, 0xf9, 0x40, 0x78, 0xcf, 0xb5,
+ 0x18, 0xd0, 0x5b, 0xec, 0x20, 0xc6, 0x79, 0x0e, 0x50, 0x4d, 0x39, 0x47, 0xb9, 0xdb, 0x34, 0xd5,
+ 0xb3, 0x9a, 0x0f, 0x30, 0x63, 0x23, 0x4e, 0x1c, 0x60, 0x6b, 0xfc, 0x99, 0xf8, 0xd4, 0xa6, 0xcd,
+ 0xe0, 0x79, 0xd1, 0x1f, 0x64, 0x32, 0x99, 0x10, 0x87, 0x6f, 0xd9, 0xe0, 0x89, 0x22, 0x26, 0xd5,
+ 0x89, 0xc7, 0x09, 0xdb, 0x39, 0xcd, 0x29, 0xf0, 0x1b, 0x60, 0xfd, 0x20, 0xf2, 0xf0, 0xbe, 0xe1,
+ 0x06, 0x81, 0xdb, 0xe5, 0x4d, 0x11, 0x8f, 0x4a, 0x4c, 0x72, 0xe5, 0x50, 0x15, 0x5a, 0x01, 0x88,
+ 0x5d, 0x49, 0xfb, 0xbc, 0x00, 0x81, 0x62, 0xcb, 0xe9, 0xf5, 0x83, 0xdb, 0x60, 0xd4, 0xa3, 0xba,
+ 0x67, 0x38, 0x6d, 0x7a, 0xf7, 0x9c, 0x1a, 0xd2, 0xc6, 0x83, 0x05, 0x72, 0xed, 0xf5, 0xa8, 0x01,
+ 0x6d, 0x4d, 0xca, 0xb8, 0x2b, 0xa3, 0x15, 0xa7, 0x80, 0xab, 0x21, 0xe8, 0x7b, 0x5e, 0x11, 0x53,
+ 0x86, 0x4b, 0x68, 0x18, 0x86, 0x07, 0x80, 0xf0, 0x0c, 0x74, 0x92, 0x08, 0x5c, 0xe2, 0x21, 0x69,
+ 0x12, 0xca, 0x80, 0x28, 0xfc, 0x0b, 0x49, 0x16, 0xff, 0x91, 0x40, 0x6c, 0xda, 0x0a, 0x80, 0x81,
+ 0x05, 0xf2, 0x4b, 0xa5, 0x88, 0x7e, 0x1f, 0x90, 0x00, 0x8d, 0x41, 0xa7, 0xdf, 0x6d, 0xac, 0x64,
+ 0x8a, 0x4b, 0x50, 0x43, 0x31, 0x45, 0x12, 0xc4, 0xeb, 0x18, 0x3f, 0x91, 0xed, 0xf5, 0x5c, 0xdf,
+ 0x0a, 0x2c, 0xd7, 0x29, 0x79, 0xd4, 0x36, 0x02, 0x6b, 0x40, 0xcb, 0x4f, 0x29, 0xcb, 0x31, 0xe9,
+ 0x63, 0x29, 0x33, 0x96, 0xd9, 0xd8, 0x47, 0x30, 0x10, 0x98, 0x44, 0x88, 0x12, 0x0d, 0x10, 0x97,
+ 0x1c, 0x0b, 0x66, 0x53, 0x68, 0xa3, 0x5d, 0xcb, 0x34, 0x6d, 0x3a, 0x96, 0x5b, 0x7d, 0xdb, 0xbe,
+ 0x00, 0xd3, 0xdd, 0xc5, 0x09, 0xcc, 0x89, 0x47, 0x4b, 0xbe, 0x5b, 0x61, 0x37, 0xab, 0x24, 0x13,
+ 0xda, 0x01, 0x50, 0xc1, 0x26, 0xa3, 0x1f, 0xc0, 0x3a, 0x53, 0xca, 0x4d, 0xec, 0x9e, 0x89, 0x4c,
+ 0x45, 0x32, 0x96, 0x98, 0x49, 0x76, 0xc9, 0xc2, 0xf2, 0xcf, 0xa6, 0xc5, 0x8c, 0x29, 0xf9, 0xfd,
+ 0x46, 0xd7, 0xfa, 0x5d, 0x86, 0xb8, 0x9e, 0x63, 0x44, 0xff, 0x43, 0x42, 0x67, 0xd6, 0x40, 0x46,
+ 0x69, 0xa3, 0x0f, 0xb3, 0xc9, 0xf9, 0x47, 0xe2, 0x66, 0x82, 0xfe, 0x73, 0x34, 0xce, 0x3a, 0xd7,
+ 0xf8, 0xc2, 0xf1, 0x8e, 0xf5, 0x66, 0xd6, 0xcd, 0x8d, 0xd1, 0xa6, 0x0c, 0x8f, 0x1a, 0xcf, 0x6d,
+ 0xcf, 0x32, 0x53, 0x6c, 0xe2, 0xa6, 0xb5, 0x65, 0xc6, 0xc0, 0x82, 0x92, 0xf7, 0x09, 0x23, 0x26,
+ 0x4e, 0xb9, 0x03, 0xf3, 0x6c, 0xd6, 0x11, 0xca, 0x38, 0xa2, 0x9f, 0x6a, 0xda, 0x86, 0xef, 0x3f,
+ 0x4f, 0x26, 0x4e, 0x0b, 0xa2, 0x31, 0xb3, 0x8c, 0x56, 0xa9, 0x94, 0xf9, 0xf4, 0x9d, 0x12, 0x33,
+ 0x18, 0x46, 0xd4, 0xe0, 0x4d, 0x67, 0x22, 0x01, 0x44, 0x54, 0x66, 0xf4, 0x03, 0xff, 0xd0, 0x12,
+ 0x50, 0xa4, 0xae, 0xdf, 0x75, 0x7c, 0x98, 0x87, 0x30, 0x95, 0x83, 0x04, 0xc6, 0x50, 0x29, 0x70,
+ 0xc9, 0xb6, 0x84, 0x53, 0x4e, 0x9c, 0x03, 0x06, 0xae, 0x5f, 0x86, 0x6c, 0x1b, 0x40, 0xce, 0x58,
+ 0xf6, 0x07, 0xa0, 0x58, 0x10, 0xe7, 0xf3, 0x8a, 0x29, 0xcb, 0x2d, 0xc6, 0xb4, 0x06, 0x21, 0x53,
+ 0xa8, 0x19, 0xf0, 0x83, 0x11, 0x99, 0xe1, 0x14, 0x64, 0xeb, 0x59, 0x0c, 0x18, 0x7a, 0x87, 0xf0,
+ 0x11, 0xa3, 0x20, 0xe8, 0xa5, 0x7d, 0x3e, 0x5a, 0x5d, 0xa3, 0x4d, 0x53, 0xd3, 0x50, 0xf0, 0x05,
+ 0x01, 0x30, 0x9e, 0xd4, 0x96, 0x47, 0xe0, 0x6f, 0xfc, 0x91, 0x0f, 0xb6, 0xa4, 0x27, 0x33, 0x9e,
+ 0xc8, 0x68, 0xc3, 0xf5, 0x83, 0x11, 0x10, 0xb5, 0x45, 0xfe, 0x21, 0x22, 0x78, 0x86, 0xb3, 0x38,
+ 0x50, 0xae, 0xb7, 0x80, 0x28, 0x87, 0xdd, 0x40, 0x76, 0x31, 0xc6, 0x20, 0x70, 0x60, 0xb3, 0x3e,
+ 0x0c, 0xb5, 0x4b, 0xa5, 0x06, 0x6d, 0x41, 0xec, 0xff, 0x1c, 0x19, 0xa9, 0x20, 0x2c, 0x65, 0x3d,
+ 0x6e, 0x78, 0x4c, 0x08, 0xa5, 0xbe, 0x67, 0x27, 0xd6, 0x21, 0x4b, 0x30, 0x4a, 0xec, 0x3e, 0x0d,
+ 0xba, 0x49, 0x3e, 0x76, 0xed, 0x72, 0x3f, 0x68, 0x15, 0x25, 0x88, 0xdb, 0x07, 0x6d, 0xc2, 0x62,
+ 0x77, 0x5d, 0x08, 0x5d, 0x6d, 0x36, 0xe6, 0xbd, 0xe1, 0x5a, 0x20, 0x03, 0x8b, 0x0e, 0xb7, 0xdd,
+ 0x47, 0xc8, 0x08, 0x88, 0x42, 0xb4, 0x2c, 0xfc, 0x2f, 0x90, 0xcd, 0x9e, 0x11, 0x74, 0x08, 0xaa,
+ 0x5f, 0x17, 0x60, 0xa2, 0x78, 0x40, 0x52, 0x15, 0x8d, 0x58, 0x20, 0xa6, 0x2e, 0x1c, 0xaa, 0x9a,
+ 0x94, 0xbf, 0xda, 0x38, 0x50, 0xf3, 0x52, 0xee, 0x00, 0xae, 0xd5, 0xab, 0x6c, 0xa5, 0x28, 0x15,
+ 0xa1, 0xb7, 0x22, 0x29, 0x24, 0x0b, 0xf1, 0x64, 0x15, 0x3e, 0x32, 0x72, 0xae, 0x40, 0xb2, 0x72,
+ 0x16, 0xe2, 0xcb, 0x9c, 0xac, 0x64, 0x48, 0x4e, 0xd6, 0xa0, 0x35, 0x2f, 0x6b, 0xf9, 0x83, 0xbc,
+ 0x5c, 0x90, 0xd4, 0xac, 0x5c, 0xac, 0xc2, 0x5d, 0x0e, 0x21, 0x37, 0x0a, 0x04, 0xc0, 0x32, 0xf8,
+ 0xa1, 0x55, 0xf2, 0x52, 0x9e, 0xa1, 0x52, 0x09, 0x8e, 0x73, 0xa8, 0x16, 0x65, 0x88, 0x51, 0x0b,
+ 0x72, 0x21, 0x7b, 0xa0, 0x16, 0xe4, 0x8c, 0xb4, 0x21, 0x6b, 0x55, 0x15, 0x6f, 0x25, 0x55, 0x91,
+ 0x95, 0x2c, 0x51, 0x8b, 0x92, 0xaa, 0xb2, 0xcf, 0xb9, 0xae, 0x6a, 0xf1, 0x4a, 0xcd, 0x1d, 0x40,
+ 0xfb, 0x06, 0x12, 0xa9, 0x65, 0xae, 0x34, 0x25, 0x46, 0xa6, 0xa6, 0x20, 0x9d, 0xf8, 0xa9, 0xc8,
+ 0x59, 0x58, 0x63, 0x37, 0xe4, 0x5c, 0x56, 0x2a, 0x22, 0x25, 0xd3, 0x01, 0x7f, 0x08, 0x24, 0xbd,
+ 0xb5, 0x89, 0x22, 0xdd, 0x5a, 0x17, 0xc3, 0xe9, 0x97, 0xc9, 0x4f, 0xe5, 0x87, 0xd7, 0xa0, 0x48,
+ 0xf0, 0x49, 0x3b, 0xd6, 0x80, 0x7c, 0x7e, 0x5e, 0x6e, 0xe0, 0xf8, 0x7c, 0x1f, 0xbd, 0x3d, 0x5b,
+ 0xc1, 0x22, 0xeb, 0xce, 0xbd, 0xdf, 0x8d, 0xbc, 0x65, 0x09, 0x4b, 0xe5, 0x66, 0xd5, 0xfb, 0x87,
+ 0xd7, 0x2d, 0x03, 0x23, 0x96, 0x87, 0xe7, 0x17, 0x72, 0x88, 0x05, 0x96, 0x02, 0x58, 0xee, 0x7d,
+ 0xc8, 0xea, 0xc0, 0x84, 0x78, 0x08, 0x6a, 0xd2, 0xa6, 0xeb, 0x19, 0xcc, 0xc9, 0x31, 0xff, 0x67,
+ 0x94, 0x06, 0x16, 0x38, 0x3d, 0x6a, 0xfe, 0x69, 0xb4, 0x1d, 0x17, 0xa4, 0xf6, 0x3c, 0x9b, 0xcf,
+ 0xfd, 0x0e, 0x1e, 0xa3, 0x89, 0x11, 0xcc, 0x9f, 0xa5, 0x6e, 0x0d, 0xcc, 0x8a, 0xa5, 0xd4, 0x64,
+ 0x13, 0x25, 0x4a, 0x20, 0x4e, 0xd2, 0x05, 0xbf, 0xe3, 0x7a, 0x41, 0xb3, 0x1f, 0x10, 0x74, 0xae,
+ 0x90, 0xda, 0x77, 0x3c, 0xda, 0xd2, 0x85, 0xd8, 0xe4, 0xee, 0x39, 0x6d, 0x18, 0xcb, 0xa7, 0xf9,
+ 0xac, 0x64, 0x5d, 0x6d, 0x1f, 0x9f, 0x0d, 0x95, 0x6f, 0x7b, 0x6d, 0xb7, 0x02, 0xff, 0x1d, 0x9d,
+ 0x5f, 0x76, 0x6a, 0x97, 0x6d, 0xb8, 0xda, 0xc6, 0xdb, 0xca, 0x69, 0xb5, 0x72, 0x83, 0xdf, 0xad,
+ 0x62, 0x7a, 0xa3, 0xc3, 0x5a, 0xae, 0x8f, 0xce, 0xcf, 0x94, 0xfd, 0x8a, 0xe7, 0x67, 0x9b, 0xf9,
+ 0x53, 0xb8, 0x7f, 0x38, 0xfa, 0x7a, 0x56, 0xdb, 0xbd, 0x3c, 0xae, 0x25, 0xed, 0x4b, 0x3f, 0x38,
+ 0xd6, 0xd4, 0xca, 0xa5, 0x53, 0x3f, 0xf2, 0x77, 0x95, 0xab, 0xa4, 0x52, 0xbb, 0xbe, 0xb2, 0x06,
+ 0x95, 0xeb, 0x56, 0x85, 0x16, 0x7e, 0xda, 0x07, 0x85, 0xda, 0x8f, 0x5a, 0xf3, 0x34, 0xd7, 0x3c,
+ 0x2d, 0x3a, 0xd5, 0xfd, 0x6a, 0x63, 0xe7, 0xeb, 0x6e, 0xe1, 0xc2, 0x1b, 0x74, 0x0c, 0x3f, 0x7f,
+ 0xd3, 0x18, 0xed, 0x98, 0xdb, 0x7d, 0xad, 0x73, 0xfe, 0x50, 0x78, 0xb0, 0x3a, 0x7e, 0xf3, 0x9b,
+ 0xda, 0xba, 0xdc, 0x50, 0xeb, 0x67, 0xdf, 0xbe, 0x19, 0xbb, 0x2d, 0xf5, 0xb1, 0xe3, 0x9d, 0x14,
+ 0xe9, 0xfd, 0xa1, 0x53, 0xad, 0x17, 0x73, 0xca, 0x49, 0x3a, 0x39, 0x48, 0x37, 0xab, 0xda, 0xcf,
+ 0xe6, 0xcf, 0x61, 0xb6, 0xed, 0xef, 0xed, 0x64, 0xea, 0x0f, 0xe9, 0x3d, 0x2d, 0x93, 0x6c, 0x0c,
+ 0xce, 0xcd, 0x61, 0xc1, 0x79, 0x50, 0xbf, 0x15, 0x8b, 0x85, 0x6d, 0x5a, 0x3d, 0xcd, 0x56, 0xf6,
+ 0x0e, 0x2b, 0x56, 0xed, 0xbe, 0xb9, 0x67, 0x6c, 0x17, 0xda, 0x8e, 0x59, 0x6b, 0x75, 0xce, 0x7e,
+ 0x9a, 0x67, 0xa7, 0xe7, 0xd5, 0x0d, 0xa7, 0x79, 0x6a, 0x3d, 0x54, 0xae, 0x2c, 0xbf, 0xf2, 0x7d,
+ 0x6f, 0x7b, 0xb7, 0xdd, 0x3e, 0xcb, 0x9d, 0x0e, 0x4e, 0x0b, 0x97, 0xcd, 0x8b, 0x23, 0x73, 0xa3,
+ 0x7b, 0x30, 0xd8, 0x31, 0xab, 0x5a, 0x4f, 0xf3, 0x3a, 0xfb, 0x47, 0xda, 0x5e, 0xf6, 0x32, 0x3d,
+ 0x38, 0x6b, 0x38, 0x74, 0x34, 0x72, 0x9e, 0x3a, 0x3d, 0xbf, 0xa0, 0xb8, 0x95, 0x13, 0xbb, 0x73,
+ 0x74, 0x72, 0x70, 0xff, 0xc3, 0x31, 0xd4, 0x41, 0x36, 0xfd, 0x78, 0xd5, 0x0d, 0x4e, 0xeb, 0x97,
+ 0xc5, 0xe0, 0xe9, 0xf4, 0xfa, 0x38, 0x53, 0xad, 0x3e, 0x64, 0x1d, 0xef, 0x64, 0xa7, 0x78, 0x78,
+ 0x70, 0x94, 0xcc, 0xff, 0x34, 0x8b, 0xb4, 0x55, 0xa4, 0xde, 0x70, 0xfb, 0xdb, 0xa0, 0x5e, 0xc8,
+ 0x29, 0xd7, 0xdf, 0xd4, 0xeb, 0x51, 0xd6, 0xb6, 0x36, 0xd2, 0xad, 0xd3, 0x5d, 0x6f, 0xb8, 0x71,
+ 0x52, 0xd9, 0x3b, 0xdf, 0x69, 0x17, 0x8d, 0xa7, 0xfe, 0xf0, 0xeb, 0xce, 0x51, 0xfe, 0xbe, 0xd1,
+ 0xa7, 0xbd, 0x82, 0x91, 0xdc, 0xdb, 0xdd, 0xcd, 0xd0, 0xa7, 0x23, 0x85, 0x3a, 0xb9, 0xd6, 0xce,
+ 0xcf, 0xe2, 0x69, 0xcb, 0x49, 0x5e, 0xfe, 0xbc, 0x6a, 0xdf, 0x77, 0xbe, 0xe7, 0x1a, 0xf4, 0xa4,
+ 0x37, 0xac, 0x7e, 0x1b, 0x5e, 0xd6, 0xef, 0xf3, 0x86, 0x56, 0xa9, 0xde, 0x14, 0x9e, 0xbc, 0xaa,
+ 0x59, 0xad, 0x66, 0xb2, 0x97, 0xf7, 0xde, 0x53, 0x3f, 0xb8, 0x3f, 0xf8, 0x61, 0x9d, 0x56, 0xd3,
+ 0x0f, 0x1d, 0xa5, 0x6e, 0x8f, 0x4e, 0x46, 0xfd, 0x8d, 0xe0, 0xdb, 0xd3, 0x61, 0xd6, 0xda, 0x3b,
+ 0x69, 0x15, 0xfa, 0x7b, 0x39, 0x7f, 0xa7, 0x36, 0xfc, 0xde, 0xbb, 0xf9, 0x3e, 0xf0, 0x3a, 0xc5,
+ 0xdc, 0xd9, 0x8f, 0x1b, 0xd0, 0xee, 0x7e, 0xaf, 0x90, 0xbc, 0x36, 0x46, 0x47, 0xc1, 0xcf, 0x51,
+ 0x70, 0x4d, 0x0f, 0x7e, 0x7e, 0x6f, 0xdc, 0x5f, 0x5e, 0x1e, 0x35, 0x0f, 0xaa, 0xc9, 0x56, 0x7f,
+ 0x4f, 0xeb, 0xf6, 0x0e, 0xfa, 0x85, 0xe0, 0xc4, 0xce, 0xf9, 0x3f, 0x76, 0x2a, 0x4e, 0xef, 0xe0,
+ 0x41, 0xe9, 0x3e, 0xed, 0xee, 0x58, 0x5e, 0x72, 0x7b, 0xf7, 0xab, 0xfd, 0x50, 0xad, 0x55, 0x8d,
+ 0x6f, 0xbb, 0xfd, 0xf3, 0xed, 0x9b, 0x73, 0xbb, 0x92, 0xed, 0x1d, 0x7c, 0x0f, 0xac, 0xb3, 0xfb,
+ 0xda, 0xa8, 0xbd, 0x3f, 0xaa, 0x79, 0xbb, 0x4f, 0xa3, 0xfd, 0x6f, 0xf7, 0x1e, 0xbd, 0xb9, 0xb0,
+ 0x1b, 0x3f, 0xbe, 0xb5, 0x8d, 0xba, 0x77, 0x66, 0x3f, 0xb9, 0x75, 0x37, 0x18, 0xd2, 0x6b, 0x5a,
+ 0xe9, 0xd4, 0x3a, 0xfb, 0x8f, 0x27, 0xdb, 0x17, 0x3b, 0xdb, 0x9d, 0xd3, 0x9b, 0x76, 0xed, 0xa6,
+ 0x73, 0xd4, 0x18, 0x35, 0xf6, 0x8f, 0x3a, 0x8f, 0x37, 0xaa, 0xdf, 0x38, 0x1f, 0x0e, 0x1f, 0x1a,
+ 0xf5, 0xe3, 0x1f, 0xde, 0x93, 0x9f, 0xb9, 0x3a, 0xeb, 0xde, 0x77, 0x9d, 0xe3, 0x87, 0x7c, 0xe3,
+ 0xf8, 0xc1, 0xfb, 0xf9, 0x78, 0x58, 0xbf, 0xd8, 0x18, 0x55, 0x7f, 0x8e, 0x1e, 0x8f, 0x46, 0x8d,
+ 0xca, 0xee, 0x61, 0x5b, 0xed, 0x7e, 0x3f, 0xdb, 0xde, 0xbb, 0xb1, 0xdb, 0x1a, 0x6d, 0xb8, 0xc7,
+ 0xe7, 0xbb, 0x7b, 0xe6, 0x45, 0x72, 0x7f, 0x78, 0x98, 0xa9, 0x59, 0x76, 0xfe, 0x69, 0x7b, 0x78,
+ 0xfd, 0x63, 0x57, 0x7d, 0x7c, 0x38, 0xff, 0xfe, 0x70, 0x6c, 0xe4, 0x7f, 0x06, 0x75, 0x48, 0x14,
+ 0x69, 0xff, 0x74, 0x50, 0x4d, 0xb6, 0xb3, 0xbd, 0x1f, 0xd7, 0x96, 0x71, 0x1c, 0x6c, 0xdc, 0x8f,
+ 0x76, 0x1a, 0x5a, 0xf6, 0x54, 0xfb, 0xf9, 0xad, 0x9a, 0xbb, 0xbe, 0x38, 0x1f, 0x78, 0xf6, 0xb7,
+ 0xcc, 0x8f, 0xfa, 0xe1, 0x77, 0x25, 0xeb, 0x1c, 0x98, 0x87, 0x27, 0xdf, 0x82, 0xd3, 0xe3, 0xc3,
+ 0x27, 0x77, 0xef, 0xe2, 0xe9, 0xe4, 0x29, 0xbf, 0x71, 0x73, 0x74, 0xa2, 0x0d, 0xac, 0xc2, 0x8e,
+ 0xaa, 0xb6, 0x82, 0xc1, 0xe9, 0xf7, 0x9b, 0xea, 0xd3, 0x28, 0x28, 0xdc, 0xb7, 0x86, 0xc7, 0xaa,
+ 0x72, 0x71, 0xda, 0x3e, 0xc8, 0x75, 0x2e, 0xd8, 0x9c, 0xa8, 0x6c, 0x7f, 0x3d, 0xbb, 0xcc, 0xd5,
+ 0xbc, 0x87, 0xaf, 0xed, 0x76, 0x5b, 0xd7, 0x85, 0xad, 0x35, 0xb2, 0x99, 0x0e, 0x4b, 0x7a, 0x58,
+ 0xdf, 0x9a, 0x7e, 0x41, 0xbc, 0x42, 0x58, 0x08, 0xa0, 0x0b, 0x51, 0xd5, 0x4a, 0x08, 0x9b, 0xd7,
+ 0xc2, 0xf5, 0x76, 0x26, 0xb4, 0x58, 0x1e, 0x84, 0x62, 0x97, 0x8e, 0xba, 0xbc, 0xc7, 0x62, 0x24,
+ 0x8b, 0xd0, 0x0b, 0xeb, 0xf9, 0xfc, 0x7a, 0x04, 0x6e, 0x63, 0xc9, 0x82, 0xbe, 0x15, 0x5f, 0xd0,
+ 0x43, 0x5f, 0x08, 0x90, 0xb8, 0x98, 0xe7, 0x49, 0xce, 0xd0, 0x88, 0x06, 0xa0, 0x2a, 0xfc, 0x65,
+ 0xb1, 0x4b, 0x74, 0x97, 0x82, 0x3b, 0x58, 0xec, 0x5f, 0x03, 0x28, 0xbe, 0x02, 0x90, 0x27, 0xaa,
+ 0xfa, 0xda, 0x10, 0xaf, 0x41, 0x14, 0x5f, 0x83, 0x80, 0x41, 0x0a, 0xaf, 0x0e, 0x52, 0x78, 0x75,
+ 0x90, 0x17, 0x21, 0x84, 0xf4, 0xd6, 0x1a, 0x0f, 0x07, 0xc8, 0xaa, 0x8a, 0x29, 0xda, 0x8b, 0x0a,
+ 0x7a, 0x4a, 0x83, 0x25, 0xa0, 0x72, 0xb5, 0xad, 0xb5, 0xf0, 0x19, 0x61, 0x2e, 0x9c, 0x40, 0x86,
+ 0xcf, 0xfa, 0x7e, 0x3d, 0x3f, 0x3e, 0x22, 0x89, 0x1e, 0xc3, 0x00, 0xc6, 0x43, 0x5c, 0x87, 0xb7,
+ 0x77, 0x8d, 0xc0, 0xb3, 0x1e, 0x45, 0x40, 0xa3, 0x41, 0xff, 0x1e, 0xd6, 0x68, 0xb1, 0xb8, 0x44,
+ 0xd6, 0x2c, 0x50, 0xd6, 0xb4, 0x88, 0x25, 0xcc, 0x5a, 0x01, 0xcb, 0x50, 0x18, 0x60, 0x0a, 0x0c,
+ 0xc8, 0xed, 0x07, 0x61, 0xfe, 0xc0, 0x8d, 0x68, 0xd1, 0xe8, 0x02, 0x0f, 0x4d, 0x3b, 0x30, 0x23,
+ 0x2c, 0x4b, 0x03, 0x79, 0x04, 0xb4, 0x8d, 0x06, 0x10, 0x08, 0xa1, 0xa9, 0x2e, 0xd8, 0xd4, 0x3c,
+ 0xa7, 0x41, 0xbf, 0x77, 0xce, 0xca, 0x36, 0x10, 0x0b, 0x6e, 0x1d, 0x50, 0x40, 0x80, 0x4d, 0x25,
+ 0x10, 0x0b, 0x83, 0x44, 0xce, 0x03, 0x9c, 0x2d, 0x6f, 0x40, 0xcd, 0xcb, 0x3f, 0x04, 0xf9, 0x5a,
+ 0x44, 0x0d, 0xd4, 0xb9, 0x3d, 0x5c, 0x2e, 0xc9, 0xc0, 0xb0, 0xfb, 0x80, 0x86, 0xcb, 0x45, 0x08,
+ 0x8b, 0x46, 0x14, 0x3a, 0x45, 0x57, 0xc2, 0x96, 0xb6, 0x43, 0x0e, 0xd9, 0xe3, 0xcd, 0x34, 0xef,
+ 0xb4, 0x35, 0xe9, 0xbd, 0x16, 0x76, 0xf7, 0x34, 0x5b, 0xd8, 0x3a, 0xa7, 0x5e, 0x0f, 0x44, 0x00,
+ 0xc1, 0x93, 0x04, 0x53, 0xc1, 0xf3, 0x03, 0x02, 0xd9, 0x01, 0x2f, 0xb8, 0xa0, 0x5e, 0x30, 0xcd,
+ 0x22, 0x9f, 0xec, 0xa0, 0x9c, 0x5a, 0x8d, 0xc7, 0xd6, 0xbc, 0x55, 0x78, 0x58, 0xf7, 0xa8, 0x80,
+ 0x43, 0x52, 0x9f, 0xda, 0x41, 0x39, 0x86, 0x27, 0xcd, 0xc9, 0x8d, 0x04, 0x04, 0x02, 0x03, 0x1d,
+ 0x30, 0x45, 0xbc, 0x57, 0x0f, 0xf0, 0x01, 0xc2, 0x88, 0x89, 0xea, 0xb8, 0x1f, 0x40, 0x74, 0x49,
+ 0x78, 0x7b, 0xe9, 0xf7, 0x35, 0xc1, 0x4d, 0x6c, 0x0e, 0xfb, 0xbc, 0x1e, 0x86, 0xa0, 0xab, 0xe5,
+ 0x5a, 0x98, 0x98, 0xf5, 0x84, 0xeb, 0x05, 0x25, 0x42, 0x2a, 0x01, 0x6a, 0xa8, 0x5e, 0x9e, 0x1d,
+ 0x2c, 0x4a, 0x38, 0x04, 0xe9, 0x18, 0xc2, 0x56, 0xdd, 0xed, 0x52, 0x52, 0xf1, 0x7d, 0x0b, 0x42,
+ 0x5c, 0x27, 0x20, 0x37, 0x95, 0xc3, 0x83, 0xb5, 0xd5, 0xa2, 0xfc, 0x2d, 0x49, 0xae, 0x31, 0x51,
+ 0xb2, 0x60, 0x6d, 0x77, 0x8e, 0x63, 0x96, 0xe8, 0x90, 0xa6, 0x6b, 0xd2, 0x17, 0x44, 0xba, 0xf6,
+ 0x0e, 0xeb, 0x5e, 0x3a, 0xca, 0x82, 0x65, 0x75, 0xe8, 0x0a, 0xeb, 0xae, 0xd7, 0xae, 0x49, 0xe2,
+ 0x63, 0x2b, 0x8b, 0xff, 0xc4, 0x95, 0x72, 0x83, 0x00, 0x13, 0x4c, 0x61, 0xa7, 0x56, 0x25, 0x09,
+ 0x2d, 0x9b, 0x95, 0xc2, 0x3f, 0xf1, 0xcd, 0x62, 0x5b, 0x7b, 0x87, 0x05, 0x42, 0x1e, 0xe2, 0x51,
+ 0x50, 0x8f, 0xd3, 0x9e, 0xf2, 0x53, 0x99, 0xb4, 0xfd, 0x13, 0x67, 0xc0, 0x4c, 0x70, 0x19, 0xfa,
+ 0x05, 0x33, 0x19, 0x35, 0x20, 0xcd, 0x5f, 0x2e, 0xb0, 0xb5, 0x3a, 0x7b, 0x88, 0x42, 0x53, 0xf0,
+ 0x1f, 0xa4, 0x78, 0x12, 0x78, 0x76, 0x89, 0xbc, 0x2a, 0x44, 0x56, 0x99, 0x04, 0x04, 0x67, 0xf8,
+ 0x4d, 0x12, 0x6f, 0xee, 0x87, 0xb4, 0x22, 0x1f, 0xe7, 0xec, 0x7b, 0xaa, 0xad, 0x7f, 0xc7, 0x6a,
+ 0x1b, 0xcc, 0xc3, 0x38, 0x20, 0x22, 0x5e, 0x44, 0x15, 0xb6, 0xb6, 0x27, 0x2d, 0xef, 0xb6, 0xd5,
+ 0xf2, 0x1b, 0x82, 0x0e, 0x56, 0xab, 0x24, 0x6b, 0xac, 0x58, 0x19, 0xca, 0x88, 0x19, 0xf6, 0x02,
+ 0x21, 0xa4, 0x6b, 0x39, 0xba, 0xa0, 0xc2, 0xb7, 0x01, 0xe1, 0x87, 0x96, 0xcb, 0x09, 0x91, 0x84,
+ 0xf0, 0x1a, 0xd5, 0xdc, 0x33, 0x1c, 0xae, 0xe4, 0x69, 0xdf, 0x2b, 0x84, 0x00, 0x27, 0x9e, 0xcb,
+ 0x81, 0x8c, 0xe0, 0xf9, 0x1f, 0x30, 0x50, 0x36, 0xe3, 0x0e, 0xac, 0xae, 0x15, 0x44, 0x12, 0x5a,
+ 0x3b, 0x34, 0x1e, 0x89, 0xe3, 0x12, 0xb7, 0x45, 0xd8, 0x43, 0x3f, 0x8d, 0x9e, 0xea, 0xbf, 0x2a,
+ 0xad, 0x05, 0xa2, 0x66, 0xa5, 0x95, 0x53, 0xb5, 0x98, 0xb4, 0xf2, 0xb3, 0xd2, 0x9a, 0xf6, 0x9d,
+ 0x48, 0x2b, 0xbf, 0x42, 0x5a, 0x51, 0x58, 0xda, 0x31, 0x52, 0x58, 0x6b, 0x14, 0xde, 0x2f, 0xbd,
+ 0x8e, 0xb1, 0xbf, 0x03, 0x6e, 0xa7, 0x42, 0x76, 0xe8, 0xc0, 0x6a, 0x52, 0xb2, 0xbf, 0xb3, 0x44,
+ 0x4e, 0x6b, 0xaf, 0x9a, 0x2c, 0x97, 0x43, 0x48, 0xcd, 0x4c, 0x15, 0x5f, 0x20, 0x5c, 0x38, 0x98,
+ 0x19, 0x0b, 0x9c, 0x41, 0x36, 0x66, 0xc4, 0x3e, 0x8b, 0x8a, 0xfe, 0x86, 0xa8, 0xe8, 0xef, 0x26,
+ 0xdf, 0x30, 0xb7, 0xa9, 0xf7, 0xb7, 0xa2, 0xa8, 0xc2, 0xdb, 0x98, 0x5d, 0x23, 0xef, 0x62, 0xf6,
+ 0x72, 0x96, 0xdb, 0x4b, 0xc7, 0xfa, 0xd9, 0x9f, 0x65, 0x7a, 0xed, 0xed, 0x7e, 0xec, 0x25, 0xa6,
+ 0xd7, 0xe2, 0x5c, 0x73, 0xa6, 0x2f, 0xdf, 0xc0, 0xb5, 0xb1, 0x84, 0xed, 0xb5, 0xa5, 0x4a, 0x7e,
+ 0x17, 0xdb, 0x47, 0x46, 0x17, 0x5d, 0xdd, 0x94, 0x71, 0x6c, 0xf8, 0x9d, 0xe8, 0x21, 0xb4, 0xf7,
+ 0xd7, 0x15, 0xcd, 0x59, 0x66, 0xe3, 0x46, 0x3c, 0x4f, 0x23, 0xe8, 0x6f, 0x56, 0xd0, 0xec, 0x50,
+ 0x47, 0xf8, 0x03, 0x01, 0x12, 0x46, 0x19, 0x97, 0x18, 0x68, 0xac, 0x45, 0x06, 0x7c, 0x92, 0xee,
+ 0xb8, 0x10, 0xa5, 0x39, 0xff, 0x0d, 0x0e, 0xa3, 0xd1, 0x39, 0x8b, 0x7f, 0xc0, 0x99, 0x05, 0x86,
+ 0xd7, 0xa6, 0x10, 0x39, 0xb4, 0xbb, 0xe0, 0x62, 0x84, 0xad, 0x0b, 0x76, 0x0b, 0x0b, 0x1f, 0xbb,
+ 0x87, 0x21, 0xff, 0x69, 0xf0, 0x3d, 0x87, 0x1f, 0x25, 0xbf, 0x74, 0xa9, 0x4a, 0xb3, 0xfc, 0x62,
+ 0x92, 0x90, 0x84, 0xd2, 0x98, 0xee, 0x7f, 0x57, 0xb1, 0x81, 0xcb, 0x60, 0xda, 0x28, 0x4c, 0x58,
+ 0xfd, 0xed, 0x44, 0xe5, 0x6d, 0x02, 0xc3, 0xcc, 0x7b, 0x32, 0xf4, 0x8e, 0x35, 0x88, 0x92, 0xe5,
+ 0xb5, 0x57, 0xb2, 0xe5, 0x65, 0xd5, 0x6f, 0xac, 0xee, 0x5b, 0xcd, 0x07, 0x40, 0x36, 0x44, 0xab,
+ 0x3c, 0x47, 0x94, 0x09, 0x31, 0x4c, 0xa2, 0xd7, 0x96, 0x96, 0xc5, 0x59, 0x2a, 0xad, 0x16, 0x48,
+ 0xa1, 0x5e, 0x30, 0x72, 0x24, 0x87, 0x45, 0x66, 0xc8, 0x19, 0xf1, 0x6a, 0x72, 0x87, 0x57, 0x1d,
+ 0x55, 0x31, 0x62, 0x0d, 0xa9, 0xd8, 0xe3, 0x14, 0xdc, 0x1d, 0x16, 0x88, 0x9a, 0x33, 0x32, 0x24,
+ 0xc3, 0x9a, 0xd4, 0x54, 0x26, 0x85, 0xd7, 0xe1, 0x1d, 0x99, 0xbb, 0x23, 0xb1, 0x3b, 0x7c, 0xf2,
+ 0x14, 0x4b, 0x4f, 0x3f, 0x39, 0x0d, 0xbf, 0x57, 0x8e, 0x7f, 0xfe, 0x76, 0xe9, 0xe0, 0x65, 0x69,
+ 0xac, 0x16, 0x86, 0xa6, 0x02, 0x2f, 0x1d, 0x6d, 0xa0, 0x75, 0x52, 0xda, 0x20, 0xa5, 0x75, 0x21,
+ 0x83, 0x8e, 0xdd, 0x69, 0xa4, 0x88, 0x57, 0x5a, 0x13, 0x13, 0x6d, 0x2d, 0xa5, 0xc2, 0x9f, 0x76,
+ 0xa8, 0x02, 0x17, 0x21, 0xcc, 0x55, 0xa6, 0x5b, 0x24, 0x51, 0x87, 0xab, 0x02, 0xf6, 0x86, 0x4b,
+ 0xad, 0xa9, 0xa4, 0x54, 0xf8, 0xa7, 0xa5, 0x18, 0x38, 0x29, 0x20, 0x40, 0x5d, 0x85, 0xe7, 0x6a,
+ 0x7e, 0x82, 0x1e, 0xba, 0x82, 0x44, 0xf2, 0xd3, 0xc1, 0x0e, 0x01, 0x6d, 0x55, 0x03, 0x51, 0xa9,
+ 0x90, 0xd2, 0xab, 0xa0, 0x04, 0x04, 0xc9, 0x13, 0x85, 0x75, 0xde, 0xb8, 0xca, 0x1c, 0xe6, 0xf8,
+ 0xb0, 0xf5, 0x1c, 0xb4, 0x43, 0x9e, 0x5f, 0x1c, 0x14, 0xc3, 0x2a, 0x80, 0xc2, 0x2b, 0x00, 0x1d,
+ 0x55, 0xbb, 0x52, 0xd5, 0xba, 0x8a, 0x54, 0xdb, 0x9a, 0x9c, 0x4b, 0x65, 0x64, 0xe4, 0x4e, 0x2e,
+ 0x6c, 0x10, 0x4d, 0x56, 0x73, 0x24, 0x6c, 0xd2, 0x0e, 0x54, 0xdc, 0x48, 0xa8, 0xcf, 0x68, 0x22,
+ 0xaa, 0x04, 0xbc, 0x79, 0x66, 0x4e, 0x0c, 0x99, 0x6f, 0x2b, 0x08, 0x0b, 0xd5, 0x21, 0xac, 0x1f,
+ 0xcf, 0xb9, 0x08, 0x84, 0xbd, 0x16, 0xb6, 0xae, 0x49, 0x89, 0x4c, 0x7c, 0x01, 0x57, 0xfb, 0x9c,
+ 0xef, 0x9a, 0xdb, 0x8b, 0x88, 0xbc, 0x97, 0x13, 0x06, 0x24, 0xd1, 0xb8, 0xd7, 0x13, 0x07, 0x8d,
+ 0xa7, 0xc4, 0x96, 0x18, 0xd3, 0xda, 0xfc, 0xe8, 0x37, 0xc2, 0xd6, 0xcd, 0xca, 0xd1, 0x57, 0x0d,
+ 0xbe, 0xb6, 0x7c, 0xf4, 0x9b, 0x99, 0xd1, 0x67, 0x05, 0x38, 0xe7, 0x8a, 0xd2, 0xbd, 0xb0, 0x48,
+ 0x12, 0x8f, 0x8f, 0x63, 0x47, 0x4e, 0xe2, 0x02, 0x9d, 0x9c, 0xa8, 0x81, 0xc6, 0x1d, 0xb8, 0x0e,
+ 0x0b, 0x32, 0x1d, 0xea, 0x51, 0xb2, 0xd9, 0xf0, 0xb6, 0x20, 0xe9, 0xc3, 0xaf, 0x35, 0x52, 0x45,
+ 0x73, 0xc7, 0x4c, 0x3e, 0x74, 0x92, 0x06, 0x1a, 0x39, 0x9d, 0x12, 0x32, 0x71, 0xb6, 0xd1, 0xe0,
+ 0x9c, 0x4b, 0xce, 0x0c, 0x82, 0x0a, 0x51, 0xb5, 0x66, 0x4a, 0x07, 0x59, 0xa1, 0x44, 0xc0, 0x31,
+ 0x53, 0x34, 0x8c, 0x7b, 0xc9, 0xf9, 0xf3, 0x3a, 0x6c, 0x29, 0xea, 0xb6, 0x19, 0x33, 0x3d, 0x8f,
+ 0xe2, 0x5c, 0x5d, 0xb4, 0x0e, 0xbe, 0x4d, 0x38, 0x73, 0x68, 0x0e, 0x06, 0xf7, 0x9a, 0xe1, 0x3e,
+ 0x02, 0x22, 0x4d, 0xe3, 0x59, 0xc5, 0x68, 0x1f, 0x21, 0x42, 0xca, 0x28, 0x76, 0xe8, 0x90, 0x09,
+ 0x65, 0x81, 0xdc, 0xf7, 0x63, 0x5d, 0x43, 0x59, 0x4e, 0x64, 0x36, 0x31, 0xea, 0xf8, 0xa6, 0x27,
+ 0xb3, 0xee, 0x15, 0x72, 0xe1, 0x9b, 0xac, 0x51, 0xf0, 0xcb, 0xc0, 0x79, 0x93, 0x10, 0x59, 0x53,
+ 0x6c, 0x1b, 0x16, 0x7c, 0x51, 0x9a, 0xdf, 0xce, 0x8e, 0xc8, 0x7a, 0x7b, 0xc6, 0x30, 0x35, 0xb7,
+ 0x5f, 0xbc, 0x72, 0xd4, 0x48, 0xba, 0xa1, 0x10, 0xd6, 0x5e, 0xe2, 0x90, 0x18, 0x76, 0xa0, 0x0b,
+ 0x67, 0xc6, 0x70, 0x9f, 0x99, 0x11, 0xef, 0x32, 0x1d, 0x1f, 0xf4, 0xca, 0xec, 0x63, 0x42, 0xc7,
+ 0x5b, 0x69, 0x88, 0x44, 0xc5, 0xe1, 0x2d, 0xa7, 0xe5, 0xae, 0x72, 0x01, 0xd1, 0x50, 0xd1, 0xd1,
+ 0x05, 0xd6, 0x0d, 0xd3, 0x1a, 0x2c, 0xd1, 0xc0, 0xd3, 0xa8, 0x7d, 0x89, 0x50, 0xe6, 0xf7, 0xc1,
+ 0x5f, 0xd3, 0x03, 0x57, 0x43, 0x6f, 0x14, 0x62, 0x8f, 0x54, 0xb1, 0xf6, 0x8a, 0x2e, 0x22, 0x5e,
+ 0xda, 0x46, 0x4f, 0x9d, 0x28, 0x0e, 0x6e, 0xa6, 0xb4, 0xc7, 0xf5, 0xec, 0x53, 0xc7, 0x9c, 0x1b,
+ 0xe0, 0xed, 0xf8, 0xb5, 0x59, 0xfc, 0x6b, 0x73, 0x03, 0x44, 0xf3, 0xf1, 0x7d, 0xf8, 0xa7, 0x62,
+ 0xc3, 0x5a, 0x56, 0x27, 0xb3, 0x35, 0x19, 0x11, 0x0c, 0xd2, 0x87, 0xbc, 0x5e, 0xd8, 0xba, 0xe2,
+ 0x17, 0xb0, 0x1a, 0x28, 0x72, 0x96, 0x77, 0xe0, 0xbe, 0x2f, 0x15, 0xad, 0xbb, 0x46, 0xb4, 0x91,
+ 0x87, 0xe7, 0x71, 0xfd, 0x52, 0x3a, 0xdd, 0xb6, 0x82, 0x4e, 0xbf, 0x21, 0x37, 0xdd, 0x6e, 0x7a,
+ 0x48, 0xbd, 0x07, 0x1f, 0x62, 0xfd, 0x6e, 0x1a, 0xab, 0x67, 0x29, 0x16, 0x0e, 0x43, 0x34, 0x3c,
+ 0x29, 0x27, 0xa7, 0x61, 0xe2, 0x35, 0xd2, 0x5d, 0xd0, 0x51, 0xfa, 0xac, 0x56, 0xd9, 0x39, 0xac,
+ 0xc9, 0x5d, 0x96, 0x48, 0xb0, 0x90, 0x4d, 0x17, 0xfe, 0x6e, 0xd8, 0x86, 0xf3, 0x00, 0xd9, 0x0b,
+ 0xb5, 0x7b, 0xe9, 0x4a, 0x03, 0xc2, 0xa9, 0xcd, 0xb4, 0x01, 0x0c, 0x00, 0xa5, 0x53, 0x77, 0x35,
+ 0x3b, 0x03, 0xf9, 0x91, 0x04, 0xbe, 0x61, 0xb1, 0xdc, 0xae, 0x26, 0x42, 0x89, 0x41, 0x4e, 0xf4,
+ 0xd5, 0x34, 0x9c, 0x81, 0xe1, 0x73, 0x17, 0x84, 0xc4, 0x56, 0xd9, 0x3d, 0x93, 0x37, 0x7f, 0x84,
+ 0x61, 0x57, 0xd3, 0xb3, 0x7a, 0x41, 0x2c, 0x30, 0x4e, 0xdf, 0x1b, 0xf0, 0x84, 0xb5, 0x02, 0xe4,
+ 0xc0, 0x80, 0xb4, 0x0d, 0x82, 0xe4, 0x73, 0xdc, 0xbf, 0xd6, 0xd7, 0xf1, 0x92, 0xa4, 0xae, 0xc9,
+ 0xc9, 0xf1, 0xf9, 0x05, 0x61, 0x32, 0x02, 0x11, 0xad, 0x4b, 0xd8, 0x7c, 0x68, 0x99, 0xaa, 0x2e,
+ 0xa4, 0xef, 0x7d, 0xd7, 0x49, 0xfb, 0x81, 0x11, 0xd0, 0xbf, 0x04, 0x92, 0x32, 0xc9, 0xba, 0xc0,
+ 0x9e, 0xd6, 0x1c, 0x53, 0x5f, 0xff, 0x6b, 0x9d, 0xa4, 0xea, 0x44, 0xa8, 0xf2, 0xc0, 0x31, 0x75,
+ 0x01, 0x63, 0x96, 0x88, 0xd1, 0xeb, 0x81, 0x0b, 0x67, 0xbb, 0xad, 0xac, 0xb3, 0xb0, 0x5e, 0x06,
+ 0x4b, 0x87, 0x04, 0xa0, 0x63, 0xf0, 0x41, 0x85, 0x8f, 0x97, 0x0e, 0x88, 0x9f, 0x07, 0xd0, 0x2d,
+ 0x02, 0x71, 0x28, 0x31, 0x5d, 0x67, 0x1d, 0x5c, 0xbd, 0x6d, 0xc3, 0x84, 0x31, 0x47, 0x00, 0x39,
+ 0xa0, 0x24, 0xe8, 0x50, 0x9f, 0x12, 0x93, 0xb6, 0x60, 0x8a, 0x98, 0xc4, 0x72, 0x10, 0xd0, 0x23,
+ 0x3c, 0x0c, 0x82, 0xc5, 0xa1, 0xc9, 0x4a, 0x40, 0x6e, 0x8b, 0x37, 0xc3, 0x08, 0x2d, 0xab, 0xdd,
+ 0xe7, 0x9b, 0xbc, 0xf2, 0xc8, 0xe8, 0xda, 0x7f, 0x39, 0x1f, 0x53, 0x04, 0x4f, 0xa1, 0x60, 0x19,
+ 0xb1, 0x44, 0x70, 0x40, 0xc3, 0x31, 0xff, 0xc6, 0xcd, 0xfb, 0xbf, 0x1c, 0x42, 0x3e, 0x72, 0x44,
+ 0xd4, 0x2f, 0xe1, 0x1d, 0x21, 0x82, 0xd4, 0x31, 0x38, 0xc7, 0xfc, 0x9e, 0x90, 0x96, 0x67, 0xc1,
+ 0x94, 0xb0, 0x47, 0x7f, 0xb3, 0xc4, 0x25, 0x02, 0xd0, 0xa6, 0x00, 0x7d, 0x96, 0xab, 0xfe, 0x0d,
+ 0x39, 0x40, 0xf4, 0x30, 0x33, 0x7d, 0x18, 0x8d, 0xe7, 0x3a, 0x25, 0xb2, 0x15, 0x35, 0x4e, 0x86,
+ 0xc9, 0x82, 0xec, 0xe6, 0x01, 0x5b, 0xad, 0x19, 0xc8, 0x15, 0x9a, 0xe9, 0x18, 0x4c, 0xf2, 0x31,
+ 0xb5, 0x30, 0xad, 0xfc, 0xb5, 0xfe, 0x2c, 0x80, 0xa8, 0x4b, 0x2d, 0xc3, 0xf6, 0xe9, 0xf8, 0x8d,
+ 0x7a, 0x01, 0x64, 0x55, 0x3e, 0xfa, 0x01, 0x88, 0xdd, 0x72, 0xda, 0xba, 0x30, 0xa5, 0x33, 0x9c,
+ 0xab, 0xe7, 0x81, 0x87, 0xa5, 0x40, 0x6e, 0x2d, 0x7c, 0x8c, 0xc0, 0xeb, 0x53, 0x09, 0x4b, 0x48,
+ 0x42, 0x69, 0x7d, 0x16, 0x8c, 0x09, 0x70, 0x5d, 0x02, 0x5f, 0xd2, 0x16, 0x4a, 0xcf, 0x82, 0x65,
+ 0x2e, 0x83, 0xd0, 0x10, 0x02, 0xfa, 0xde, 0xce, 0x3d, 0x42, 0xbe, 0x84, 0xbb, 0xf1, 0x58, 0x28,
+ 0xa3, 0x8d, 0x1a, 0xcd, 0x66, 0x14, 0xd2, 0xe2, 0x9e, 0x59, 0x2d, 0x5b, 0x2d, 0x2a, 0x82, 0xc4,
+ 0x5b, 0x31, 0xff, 0x9b, 0x3c, 0x29, 0x14, 0x04, 0x89, 0x67, 0x3c, 0x6e, 0xbb, 0x6d, 0xd3, 0xe3,
+ 0x56, 0x8b, 0x27, 0x03, 0x12, 0x24, 0x03, 0x95, 0x9c, 0x94, 0x8b, 0x4e, 0x9c, 0xe0, 0x09, 0x95,
+ 0xe9, 0x6d, 0x41, 0x52, 0x0b, 0x75, 0x75, 0x06, 0x60, 0x0e, 0x02, 0x31, 0x1c, 0x02, 0x58, 0xae,
+ 0x92, 0x91, 0x32, 0xe1, 0xb9, 0x16, 0x3c, 0x5d, 0x13, 0xbb, 0x2d, 0x48, 0x1b, 0xb1, 0x3b, 0x55,
+ 0x99, 0x7f, 0xaa, 0xe6, 0x7e, 0xcc, 0xd2, 0xe6, 0xfc, 0x41, 0xd2, 0xd4, 0x39, 0xda, 0xd4, 0x39,
+ 0xe2, 0xd4, 0x59, 0xea, 0x34, 0x65, 0xe1, 0x31, 0x92, 0x87, 0x81, 0x32, 0x73, 0x0d, 0xaf, 0x7b,
+ 0x8e, 0x56, 0xdf, 0xe1, 0x73, 0x0e, 0x9c, 0x1f, 0x73, 0x95, 0x67, 0x7b, 0xdb, 0xac, 0x1e, 0xe6,
+ 0x27, 0xa8, 0xf8, 0x8c, 0x06, 0x5a, 0xf1, 0x3c, 0x63, 0xa4, 0xdf, 0xde, 0x49, 0x91, 0xaf, 0xd7,
+ 0x17, 0x8d, 0x28, 0x69, 0xba, 0xcd, 0x3e, 0x4e, 0x7d, 0x19, 0xd0, 0xd4, 0x6c, 0x8a, 0x97, 0xdb,
+ 0xa3, 0x7d, 0x33, 0xb1, 0x58, 0xcf, 0x14, 0x65, 0x16, 0x88, 0x26, 0x17, 0x4c, 0x6c, 0x35, 0x8e,
+ 0xd9, 0x6c, 0x7a, 0x15, 0x02, 0x2d, 0x74, 0x48, 0x81, 0xbe, 0x12, 0x51, 0xb4, 0x90, 0x8b, 0x92,
+ 0xbd, 0x1a, 0x68, 0xa1, 0xa6, 0x18, 0x0e, 0x58, 0xb6, 0x69, 0x40, 0x1c, 0xfd, 0x83, 0x2a, 0x99,
+ 0x7a, 0x4a, 0x95, 0x8c, 0xd5, 0x18, 0xe6, 0xf6, 0x7b, 0xc4, 0xb2, 0xa9, 0x1b, 0x72, 0x54, 0x4b,
+ 0xdf, 0xc7, 0x23, 0xbb, 0x21, 0xa9, 0x2e, 0xb4, 0xf3, 0x62, 0xb6, 0x7f, 0x6b, 0xde, 0x85, 0xc3,
+ 0xbc, 0x80, 0x78, 0x61, 0x4f, 0x4f, 0x94, 0x56, 0xa1, 0xf6, 0xde, 0x89, 0x7a, 0xd9, 0x86, 0xca,
+ 0x32, 0xec, 0x28, 0x04, 0x4b, 0xff, 0xa0, 0x94, 0xd9, 0xee, 0x88, 0xbe, 0x64, 0x94, 0x4f, 0x9f,
+ 0x12, 0x00, 0xa0, 0x8a, 0x2f, 0x49, 0x68, 0xc9, 0x76, 0xc4, 0xaa, 0xc1, 0xfa, 0x6c, 0xb0, 0x70,
+ 0x37, 0x60, 0xd9, 0x78, 0x5f, 0x00, 0x42, 0x2d, 0x45, 0xbb, 0x17, 0x2b, 0x28, 0x02, 0xbd, 0x29,
+ 0x22, 0xc3, 0xd7, 0xd5, 0x05, 0x58, 0xeb, 0xf0, 0x03, 0x1c, 0x23, 0x2c, 0x7b, 0x3e, 0x7e, 0x96,
+ 0xad, 0x5f, 0xbf, 0x12, 0x70, 0x7f, 0xcb, 0xee, 0xef, 0x04, 0x0e, 0xda, 0x41, 0x65, 0x9f, 0x03,
+ 0x28, 0xf3, 0x5d, 0xa3, 0x29, 0x3b, 0x4d, 0x58, 0xd0, 0x02, 0x1a, 0x72, 0x04, 0xb2, 0xe3, 0x0b,
+ 0xb6, 0x28, 0xed, 0xeb, 0x23, 0x64, 0x95, 0x79, 0xe8, 0x47, 0x78, 0xa0, 0xa1, 0xa9, 0xd5, 0x74,
+ 0x48, 0x01, 0x08, 0x8b, 0x68, 0xcb, 0x35, 0x19, 0xc3, 0x5f, 0x2a, 0xd5, 0x64, 0xd7, 0xb1, 0x5d,
+ 0xc3, 0xd4, 0xa3, 0xe9, 0x97, 0x10, 0x9f, 0x71, 0x44, 0xba, 0x5a, 0x64, 0xcc, 0xe3, 0x9c, 0x18,
+ 0x41, 0x07, 0xec, 0x11, 0x9e, 0x55, 0x02, 0xb0, 0x7b, 0x08, 0xaa, 0x68, 0x02, 0x63, 0x30, 0x9b,
+ 0x89, 0x6f, 0x75, 0x5f, 0x96, 0x7f, 0x86, 0x76, 0xfc, 0x92, 0x5e, 0x78, 0xaa, 0x18, 0x19, 0x7c,
+ 0x82, 0x7e, 0xd0, 0x63, 0x1e, 0xfb, 0xd7, 0x2f, 0x73, 0x53, 0xfd, 0xf5, 0xcb, 0xd8, 0x54, 0x45,
+ 0x90, 0xa8, 0xa9, 0xd7, 0x64, 0x96, 0x59, 0x01, 0xbe, 0x9a, 0xcc, 0x4b, 0x1e, 0xa2, 0x34, 0xe2,
+ 0x6d, 0xba, 0x09, 0x57, 0xbc, 0x4d, 0x37, 0x50, 0x84, 0x10, 0xbb, 0x7f, 0x67, 0x69, 0x18, 0x11,
+ 0x92, 0x66, 0x52, 0x90, 0x48, 0x9d, 0xd7, 0x48, 0xe0, 0xd6, 0x48, 0x0a, 0x24, 0xd1, 0x35, 0x1e,
+ 0x28, 0xf1, 0xfb, 0x1e, 0x06, 0x08, 0x96, 0x8f, 0x3b, 0xf6, 0xb8, 0x8a, 0xf3, 0x28, 0x00, 0xac,
+ 0x3e, 0xdc, 0xc2, 0xe7, 0x3b, 0xe3, 0x22, 0x66, 0x01, 0x82, 0xb4, 0x2f, 0x9b, 0x5e, 0x98, 0x29,
+ 0x24, 0x6a, 0x12, 0x78, 0x50, 0xc9, 0x94, 0x0c, 0x91, 0xa9, 0x6a, 0xa0, 0xef, 0x23, 0x6b, 0xec,
+ 0xd9, 0x0e, 0xa4, 0x1a, 0x89, 0xe8, 0xa9, 0x8c, 0x89, 0x87, 0xd4, 0x03, 0x6f, 0xc6, 0x14, 0xbc,
+ 0xad, 0xab, 0x65, 0xb6, 0xfd, 0xac, 0xeb, 0x1e, 0xb0, 0xb4, 0xad, 0x83, 0x8d, 0xc0, 0xe4, 0x4d,
+ 0x20, 0x8e, 0x96, 0xae, 0x94, 0x5b, 0x9b, 0x03, 0xd9, 0xa6, 0x4e, 0x3b, 0xe8, 0x94, 0x5b, 0x49,
+ 0x3d, 0x2b, 0x3e, 0xe3, 0x83, 0x23, 0x7d, 0x70, 0xdb, 0xba, 0x93, 0x8e, 0xf1, 0x2b, 0xa9, 0xde,
+ 0x49, 0x5f, 0xd9, 0x85, 0x76, 0x27, 0x35, 0xd8, 0x45, 0x86, 0xa3, 0xa6, 0x7a, 0x2b, 0x9d, 0x95,
+ 0x02, 0xfd, 0x10, 0x34, 0x26, 0xb7, 0x6c, 0x17, 0xb0, 0xd2, 0xb4, 0x89, 0x8e, 0x87, 0x96, 0xad,
+ 0x56, 0x22, 0xda, 0x7b, 0x87, 0x81, 0xc5, 0x32, 0x85, 0xd5, 0x1d, 0x62, 0xa6, 0x44, 0x22, 0x48,
+ 0x6e, 0x8b, 0xff, 0xd1, 0x74, 0x24, 0x03, 0xdb, 0x9e, 0x6d, 0x3d, 0xf8, 0x6c, 0x26, 0x13, 0x66,
+ 0x4a, 0x4d, 0x25, 0xec, 0x14, 0x5c, 0x8b, 0xe2, 0xb8, 0x27, 0xf7, 0xfa, 0x7e, 0x27, 0x71, 0x7b,
+ 0x24, 0x1d, 0x4b, 0x5f, 0xa5, 0x86, 0x64, 0x4b, 0x54, 0x0a, 0xee, 0xb0, 0xdd, 0x77, 0xbd, 0x20,
+ 0x91, 0x80, 0x3b, 0x51, 0xdf, 0xa2, 0xb7, 0xb9, 0xbb, 0x54, 0x00, 0x1f, 0xdc, 0x92, 0x0f, 0xf5,
+ 0x5b, 0x59, 0x96, 0x7b, 0x77, 0xe5, 0xc3, 0x39, 0xa8, 0x2c, 0x42, 0x65, 0x43, 0xa8, 0x47, 0x9c,
+ 0x15, 0x43, 0x74, 0x6e, 0x67, 0xfa, 0x61, 0xc8, 0xb8, 0x54, 0xd1, 0x15, 0xe9, 0x02, 0x05, 0x86,
+ 0x82, 0xe1, 0x9c, 0x29, 0x65, 0xba, 0x79, 0x56, 0xa6, 0xc9, 0x24, 0x37, 0x5a, 0x60, 0xf2, 0x96,
+ 0xde, 0x81, 0xfd, 0x05, 0xb7, 0xca, 0x1d, 0x58, 0x43, 0x70, 0x0b, 0x52, 0x71, 0xe1, 0x0b, 0x64,
+ 0xe2, 0xc1, 0x57, 0xe6, 0x4e, 0x0a, 0x27, 0x5d, 0x4a, 0x45, 0xde, 0xfb, 0x22, 0x7c, 0x0c, 0x37,
+ 0x15, 0x90, 0xf8, 0x50, 0xa7, 0xa2, 0x04, 0xc8, 0x52, 0x6a, 0x0c, 0x15, 0x08, 0xb5, 0x8c, 0xa8,
+ 0x74, 0xdd, 0xfc, 0xf4, 0x09, 0x91, 0xc1, 0x9c, 0xc6, 0x0b, 0x0d, 0x2e, 0x5c, 0x98, 0xa7, 0x30,
+ 0x81, 0x92, 0x2a, 0xa0, 0x1c, 0xea, 0x3a, 0x4c, 0x6d, 0xe7, 0x8b, 0x00, 0x52, 0x7c, 0xfc, 0x42,
+ 0xc1, 0xaa, 0x84, 0x92, 0x20, 0x94, 0x86, 0x78, 0x91, 0x6c, 0xe2, 0xa7, 0x38, 0x66, 0xa2, 0x9d,
+ 0x74, 0x48, 0xaa, 0xba, 0xde, 0x7c, 0xb9, 0x0b, 0x13, 0x3c, 0x7b, 0x0c, 0xe4, 0x3d, 0x22, 0x79,
+ 0x40, 0x23, 0x90, 0xce, 0xb4, 0xe6, 0x6d, 0x6a, 0xb9, 0x1c, 0xb4, 0x77, 0xd0, 0x9b, 0x48, 0xcd,
+ 0xad, 0x29, 0xd9, 0x26, 0xc3, 0x60, 0xb0, 0x4f, 0x17, 0x41, 0x2d, 0xf1, 0x99, 0x39, 0xe2, 0x5b,
+ 0x0a, 0x1a, 0x72, 0xee, 0xf4, 0x5b, 0x30, 0x3f, 0xc9, 0x05, 0xc6, 0x40, 0x12, 0xc9, 0xb0, 0x51,
+ 0xee, 0x1a, 0xbd, 0x04, 0x05, 0x35, 0xc8, 0x81, 0xcb, 0x97, 0xb1, 0x84, 0x9a, 0x17, 0xe5, 0x9e,
+ 0x61, 0xb2, 0x45, 0x35, 0xa1, 0x49, 0x82, 0x22, 0x88, 0xa2, 0x7c, 0xef, 0x5a, 0x4e, 0x42, 0x00,
+ 0x6e, 0x1e, 0xf5, 0xc7, 0x64, 0x37, 0xd9, 0x4e, 0x06, 0x49, 0x7f, 0xba, 0x1a, 0x4f, 0x9b, 0x2a,
+ 0x49, 0x5d, 0x95, 0x2a, 0xff, 0xb1, 0xc1, 0x80, 0x7e, 0xfd, 0xa2, 0xba, 0x0e, 0x62, 0xfd, 0x92,
+ 0xb8, 0xe0, 0xf6, 0xf2, 0x28, 0x4a, 0xa8, 0x5e, 0xb1, 0xf4, 0x98, 0xd4, 0x81, 0x48, 0xa6, 0xe6,
+ 0xf1, 0x18, 0x9b, 0xe6, 0x14, 0x7b, 0x11, 0x59, 0x7c, 0x4c, 0xbf, 0xff, 0x47, 0x17, 0xfc, 0xe4,
+ 0x05, 0xd8, 0x5d, 0x72, 0x3e, 0xdc, 0x2c, 0x4f, 0x82, 0x16, 0xce, 0x79, 0xc0, 0x8d, 0xdb, 0xd6,
+ 0x27, 0x09, 0xd2, 0xea, 0x81, 0xa3, 0x8d, 0x86, 0x68, 0xc8, 0x28, 0x63, 0x02, 0xf1, 0x86, 0xe9,
+ 0x51, 0x99, 0x6e, 0xa1, 0xe1, 0xa2, 0x14, 0xff, 0x72, 0x04, 0xa9, 0x0b, 0xdf, 0xe4, 0xd3, 0x27,
+ 0x02, 0xfe, 0x17, 0x9a, 0x02, 0xbc, 0xb7, 0xc7, 0x4d, 0x3d, 0x4c, 0x8a, 0x56, 0x0f, 0xc4, 0xf6,
+ 0xe6, 0xa2, 0x51, 0x78, 0x8e, 0xf2, 0x12, 0x30, 0xdb, 0xe0, 0x99, 0x01, 0xd7, 0x5e, 0x02, 0xbf,
+ 0x9c, 0x47, 0x9e, 0x01, 0x1b, 0x09, 0x2f, 0xde, 0xcc, 0x3b, 0xcb, 0x49, 0xa4, 0x40, 0x8e, 0x1f,
+ 0x52, 0x81, 0x09, 0xf8, 0xe5, 0xb1, 0xc4, 0xcf, 0x9c, 0xe0, 0x75, 0xb7, 0x84, 0x87, 0x4b, 0xf0,
+ 0xaa, 0x59, 0x12, 0x6a, 0x67, 0x67, 0xc7, 0x67, 0x1f, 0xd2, 0x0e, 0xcc, 0x00, 0x70, 0xe9, 0xe0,
+ 0xc5, 0x0d, 0x07, 0xb2, 0xa9, 0x07, 0xc7, 0x1d, 0x3a, 0xe1, 0xa9, 0x0f, 0x59, 0x98, 0x98, 0x6d,
+ 0x52, 0x5f, 0xd0, 0x1b, 0x6a, 0xe9, 0x61, 0xf5, 0xda, 0x14, 0x2b, 0xde, 0x88, 0xd2, 0xce, 0xdb,
+ 0xe0, 0xca, 0x1d, 0xd0, 0xd5, 0x79, 0x92, 0xad, 0x3f, 0x9b, 0x8d, 0xad, 0xef, 0x95, 0xb3, 0xa3,
+ 0xfd, 0xa3, 0xbd, 0x0f, 0x9b, 0xe9, 0xc6, 0x16, 0xb9, 0x98, 0x9c, 0x27, 0x6e, 0x8e, 0x08, 0x82,
+ 0x43, 0x56, 0x1a, 0xb0, 0xe0, 0x03, 0xd3, 0x52, 0x86, 0x45, 0x9e, 0x05, 0x4a, 0x18, 0x76, 0xaf,
+ 0x63, 0x88, 0x90, 0xc8, 0xfa, 0xa4, 0x41, 0x29, 0x00, 0xb5, 0x1d, 0xd7, 0xa3, 0x26, 0x80, 0xb9,
+ 0x84, 0x3a, 0x6c, 0xf9, 0xc2, 0xbc, 0x17, 0xf7, 0x92, 0x20, 0xcf, 0x25, 0x10, 0xe2, 0xf4, 0xed,
+ 0x80, 0xa7, 0xc2, 0xd4, 0xb7, 0xf0, 0x35, 0xe4, 0x3e, 0xb8, 0x23, 0x58, 0xfa, 0x47, 0xe1, 0x29,
+ 0x74, 0xbe, 0x6f, 0x3e, 0x49, 0x83, 0xf9, 0xa0, 0x6c, 0x79, 0x13, 0xa5, 0x07, 0xd9, 0x72, 0x1c,
+ 0xea, 0xd5, 0x2f, 0x0e, 0x0f, 0xf4, 0x73, 0x69, 0x47, 0x66, 0x75, 0x05, 0x39, 0x2c, 0x2b, 0xe8,
+ 0x02, 0x2b, 0x1f, 0x0a, 0x12, 0xae, 0x81, 0xdb, 0xee, 0x23, 0x84, 0xeb, 0x3d, 0xb6, 0xc2, 0x8d,
+ 0xc7, 0xbf, 0x13, 0xfc, 0x4f, 0xb1, 0x04, 0xb0, 0x9c, 0x38, 0x7c, 0xa1, 0x73, 0x57, 0xcb, 0x38,
+ 0x5e, 0xa7, 0xc0, 0xc8, 0xc3, 0x5d, 0x08, 0x7b, 0xca, 0x43, 0xcb, 0x31, 0xdd, 0x61, 0xc8, 0x03,
+ 0x5b, 0xec, 0x37, 0xe3, 0x4d, 0x2c, 0x1a, 0xf8, 0xe2, 0x86, 0xe1, 0x42, 0x6c, 0x95, 0x94, 0x37,
+ 0x8a, 0x9f, 0x17, 0xfb, 0x8a, 0xa5, 0x37, 0x80, 0x32, 0x9c, 0x62, 0x18, 0xa2, 0xc6, 0xe0, 0xc2,
+ 0xae, 0x69, 0x2a, 0x96, 0xdd, 0x28, 0x2a, 0xb1, 0x3e, 0x3b, 0x49, 0x55, 0x99, 0xf8, 0x3e, 0x17,
+ 0x7c, 0x9f, 0xbb, 0xe9, 0x94, 0x5d, 0x70, 0x7a, 0x51, 0x9b, 0x03, 0x6d, 0xce, 0x26, 0x2d, 0x3b,
+ 0x91, 0x23, 0x84, 0xe5, 0xf8, 0xd6, 0xfd, 0x4c, 0x93, 0x0e, 0xae, 0x6b, 0x82, 0xd7, 0x6e, 0x24,
+ 0x84, 0xa4, 0x0d, 0x0b, 0x15, 0xc6, 0x33, 0x78, 0xa5, 0x4e, 0xae, 0x34, 0xb8, 0x12, 0x21, 0xb1,
+ 0xd5, 0x13, 0xf8, 0x5c, 0xc2, 0x47, 0x12, 0xb6, 0xc2, 0x07, 0x2c, 0xb6, 0x18, 0x7e, 0x62, 0x6f,
+ 0x3c, 0xeb, 0x1e, 0xfe, 0x89, 0x42, 0xd9, 0x94, 0x31, 0x90, 0x3b, 0x67, 0xd5, 0x23, 0x4f, 0xe2,
+ 0x77, 0x67, 0x60, 0x8f, 0x09, 0xe7, 0xb3, 0x25, 0xb9, 0xf0, 0x07, 0xff, 0x40, 0xd6, 0x32, 0xd6,
+ 0xb6, 0x1e, 0x28, 0x87, 0x13, 0x3e, 0x16, 0xd9, 0x7f, 0x60, 0x07, 0x32, 0xd6, 0x40, 0x98, 0x04,
+ 0x60, 0x11, 0x88, 0xa0, 0x96, 0xf5, 0xc7, 0x37, 0x11, 0x74, 0x01, 0x5f, 0x98, 0x21, 0xec, 0x2d,
+ 0x05, 0x41, 0x8a, 0x8f, 0xdc, 0x84, 0x3b, 0xd4, 0x62, 0x05, 0x8b, 0xe4, 0xba, 0x10, 0x56, 0xc9,
+ 0xc3, 0xc6, 0x6d, 0x03, 0xe2, 0x73, 0x18, 0x46, 0x17, 0xc2, 0xbd, 0x95, 0xb0, 0x2b, 0xa6, 0xee,
+ 0x09, 0x03, 0xd6, 0x58, 0x18, 0x2a, 0x69, 0xa5, 0x35, 0x1c, 0x0e, 0xbf, 0xc1, 0x1a, 0x67, 0x4d,
+ 0x6c, 0x72, 0xa6, 0x3f, 0x11, 0x2e, 0x8f, 0xf1, 0x6c, 0x6d, 0x2e, 0xaa, 0x36, 0xad, 0x01, 0x98,
+ 0x51, 0x20, 0xb3, 0x62, 0x24, 0x86, 0xf6, 0xe0, 0x8b, 0x58, 0x19, 0xed, 0xc0, 0xf2, 0x03, 0x19,
+ 0x32, 0x88, 0x04, 0x6b, 0xe6, 0xef, 0x37, 0x81, 0x15, 0x06, 0xe1, 0x0c, 0x69, 0xfa, 0x3e, 0xd2,
+ 0x83, 0x2b, 0x1b, 0x1f, 0x82, 0x72, 0x5b, 0x68, 0x52, 0xcb, 0x4e, 0x2c, 0x98, 0x4b, 0x5a, 0x53,
+ 0xc4, 0xcf, 0xcb, 0x9f, 0x73, 0xcb, 0x43, 0x80, 0xf2, 0x52, 0x93, 0x88, 0xb0, 0xbf, 0xcc, 0x00,
+ 0x9d, 0x27, 0xba, 0xe1, 0x3e, 0x02, 0xb5, 0x34, 0xa4, 0x76, 0xfa, 0x9a, 0x03, 0xaf, 0x7d, 0xc0,
+ 0x3c, 0x3a, 0x33, 0x80, 0x86, 0x2e, 0xbb, 0x4d, 0x20, 0x5b, 0xf8, 0xca, 0x28, 0x3c, 0xee, 0x58,
+ 0xb6, 0x09, 0x39, 0xf9, 0x38, 0xe2, 0xf3, 0x89, 0xe5, 0x48, 0x18, 0xad, 0x4d, 0x08, 0xc0, 0x83,
+ 0xd4, 0x33, 0xe0, 0x81, 0x38, 0x8e, 0x27, 0xf8, 0x33, 0x98, 0xc3, 0xb5, 0x5d, 0x60, 0x6f, 0x5f,
+ 0xcc, 0x47, 0x01, 0x19, 0xb6, 0xfc, 0x07, 0xc9, 0xf8, 0x34, 0xd2, 0x72, 0x79, 0x2e, 0x29, 0x8f,
+ 0xa1, 0x49, 0x88, 0x22, 0x0b, 0x98, 0x3c, 0x88, 0xc9, 0x3d, 0x87, 0x00, 0xac, 0xa0, 0xc8, 0x4a,
+ 0x0e, 0xcc, 0x3e, 0x18, 0x87, 0x62, 0x9c, 0xd5, 0xb9, 0x3e, 0x7b, 0xfb, 0x0e, 0x3f, 0xf5, 0xd6,
+ 0x35, 0x4b, 0x07, 0x9f, 0xc8, 0x6b, 0x85, 0x78, 0x36, 0x81, 0x39, 0x02, 0x93, 0x0e, 0x0e, 0x5d,
+ 0x93, 0x42, 0x26, 0x17, 0x5a, 0x03, 0xf4, 0x38, 0x31, 0x3c, 0xa3, 0xeb, 0xb3, 0xb4, 0xec, 0xf2,
+ 0xec, 0xe0, 0x9c, 0x1a, 0x5e, 0xb3, 0xc3, 0xdb, 0x22, 0xfd, 0x4f, 0xf0, 0xf8, 0xec, 0xa1, 0x58,
+ 0x9e, 0xf4, 0x92, 0xc1, 0xf9, 0x83, 0x6a, 0x29, 0xa8, 0x16, 0x93, 0xa0, 0x08, 0x3b, 0x84, 0x83,
+ 0xe1, 0xf5, 0x17, 0x1c, 0xc6, 0x05, 0xfd, 0xd8, 0x6e, 0x3b, 0x21, 0xec, 0xd0, 0x01, 0xb5, 0xdd,
+ 0x1e, 0xf5, 0x48, 0x17, 0x0f, 0x3f, 0xf2, 0xd7, 0x5e, 0x64, 0x52, 0x7b, 0x84, 0x26, 0x0b, 0xf9,
+ 0x30, 0x6c, 0x58, 0x26, 0x4d, 0x58, 0x27, 0x7d, 0x7e, 0x04, 0x20, 0x52, 0x97, 0x1f, 0xc1, 0x42,
+ 0xc8, 0x16, 0xc7, 0xb8, 0x3e, 0x87, 0xd1, 0x72, 0x22, 0x9c, 0x15, 0xa6, 0x77, 0x22, 0x7c, 0x41,
+ 0xe2, 0x70, 0xab, 0x0d, 0x97, 0x20, 0xe0, 0x4f, 0x5e, 0x9f, 0xd2, 0x96, 0x58, 0x5d, 0xb3, 0x58,
+ 0x28, 0xe4, 0x8b, 0x0b, 0x2b, 0x4e, 0xac, 0xa2, 0x2f, 0xad, 0x44, 0xc4, 0xf6, 0x0d, 0x16, 0xfa,
+ 0xe2, 0x06, 0x82, 0x58, 0xfa, 0x47, 0xc3, 0xb3, 0x42, 0xfa, 0x7b, 0xc7, 0x65, 0x9d, 0xc2, 0x6c,
+ 0x7e, 0x69, 0x2d, 0x0b, 0xbc, 0x84, 0xe1, 0x8f, 0x9c, 0xe6, 0x44, 0xf0, 0xa4, 0x07, 0xa6, 0xc3,
+ 0x2a, 0x61, 0x3e, 0xcc, 0x91, 0xc9, 0xac, 0xc0, 0x9a, 0xf4, 0x04, 0x83, 0x18, 0x78, 0xa3, 0xe7,
+ 0xb8, 0x56, 0x20, 0x4d, 0x98, 0xb9, 0x0d, 0x63, 0x68, 0x71, 0x52, 0x92, 0x32, 0x86, 0x86, 0x15,
+ 0x90, 0x16, 0x85, 0xb4, 0x36, 0x11, 0x95, 0x7d, 0x85, 0xb7, 0xc7, 0x62, 0xf1, 0x82, 0xbd, 0x20,
+ 0x3d, 0x77, 0x69, 0xd0, 0x71, 0xcd, 0x92, 0x80, 0x55, 0x64, 0x41, 0xc2, 0x97, 0x29, 0xa8, 0xe7,
+ 0x97, 0x9e, 0x67, 0x4a, 0xc3, 0x90, 0xd8, 0x2c, 0xd4, 0x86, 0xc7, 0x12, 0x7a, 0x88, 0x12, 0x1d,
+ 0x8b, 0x92, 0x13, 0x92, 0x14, 0xc8, 0xf8, 0x24, 0xc1, 0x29, 0x8d, 0xe8, 0x77, 0xc4, 0x71, 0x13,
+ 0x33, 0x70, 0x2c, 0x01, 0x46, 0xed, 0xd4, 0xf3, 0x30, 0x87, 0x05, 0x97, 0xfe, 0x42, 0x0d, 0x29,
+ 0xbe, 0xa9, 0x28, 0xa2, 0xbb, 0xab, 0x0d, 0xe0, 0x29, 0xfa, 0x3e, 0x0a, 0x0e, 0x15, 0x20, 0x70,
+ 0x1b, 0x58, 0x90, 0x12, 0x6f, 0x2f, 0x7b, 0x44, 0x9b, 0xb2, 0x22, 0x56, 0x4e, 0x58, 0x62, 0x85,
+ 0x87, 0x1b, 0x2d, 0x73, 0x9b, 0x6d, 0x19, 0xee, 0x41, 0x03, 0x15, 0xc5, 0x97, 0x63, 0x41, 0xde,
+ 0x17, 0xb2, 0xb8, 0x65, 0x25, 0x4e, 0xe9, 0x95, 0x38, 0x72, 0xba, 0x9d, 0x27, 0xae, 0x8a, 0xc0,
+ 0x56, 0x66, 0x42, 0xf3, 0x1b, 0x82, 0x0b, 0x18, 0x84, 0x30, 0xcd, 0xa7, 0x2f, 0x56, 0x2d, 0x67,
+ 0x02, 0x5f, 0x67, 0x69, 0x2c, 0xbb, 0x8b, 0x9b, 0xe9, 0xa6, 0x4b, 0x7d, 0xe2, 0xb8, 0x01, 0xe1,
+ 0xbf, 0x31, 0x80, 0x2e, 0xa0, 0x01, 0x2e, 0x87, 0xb0, 0xdf, 0xbc, 0xe1, 0xb1, 0x25, 0x0b, 0x2d,
+ 0x71, 0x4d, 0x9d, 0x44, 0x96, 0xce, 0x64, 0xdd, 0x7c, 0x33, 0x5f, 0xaf, 0x0a, 0xe6, 0x95, 0x99,
+ 0x3a, 0xa9, 0xc2, 0x46, 0xa9, 0x85, 0x30, 0x33, 0x79, 0x84, 0x0b, 0xf0, 0x5b, 0x3e, 0xcb, 0x0a,
+ 0xc8, 0xba, 0x90, 0x04, 0xe3, 0x5f, 0xc7, 0x64, 0x82, 0x31, 0x16, 0xf2, 0xc2, 0xf7, 0x8b, 0xc3,
+ 0x70, 0x19, 0xf2, 0xe2, 0xb1, 0x88, 0xf3, 0x6f, 0x6e, 0x2b, 0x75, 0xb5, 0xf9, 0xb1, 0x09, 0x9f,
+ 0x10, 0xf5, 0xad, 0xd7, 0x8c, 0x6f, 0x42, 0x29, 0xac, 0xe2, 0xbc, 0x32, 0x09, 0x13, 0x05, 0xe7,
+ 0x3e, 0x9f, 0x3b, 0x8e, 0x31, 0xb0, 0xda, 0x46, 0xe0, 0x7a, 0xb0, 0xc4, 0x5b, 0xbd, 0x86, 0x6b,
+ 0x78, 0xa6, 0x3c, 0xf4, 0xac, 0x80, 0xb2, 0x78, 0x88, 0x72, 0xf6, 0x62, 0x53, 0x69, 0xda, 0x73,
+ 0x32, 0x22, 0x7d, 0xa4, 0xcd, 0x70, 0xb7, 0x26, 0xc1, 0x76, 0x83, 0x85, 0x95, 0x53, 0x4f, 0xd8,
+ 0x35, 0x2c, 0x2c, 0x85, 0x81, 0x5a, 0x11, 0x90, 0xe0, 0x32, 0x89, 0x7b, 0x54, 0x38, 0x25, 0x61,
+ 0x42, 0x2f, 0xec, 0xf4, 0xbe, 0x85, 0xff, 0x70, 0xff, 0x14, 0x32, 0x38, 0x7d, 0x7e, 0xe5, 0xeb,
+ 0x79, 0x6e, 0xe0, 0x42, 0x7e, 0xf2, 0xc5, 0xb0, 0x61, 0x4e, 0x27, 0x84, 0xef, 0x10, 0xe7, 0xf1,
+ 0xd4, 0x05, 0x8d, 0x6a, 0x00, 0xb4, 0xb0, 0xf5, 0x6a, 0xd8, 0x81, 0x3c, 0xc8, 0xa7, 0xde, 0x00,
+ 0x28, 0xc3, 0x77, 0x43, 0x99, 0x93, 0x24, 0x09, 0xd7, 0xe3, 0xaf, 0xde, 0x80, 0xe2, 0xbc, 0xbe,
+ 0x33, 0x7d, 0xe2, 0x8b, 0xb0, 0x0c, 0xc4, 0x3d, 0x2c, 0x50, 0xbe, 0xe0, 0xfb, 0xdf, 0x42, 0x39,
+ 0xd6, 0xd0, 0x5e, 0x27, 0x5e, 0xfc, 0xe3, 0xc4, 0x4f, 0x67, 0x2c, 0x18, 0x2e, 0x58, 0x2a, 0x66,
+ 0xe6, 0xcc, 0x85, 0x42, 0xd8, 0xa3, 0xff, 0x96, 0x67, 0xef, 0xf7, 0xb0, 0x12, 0x2c, 0x94, 0x51,
+ 0x81, 0x15, 0x1f, 0x67, 0x72, 0x22, 0x92, 0x08, 0x96, 0xf6, 0xd0, 0xba, 0xc3, 0x65, 0x04, 0x4f,
+ 0xdb, 0xfc, 0x80, 0xb9, 0xb5, 0xda, 0x60, 0xa7, 0xe7, 0x71, 0xb8, 0x58, 0x4f, 0xd8, 0x49, 0x19,
+ 0xfd, 0xc5, 0x65, 0x37, 0x3a, 0x4e, 0x23, 0x4a, 0xa1, 0xaf, 0x7d, 0x83, 0x33, 0x2e, 0x4f, 0x56,
+ 0x4b, 0x1c, 0x8c, 0x1d, 0xee, 0xa1, 0x18, 0x9c, 0x3e, 0x53, 0x19, 0x61, 0xa0, 0xc3, 0x0e, 0x6d,
+ 0x19, 0x90, 0xfc, 0x26, 0xe2, 0x74, 0xc8, 0x4c, 0x8b, 0x09, 0x71, 0x26, 0x29, 0x80, 0xd4, 0x1f,
+ 0x32, 0x8c, 0x15, 0x7d, 0xb1, 0x18, 0x3c, 0x1f, 0x3f, 0x63, 0x9f, 0x14, 0xea, 0x44, 0x98, 0x43,
+ 0x74, 0x3c, 0x58, 0x85, 0x27, 0x0e, 0xe7, 0x82, 0x73, 0x34, 0xdf, 0x36, 0x9c, 0x47, 0xbb, 0x30,
+ 0xce, 0xcc, 0x88, 0xe5, 0x7e, 0x0f, 0x7f, 0x3e, 0xec, 0x84, 0x0b, 0x02, 0xe6, 0x38, 0x16, 0x94,
+ 0x59, 0x91, 0xa0, 0x05, 0xfc, 0x21, 0xab, 0x3e, 0x24, 0x7c, 0xb1, 0x01, 0x27, 0xdc, 0xb3, 0x31,
+ 0xe7, 0x7b, 0xf3, 0x42, 0xd7, 0xb2, 0x7e, 0x73, 0x90, 0xd3, 0x74, 0x09, 0xa3, 0x56, 0x34, 0x92,
+ 0x33, 0xb6, 0xea, 0x83, 0x2f, 0x5f, 0xdc, 0x49, 0x08, 0xd5, 0xc4, 0x56, 0x3d, 0xe4, 0x02, 0xab,
+ 0x10, 0xab, 0xdd, 0xf1, 0xc2, 0xf9, 0xa1, 0xc5, 0x65, 0x6a, 0x2c, 0x21, 0x1a, 0x03, 0xcc, 0x13,
+ 0xab, 0xe9, 0x10, 0x53, 0x62, 0x1c, 0x30, 0x21, 0x75, 0xc9, 0x8a, 0xfc, 0xcc, 0x93, 0x82, 0x0f,
+ 0xca, 0x38, 0xb2, 0xd9, 0x25, 0x73, 0x1a, 0xc5, 0x1a, 0xa5, 0x97, 0x91, 0x1d, 0xc0, 0x7a, 0xfc,
+ 0x72, 0x07, 0xa6, 0x06, 0x29, 0x52, 0xf7, 0x2b, 0xe0, 0x6e, 0x4f, 0x90, 0x42, 0x8d, 0xbf, 0x08,
+ 0x19, 0x7a, 0x97, 0x98, 0x2d, 0xcf, 0x98, 0xed, 0x92, 0x0e, 0x1d, 0xf6, 0x0e, 0xc2, 0x14, 0xc8,
+ 0x7c, 0x21, 0x90, 0x58, 0x52, 0x11, 0x75, 0x1d, 0x76, 0xbe, 0x2d, 0xae, 0xb4, 0x37, 0x74, 0xe7,
+ 0xef, 0x29, 0x88, 0x2c, 0x15, 0x0f, 0x43, 0x3d, 0x9d, 0x99, 0x2c, 0x73, 0x25, 0x63, 0xe9, 0x3d,
+ 0x5b, 0x9a, 0xef, 0xa1, 0x60, 0xfe, 0x4d, 0x89, 0x95, 0x14, 0x4c, 0x37, 0x4f, 0x66, 0x36, 0x12,
+ 0xdf, 0xbe, 0x53, 0x2a, 0xe1, 0xc9, 0x7b, 0x74, 0xcd, 0x67, 0xee, 0xd0, 0x9f, 0x76, 0xfb, 0xd9,
+ 0xa7, 0xde, 0x28, 0x82, 0xaa, 0xd8, 0x76, 0x42, 0x90, 0xa3, 0x53, 0xfa, 0xa2, 0x64, 0x41, 0xc2,
+ 0x6a, 0x6d, 0xc6, 0x3b, 0x46, 0x15, 0x6c, 0x0b, 0x52, 0xd8, 0x78, 0xfb, 0xad, 0x75, 0x37, 0xef,
+ 0x4c, 0x38, 0x8e, 0xa9, 0x3b, 0x9b, 0x39, 0x8f, 0xfb, 0x8e, 0x2d, 0x39, 0x29, 0x78, 0x05, 0x8c,
+ 0x9f, 0x15, 0x08, 0x81, 0x1d, 0x9d, 0x2e, 0xdf, 0xc3, 0x73, 0x31, 0x26, 0x74, 0x60, 0x41, 0x8b,
+ 0x6d, 0xbb, 0x7d, 0x49, 0x38, 0xfa, 0xdc, 0x09, 0x09, 0x80, 0x9b, 0x3b, 0x1c, 0x21, 0xbd, 0xb8,
+ 0xa5, 0xb7, 0x74, 0x56, 0xf3, 0xd4, 0xa8, 0x34, 0xc1, 0xbe, 0x0c, 0xb3, 0xf3, 0x3b, 0x88, 0x79,
+ 0x75, 0x63, 0x91, 0x3d, 0xc9, 0x61, 0x45, 0x9a, 0xb7, 0x3d, 0x30, 0x05, 0xc9, 0x8d, 0xf9, 0x98,
+ 0xd8, 0xe2, 0x08, 0x6b, 0xe2, 0xb4, 0x42, 0x89, 0xde, 0x70, 0xdb, 0x76, 0x1b, 0x09, 0xdc, 0x81,
+ 0x7a, 0xc6, 0xfa, 0xc1, 0xb2, 0xb4, 0x67, 0x36, 0xbb, 0x99, 0x4b, 0xd6, 0x82, 0xd9, 0x5b, 0x87,
+ 0x6f, 0x21, 0xda, 0xdc, 0xd1, 0x82, 0x7d, 0xa2, 0xcb, 0x2b, 0xdb, 0x61, 0x59, 0x85, 0x2f, 0x99,
+ 0x40, 0x1b, 0x2c, 0xcc, 0xfc, 0x44, 0x0b, 0x83, 0xbb, 0x3e, 0x3c, 0xa8, 0xc3, 0xd2, 0x7f, 0x46,
+ 0xc1, 0x52, 0xfd, 0xa0, 0x8c, 0x5b, 0xd0, 0xd4, 0x49, 0x84, 0xf9, 0x99, 0x23, 0x61, 0x79, 0xc0,
+ 0x58, 0xe2, 0xa8, 0x35, 0x45, 0x41, 0x5d, 0xcb, 0x98, 0xd7, 0xf5, 0xfd, 0xd9, 0xca, 0x01, 0x0b,
+ 0xe9, 0x79, 0x6c, 0x80, 0xaf, 0x04, 0xf7, 0x41, 0x47, 0xbe, 0x8f, 0xef, 0x49, 0x8c, 0x3e, 0xcc,
+ 0x95, 0x04, 0xe2, 0xa0, 0xa4, 0xc5, 0x82, 0x44, 0x00, 0x19, 0x4b, 0xb8, 0x9b, 0x0e, 0x14, 0xdb,
+ 0x33, 0x35, 0x20, 0x70, 0x5f, 0xb0, 0xae, 0x84, 0x5b, 0x2b, 0xc7, 0x7c, 0xa3, 0x1c, 0x1d, 0x36,
+ 0xf2, 0xf2, 0x82, 0x0d, 0xcf, 0xed, 0xc8, 0xcc, 0xa4, 0x10, 0xe1, 0x16, 0x12, 0x62, 0x08, 0xeb,
+ 0x63, 0xd1, 0x04, 0x64, 0x65, 0xb2, 0xb9, 0x52, 0xf2, 0x5c, 0x91, 0x8c, 0xef, 0xd5, 0x0b, 0x58,
+ 0x99, 0xe5, 0xd9, 0x00, 0xbd, 0x75, 0xc2, 0x6d, 0x7b, 0xc9, 0x65, 0x7e, 0x86, 0xb7, 0xe0, 0xd5,
+ 0x5c, 0x2d, 0xcc, 0x15, 0x25, 0x14, 0x9f, 0xf3, 0xe9, 0x53, 0xc2, 0x9d, 0x1c, 0x1c, 0xc0, 0x52,
+ 0xcc, 0x78, 0x25, 0xc3, 0x2c, 0x7b, 0x47, 0x76, 0x23, 0x82, 0x03, 0x2c, 0x06, 0xc4, 0xab, 0x7a,
+ 0x01, 0xdf, 0x34, 0x7a, 0x66, 0x14, 0x94, 0x20, 0x3b, 0xc2, 0x28, 0x5b, 0x38, 0x8f, 0xde, 0x0c,
+ 0xc1, 0x92, 0x1b, 0x11, 0x92, 0x0e, 0x98, 0x54, 0x54, 0xf7, 0x1a, 0xcf, 0x3a, 0xb1, 0x17, 0x56,
+ 0x8b, 0x78, 0xda, 0x1b, 0x11, 0xc0, 0xcb, 0x6d, 0xcb, 0xbc, 0x17, 0x9d, 0xf7, 0x5e, 0x34, 0xee,
+ 0xbd, 0x02, 0x36, 0x41, 0x43, 0x07, 0x26, 0xe1, 0x2e, 0xcc, 0x07, 0x3d, 0xe6, 0x8a, 0x21, 0xae,
+ 0xe6, 0xf6, 0xc9, 0x7e, 0x89, 0x0b, 0x9a, 0xf6, 0x4d, 0x89, 0x6f, 0x39, 0x37, 0x2d, 0xaf, 0x09,
+ 0xd1, 0xc6, 0x4b, 0xce, 0xf5, 0x23, 0x58, 0x95, 0x1b, 0xee, 0xb8, 0xf7, 0x98, 0xc7, 0x9a, 0x3a,
+ 0x48, 0xce, 0x0b, 0xf3, 0x15, 0xc7, 0xad, 0x1d, 0x17, 0xa2, 0xa6, 0x67, 0xce, 0x46, 0xac, 0x50,
+ 0x38, 0x53, 0x24, 0xfc, 0x3c, 0x33, 0x6c, 0x54, 0x18, 0x01, 0x7f, 0x39, 0xd3, 0x8e, 0xd3, 0xd7,
+ 0xd1, 0x83, 0xa5, 0x5e, 0xb1, 0xbc, 0xdc, 0x69, 0x08, 0x1f, 0x1b, 0x8d, 0x62, 0xab, 0xd1, 0x14,
+ 0x30, 0xf7, 0x09, 0x2e, 0xac, 0x2e, 0x75, 0xfb, 0x41, 0x82, 0x25, 0x07, 0x2b, 0xbd, 0x0c, 0x0c,
+ 0x65, 0x78, 0xfb, 0xa1, 0x48, 0x12, 0x53, 0xd9, 0xc0, 0x2a, 0x32, 0xb9, 0xd6, 0xa1, 0xef, 0x04,
+ 0x64, 0x9e, 0x5d, 0x89, 0xb3, 0x35, 0x79, 0x2e, 0xc2, 0x3c, 0xcb, 0x29, 0x4a, 0x6c, 0x8a, 0xcd,
+ 0x03, 0x84, 0xa1, 0x10, 0x51, 0x69, 0xe6, 0x73, 0x22, 0x26, 0xa4, 0xdc, 0x7c, 0x2d, 0x55, 0x15,
+ 0xc7, 0xbf, 0x4d, 0x04, 0x53, 0x75, 0xf8, 0xfa, 0x12, 0xfa, 0x2b, 0x7d, 0xa9, 0xdd, 0xab, 0x8a,
+ 0x58, 0x5e, 0xe1, 0x01, 0x62, 0x7d, 0x5f, 0x88, 0x64, 0x96, 0x55, 0xe9, 0xa6, 0x7e, 0x60, 0xfd,
+ 0x2d, 0xaf, 0xc3, 0xbc, 0xf6, 0x43, 0x1a, 0x8b, 0xbf, 0x8c, 0xa5, 0x29, 0x44, 0x2d, 0xd6, 0xb3,
+ 0x57, 0xc5, 0xba, 0xa6, 0xe0, 0x4d, 0xbe, 0xae, 0x6a, 0x07, 0xaa, 0x42, 0xb2, 0xf5, 0x6c, 0x25,
+ 0xfe, 0x4a, 0x49, 0xfe, 0x4a, 0x2d, 0xc6, 0x1a, 0x00, 0xb5, 0x02, 0x3d, 0xe2, 0x20, 0x1a, 0x20,
+ 0xba, 0x8a, 0xc3, 0x20, 0xb6, 0x43, 0x15, 0x7f, 0xe6, 0xa2, 0xae, 0x66, 0xaf, 0xd4, 0x4c, 0x5d,
+ 0x55, 0x0f, 0xd4, 0x1c, 0xd9, 0x38, 0x50, 0x37, 0x08, 0xde, 0xe5, 0x63, 0xbf, 0x56, 0x15, 0x1e,
+ 0x3d, 0x66, 0xbe, 0x36, 0xc0, 0xbd, 0x42, 0x7c, 0x0d, 0x6e, 0x5d, 0x7a, 0x73, 0x31, 0xec, 0x5f,
+ 0x97, 0xd3, 0xff, 0xab, 0x5f, 0x10, 0x23, 0x33, 0x4a, 0x89, 0x7e, 0x0e, 0x64, 0xe6, 0x87, 0x40,
+ 0x5e, 0xd4, 0xcd, 0xfc, 0xb1, 0xfb, 0x45, 0xfd, 0x44, 0x2f, 0xd8, 0x84, 0xbf, 0xcb, 0x27, 0xfc,
+ 0x8e, 0xc2, 0x5e, 0xfb, 0xcd, 0xb7, 0x0d, 0x49, 0x53, 0xeb, 0xc5, 0x2b, 0xb0, 0xbe, 0x0d, 0xbc,
+ 0xc9, 0xd5, 0xc1, 0x38, 0x25, 0x2d, 0x94, 0x05, 0x70, 0x7b, 0xa5, 0xa9, 0xb1, 0x86, 0x22, 0x88,
+ 0x0b, 0x20, 0x63, 0x2d, 0x9a, 0x0a, 0x08, 0xae, 0x0a, 0xb1, 0x16, 0xc4, 0x02, 0x16, 0x2d, 0xa9,
+ 0x38, 0x39, 0xa6, 0x70, 0x52, 0xe6, 0x0a, 0x6c, 0x3c, 0x7b, 0x85, 0x36, 0x7d, 0xa5, 0x2e, 0x95,
+ 0x20, 0x56, 0x94, 0x5c, 0x32, 0x29, 0x64, 0xbd, 0x20, 0xbd, 0xc5, 0x77, 0x0a, 0xfe, 0x57, 0xa4,
+ 0x97, 0x97, 0x73, 0x60, 0x2f, 0xa7, 0x59, 0x19, 0xe6, 0x35, 0x4c, 0x64, 0x4d, 0xce, 0xa3, 0xc1,
+ 0x31, 0xb3, 0x21, 0x60, 0xd1, 0xc5, 0x1c, 0x7e, 0x67, 0xe5, 0x5c, 0x11, 0xbf, 0xe1, 0x69, 0x06,
+ 0x5f, 0x2c, 0x03, 0x43, 0x52, 0x65, 0x95, 0x64, 0xe4, 0x0c, 0x4c, 0x73, 0x9c, 0x0b, 0x30, 0x01,
+ 0xf0, 0x0a, 0x66, 0x7d, 0x4e, 0x2e, 0x16, 0x09, 0xeb, 0x07, 0x56, 0x86, 0xb7, 0x80, 0x69, 0x03,
+ 0xbb, 0x81, 0x35, 0x6b, 0xf8, 0x91, 0x95, 0x37, 0xd8, 0x4d, 0x5e, 0xde, 0xc8, 0x03, 0x20, 0x5a,
+ 0xf9, 0x06, 0x29, 0xca, 0x4a, 0x01, 0xbf, 0x55, 0x3c, 0x8c, 0x2b, 0x17, 0x32, 0x88, 0x1f, 0xe8,
+ 0x51, 0xe5, 0x62, 0x1e, 0x47, 0x05, 0x12, 0xa1, 0x29, 0x23, 0x17, 0x8a, 0xec, 0x22, 0x17, 0x36,
+ 0xc0, 0x94, 0x29, 0x22, 0x50, 0x7e, 0x03, 0x49, 0x86, 0x4f, 0xe8, 0x8b, 0x2d, 0xe8, 0xea, 0x18,
+ 0x5b, 0x75, 0x35, 0x73, 0x0a, 0xdd, 0x55, 0xde, 0xa6, 0xca, 0xb9, 0x0d, 0x9c, 0x0c, 0x59, 0x95,
+ 0xb0, 0x59, 0x25, 0x17, 0x33, 0xfc, 0xe2, 0x0a, 0x60, 0x8a, 0xb9, 0x03, 0x78, 0x82, 0xe4, 0x65,
+ 0x0f, 0x80, 0xd7, 0x0c, 0xcc, 0x2b, 0xf4, 0x60, 0x79, 0x76, 0x99, 0x95, 0xf3, 0xfc, 0x09, 0xbe,
+ 0x46, 0x87, 0xb0, 0xe0, 0x24, 0xeb, 0x38, 0xc6, 0x29, 0xce, 0x2d, 0x10, 0x11, 0x0e, 0x20, 0x6b,
+ 0x05, 0x24, 0x09, 0x3e, 0x35, 0x26, 0x3a, 0x68, 0x67, 0x6f, 0x1a, 0xca, 0xfc, 0x1b, 0xba, 0xe7,
+ 0x22, 0xa8, 0x0c, 0x63, 0x91, 0x77, 0xcd, 0x70, 0x62, 0xd1, 0x51, 0x16, 0xae, 0x54, 0xf5, 0x14,
+ 0x84, 0x5b, 0x44, 0x11, 0x61, 0xc7, 0x2c, 0x08, 0x31, 0xcb, 0x86, 0x56, 0x40, 0xa8, 0x28, 0xc0,
+ 0x3c, 0x08, 0x13, 0x1e, 0xe6, 0x01, 0x06, 0x1e, 0xb0, 0xa7, 0x21, 0x3c, 0xea, 0xa4, 0x0e, 0xa3,
+ 0x9e, 0x82, 0x47, 0xca, 0x21, 0x5f, 0x59, 0xf4, 0x4c, 0x40, 0xad, 0x82, 0xef, 0x62, 0xc2, 0x90,
+ 0xd0, 0x9a, 0x61, 0xaa, 0x24, 0x0c, 0xf9, 0x46, 0x2e, 0x84, 0x40, 0xed, 0x29, 0x8c, 0x07, 0xb4,
+ 0x05, 0x60, 0x6c, 0x03, 0xbc, 0x09, 0xfb, 0x51, 0xa2, 0xcc, 0x12, 0x13, 0x3f, 0xc7, 0xdd, 0xb1,
+ 0xa9, 0xe7, 0x8e, 0x6f, 0x3f, 0xa6, 0xc3, 0x5f, 0xa0, 0xe2, 0xdf, 0x9b, 0xec, 0xa5, 0xa4, 0xad,
+ 0xff, 0x01, 0xe2, 0x4a, 0xd5, 0xc2, 0x8f, 0x5e, 0x00, 0x00
+};
diff --git a/wled00/wled_server.cpp b/wled00/wled_server.cpp
index d235b61ed..9fd64b555 100644
--- a/wled00/wled_server.cpp
+++ b/wled00/wled_server.cpp
@@ -6,6 +6,9 @@
#endif
#include "html_settings.h"
#include "html_other.h"
+#ifdef WLED_ENABLE_PIXART
+ #include "html_pixart.h"
+#endif
/*
* Integrated HTTP web server page declarations
@@ -345,6 +348,17 @@ void initServer()
serveIndexOrWelcome(request);
});
+ #ifdef WLED_ENABLE_PIXART
+ server.on("/pixart.htm", HTTP_GET, [](AsyncWebServerRequest *request){
+ if (handleFileRead(request, "/pixart.htm")) return;
+ if (handleIfNoneMatchCacheHeader(request)) return;
+ AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", PAGE_pixart, PAGE_pixart_L);
+ response->addHeader(FPSTR(s_content_enc),"gzip");
+ setStaticContentCacheHeaders(response);
+ request->send(response);
+ });
+ #endif
+
#ifdef WLED_ENABLE_WEBSOCKETS
server.addHandler(&ws);
#endif